Подсчет количества точек (из двух наборов данных), содержащихся в многоугольниках окрестностей с использованием PostGIS - PullRequest
1 голос
/ 30 января 2020

У меня есть три набора пространственных данных:

  1. Полигоны района
  2. Точки расположения полицейских участков
  3. Точка расположения преступлений

enter image description here

Я использую PostGIS.

Код, который у меня сейчас есть:

SELECT 
nc.nbh_names,
count(ps), 
count(ci)
FROM public."Neighborhood_Clusters" AS nc
LEFT JOIN public."Police_Stations" AS ps
ON ST_Contains(nc.geom, ps.geom)
JOIN public."Crime_Incidents_in_2020" AS ci
ON ST_Contains(nc.geom, ci.geom)
GROUP BY nc.nbh_names;

Вывод, который я получаю:

enter image description here

Мне бы хотелось, чтобы мой вывод был похож на следующее:

Столбец 1: Название района | Колонка 2: Количество полицейских участков | Колонка 3: Количество преступлений

В каждом районе должно быть не более одного или двух полицейских участков.

По какой-то причине, если в окрестности, он подсчитывает и возвращает количество преступлений вместо этого.

Может кто-нибудь помочь помочь исправить код, чтобы я получил желаемый результат?

1 Ответ

1 голос
/ 31 января 2020

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

SELECT 
   nc.nbh_names,
  (SELECT count(ps.geom) FROM public.Police_Stations ps 
   WHERE ST_Contains(nc.geom, ps.geom)) AS pol,
  (SELECT count(ci.geom) FROM public.Crime_Incidents_in_2020 ci
   WHERE ST_Contains(nc.geom, ci.geom)) AS cri
FROM public.Neighborhood_Clusters nc;

Проверьте это db<>fiddle.

Дополнительная литература:

...