我对整个'空间索引'的事情很陌生,但它似乎是基于纬度/经度过滤的最佳解决方案。所以我在表中添加了一列:
我创建了一个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
我在这里做错了什么?
OK,我找到了解决方案:如果某些列字段不包含数据,则无法创建空间索引。运行
后 UPDATE `addresses` SET `point` = POINT( lng, lat )
一切正常
我有同样的错误(不能从数据中获得几何对象你发送到geometry字段),但当试图从mysql转储导入空间数据。我发现有些行有"空"(X为空或Y为空)空间数据,即使列是"非空"。
检查你是否有同样的问题,我用这个SQL描述:
SELECT id FROM locations WHERE X(coordinates)为NULL或Y(coordinates)为NULL;
如果你有一些行,那么这是为我工作的:
UPDATE locations SET coordinates = POINT(0,0) WHERE X(座标)为NULL或Y(座标)为NULL;
然后尝试mysqldump(或从phpmyadmin)并再次导入