将查询结果插入 mysql 中的列时,无法从发送到 GEOMETRY 字段的数据中获取几何对象
Posted
技术标签:
【中文标题】将查询结果插入 mysql 中的列时,无法从发送到 GEOMETRY 字段的数据中获取几何对象【英文标题】:error Cannot get geometry object from data you send to the GEOMETRY field while inserting result of query into column in mysql 【发布时间】:2015-09-07 11:55:18 【问题描述】:我正在尝试找出 Shapefile 多边形的中心.. 并将结果插入一个名为 center.. 的新列中。
SELECT astext(centroid(`SHAPE`)) FROM `utdpolygon`
为所有多边形提供质心,但是当我尝试使用
将结果插入新列时INSERT INTO utdpolygon (`center`)
SELECT astext(centroid(`SHAPE`)) FROM `utdpolygon
` 我收到了这个错误
无法从您发送到 GEOMETRY 字段的数据中获取几何对象。
我搜索了指向类似错误但没有帮助的问题。 我将 point 作为中心的类型,后来将其更改为几何,因为形状的类型是几何,但这也无济于事。
【问题讨论】:
center
的datatype
是什么?
@Crazy2crack its point..
你得到的centroid
的值是多少?
@Crazy2crack 质心的值是经纬度示例点(75.00 22.00)。
【参考方案1】:
use "org.hibernate.spatial.dialect.mysql.MySQLSpatialDialect"
insted of "org.hibernate.dialect.MySQLDialect".
【讨论】:
【参考方案2】:您的代码中有两个问题,首先,您尝试使用 INSERT 来更改 center
列的值 - 您没有插入新行而是更新现有行,因此您需要将其更改为 UPDATE。
那么center
列的值需要是几何值而不是文本值,因此您需要使用 ST_GeometryFromText (或其同义词之一)来获取几何,尽管在您的情况下您使用的值来自centroid 函数实际上是一个几何体,因此您可以直接使用它,否则您将其转换为文本,然后再转换回几何体。
所以 - 这些更新中的任何一个都会做你想要的(第二个更好,我只是保留第一个来说明当你有一个文本 POINT 时创建几何的要点):
UPDATE utdpolygon
SET `center` = ST_GeometryFromText(astext(centroid(`SHAPE`)));
或
UPDATE utdpolygon
SET `center` = centroid(`SHAPE`);
我假设您已经将 center
列添加到表中,因为您在上面回答说它的数据类型是 POINT - 如果不是,您需要先使用 ALTER TABLE 添加它。
【讨论】:
以上是关于将查询结果插入 mysql 中的列时,无法从发送到 GEOMETRY 字段的数据中获取几何对象的主要内容,如果未能解决你的问题,请参考以下文章