错误在将查询结果插入mysql中的列时,无法从发送到GEOMETRY字段的数据中获取几何对象

时间:2015-09-07 11:55:19

标签: mysql insert-into

我试图找出Shapefile的多边形的中心..并将结果插入名为center的新列中。

SELECT astext(centroid(`SHAPE`)) FROM `utdpolygon`

给出所有多边形的质心,但是当我尝试使用

将结果插入新列时
INSERT INTO utdpolygon (`center`)
SELECT astext(centroid(`SHAPE`)) FROM `utdpolygon

` 我收到了这个错误

  

无法从发送到GEOMETRY字段的数据中获取几何对象。

我搜索了指出类似错误的问题,但他们没有帮助。 我给了点作为中心的类型,然后将其改为几何,因为形状的类型是几何,但这也无济于事。

2 个答案:

答案 0 :(得分:1)

use "org.hibernate.spatial.dialect.mysql.MySQLSpatialDialect" 
insted of "org.hibernate.dialect.MySQLDialect".

答案 1 :(得分:0)

您的代码中存在两个问题,首先,您尝试使用INSERT来更改center列的值 - 您还没有插入新的行吗?更新现有的,因此您需要将其更改为更新。

然后center列的值必须是几何值而不是文本值,因此您需要使用ST_GeometryFromText(或其中一个同义词)来获取几何图形,尽管在您的情况下是您的值#39 ;从质心函数中使用实际上是一个几何体,所以你可以直接使用它,否则你将它转换为文本然后再转换为几何体。

所以 - 这些UPDATE中的任何一个都可以达到你想要的效果(第二个更好,我只保留了第一个显示关于在有文本POINT时创建几何的点):

UPDATE utdpolygon
SET `center` = ST_GeometryFromText(astext(centroid(`SHAPE`)));

UPDATE utdpolygon
SET `center` = centroid(`SHAPE`);

我假设您已经将center列添加到表中,因为您在上面回复说它的数据类型是POINT - 如果不是,您需要首先添加它ALTER TABLE。