你有没有解决基于lat/long对的三角剖分然后输出一个美国邮政编码?
Have you solved triangulation based on lat/long pairs and then output a US postal code?
我有一个带有 person_id 的 postgres table,以及每个人访问过的位置。高大,三列table(pid,纬度,经度)。如果一个人去了多个位置,他们将有多个行。
根据每个人去过的地方,我想找到地理中心,然后将该中心翻译成美国邮政编码。加权很好(多点的质心),但没有也可以。最终结果将是每个 pid 一个 postal_code。
对postgres中的postgis命令不是很熟悉,还没找到合适的方法。我对其他替代方案(R、py)持开放态度,但更愿意将其保留在 postgres 中。很想听听您是否解决了这个问题。
为此,您可以使用 PostGIS ST_GeometricMedian
。您必须先 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)
我有一个带有 person_id 的 postgres table,以及每个人访问过的位置。高大,三列table(pid,纬度,经度)。如果一个人去了多个位置,他们将有多个行。
根据每个人去过的地方,我想找到地理中心,然后将该中心翻译成美国邮政编码。加权很好(多点的质心),但没有也可以。最终结果将是每个 pid 一个 postal_code。
对postgres中的postgis命令不是很熟悉,还没找到合适的方法。我对其他替代方案(R、py)持开放态度,但更愿意将其保留在 postgres 中。很想听听您是否解决了这个问题。
为此,您可以使用 PostGIS ST_GeometricMedian
。您必须先 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)