Подсчет количества точек в каждом многоугольнике - PullRequest
0 голосов
/ 12 мая 2019

У меня есть 2 таблицы,

, в которых есть два столбца: широта (с плавающей точкой) и долгота (с плавающей точкой).

, многоугольник: с двумя столбцами: polygon_id (int) и geom (форма многоугольника)

Я хочу распечатать количество точек, содержащихся в каждом polygon_id.

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

SELECT polygon.id
FROM polygon
WHERE st_contains(geom, ST_GeomFromText('POINT(120.32155 -33.843322)', 4326)) = true

Я хотел использовать широту и долготу из таблицы точек, однако,

ST_GeomFromText('POINT(points.latitude points.longitude)

не работал.

Ожидаемые результаты имеют polygon_id иуказывает, что polygon_id содержит для каждой строки.Так как 100 полигонов, я ожидаю 100 строк.

1 Ответ

3 голосов
/ 12 мая 2019

То, что вам не хватает, это ST_MakePoint.

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

CREATE TABLE polygon (id int, geom geometry);
INSERT INTO polygon VALUES (1,'POLYGON((120.20 -33.75,120.43 -33.75,120.43 -33.88,120.20 -33.88,120.20 -33.75))'::geometry);

CREATE TABLE points (lon numeric, lat numeric);
INSERT INTO points VALUES (120.32,-33.84);
INSERT INTO points VALUES (120.39, -33.85);

enter image description here

.. выполните следующий запрос:

SELECT polygon.id,COUNT(points.lon)
FROM polygon,points
WHERE ST_Contains(geom, ST_MakePoint(lon,lat))
GROUP BY polygon.id

 id | count 
----+-------
  1 |     2
(1 row)

Я бы порекомендовал вам не хранить широту и долготу в разных столбцах.Хранение баллов как geometry или geography всегда лучший выбор в PostgreSQL / PostGIS.

...