GeoDjango Bounding Box Filter с верхними и нижними координатами

Я создаю приложение GEO с Google Maps и получаю ограничительную рамку в виде двух координат: вверху слева (top_lat, top_long) и внизу справа (bot_lat, bot_long)

У меня есть модель с PointField.

from django.contrib.gis.db import models

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

    location        = models.PointField()

Создайте кортеж ограничивающей рамки:

    bbox = (top_lat,top_long, bot_lat, bot_long)
    geom = Polygon.from_bbox(bbox)

Я использую геометрию ограничивающей рамки:

    shops = Shop.objects.filter(location__bbcontains=geom)

Но не найти никаких координат, хотя какие-то координаты есть. Пожалуйста, помогите мне решить проблемы. Спасибо


person rongon    schedule 19.06.2014    source источник


Ответы (2)


Вы должны использовать поиск «внутри»:

shops = Shop.objects.filter(location__within=geom)
person mikhail    schedule 18.04.2018

Ваш фильтр неверен.

location__bbcontains=geom означает, что ограничивающая рамка поля геометрии (местоположение, то есть точка) должна содержать созданную вами ограничивающую рамку (геометрия, то есть многоугольник). И это в значительной степени неверно каждый раз, поскольку ваш многоугольник больше, чем bbox для одной точки.

Вы хотите иметь: location__inside=geom, который возвращает местоположения, которые находятся внутри geom.

person jtiai    schedule 19.06.2014