我尝试用PHP以这种方式将数据插入到point()数据类型列中:
INSERT INTO table (coordinates) VALUES ("48.20 14.80");
或
INSERT INTO table (coordinates) VALUES ("POINT(48.20 14.80)");
然后我在每次插入或更新之前都应用了触发器:
BEGIN
SET @lat = SUBSTRING(NEW.coordinates, 1, LOCATE(' ', NEW.coordinates));
SET @lng = SUBSTRING(NEW.coordinates, LOCATE(' ', NEW.coordinates) + 1);
SET @coor = PointFromWKB(POINT(@lat, @lng));
SET NEW.coordinates = @coor;
END
或
BEGIN
SET NEW.coordinates = GEOMFROMTEXT(NEW.coordinates);
END
但它返回:
SQLSTATE[22003]: Numeric value out of range: 1416 Cannot get geometry object from data you send to the GEOMETRY field
你们中有谁知道这是什么问题吗?感谢。
答案 0 :(得分:3)
试试这个:
1 -
(use-package evil
:ensure t
:init
...
:config
(define-key evil-motion-state-map [down-mouse-1] nil)
...)
2-
BEGIN
SET @lat = ST_X(NEW.coordinates);
SET @lng = ST_Y(NEW.coordinates);
SET t.coordinates = GEOMFROMTEXT(CONCAT( 'POINT(', @lat, ' ', @lng, ')' ) ) ... --update point table
END
答案 1 :(得分:0)
你最好的选择是
OR 2.将坐标列数据类型更改为文本。
答案 2 :(得分:0)
有点晚了,但是我为问题创建了这个解决方案
$cord= $long." ".$lat;
在插入时我使用了这个。注意我使用codeigniter活动记录来插入数据
$this->db->set("coord",'geomfromtext("POINT("'."'$cord'".'")")',false);
$this->db->insert("gisdata");
希望它有所帮助。 干杯!