首页 > 解决方案 > 您是否根据纬度/经度对解决了三角测量,然后输出美国邮政编码?

问题描述

我有一个带有 person_id 的 postgres 表,以及每个人访问过的位置。高,三列表(pid,纬度,经度)。如果一个人去多个位置,他们将有多个行。

根据每个人去过的地方,我想找到地理中心,然后将该中心翻译成美国邮政编码。加权很好(多点的质心),但可以没有。最终结果将是每个 pid 一个 postal_code。

对postgres中的postgis命令不是很熟悉,还没有找到合适的方法。我对其他替代品(R,py)持开放态度,但更愿意将其保留在 postgres 中。很想听听你是否解决了这个问题。

标签: postgresqlcentroid

解决方案


ST_GeometricMedian为此,您可以使用 PostGIS 。您必须先st_collect汇总积分。

获得中心点后,您可以使用您最喜欢的地理编码器或您自己的多边形图层检查其邮政编码。

将文档示例更改为使用多个点而不是我们得到的一个多点

WITH test(pid,geom) AS (values 
   (1,'POINT(0 0)'::geometry),
   (1,'POINT(1 1)'::geometry),
   (1,'POINT(2 2)'::geometry),
   (1,'POINT(200 200)'::geometry))
SELECT
  ST_AsText(ST_Centroid(st_collect(geom))) centroid,
  ST_AsText(ST_GeometricMedian(st_collect(geom))) median
FROM test
GROUP BY pid;

      centroid      |                 median
--------------------+----------------------------------------
 POINT(50.75 50.75) | POINT(1.9761550281255 1.9761550281255)

推荐阅读