【问题标题】:How to convert point text to geometry如何将点文本转换为几何图形
【发布时间】:2018-03-16 04:55:36
【问题描述】:

我已经在我的数据库中安装了 postgis。现在我的数据库中有 1 个区域,例如 ((-79.4609576808001,43.9726680183837)) 我希望这个区域转换为几何类型。我在谷歌上搜索过,发现 St_geomfromText 会将文本转换为几何类型。

我的查询如下:

SELECT ST_GeomFromText(region,4326) from "erpAssets";

但是它给出了错误,它说没有函数与 st_geomfromtext 匹配

【问题讨论】:

  • '((-79.4609576808001,43.9726680183837))' 是示例条目吗?看起来文档期望在点值前面有一个几何类型。所以它可能需要'POINT'在字符串中。例如,'SELECT ST_GeomFromText('POINT(-71.064544 42.28787)');'
  • 是的,这是一个示例条目。我应该如何通过查询来做到这一点?因为我有很多条目,我不能硬编码值

标签: postgresql postgis


【解决方案1】:

您还可以使用 ST_MakePoint,它可能更简洁,因为您不必将纬度和经度值连接为文本。与 ST_SetSrid 结合使用,将坐标参考系设置为 4326,例如,

Select ST_SetSrid(ST_MakePoint(lon, lat),4326) from sometable;

将返回几何类型。请注意,顺序是 lon/lat (x/y),这会导致很多混淆,因为人们在日常讲话中会说 lat/lon。

ST_GeomFromText 通常在您拥有知名文本 (WKT) 格式的几何图形时更有用,例如,

Select ST_GeomFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))', 4326);

如果您的数据实际上是 ((-79.4609576808001,43.9726680183837)) 的形式,并且您不想按照我上面的建议将其拆分,则与 ST_GeomFromText 一起使用的正确格式是:

Select ST_GeomFromText('POINT(-79.4609576808001 43.9726680183837)', 4326)

SRID 是可选的,但建议使用。

更多信息请参见http://en.wikipedia.org/wiki/Well_Known_Text

【讨论】:

  • 感谢您的回答,您能告诉我一件事,我想从数据库中获取数据,所以我想将 select 语句放在 st_geomfromtext() 中,如 select st_geomfromtext(select statement)。有没有办法做到这一点?
  • @MuneemHabib。是的,有,但是您能否澄清一下您的数据的外观 - 您是否真的有一个看起来像 ((-79.4609576808001,43.9726680183837)) 的列,或者您有单独的纬度和经度值列。
  • sir st_geomfromText 只会将一个点转换为几何图形。有没有办法将多个点转换为几何?是的,我的数据为 ((-79.4609576808001,43.9726680183837)),我已将此数据转换为 POINT(-79.4609576808001 43.9726680183837) 格式
  • @MuneemHabib 如果您的列现在采用 POINT(-79.4609576808001 43.9726680183837) 的形式,并且假设此列称为 pt 并且是 varchar 类型,并且您有一个要填充的几何列,称为 geom ,然后您可以运行: update "erpAssets" set geom=ST_GeomFromText(pt) ,这将更新整个表。
  • 我以为我刚刚回答了这个问题,或者我误解了什么?从表名中选择 st_geomfromtext(colname)。 colname 是包含您的 POINT 的列(-79.4609576808001 43.9726680183837)
【解决方案2】:

看起来 ST_GeomFromText 需要的是字符串,而不是变量。 Is ST_GeomFromText better than providing direct geometry? 提到该函数是不可变的。

这个问题提供了一种从变量构建字符串的方法。 Insert PostGIS Object (e.g. ST_GeomFromText) from row variables in plpgsql script

所以看起来 Chris Traver 的解决方案应该适合你:

ST_GeomFromText('POINT(' || row_data.longitude || ' ' || row_data.latitude || 
 ' ' || row_data.altitude || ')', 4326)

所以你只需要访问点的 x 和 y 部分。 ST_X(point)ST_Y(point)会分别返回PostGIS中一个点的x和y坐标,但是我不知道region是什么数据类型,我也不认为是点类型。

【讨论】:

  • region 数据类型是字符串,它包含 2 个点 x 和 y 我应该如何使用这些点?
  • 我已经检查了这个查询'SELECT ST_GeomFromText('POINT(-71.064544 42.28787)');'这正在运行 f9
  • 你的专栏真的是这样的吗?((-79.4609576808001,43.9726680183837)) 还是更像79.4609576808001,43.9726680183837。这将确定使用 ST_Makepoint 还是 ST_GeomFromText 是否更好,可能是 midfield99 首先建议的方式。
  • 先生,我已成功转换为 POINT(-79.4609576808001 43.9726680183837)。现在告诉我最后一件事 ST_GeomFromText 只会转换点。有没有办法转换多点?
猜你喜欢
  • 1970-01-01
  • 2018-12-03
  • 2013-08-24
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多