Hallo, habe meine Probleme mit einer der klassischsten Abfragen.
Ich habe die Tabelle 1 mit Polygonen und die Tabelle 2 mit Punkten . Nun möchte ich alle Polygone, die einen Punkt enthalten und zudem die Anzahl der enthaltenen Punkte.
Mit der folgenden Abfrage bekomme ich auch ein Ergebnis:
select a.the_geom, count(*) as anzahl
from tabelle1 as a, tabelle 2 as b
where a.the_geom ~ b.the_geom
group by a.the_geom
order by anzahl asc;
Mein Problem: Mit count(*) erhalte ich (so denke ich), die Zahl der Punkte, die innerhalb eines Polygons liegen. Bilde ich allerdings die Summe, komme ich auf mehr Punkte (22761), als in der Ausgangsdatei sind (16322). Mit der Funktion ‘within’ in der where-Bedingung habe ich das gleiche Problem.Wenn ich mir beide Layer in QGIS übereinanderlege und mal einige Polygone durchzähle, stimmt das auch nicht.
Muss ich eine andere Aggregatfunktion als count(*) nutzen? Habe allerdings auch schon getestet, in der Tabelle mit den Punkten eine neue Spalte ‘zaehler’ anzulegen, die eine ‘1’ enthält. Die habe ich dann mit “sum(zaehler)” in die Sytax eingebaut, ohne dass dies zu einem anderen Ergebnis geführt hätte.
Gute Fragen. Ich glaube mittlerweile, bei den Polygonen liegt der Hase im Pfeffer. Es handelt sich dabei um die Zellen eines Vektor-Grid (ETRS89_LAEA SRID 3035), dass ich in QGIS erstellt habe.
Zuerst habe ich meine Punkte in ein Grid mit einer Zellenweite von 1km gepackt, was mit der Funktion ‘within’ auch zum richtigen Ergebnis geführt hat.
Danach wollte ich das gleiche mit einem Grid tun, dass lediglich eine Zellenweite von 100m hat. Da sich das 100m Raster nahtlos in das 1km-Raster einfügt, habe ich das 100m-Raster erstmal mit den Ergebnissen der Analyse des 1km-Raster verschnitten. Denn nur wenn bereits in der 1km-Zelle ein Punkt liegt, kommen auch die untergeordneten 100m-Zellen darin bei der Analyse in Frage.
Hier die Abfrage:
Create View grid_100m_all
select b. the_geom
from grid_100m as b, ergebnis_grid_1km as a
where st_intersects (a.the_geom, b.the_geom);
Die Funktion ‘Intersects’ war hier wohl falsch. Wenn ich`s wie in der Abfrage oben beschrieben über den räumlichen Index und ‘~’ mache, und das Ergebnis dann mit meinen Punkten verschneide, kommt ein plausibles Ergebnis raus. Vielleicht sollte ich nochmal genau nachlesen, was ‘Intersects’ genau anstellt.