[Mapserver-DE] getshape auf Postgis braucht oid?
"Jäger, Frank \(KRZ\)"
F.Jaeger at KRZ.DE
Don Mar 2 17:39:12 CET 2006
Hallo,
wäre die Frage in der Liste zum Konverter EDBS2WKT gestellt worden, hätte ich sie eher entdeckt.
Die OIDs (PostgreSQL: "WITHOUT OID") fehlen nicht in allen Geometrietabellen sondern nur in den 3 Tabellen alkObj_e_fla, alkObj_e_lin und alkObj_e_pkt.
Also, in den Tabellen mit "_e_" wie elementare Geometrie, auch Definitionsgeometrie genannt.
Eine Definitionsgeometrie kann in der ALK zu einem Objekt (ID = Objektnummer) nur genau EINMAL vorkommen.
Darum ist die Objektnummer der ideale Primärschlüssel für diese Tabellen.
Objektnummer ist 7stellig und entgegen dem Namen können auch Buchstaben enthalten sein.
Wenn eine Tabelle so einen schönen Primärschlüssel hat, der sie mit allen weiteren Tabellen verbindet (Foreign-Key), dann braucht sie nicht noch einen "künstlich" gebildeten Schlüssel, der gepflegt werden muss und zu nichts nutze ist, weil er nirgendwo anders vorkommt.
.... hatte ich mir so gedacht.
Der UMN-Mapserver ist bisher auch ganz gut damit zurecht gekommen.
Man muss dem UMN nur mitteilen, dass der UNIQUE KEY hier "ObjNr" ist.
Die Anwender von QGIS kommen aber damit nicht zurecht.
QGIS verlangt zwingend ein Feld, dass "OID" heißt und numerisch ist.
Es ist daher geplant, in der nächsten Version (1.7) von EDBS2WKT per Option auch in diese Tabellen eine OID einzufügen, in denen sie aus datenbanktechnischer Sicht überflüssig ist.
Mit freundlichen Grüßen
Frank Jäger
-----Ursprüngliche Nachricht-----
Von: mapserver-de-bounces at freegis.org [mailto:mapserver-de-bounces at freegis.org] Im Auftrag von Thomas Baschetti
Gesendet: Dienstag, 28. Februar 2006 16:12
An: mapserver-de at freegis.org
Betreff: [Mapserver-DE] getshape auf Postgis braucht oid?
Hallo,
Die Frage wurde eigentlich hier schon einmal gestellt
(http://freegis.org/pipermail/mapserver-de/2005-June/001351.html)
aber anscheinend nicht (öffentlich) beantwortet?
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});
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)
DATA "the_geom from (select * from flurstuecke) as foo using unique oid
using SRID=31466"
(Layer mit OID)
Ciao
Thomas Baschetti
ITEBO GmbH
--
10 GB Mailbox, 100 FreeSMS/Monat http://www.gmx.net/de/go/topmail
+++ GMX - die erste Adresse für Mail, Message, More +++
_______________________________________________
Mapserver-DE mailing list
Mapserver-DE at freegis.org
https://freegis.org/mailman/listinfo/mapserver-de
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)