Wie kann man in der Form eines Polygons ein regelmäßiges Gitter aus Polygonen / Quadraten einer bestimmten Größe in Postgis erstellen?
Ich habe mir überlegt, wie man in Postgis ein regelmäßiges Punktraster innerhalb eines Polygons erstellt. Nur für Quadrate, sodass Quadrate 5 x 5 m oder sogar 10 x 10 m groß sein können. Habe aber keine Ahnung, das richtig zu ändern.
Antworten:
Hier ist eine Set-Return-Funktion
ST_CreateFishnet
, die ein 2D-Gitter aus Polygongeometrien erstellt:wo
nrow
undncol
die Anzahl der Zeilen und Spalten,xsize
undysize
die Längen der Zellengröße, und optionalx0
undy0
sind Koordinaten der unteren linken Ecke.Das Ergebnis ist
row
undcol
Zahlen, beginnend mit 1 in der unteren linken Ecke, undgeom
rechteckige Polygone für jede Zelle. Also zum Beispiel:Oder erstellen Sie eine einzelne Geometriesammlung für das gesamte Raster:
Sie können die
x0
/y0
origin-Offsets hinzufügen (diese sind standardmäßig auf Null gesetzt).quelle
Hier ist eine spezielle Variante der Generierung für eine Situation, in der Sie ein Raster für eine geografische Karte mit einem konstanten Metrikschritt erstellen müssen (Zellen können zum Gruppieren von Werten verwendet werden, z. B. Blitzdichte in einer Region).
Die Funktion ist nicht sehr elegant, aber ich habe keine bessere Lösung für diese Aufgabe gefunden (einschließlich der obigen Funktion von Mike Toews). Sie haben also ein gebundenes Polygon (z. B. von einer Google Maps-Oberfläche angekommen) und einen Schrittwert in Metern:
Wie man es benutzt:
Sie sehen also, dass mit generierten Polygonen formatierte Linien entlang der geografischen Parallelen und Meridiane liegen - das ist sehr praktisch.
Hinweis: Wenn Sie so etwas wie Dichte berechnen (z. B. Karte von Blitzschlägen nach Zellen) und das Raster dynamisch generiert wird, würde ich zur Leistungssteigerung die Verwendung von temporären Tabellen zum Speichern von Zellen als Geometriepolygone empfehlen, wobei ein räumlicher Index für die Spalte steht die Zelle.
quelle
ST_GeomFromText
beim Erstellen einer Box zu verwendensectors
, können SieST_MakeEnvelope
die unteren linken und oberen rechten Koordinaten der Box verwenden und angeben.Sie können ein reguläres Raster erstellen, indem Sie einfach ein leeres Raster vektorisieren:
quelle
Ich habe eine Variante der @ Alexander-Funktion erstellt, die nicht erfordert, dass wir in eine andere SRID transformieren. Dies vermeidet die Notwendigkeit, eine Projektion zu finden, die Meter als Einheiten für eine bestimmte Region verwendet. Es wird verwendet,
ST_Project
um mit der angegebenen Projektion richtig voranzukommen. Ich habe auch einwidth_step
und hinzugefügtheight_step
, um rechteckige Kacheln zuzulassen, anstatt dass sie Quadrate sein müssen.Du kannst es so benutzen:
quelle
Hier finden Sie einen optimierten und effizienten Algorithmus zum Erstellen von Fischernetzen, regelmäßigen Gitternetzen, Polygongitternetzen und rechteckigen Gitternetzen in beliebigen Umschlägen, Polygonen oder Multipolygonen. kann fast jede SRID verarbeiten;
GitHub Repo Link
Verwenden Sie es mit einer einfachen Abfrage. Die Eingabe sollte ein gültiges Polygon, Multipolygon oder Hüllkurve sein.
quelle