将空间数据插入MySQL数据库

时间:2017-02-07 12:26:17

标签: php mysql sql spatial spatial-query

我尝试用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

你们中有谁知道这是什么问题吗?感谢。

3 个答案:

答案 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)

你最好的选择是

  1. 将colum坐标拆分为两个列,例如coord_lat和coord_long,在将数据插入表之前,将坐标值拆分为两个变量。
  2. OR 2.将坐标列数据类型更改为文本。

答案 2 :(得分:0)

有点晚了,但是我为问题创建了这个解决方案

$cord= $long." ".$lat;

在插入时我使用了这个。注意我使用codeigniter活动记录来插入数据

$this->db->set("coord",'geomfromtext("POINT("'."'$cord'".'")")',false);
$this->db->insert("gisdata");

希望它有所帮助。 干杯!