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

18

我刚接触“空间索引”(spatial index)这个概念,但它似乎是根据纬度/经度进行筛选的最佳解决方案。因此,我向我的表中添加了一列:

于是我创建了一个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

我在这里做错了什么?

2个回答

30

好的,我找到了解决方案:如果某些列字段中没有数据,则无法创建空间索引。 运行以下命令后问题得以解决:

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

一切都很顺利。


我现在看到你的答案和我的一样,我试图逐字复制,但它抱怨lat和long未定义 :P ... - Mike Graf
3
POINT 的顺序是经度、纬度,格式为 POINT(lng, lat)。请更改您的回答以避免未来出错。 - Ramsés Fernández
根据这个答案,@RamsésFernández 那不是真的。MySQL和PostGIS处理方式不同。 - Milan Velebit

5
我曾经遇到过同样的错误(无法从发送到GEOMETRY字段的数据中获取几何对象),但是尝试从mysql转储中导入空间数据时发生的。我发现,即使该列为“NOT NULL”,某些行仍具有“null”(X为null或Y为null)空间数据。
请使用以下SQL检查是否存在与我所描述的相同问题: SELECT id FROM locations WHERE X(coordinates) IS NULL OR Y(coordinates) IS NULL;
如果您有一些行,则这就是对我有效的解决方法: UPDATE locations SET coordinates = POINT(0,0) WHERE X(coordinates) IS NULL OR Y(coordinates) IS NULL;
然后尝试再次导入您的mysqldump(或来自phpmyadmin)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接