[Spanish] Triggers en PostGIS
Luis Franco Vázquez
luis.frvz at gmail.com
Tue Feb 24 09:01:54 PST 2015
No sé qué estás empleando para insertar desde QGIS pero lo que te está
diciendo es que en la geometría no tienes un punto. ¿Qué proceso estás
siguiendo?.
Y de paso te voy a dar un ligero tirón de orejas: en las listas no debes
escribir correos como este último. No los dirijas a mi ni a nadie salvo
para seguir un hilo. Si te surge una duda o problema exponlo a todos. En mi
caso colaboro siempre que puedo pero el asesoramiento personalizado lo
cobro porque profesionalmente me dedico a esto. Y cuando se trate de un
problema, por cortesía asegúrate de haber buscado en internet o donde sea
la respuesta antes de preguntar. ;)
El 24 de febrero de 2015, 16:58, Mikel <m.ayesta en gislan.com> escribió:
> Hola Luis,
>
> Tengo otro problema con otra tabla. En este caso, lo que quiero hacer es
> que al introducir manualmente el punto desde QGIS, me rellene las
> coordenadas x, y, longitud y latitud. La tabla está en srid 25830 y al
> introducir el punto en QGIS, me da el siguinete error: Argument to X() must
> be a point.
>
> Gracias de antemano.
>
> El código es el siguiente:
>
> CREATE OR REPLACE FUNCTION public.errepide_intz_koord()
> RETURNS trigger AS
> $BODY$
> DECLARE
>
> BEGIN
>
> NEW.x:=ST_X(NEW.geom);
> NEW.y:=ST_Y(NEW.geom);
> NEW.lon:=ST_X(ST_Transform(NEW.geom, 4326));
> NEW.lat:=ST_Y(ST_Transform(NEW.geom, 4326));
>
> RETURN NEW;
> END;
> $BODY$
> LANGUAGE plpgsql VOLATILE
> COST 100;
> ALTER FUNCTION public.errepide_intz_koord()
> OWNER TO postgres;
>
>
>
>
> 2015/02/24 15:19(e)an, Mikel igorleak idatzi zuen:
>
> Hola Luis,
>
> Gracias! Funciona perfectamente.
>
> Mikel
>
> 2015/02/24 14:01(e)an, Luis Franco Vázquez igorleak idatzi zuen:
>
> Pues es muy simple. Suponiendo que tus nuevos campos x e y se llaman
> x_25830 e y_25830 (adáptalos a tu gusto), solo tienes que añadir dos líneas
> y reemplazar la función ejecutando lo que sigue:
> CREATE OR REPLACE FUNCTION errepide_intz()
> RETURNS trigger AS
> $BODY$
> DECLARE
> BEGIN
> NEW.geom:=ST_transform(ST_SetSRID(ST_MakePoint(NEW.lon,
> NEW.lat),4326),25830);
> NEW.x_25830 := ST_X(NEW.geom);
> NEW.y_25830 := ST_Y(NEW.geom);
> RETURN NEW;
> END;
> $BODY$
> LANGUAGE plpgsql VOLATILE
> COST 100;
>
> Prueba y cuentas. Deberías echarle un vistazo al manual de postgresql.
> Si quieres actualizar los registros que ya tienes haces:
> UPDATE tu_tabla SET x_25830 = ST_X(geom), y_25830 = ST_Y(geom);
>
> Muy simple, la verdad.
>
> El 24 de febrero de 2015, 13:47, Mikel <m.ayesta en gislan.com> escribió:
>
>> Hola Luis,
>>
>> Aquí te pego la función.
>>
>> CREATE OR REPLACE FUNCTION errepide_intz()
>> RETURNS trigger AS
>> $BODY$
>> DECLARE
>> BEGIN
>>
>> NEW.geom:=ST_transform(ST_SetSRID(ST_MakePoint(NEW.lon,NEW.lat),4326),25830);
>> RETURN NEW;
>> END;
>> $BODY$
>> LANGUAGE plpgsql VOLATILE
>> COST 100;
>> ALTER FUNCTION errepide_intz()
>> OWNER TO postgres;
>>
>> Gracias de antemano,
>>
>> Mikel
>>
>>
>> 2015/02/24 13:44(e)an, Luis Franco Vázquez igorleak idatzi zuen:
>>
>> Vale. Ahora lo he entendido.
>> Si me pegas aquí la función disparadora que ya tienes te digo como
>> hacerlo.
>>
>>
>>
>> El 24 de febrero de 2015, 13:19, Mikel <m.ayesta en gislan.com> escribió:
>>
>>>
>>> Hola Luis,
>>> El disparador lo que hace es crear el punto en el sistema de referencia
>>> 25830 partiendo de las coordenadas geográficas que introduzco en el sistema
>>> 4326. Lo que necesito es que me rellene los campos X e Y en el sistema
>>> 25830 de manera automática.
>>>
>>> He intentando poner por defecto en el campo X el valor ST_X (geom) pero
>>> me da error...
>>>
>>> Gracias.
>>>
>>>
>>> 2015/02/24 12:29(e)an, Luis Franco Vázquez igorleak idatzi zuen:
>>>
>>> Disculpa, no te he entendido. ¿Ya tienes un disparador que crea el punto
>>> y quieres obtener las coordenadas que tú mismo estás introduciendo?. Tengo
>>> que haberlo entendido muy mal. ¿O es que estás introduciendo coordenadas en
>>> un sistema de referencia distinto al 25830 (por ejemplo epsg 4326) y lo que
>>> hace tu disparador es rellenar un atributo de tipo punto con srid 25830 a
>>> partir de un par x, y en otro sistema de referencias?. Si me das más datos
>>> puedo concretar algo.
>>> En general: postgis no tiene disparadores. Quien los tiene es
>>> postgresql. Postgis es una extensión espacial de postgresql, por lo tanto
>>> debes consultar la documentación de postgresql.
>>> Y sobre como obtener coordenadas x e y, mira
>>> http://postgis.net/docs/manual-2.1/ST_X.html y
>>> http://postgis.net/docs/manual-2.1/ST_Y.html
>>>
>>> El 24 de febrero de 2015, 11:56, Mikel <m.ayesta en gislan.com> escribió:
>>>
>>>> Hola a tod en s,
>>>>
>>>> Tengo una duda con PostGIS. ¿Hay alguna manera de que se rellenen
>>>> automáticamente dos campos de la tabla con las coordenadas del elemento
>>>> introducido?
>>>>
>>>> Me explico. Tengo una tabla en la que introduzco los puntos con
>>>> coordenadas geográficas y mediante un disparador, me situa el punto en las
>>>> coordenadas introducidas. El sistema de referencia es EPSG: 25830, por lo
>>>> que en el disparador realizo la transformación de coordenadas. La cuestión
>>>> es que necesito que se me rellenen los campos X e Y de forma automática.
>>>> ¿Hay algún valor por defecto que se puede introducir (como en el caso de la
>>>> fecha, now()), o por el contrario hay que programar algún disparador? y si
>>>> es la segunda opción, ¿cómo?
>>>>
>>>> Gracias de antemano.
>>>>
>>>> Un cordial saludo,
>>>> <http://www.gislan.com> <http://www.gislan.com/node/107> *Mikel
>>>> Ayestaran Olano*
>>>> GISLAN GEOGRAPHIC APPLICATIONS S.L
>>>> m.ayesta en gislan.com
>>>> Tel.: 0034 943 304 255
>>>> www.gislan.com
>>>>
>>>> *Lege oharra:* Mezu elektroniko honetan, eta, hala badagokio, bere
>>>> fitxategi erantsietan, hartzaileari soilik zuzendutako isilpeko informazioa
>>>> dago. Debekatuta dago informazio hori zabaldu, kopiatu eta beste pertsonen
>>>> artean banatzea, Gaindegiaren baimen idatzirik gabe. Akatsen batengatik
>>>> mezu hau jaso baduzu, jakinarazi mesedez, mezua igorlearen helbidera
>>>> birbidaliz. DBLOn ezarritakoaren arabera, Gaindegiak datu pertsonalen
>>>> isilpeko tratamendua bermatzeko beharrezko neurriak hartzen ditu. Halaber,
>>>> zure datuak fitxategi batean daudela jakinarazi nahi dizugu, zure harremana
>>>> mantentzeko. Eskubidea daukazu datuok begiratu, zuzendu, ezabatu eta aurka
>>>> egiteko, helbide honetan: Martin Ugalde Kultur Parkea, 20140 Andoain.
>>>> *Nota:* "Este correo electrónico y, en su caso, cualquier fichero
>>>> anexo al mismo, contiene información de carácter confidencial
>>>> exclusivamente dirigida a su destinatario. Queda prohibida su divulgación,
>>>> copia o distribución a terceros sin la previa autorización escrita de
>>>> Gaindegia. En el caso de haber recibido este correo electrónico por error,
>>>> se ruega notifíquese inmediatamente esta circunstancia mediante reenvío a
>>>> la dirección electrónica del remitente. De conformidad con lo establecido
>>>> en la LOPD Gaindegia garantiza la adopción de las medidas necesarias para
>>>> asegurar el tratamiento confidencial de los datos de carácter personal. Así
>>>> mismo le informamos de inclusión de sus datos en un fichero con la
>>>> finalidad de mantener su relación con Gaindegia y de la posibilidad de
>>>> ejercer los derechos de acceso, rectificación, cancelación y oposición en
>>>> la siguiente dirección: Martin Ugalde Kultur Parkea, 20140 Andoain.”
>>>>
>>>>
>>>> _______________________________________________
>>>> Spanish mailing list
>>>> http://lists.osgeo.org/mailman/listinfo/spanish
>>>> http://es.osgeo.org
>>>> http://twitter.com/osgeoes
>>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Spanish mailing listhttp://lists.osgeo.org/mailman/listinfo/spanishhttp://es.osgeo.orghttp://twitter.com/osgeoes
>>>
>>>
>>>
>>> _______________________________________________
>>> Spanish mailing list
>>> http://lists.osgeo.org/mailman/listinfo/spanish
>>> http://es.osgeo.org
>>> http://twitter.com/osgeoes
>>>
>>
>>
>>
>> _______________________________________________
>> Spanish mailing listhttp://lists.osgeo.org/mailman/listinfo/spanishhttp://es.osgeo.orghttp://twitter.com/osgeoes
>>
>>
>>
>> _______________________________________________
>> Spanish mailing list
>> http://lists.osgeo.org/mailman/listinfo/spanish
>> http://es.osgeo.org
>> http://twitter.com/osgeoes
>>
>
>
>
> _______________________________________________
> Spanish mailing listhttp://lists.osgeo.org/mailman/listinfo/spanishhttp://es.osgeo.orghttp://twitter.com/osgeoes
>
>
>
>
> _______________________________________________
> Spanish mailing listhttp://lists.osgeo.org/mailman/listinfo/spanishhttp://es.osgeo.orghttp://twitter.com/osgeoes
>
>
>
> _______________________________________________
> Spanish mailing list
> http://lists.osgeo.org/mailman/listinfo/spanish
> http://es.osgeo.org
> http://twitter.com/osgeoes
>
------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.osgeo.org/pipermail/spanish/attachments/20150224/98ef9252/attachment-0001.html>
------------ pr�xima parte ------------
A non-text attachment was scrubbed...
Name: no disponible
Type: image/jpeg
Size: 34450 bytes
Desc: no disponible
URL: <http://lists.osgeo.org/pipermail/spanish/attachments/20150224/98ef9252/attachment-0002.jpe>
------------ pr�xima parte ------------
A non-text attachment was scrubbed...
Name: no disponible
Type: image/jpeg
Size: 38723 bytes
Desc: no disponible
URL: <http://lists.osgeo.org/pipermail/spanish/attachments/20150224/98ef9252/attachment-0003.jpe>
More information about the Spanish
mailing list