2 votos

Orden de inserción de datos en postgis

Estoy usando postgis para mi proyecto junto con geoserver y openlayers. Le doy al usuario un formulario html con un menú desplegable con las capas disponibles (cada capa corresponde a una tabla en la base de datos), el usuario puede seleccionar cualquier capa, en base a la cual estoy recuperando los campos de ese particular de la base de datos para insertar los valores. Tan pronto como el usuario introduzca los datos y haga clic en enviar, los datos deben ser insertados en la base de datos.

Insertar datos en la db es algo trivial en la medida en que se conoce el orden en que se insertan en la db. Pero tengo tablas con diferente número de campos y en diferente orden. Quiero saber cómo puedo insertar valores en una tabla particular cuando no sé el orden en el que tengo que almacenar.

Lo explicaré con un ejemplo:

Tabla 1 de la capa1: id,nombre,punto Tabla 2 de la capa2: id,polígono,nombre,área

Cuando el usuario selecciona la capa 1 en el menú desplegable, el formulario le proporcionará los campos de texto id, nombre, punto en ese orden para insertar los datos. Si el usuario selecciona la capa 2, el formulario le proporcionará los campos de texto id, polygon, name, area en ese orden. Supongamos que el usuario ha seleccionado la capa 1, entonces después de insertar los valores en los campos de texto y enviar, el archivo php debe realizar una consulta "insert into (id,name,point) values(' $_post[id]','$ _post[nombre]','st_geomfromtext('PUNTO($_post[punto])',4326));"

De la misma manera para insertar en la capa 2 la consulta debería ser "insert into (id,polygon,name,area) values(' $_post[id]','st_geomfromtext('POINT($ _post[point])',4326),' $_post[name]','$ _post[área]');"

Pero, ¿cómo puedo saber que tengo que utilizar sólo esta consulta en particular? Puedo saber el nombre de la tabla desde el campo oculto.

Por ahora mi archivo php está así:

$tablename=$ _POST[tablename]; si( $tablename=='layer1') { perform query1; } else if($ tablename=='layer2') { realiza la consulta2; }

Pero esto sólo funciona si conozco las tablas ya presentes. ¿Hay alguna forma de escribir el archivo php siempre que conozca sólo el nombre de la tabla, pero no la descripción de la tabla en la base de datos? (Puedo obtener la descripción de la tabla a través de una consulta si quiero).

3voto

Adam Ernst Puntos 6939

Puesto que ya ha instalado GeoServer, ¿por qué no utilizar una solicitud WFS-T para gestionar sus escrituras en la base de datos? Entonces la cuestión de cómo escribir el código se vuelve discutible ya que hay un código bueno, bien definido y probado. OpenLayers proporciona un objeto WFS-T para ayudarle a construir la solicitud en el cliente también. Para un ejemplo con un formulario para agregar atributos ver http://dev4.mapgears.com/bdga-mapfish/bdgaWFS-T.html

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X