GeoDjango в поле NE, SW - PullRequest
       5

GeoDjango в поле NE, SW

9 голосов
/ 27 февраля 2012

Я создаю географическое приложение с Google Maps и получаю ограничивающий прямоугольник в виде 2 координат:

  • северо-восток
  • юго-запад

У меня есть модель с 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()

Как я могу выполнить запрос, чтобы получить все места внутри ограничительной рамки?

Ответы [ 2 ]

10 голосов
/ 12 мая 2015

@ Ответ Тайлера во многом неправильный.Правильный код будет:

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)
7 голосов
/ 28 февраля 2012

Предполагая, что "2 координаты" - это кортежи x, y, например:

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

Вы можете извлечь координаты и создать кортеж ограничительной рамки:

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

Используя геометрию ограничивающего прямоугольника, запросите ваши записи Place, используя пространственный поиск :

from django.contrib.gis.geos import Polygon

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