Вы решили триангуляцию по парам широта / длинна, а затем вывели почтовый индекс США? - PullRequest
0 голосов
/ 24 марта 2020

У меня есть таблица postgres с person_id и местоположениями, которые посетил каждый человек. Высокий, таблица из трех столбцов ( pid, широта, долгота ). У человека будет несколько рядов, если они перешли в более чем одно местоположение.

На основании мест, которые посетил каждый человек, я хотел бы найти географический центр c и затем перевести этот центр в почтовый индекс США. Взвешивание хорошо (центроид многоточечного), но может жить без. Конечным результатом будет один почтовый индекс на пид.

Не очень знаком с командами postgis в postgres и до сих пор не нашел правильный метод. Я открыт для других альтернатив (R, py), но предпочел бы оставить его в postgres. Хотелось бы услышать, если бы вы решили это.

1 Ответ

0 голосов
/ 24 марта 2020

Вы можете использовать PostGIS ST_GeometricMedian для этой цели. Сначала вам потребуется st_collect агрегированных точек.

Получив центральную точку, вы можете проверить ее почтовый индекс, используя ваш любимый геокодер или собственный слой многоугольника.

Изменение В примере do c для использования нескольких точек вместо одной, мы получаем

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)
...