将查询结果插入 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 作为中心的类型,后来将其更改为几何,因为形状的类型是几何,但这也无济于事。

【问题讨论】:

centerdatatype 是什么? @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 字段的数据中获取几何对象的主要内容,如果未能解决你的问题,请参考以下文章

通过路由从 Laravel 中的 MySQL 导出列时出错

如何将查询计算插入到现有实体的列/属性中?

预计将解析从 S3 加载的雪花数据中的列时到达记录末尾

Mysql之将查询结果插入到其它表中

在不确定数量的列上进行 UNPIVOT

使用两个索引列时缓慢的 mySQL 查询