[Mapserver-DE] Probleme bei der Abfrage von POSTGIS
KlausSchiefer
KlausSchiefer at web.de
Fre Mar 17 13:44:28 CET 2006
Hallo Listenmitglieder,
ich habe eine Anwendung erstellt, mit der man ein Punktthema aus POSTGIS
nach verschiedenen Kriterien filtern kann. Unter anderem ist es damit
möglich, nur die Punkte anzuzeigen, die in einer bestimmten Entfernung von
einer Gruppe von anderen Punkten (Points of interest) liegen.
Beispiel: Zeige mir alle Punkte, die im Umkreis von 200 m um Apotheken
liegen.
Die entsprechenden Punkte werden auch auf der Karte dargestellt und der
entsprechende Pufferbereich wird zusätzlich in der angegebenen Größe
visualisiert.
Jetzt möchte ich zusätzlich eine Liste der Datensätze erstellen, die
innerhalb des Kartenausschnittes und des Puffers liegen und auch die Anzahl
der Punkte berechnen. Dazu habe ich den folgenden SQL-String verwendet:
SELECT DISTINCT datum, ort, stadtteil, einsatzstichwort, text, enr FROM
lage_k lk, poi p where lk.the_geom && SetSRID('BOX3D(2550220.14387
5629446.95903, 2585841.33414 5665068.1493)'::box3d,31466) AND
distance(lk.the_geom, p.the_geom) < 150 and p.bezeichnung = 'Apotheken' AND
lage LIKE '03L%' AND datum >= '2006/03/11 00:00:00' AND datum <= '2006/03/17
23:59:59' ORDER BY datum
Für die Ausgabe der Datensatzinformationen reicht diese Abfrage auch aus, da
durch DISTINCT in Verbindung mit einer eindeutigen Nummer (enr) keine
doppelten Datensätze erscheinen.
Bei der Berechnung der Werte für die einzelnen Gruppen über den SQL-String
SELECT DISTINCT lage, Count(lage) AS Anzahl FROM lage_k lk, poi p where
lk.the_geom && SetSRID('BOX3D(2550220.14387 5629446.95903, 2585841.33414
5665068.1493)'::box3d,31466) AND distance(lk.the_geom, p.the_geom) < 150 and
p.bezeichnung = 'Apotheken' AND lage LIKE '03L%' AND datum >= '2006/03/11
00:00:00' AND datum <= '2006/03/17 23:59:59' GROUP BY lage
kommt jedoch zu Fehlern, da die Datensätze für den Puffer mehrfach gezählt
werden, wenn sie im Pufferbereich mehrerer Apotheken liegen. Für die
Darstellung der Punkte über den Layer lautet die Abfrage
the_geom from (select lk.the_geom as the_geom, lk.gid as oid, lage from
lage_k lk, poi p where distance(lk.the_geom, p.the_geom) < 150 and
p.bezeichnung = 'Apotheken' AND lk.lage LIKE '03L%' AND datum >= '2006/03/11
00:00:00' AND datum <= '2006/03/17 23:59:59' ORDER BY lage DESC) AS
new_table USING UNIQUE oid USING SRID=31466
Es ist mir bislang nicht gelungen, die offensichtliche Fehlerquelle wie im
letztgenannten Beispiel durch
the_geom from (select ….) AS new_table USING UNIQUE oid
auch für die Datensätze des Puffers eindeutig zu machen.
Kann mir jemand einen Tipp geben, wie ich in diesem Fall den SQL-String
zusammensetzen muss oder ggfls. eine andere Möglichkeit nennen, um mein
Problem zu beheben.
Danke im voraus.
Mit freundlichen Grüßen
Klaus Schiefer
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: http://www.intevation.de/pipermail/mapserver-de/attachments/20060317/b6ffbcd1/attachment.html
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)