[Mapserver-DE] getshape auf Postgis braucht oid?
Frank Koormann
frank.koormann at intevation.de
Don Mar 2 09:27:39 CET 2006
Hallo,
welche Versionen der beteiligten Komponenten werden eingesetzt?
* Thomas Baschetti <Thomas.Baschetti at gmx.de> [060228 16:12]:
> Also, ich versuche gerade mit edbs2wkt erzeugte Postgislayer über
> PHP/Mapscript abzufragen, stosse dabei aber auf folgende Schwierigkeit:
>
> Die Tabellen in PostgreSQL sind ohne OID erzeugt (without oid).
> Beim Abgreifen der Daten erhalte ich zwar eine Ergebnisanzahl,
> der Zugriff auf die Objekte ist aber erfolglos:
>
> $res = $lyr->queryByPoint($point_obj, MS_MULTIPLE,2);
> echo "Gefunden:" . $lyr->getNumResults() . " Objekte <BR>";
> //ergibt ein Ergebnis, es wird also etwas gefunden
> $lyr->open();
> for ($i=0;$i<$anzahl;$i++){
> $cmo = $lyr->getresult($i);
> $shp = $lyr->getshape(-1,$cmo->{shapeindex});
Ist das der tatsächliche Code? $anzahl ist gar nicht initialisert, bzw.
zumindest nicht == getNumResults() aus der aktuellen Query.
> die letzte Zeile liefert bei Postgis-Layern mit OID ein Ergebnis
> (ebenso mit Shapefiles), bei Layer ohne OID aber nicht.
>
> Was also mache ich hier falsch? Brauche ich hier unbedingt eine
> OID oder einen numerischen unique-Wert? Die Objekte selber
> werden ja gefunden (siehe getNumResults()), aber der Zugriff
> auf die Objekte klappt dann nicht.
>
> Die Data-Zeile der Layer:
>
> DATA "the_geom from (select * from f001_e_fla) as foo using unique objnr
> using SRID=31466"
> (ohne OID)
Ja, MapServer braucht einen eindeutigen Key:
- Im ersten Schritt einer QueryByPoint / QueryByRect wird eine räumliche
Abfrage ausgeführt und nur die in Klassen/Expressions der
Layer-Definition benutzten Attribute, die Geometrien und der durch
unique identifizierte eindeutige Schlüssel abgefragt.
Daher gibt es auch eine Anzahl an Treffern.
- Werden nun mit getResult() einzelne Ergebnisse angefordert, so werden
diese in einzelnen Queries anhand des eindeutigen Keys aus der
Datenbank geholt.
Wenn objnr im obigen Beispiel ein solcher ist, sollte es mit aktuellen
MapServer-Versionen (>= 4.6.0) funktionieren. Dann tauchen in den
Logs auch keine Bezüge auf OID auf.
Wenn ansonsten nicht mehr als 2^32 (=4.294.967.296) Objekte in einer
Tabelle erwartet werden, könnten auch OIDs aktiviert werden.
Beste Grüße,
Frank
--
Frank Koormann <frank.koormann at intevation.de>
PostGIS Support: http://intevation.de/services/gis/postgis.de.html
Experten für web-basierte GIS Anwendungen, seit 1999:
http://intevation.de/services/gis/webgis.de.html
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)