Ich versuche, diesen ArcGIS-Prozess in PostGIS zu replizieren: http://blogs.esri.com/esri/arcgis/2012/11/13/spaghetti_and_meatballs/ . Hier wird beschrieben, wie gepufferte Punkte anhand ihrer Schnittpunkte in Polygone zerlegt werden, die Anzahl der Ebenen gezählt und diese den Polygonen zugeordnet werden, um sie zu klassifizieren. Ich verwende es, um eine grobe Punktdichtekarte mit Vektoren zu erstellen, und die Ergebnisse waren für meinen Datensatz in ArcGIS überraschend gut. Ich habe jedoch Probleme, in PostGIS etwas zu finden, das für die Erstellung dynamischer Punktdichteebenen für eine Webkarte erforderlich ist.
In ArcGIS habe ich einfach das Schnittwerkzeug auf meiner Ebene mit gepufferten Punkten ausgeführt, um die benötigten Formen zu erstellen.
In PostGIS habe ich diese Abfrage ausgeführt:
CREATE TABLE buffer_table AS
SELECT a.gid AS gid, ST_Buffer(a.geo,.003) AS geo
FROM public.pointTable a;
CREATE TABLE intersections AS
SELECT a.gid AS gid_a, b.gid AS gid_b, ST_Intersection(a.geo,b.geo) AS geo
FROM public.pointTable a, public.pointTable b
WHERE ST_Intersects(a.geo, b.geo) AND a.gid < b.gid;
DELETE FROM intersections WHERE id_a = id_b;
Die Ausgabe sieht ziemlich identisch mit der ArcGIS-Ausgabe aus, außer dass die Polygone nicht in dem Maße zerlegt werden, wie es für eine aussagekräftige Dichtekarte erforderlich ist. Hier sind Screenshots von dem, was ich meine:
ArcGIS befindet sich links und PostGIS rechts. Es ist etwas schwer zu sagen, aber das ArcGIS-Bild zeigt das 'innere' Polygon, das dort erstellt wurde, wo sich alle 3 Puffer schneiden. Die PostGIS-Ausgabe hingegen erstellt dieses innere Polygon nicht und behält stattdessen seine Komponenten bei. Dies macht es unmöglich, eine Klassifizierung für nur diesen Innenbereich mit 3 übereinanderliegenden Schichten im Vergleich zu nur 1 für die Außenteile bereitzustellen.
Kennt jemand eine PostGIS-Funktion, um das Polygon so weit aufzuschlüsseln, wie ich es brauche? Kennt jemand einen besseren Weg, um eine Punktdichtekarte mit Vektoren in PostGIS zu erstellen?
quelle
Die Methode, die ich letztendlich verwendete, bestand darin, in meinem Interessengebiet ein Netzgitter mit einer ausreichend hohen "Auflösung" zu erstellen, um die Daten in angemessenem Maße zu formatieren und wiederzugeben. Informationen zur Fischnetzfunktion finden Sie hier: Wie erstelle ich ein reguläres Polygonraster in PostGIS?
Dadurch entsteht das Fischnetz mit 800 Zeilen und 850 Spalten mit einer Höhe und Länge von 0,0005 Radiant (unter Verwendung der WGS84-Projektion in Lat / Long und einer ausreichend kleinen geografischen Ausdehnung, dass die Verzerrung vernachlässigbar ist - dh alle sind mehr oder weniger gleichmäßig verzerrt ) und dann die Koordinaten unten links im Raster.
Da dadurch eine große Anzahl von Polygonen erstellt wurde, auf denen Abfragen ausgeführt werden, habe ich einen Index erstellt und die Statistiken aktualisiert. Dies reduzierte meine typischen Abfragen von 50+ Sekunden auf 4-5 Sekunden.
Die Unterabfrage zählt hier die Anzahl der Vorfälle innerhalb von 0,002 Radian (ca. 220 Meter) jedes Fischnetzgitterpolygons und gruppiert sie nach dem Netzgitter. Dies zählt effektiv die Anzahl überlappender Kreise zur Auflösung des Gitters.
Die äußere Abfrage, mit der ich den Zählwert jedes Polygons vereinigt und die Anzahl auf 3 oder mehr beschränkt habe. Während die Vereinigung nicht unbedingt erforderlich ist und den ressourcenintensivsten Teil der Abfrage darstellt, ist sie für das Web-Mapping von entscheidender Bedeutung, da sie Zehntausende von Rasterpolygonen effektiv umwandelt, was nicht direkt funktioniert, wenn sie direkt für Openlayer bereitgestellt werden Multipolygone mit so vielen verschiedenen Zählwerten (normalerweise ein paar Dutzend für meine Daten).
Das Einschränken des Zählwerts ist eine wichtige Funktion für Heatmaps, damit sie nicht zu viele Daten darstellen, bis sie nicht mehr interpretiert werden können. Außerdem bietet es den zusätzlichen Nutzen, die Abfrage erheblich zu beschleunigen.
Endergebnis:
quelle