Я пытаюсь посчитать разные магазины внутри полигонов торговой зоны в sql-запросе.Каждый магазин - это отдельная таблица в моей базе данных postgis.
Можно подсчитывать точки в многоугольниках, используя следующий код, взятый из https://gis.stackexchange.com/a/54680/19349:
SELECT grid.gid, count(kioskdhd3.geom) AS totale
FROM grid LEFT JOIN kioskdhd3
ON st_contains(grid.geom,kioskdhd3.geom)
GROUP BY grid.gid;
Я изменил код для учета нескольких точек:
SELECT grid.gid,
count(DISTINCT store1.geom) AS store1_count,
count(DISTINCT store2.geom) AS store2_count
FROM grid
LEFT JOIN store1
ON st_contains(grid.geom,store1.geom)
LEFT JOIN store2
ON st_contains(grid.geom,store2.geom)
GROUP BY grid.gid;
Это сработало, но, безусловно, должен быть лучший способ, поскольку непрерывные левые соединения экспоненциально ухудшают время выполнения.