Более

Как я могу сгенерировать определенное количество случайных точек в многоугольнике с помощью PostGIS?


У меня есть таблица postgis, в которую я загрузил шейп-файл, этот шейп-файл содержит более 200 полигональных строк с несколькими целочисленными столбцами.

То, что я хотел бы сделать, похоже на функцию QGIS «случайные точки в многоугольнике», за исключением того, что числа намного больше. Мой первоначальный подход с QGIS разбился при попытке добавить ~ 500 000 случайных точек к каждому многоугольнику - мне нужно, чтобы количество случайных точек было получено из соответствующего целочисленного столбца.

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

Новичок в Postgres и postgis, но знаком с mysql, QGIS, ArcGIS и географическими концепциями.

РЕДАКТИРОВАТЬ:

Вот картинка, чтобы лучше показать, чего я хотел бы достичь. Каждый многоугольник имеет соответствующее значение PNTSneeded, я пометил многоугольники на снимке экрана этим номером (также показанным в таблице атрибутов). Мне нужно сгенерировать такое количество точек, случайным образом распределенных по каждой строке многоугольника.

Мне нужно было бы сделать это только один раз, поэтому это не будет постоянным процессом, хотя мне может потребоваться проделать тот же процесс для разных наборов полигонов в будущем (я уверен, что смогу воссоздать шаги).

Если это действительно слишком много точек для генерации, я всегда могу запустить его дважды с половиной числа, а затем просто объединить файлы в один (может добавить дополнительный уровень случайности). Но я бы предпочел сделать это за один раз.


Вам следует попробовать функцию RandomPointsInPolygon (geom geometry, num_points integer).

Добавьте дополнительный столбец геометрии и обновите его с помощью RandomPointsInPolygon. Первый параметр - это ваша существующая геометрия, а второй - столбец PNTSneeded.

Есть два вопроса о SO, связанных с RandomPointsInPolygon:

Как создать случайные точки в многоугольнике в PostGIS

Случайная точка Postgis внутри многоугольника

Если возможно, начните с меньшего образца, используя предложение WHERE в операторе UPDATE.

Фактический код будет:

- скопируйте и вставьте функцию RandomPointsInPolygon СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ФУНКЦИЮ RandomPointsInPolygon (геометрия geom, целое число num_points) ВОЗВРАЩАЕТ SETOF geometry AS $ BODY $ DECLARE (…) - если вы используете EPSG: 4326 SELECT AddGeometryColumn ('polygons,' points 4326, «MULTIPOINT», 2); - обновите полигоны таблицы, используя существующие полигоны geom и PNTSneeded UPDATE SET points = (SELECT ST_Union (manypoints) FROM RandomPointsInPolygon ("geom", "PNTSneeded") AS manypoints);

В Postgis версии 2.3.0 и выше появилась новая функция для генерации точек в многоугольник ST_GeneratePoints.