[pyar] Buscar coordenadas dentro de poligono
Andrés Ramírez
andres.ramirez.miori en gmail.com
Mar Mar 6 09:58:03 -03 2018
Cuidado que la funcion de contains sobre GIS de la base de datos, puede que
te retorne true, si el punto se encuentra dentro del minimo rectangulo que
contiene tu poligono, al menos eso hace MySql la funcion MBR_contains
<https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-mbr.html>.
Por lo tanto te puede devolver true para puntos que en verdad no se
encuentra dentro de tu poligono, la funcion de GDal, te respondería mas
precisamente. El siguiente es una porción de codigo que tengo para buscar
todas las areas que contienen un pto, es facilmente de traladar a tu
pregunta
from django.contrib.gis.gdal import OGRGeometry
def areas_por_punto(qs, punto):
"""Retorna areas que contienen un pto
Keyword arguments:
qs -- QuerySet con el conjunto de areas donde se desea buscar la
pertenencia del pto
punto -- Point con latitud y longitud (django.contrib.gis.geos Point)
"""
areas_prefiltro = qs.filter(geom__contains=punto).all()
ret = []
for area in areas_prefiltro:
# Si el area contiene realmente el pto se agrega como respuesta
area_gdal = OGRGeometry(area.geom.wkt)
if area_gdal.contains(OGRGeometry(punto.wkt)):
ret.append(area)
return ret
el pto en este caso esta construido de la siguiente forma
punto = Point(float(domicilio.longitud), float(domicilio.latitud))
para las librerias GIS de django tenes que ver aca:
https://docs.djangoproject.com/en/2.0/ref/contrib/gis/install/geolibs/
en si es:
2018-03-06 9:46 GMT-03:00 Marcos Dione <mdione en grulic.org.ar>:
> On Tue, Mar 06, 2018 at 09:37:00AM -0300, Federico Jurio wrote:
> > Bruno,
> >
> > Podés resolverlo con PostGIS usando la función ST_Contains
> > <https://postgis.net/docs/ST_Contains.html>.
>
> o usaría shapely, así no dependé de postgis. ahora, si ya lo tenés
> instalado, capaz es lo mejor, pero vas a tener que bajar el polígino de
> gmaps (nidea cómo, supongo hay una API) y convertirlo en algo que postgis
> pueda usar (WKB o similar). para eso lo mejorcito es shapely, así que
> supongo qu terminarás con eso.
>
> --
> (Not so) Random fortune:
> The technology industry sees itself as in rebellion against corporate
> America: not corrupt, not buttoned-up, not empty. In fact, a tech company
> can be as corrupt, soulless, and empty as any corporation, but being
> unprofessional helps us maintain the belief that we are somehow different
> from Wall Street.
> -- Shanley Kane
> _______________________________________________
> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> Sitio web: http://www.python.org.ar/
>
> Para administrar la lista (o desuscribirse) entrar a
> http://listas.python.org.ar/listinfo/pyar
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20180306/db3c0250/attachment.html>
Más información sobre la lista de distribución pyar