Mehr

Abfrage zum Auflösen von Polygonen in der Nähe auf Hive

Abfrage zum Auflösen von Polygonen in der Nähe auf Hive


Ich verwende das räumliche ESRI-Framework für Hadoop, das Hive erweitert, um räumliche Typen und Operationen zu verwenden.

Mein Ziel ist es, eine Reihe einfacher Abfragen auf PostGIS in Hadoop zu übersetzen, um eine horizontale Skalierbarkeit zu erreichen.

Ich habe ein Raster mit einer Zählung für jede Zelle.

Das Ziel meiner Abfrage besteht darin, alle Zellen auszuwählen, deren Anzahl einen bestimmten Schwellenwert überschreitet, und alle Zellen zu gruppieren (zusammenzuführen), die zusammen sind. In diesem Fall würde ich zum Beispiel so aussehen: 4 Polygone.

Dazu verwende ich in PostGIS eine Kombination aus ST_Dump und ST_SnapToGrid

CREATE TABLE explodiert AS SELECT (ST_Dump(st_union)).geom FROM (SELECT ST_Union(ST_SnapToGrid(geom,0.0001)) FROM grid where ptcnt > 'threshold) as q;

Leider ist keine dieser Funktionen im räumlichen Framework von ESRI verfügbar.

Ich kann den Schwellenwertfilter ausführen, aber ich habe keine Möglichkeit, die nahegelegenen Geometrien basierend auf der Nähe zu aggregieren (ein Trick, der vom Raster ausgeführt wird):

erstellen Sie eine explodierte Tabelle als select u als geom from (select geom as u from grid_cnt wobei ptcnt > 11467) als q;

Kann sich jemand eine Problemumgehung vorstellen (vielleicht mit Union)?


DasST_BinundST_BinUmschlagFunktionen (hinzugefügt im Jahr 2014) können anstelle vonST_SnapToGrid. In Schritt 4 dieses Tutorials finden Sie ein Beispiel.

DasST_Aggr_UnionFunktion kann auch nützlich sein. Es gibt ein Beispiel im Blogbeitrag, in dem die Aggregatfunktionen angekündigt werden.

(Offenlegung: Ich bin Mitarbeiter der GIS-Tools für Hadoop bei Esri.)


Eingabe: ein Raster mit dem Namen ("polygon_grid"), mit den Namen der Felder "id" und "count", wie in der folgenden Abbildung gezeigt.

Ausgabe: Zellen mit einem bestimmten Wert verbunden.

Führen Sie die Abfrage aus:

WITH tbla AS (SELECT id, (ST_Dump(geom)).geom FROM polygon_grid WHERE count<=185 OR count>=963 GROUP BY id) SELECT (ST_Dump(geom)).geom FROM (SELECT ST_Union(geom) geom FROM tbla ) foo;

Das Ergebnis finden Sie in der Abbildung unten.

Ich habe mit den Daten in EPSG 4326 gespielt.

Originelle Lösungen…


Schau das Video: Hive Tutorial - 7: Advance Datatypes in Hive. Hive ARRAY. Hive MAP. Hive STRUCT