NE,SW框内的GeoDjango

FrE*_*mAn 9 python postgis geodjango

我正在使用Google地图创建一个地理应用程序,我接收边界框作为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()
Run Code Online (Sandbox Code Playgroud)

我如何执行查询以获取边界框内的所有位置?

Fil*_*lly 12

@ Tyler的答案在很多方面都是错误的.正确的代码是:

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)
Run Code Online (Sandbox Code Playgroud)


小智 8

假设"2坐标"是x,y元组,例如:

ne = (50.0, -90)
sw = (45.5, -95)
Run Code Online (Sandbox Code Playgroud)

您可以提取坐标并创建边界框元组:

xmin = sw[0]
ymin = ne[1]
xmax = sw[1]
ymax = ne[0]
bbox = (xmin, ymin, xmax, ymax)
Run Code Online (Sandbox Code Playgroud)

使用边界框几何体,使用空间查找查询Place记录:

from django.contrib.gis.geos import Polygon

geom = Polygon.from_bbox(bbox)
queryset = Place.objects.filter(poly__contained=geom)
Run Code Online (Sandbox Code Playgroud)

  • 不应该是[`contains`空间查询](https://docs.djangoproject.com/en/1.5/ref/contrib/gis/geoquerysets/#contained)? (6认同)
  • 谢谢,这个工作,但不应该xmin和ymin来自同一个元组?(与xmax/ymax相同) (3认同)
  • 不是`location__contained`? (2认同)
  • 如果是点地理类型,则必须使用“ location__coveredby” (2认同)