【问题标题】:error Cannot get geometry object from data you send to the GEOMETRY field while inserting result of query into column in mysql将查询结果插入 mysql 中的列时,无法从发送到 GEOMETRY 字段的数据中获取几何对象
【发布时间】:2023-04-02 17:46:01
【问题描述】:

我正在尝试找出 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)。

标签: mysql insert-into


【解决方案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 添加它。

    【讨论】:

      猜你喜欢
      • 2016-03-22
      • 1970-01-01
      • 2019-11-20
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 2020-03-05
      • 2019-06-08
      • 2012-03-22
      相关资源
      最近更新 更多