17

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

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

  ALTER TABLE `addresses` ADD `point` POINT NOT NULL 

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

  ALTER TABLE `addresses` ADD SPATIAL INDEX ( `point` ) 

但我收到一个错误:

  #1416 - Cannot get geometry object from data you send to the GEOMETRY field

我在这里做错了什么?

4

2 回答 2

29

好的,我找到了解决方案:如果某些列字段不包含数据,则无法创建空间索引。运行后

  UPDATE `addresses` SET `point` = POINT( lng, lat )

一切正常。

于 2011-05-04T04:45:55.713 回答
5

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

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

从 X(坐标)为 NULL 或 Y(坐标)为 NULL 的位置中选择 id;

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

更新位置 SET 坐标 = POINT(0,0) WHERE X(坐标)为 NULL 或 Y(坐标)为 NULL;

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

于 2012-06-09T19:55:48.180 回答