2012-02-27 8 views
8

Estoy creando una aplicación de geo con Google Maps y la caja de delimitación que recibo como coordenadas: 2GeoDjango dentro de una caja de NE, SW

  • noreste
  • Suroeste

tengo un modelo con PointField.

from django.contrib.gis.db import models 

class Place(models.Model): 
    name   = models.CharField(max_length=200) 
    address   = models.CharField(max_length=200) 

    location  = models.PointField() 

¿Cómo podría hacer una consulta para obtener todos los lugares dentro del cuadro delimitador?

Respuesta

6

Suponiendo que el "2 coordenadas" son X, Y tuplas, por ejemplo:

ne = (50.0, -90) 
sw = (45.5, -95) 

Puede extraer las coordenadas y crear un cuadro de límite tupla:

xmin = sw[0] 
ymin = ne[1] 
xmax = sw[1] 
ymax = ne[0] 
bbox = (xmin, ymin, xmax, ymax) 

Uso del cuadro delimitador geometría, consulte los registros de su lugar con un spatial lookup:

from django.contrib.gis.geos import Polygon 

geom = Polygon.from_bbox(bbox) 
queryset = Place.objects.filter(poly__contained=geom) 
+3

Gracias, esto funciona, pero ¿no deberían ser xmin e ymin de la misma tupla? (lo mismo con xmax/ymax) –

+6

No debería ser la búsqueda espacial ['contained'] (https://docs.djangoproject.com/en/1.5/ref/contrib/gis/geoquerysets/#contained)? – borges

+0

De acuerdo con borges. "objects.filter (poly__contained)" es la búsqueda correcta para encontrar todos los objetos con el campo poli dentro del cuadro delimitador. De lo contrario, esta respuesta me consiguió el 90% allí! –

5

@ La respuesta de Tyler es incorrecta en Muchas maneras. El código correcto sería:

ne = (latitude, longitude) 
sw = (latitude, longitude) 

xmin=sw[1] 
ymin=sw[0] 
xmax=ne[1] 
ymax=ne[0] 
bbox = (xmin, ymin, xmax, ymax) 

from django.contrib.gis.geos import Polygon 
geom = Polygon.from_bbox(bbox) 
queryset = Place.objects.filter(poly__contained=geom) 
Cuestiones relacionadas