Verificar si un punto esta dentro de un poligono en postgis

- 1 min

Si Postgis no existiera esto seria un poco complicado,  ok.. la tarea es la siguiente en mi base de datos tengo unas cercas que no son mas que unos poligonos, y necesitaba saber si el punto que lanzaba desde un gps al sevidor  esta dentro de el poligono o fuera, Postgis nos da una funcion llamanda ST_CONTAINS  que nos permite ver si un punto esta dentro de un poligono, esta funcion recibe dos parametros que son del tipo GEOMETRY :

ST_CONTAINS(geometry, geometry)

el primer parametro es el poligono y el segundo es el punto. y listo ya sabemos si el punto esta dentro del poligono, ok ahora tengo un ejemplo el cual es una funcion que  solo verifica si el punto enviado esta dentro de una geocerca ya almacenada en la base de datos (ojo que es un ejemplo hardcode) ya ustedes lo pueden modificar de acuerdo  a lo que necesitan:


CREATE OR REPLACE FUNCTION in_polygon()
-- retorna un booleano true si esta dentro y false si esta fuera
RETURNS boolean AS
$$
DECLARE
--se declara una variable que almacenara el poligono que se sacara de la base de datos
v_geom geometry;
-- la variable de respuesta
v_result BOOLEAN ;
BEGIN
-- se saca el poligono de la tabla geofence
v_geom := (SELECT geo.geom from geofence as geo where id_geofence = 18);
--y se usa la funcion de postgis
v_result := (SELECT ST_Contains(v_geom, GeomFromText('POINT(-65.9667 -17.474)',4326)));
RETURN v_result;
END;
$$
LANGUAGE plpgsql VOLATILE

ya ustedes pueden aumentar parametros a la funcion , condiciones, ect.

espero que les sirva

Yury Camacho

Yury Camacho

Android Developer & Mobile Technical Lead at Globant

comments powered by Disqus
rss facebook twitter github youtube mail spotify instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora