[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)