Mehr

Auftrag zum Einfügen von Daten in postgis

Auftrag zum Einfügen von Daten in postgis


Ich verwende Postgis für mein Projekt zusammen mit Geoserver und Openlayers. Ich gebe dem Benutzer ein HTML-Formular mit einer Dropdown-Menüliste der verfügbaren Ebenen (jede Ebene entspricht einer Tabelle in db). Der Benutzer kann eine beliebige Ebene auswählen, auf deren Grundlage ich die Felder dieser bestimmten Datenbank abrufe, um die Werte einzufügen. Sobald der Benutzer Daten eingibt und auf Senden klickt, sollten die Daten in db eingefügt werden.

Das Einfügen von Daten in die Datenbank ist eine triviale Sache, soweit Sie die Reihenfolge kennen, in der sie in die Datenbank eingefügt werden. Aber ich habe Tabellen mit unterschiedlicher Anzahl von Feldern und in unterschiedlicher Reihenfolge. Ich möchte wissen, wie ich Werte in eine bestimmte Tabelle einfügen kann, wenn ich die Reihenfolge nicht kenne, in der ich speichern muss.

Ich erkläre es an einem Beispiel:

Tabelle 1 von Layer1: id,name,point Tabelle 2 von Layer2: id,polygon,name,area

Wenn der Benutzer im Dropdown-Menü Layer1 auswählt, bietet Ihnen das Formular ID-,Name-,Punkt-Textfelder in dieser Reihenfolge zum Einfügen von Daten. Wenn der Benutzer Layer2 auswählt, zeigt Ihnen das Formular die Textfelder ID,Polygon,Name,Bereich in dieser Reihenfolge an. Angenommen, der Benutzer hat Layer1 ausgewählt, dann sollte die PHP-Datei nach dem Einfügen der Werte in Textfelder und dem Absenden eine Abfrage ausführen "insert into (id,name,point) values('$_post[id]','$_post[name] ','st_geomfromtext('POINT($_post[Punkt])',4326));"

Auf die gleiche Weise zum Einfügen in Layer2 sollte die Abfrage "insert into (id,polygon,name,area) values('$_post[id]','st_geomfromtext('POINT($_post[point])',4326),' $_post[Name]','$_post[Bereich]');"

Aber wie kann ich wissen, dass ich nur diese spezielle Abfrage verwenden muss??? Ich kann den Tabellennamen aus dem versteckten Feld kennen.

Im Moment sieht meine PHP-Datei so aus:

$tablename=$_POST[tablename]; if($tablename=='layer1') { Abfrage1 ausführen; } else if($tablename=='layer2') { Abfrage durchführen2; }

Dies funktioniert aber nur, wenn ich die bereits vorhandenen Tabellen kenne. Kann man die PHP-Datei trotzdem schreiben, vorausgesetzt, ich kenne nur den Tabellennamen, aber keine Ahnung von Tabellenbeschreibung in db?? (Ich kann die Tabellenbeschreibung über eine Abfrage abrufen, wenn ich möchte).


Da Sie GeoServer bereits installiert haben, verwenden Sie eine WFS-T-Anfrage, um Ihre Datenbankschreibvorgänge zu verarbeiten. Dann wird die Frage, wie der Code geschrieben wird, hinfällig, da bereits guter, gut definierter und getesteter Code vorhanden ist. OpenLayers stellt ein WFS-T-Objekt bereit, mit dem Sie die Anforderung auch auf dem Client erstellen können. Ein Beispiel mit einem Formular zum Hinzufügen von Attributen finden Sie unter http://dev4.mapgears.com/bdga-mapfish/bdgaWFS-T.html