【问题标题】:Create new column with coordinates from centroids using st_transform in PostGIS / PostgreSQL在 PostGIS / PostgreSQL 中使用 st_transform 从质心坐标创建新列
【发布时间】:2019-12-29 10:33:05
【问题描述】:

我有几何数据,我正在尝试将其转换为 lon lat 并存储在新列中。我创建了一个名为“坐标”的新列并编写了以下查询:

UPDATE places_centroids
SET coordinates = st_y(st_transform(new_centroid, 4326)) AS lat,
st_x(st_transform(new_centroid, 4326)) AS lon;

但它返回:ERROR: ERROR: syntax error at or near 第 2 行:...坐标 = st_y(st_transform(new_centroid, 4326)) AS lat,

但是,当我使用 select 语句编写查询时,它可以正常工作:

SELECT st_y(st_transform(new_centroid, 4326)) AS lat,
         st_x(st_transform(new_centroid, 4326)) AS lon
FROM places_centroids;

谁能看到我的查询出了什么问题?

【问题讨论】:

  • 坐标是什么列类型?
  • 去掉as ..部分,它们在SET子句中无效
  • 双精度。好的,但是没有'as'我该怎么做呢?
  • 如何将两个值存储到一个double precision 列中?
  • 那是真正的 wildplasser.. 但是如果我创建两列,一列包含 lat,一列包含 lon?

标签: postgresql sql-update postgis


【解决方案1】:

您可以创建两列,例如双精度类型的 lat 和 lng,然后执行以下操作:

UPDATE places_centroids 
SET lat = st_y(st_transform(new_centroid, 4326)),
lng= st_x(st_transform(new_centroid, 4326));

或将坐标定义为原生点类型:

UPDATE places_centroids
SET coordinates = point(st_y(st_transform(new_centroid, 4326)),
st_x(st_transform(new_centroid, 4326)));

我个人更喜欢存储在两列中。

最好的问候,
比亚尼

【讨论】:

  • 为什么更喜欢两列中的点坐标? PostGIS 函数不是为几何类型的列设计的吗?
  • 我使用 Postgis,而不是原生 Postgres 几何类型和函数。大多数数据,例如公共数据,都使用 lat 和 lng,因此使用它们很方便。我通常也有 Postgis 类型几何点的第三列。它与原生点类型不同。
  • 不需要使用原生的point,因为OP表中已经有new_centroid几何列了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-10
  • 1970-01-01
  • 2016-11-05
  • 1970-01-01
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多