[Spanish] Triggers en PostGIS

Mikel m.ayesta at gislan.com
Tue Feb 24 07:58:33 PST 2015


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 
>> <mailto: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
>>>     <mailto: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
>>>>         <mailto: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 <mailto:m.ayesta en gislan.com>
>>>>             Tel.: 0034 943 304 255
>>>>             www.gislan.com <http://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 list
>>>>         http://lists.osgeo.org/mailman/listinfo/spanish
>>>>         http://es.osgeo.org
>>>>         http://twitter.com/osgeoes
>>>
>>>
>>>         _______________________________________________
>>>         Spanish mailing list
>>>         http://lists.osgeo.org/mailman/listinfo/spanish
>>>         http://es.osgeo.org
>>>         http://twitter.com/osgeoes
>>>
>>>
>>>
>>>
>>>     _______________________________________________
>>>     Spanish mailing list
>>>     http://lists.osgeo.org/mailman/listinfo/spanish
>>>     http://es.osgeo.org
>>>     http://twitter.com/osgeoes
>>
>>
>>     _______________________________________________
>>     Spanish mailing list
>>     http://lists.osgeo.org/mailman/listinfo/spanish
>>     http://es.osgeo.org
>>     http://twitter.com/osgeoes
>>
>>
>>
>>
>> _______________________________________________
>> Spanish mailing list
>> http://lists.osgeo.org/mailman/listinfo/spanish
>> http://es.osgeo.org
>> http://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/7fab7bfc/attachment-0001.html>
------------ 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/7fab7bfc/attachment-0002.jpe>
------------ 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/7fab7bfc/attachment-0003.jpe>


More information about the Spanish mailing list