Ich begann mit einer NetCDF-Rasterdatei .gri und .grd aus Großbritannien, die von einem Kollegen bereitgestellt wurde. Ich habe es in R abgeschnitten, um nur London zu sein, es exportiert und in eine ASC-Datei konvertiert und es dann mit den folgenden Befehlen in R in PostGIS importiert:
library(raster)
uk_raster <- raster("AnnMean2011.grd")
london_area <- extent(-720000.0,-630000.0,-50000.0,25000)
london_raster <- crop(uk_raster, london_area)
writeRaster(london_raster, filename="AnnMean2011.asc", format="ascii")
Und dann auf der Ubuntu-Kommandozeile:
raster2pgsql -I -C -s 10001 -t 20x20 AnnMean2011.asc annualmean | psql -d james_traffic
Ich habe jetzt eine Rastertabelle in PostGIS. Die SRID von 10001 wird übrigens wiederum von einem Kollegen bereitgestellt:
INSERT INTO spatial_ref_sys(srid, auth_name, auth_srid, proj4text)
VALUES (10001,'CMAQ_Urban',10001,'+proj=lcc +a=6370000 +b=6370000 +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=000000 +y_0=00000');
In derselben Datenbank habe ich eine Polygondatei, SRID 27700, die London abdeckt. Ich möchte den Durchschnittswert innerhalb jedes Polygons aus dem Raster berechnen.
Ich versuche so etwas, aber es ist nicht richtig:
select polygons.postcode, avg(st_value(joined_data.rast))
from (
select (ST_Intersection(raster.rast, 1, polygons.geom)).*
from raster, polygons
where ST_Intersects(raster.rast, 1, polygons.geom)
) joined_data
group by polygons.postcode
Wie würde ich bitte vorgehen?
Es scheint, dass das Polygon und das Raster richtig ausgerichtet sind. Ich denke, ich muss beide in WGS84 konvertieren.
quelle
Antworten:
Dank des gestrigen Kommentars von Stefan kann ich aus verwandten Fragen und der offiziellen Dokumentation etwas zusammenstellen und eine Reihe von Lösungen anbieten.
PostGIS-Dokumentation (
ST_SummaryStats
)Fassen Sie Pixel zusammen, die interessierende Gebäude schneiden
Dieses Beispiel dauerte unter PostGIS-Fenstern 64-Bit 574 ms mit allen Boston Buildings und Antennenkacheln (Kacheln mit jeweils 150 x 150 Pixel ~ 134.000 Kacheln), ~ 102.000 Gebäudeaufzeichnungen
Vermeiden
ST_Intersection
für LeistungBeachten Sie, dass dies weniger genau ist, da sich überschneidende Pixel, die weniger als 50% einer sich überschneidenden Geometrie abdecken, ignoriert werden.
Stefan hat hier eine Antwort , die das vermeidet
ST_Intersection
.Anmerkungen
quelle