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