MySQL中的空间索引 - 错误 - 无法从发送到GEOMETRY字段的数据中获取几何对象

jis*_*one 10 mysql geometry geolocation spatial-index mysql-error-1416

我是整个'空间索引'的新手,但它似乎是基于纬度/经度的过滤的最佳解决方案.所以我在表格中添加了一列:

所以我创建了一个geometry字段:

  ALTER TABLE `addresses` ADD `point` POINT NOT NULL 
Run Code Online (Sandbox Code Playgroud)

然后我尝试添加一个索引:

  ALTER TABLE `addresses` ADD SPATIAL INDEX ( `point` ) 
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

  #1416 - Cannot get geometry object from data you send to the GEOMETRY field
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

jis*_*one 24

好的我找到了解决方案:如果某些列字段不包含任何数据,则无法创建空间索引.跑完之后

  UPDATE `addresses` SET `point` = POINT( lng, lat )
Run Code Online (Sandbox Code Playgroud)

一切都很好.

  • POINT的顺序是lng,lat为POINT(lng,lat),请更改你的答案以避免将来出错. (3认同)

Mik*_*raf 5

我遇到了同样的错误(无法从发送到 GEOMETRY 字段的数据中获取几何对象)但是在尝试从 mysql 转储导入空间数据时。我发现一些行有“空”(X 为空或 Y 为空)空间数据,即使列是“NOT NULL”..

检查您是否遇到与我使用此 SQL 描述的问题相同的问题:

SELECT id FROM location WHERE X(coordinates) IS NULL OR Y(coordinates) IS NULL;

如果您有一些行,那么这对我有用:

更新位置 SET 坐标 = POINT(0,0) WHERE X(coordinates) IS NULL OR Y(coordinates) IS NULL;

然后尝试您的 mysqldump(或来自 phpmyadmin)并再次导入。