postgresql - 您是否根据纬度/经度对解决了三角测量,然后输出美国邮政编码?
问题描述
我有一个带有 person_id 的 postgres 表,以及每个人访问过的位置。高,三列表(pid,纬度,经度)。如果一个人去多个位置,他们将有多个行。
根据每个人去过的地方,我想找到地理中心,然后将该中心翻译成美国邮政编码。加权很好(多点的质心),但可以没有。最终结果将是每个 pid 一个 postal_code。
对postgres中的postgis命令不是很熟悉,还没有找到合适的方法。我对其他替代品(R,py)持开放态度,但更愿意将其保留在 postgres 中。很想听听你是否解决了这个问题。
解决方案
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)
推荐阅读
- ansible - Ansible:如何检查值:条件中的键对
- jmeter - Jmeter - 如何对整个数据库的两个 JDBC 请求执行数据比较
- c - 将用户定义的字符串存储到C中的特定二维数组位置
- reactjs - 获取无法设置未定义 Reactjs 的属性
- c# - 调用表值函数时,Linq Where on FromSqlInterpolated
- c# - c# 和 sqlite:如何修复过多的 SQL 变量?
- c# - “缺少 Mono 脚本”和“缺少此行为的引用脚本(未知)”错误
- javascript - firestore 为每个页面找到接下来的 20 个文档?
- tesseract - 使用 tesseract 和 opencv 从图像中提取文本
- python - 我想使用 pygame 在 python 中创建一个合并排序可视化器。代码没有给出正确的结果