Как создать в форме многоугольника правильную сетку многоугольников / квадратов заданного размера в postgis?
Я думал о функции, как Как создать регулярную точечную сетку внутри многоугольника в Postgis? только для квадратов, так что квадраты могут быть 5 х 5 м или даже 10 х 10 м. Но понятия не имею, чтобы изменить это правильно.
Ответы:
Вот возвращаемая функция набора,
ST_CreateFishnet
которая создает двумерную сетку геометрии многоугольника:где
nrow
иncol
- количество строк и столбцов,xsize
аysize
также длина ячейки, необязательный параметрx0
иy0
координаты левого нижнего угла.Результатом являются
row
иcol
числа, начиная с 1 в левом нижнем углу, иgeom
прямоугольные многоугольники для каждой ячейки. Так, например:Или создать единую коллекцию геометрии для полной сетки:
Вы можете добавить смещения
x0
/y0
origin (по умолчанию это ноль).источник
Вот конкретный вариант генерации для ситуации, когда вам нужно создать сетку для географической карты с постоянным шагом метрики (ячейки могут использоваться для группировки значений, например, плотности молнии в регионе).
Функция не очень элегантная, но я не нашел лучшего решения для этой задачи (включая функцию Майка Тьюса выше). Таким образом, у вас есть связанный многоугольник (например, полученный из интерфейса Google Maps), значение шага в метрах:
Как это использовать:
Итак, вы можете видеть, что линии, отформатированные сгенерированными полигонами, лежат вдоль географических параллелей и меридианов - это очень удобно.
Совет: если вы вычисляете что-то вроде плотности (например, карту ударов молнии по ячейкам), и сетка генерируется динамически. Чтобы повысить производительность, я бы предложил использовать временные таблицы для хранения ячеек в качестве геометрических полигонов, причем пространственный индекс на столбце представляет клетка.
источник
ST_GeomFromText
при создании поля для добавленияsectors
, вы можете использоватьST_MakeEnvelope
и просто указать нижнюю левую и верхнюю правую координаты поля.Вы можете создать регулярную сетку, просто векторизовав пустой растр:
источник
Я создал вариант функции @ Alexander, который не требует преобразования в другой SRID. Это позволяет избежать необходимости поиска проекции, в которой в качестве единиц измерения используются метры. Он использует,
ST_Project
чтобы правильно шагать, используя данную проекцию. Я также добавилwidth_step
иheight_step
для прямоугольных плиток вместо того, чтобы они были квадратными.Вы можете использовать это так:
источник
Вот оптимизированный и эффективный алгоритм для создания рыболовной сети, регулярной сетки, многоугольной сетки, прямоугольной сетки внутри любого конверта, многоугольника или мультиполигонов. почти справиться с любым SRID;
GitHub Repo Ссылка
Используйте это с простым запросом; ввод должен быть действительным полигоном, мультиполигоном или конвертом.
источник