Comment créer, sur la forme d'un polygone, une grille régulière de polygones / carrés d'une taille donnée, dans postgis?
J'ai pensé à une fonction du type Comment créer une grille de points régulière dans un polygone dans Postgis? uniquement pour les carrés, les carrés pouvant mesurer 5 mx 5 m ou même 10 mx 10 m. Mais vous n'avez aucune idée de changer cela correctement.
Réponses:
Voici une fonction de retour d'ensemble
ST_CreateFishnet
qui crée une grille 2D de géométries de polygones:où
nrow
etncol
sont le nombre de lignes et de colonnes,xsize
etysize
sont les longueurs de la taille de la cellule, et sont facultativesx0
ety0
sont les coordonnées du coin inférieur gauche.Le résultat est
row
et descol
chiffres, à partir de 1 dans le coin inférieur gauche, et desgeom
polygones rectangulaires pour chaque cellule. Donc par exemple:Ou pour créer une seule collection de géométrie pour la grille complète:
Vous pouvez ajouter les décalages
x0
/y0
origine (leur valeur par défaut est zéro).la source
Voici une variante spécifique de la génération, dans les cas où vous devez créer une grille pour une carte géographique avec une étape de mesure constante (des cellules peuvent être utilisées pour regrouper des valeurs, par exemple la densité de foudre dans une région).
La fonction n'est pas très élégante, mais je n'ai pas trouvé de meilleure solution pour cette tâche (y compris la fonction de Mike Toews ci-dessus). Donc, vous avez un polygone lié (par exemple, arrivé d'une interface Google Maps), vous avez une valeur de pas en mètres:
Comment l'utiliser:
Vous pouvez donc voir que les lignes formatées par les polygones générés sont situées le long des parallèles géographiques et des méridiens, ce qui est très pratique.
Conseil: Si vous calculez quelque chose comme la densité (par exemple, la carte des coups de foudre par cellules), et que la grille est générée dynamiquement Pour augmenter les performances, je suggérerais d'utiliser des tables temporaires pour stocker les cellules en tant que polygones géométriques, avec un index spatial sur la colonne représentée la cellule.
la source
ST_GeomFromText
lors de la création d'une boîte à ajoutersectors
, vous pouvez utiliserST_MakeEnvelope
et spécifier simplement les coordonnées en bas à gauche et en haut à droite de la boîte.Vous pouvez créer une grille régulière simplement en vectorisant un raster vide:
la source
J'ai créé une variante de la fonction de @ Alexander qui n'exige pas de transformation en un autre SRID. Cela évite d'avoir à trouver une projection utilisant des mètres comme unités pour une région donnée. Il utilise
ST_Project
pour bien marcher en utilisant la projection donnée. J'ai également ajouté unwidth_step
etheight_step
pour permettre l'utilisation de carreaux rectangulaires au lieu de les exiger.Vous pouvez l'utiliser comme ceci:
la source
Voici un algorithme optimisé et efficace pour créer un réseau de résille, une grille régulière, une grille polygonale, une grille rectangulaire dans une enveloppe, un polygone ou des multipolygones. presque gérer n'importe quel SRID;
GitHub Repo Link
Utilisez-le avec une requête simple. l'entrée doit être un polygone valide, un multipolygone ou une enveloppe.
la source