2012-02-27 27 views
8

tôi là tạo ra một ứng dụng địa lý với Google Maps và tôi nhận được hộp bounding như 2 tọa độ:GeoDjango trong một NE, hộp SW

  • đông bắc
  • phía tây nam

Tôi có một mô hình với 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() 

Tôi làm cách nào để thực hiện truy vấn để nhận tất cả các địa điểm trong hộp giới hạn?

Trả lời

6

Giả sử rằng "2 tọa độ" là x, tuples y, ví dụ:

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

Bạn có thể trích xuất các tọa độ và tạo ra một tuple hộp bounding:

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

Sử dụng hộp bounding hình học, truy vấn hồ sơ Địa điểm của bạn bằng cách sử dụng số spatial lookup:

from django.contrib.gis.geos import Polygon 

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

Cảm ơn, điều này có hiệu quả, nhưng không nên xmin và ymin từ cùng một bộ? (cùng với xmax/ymax) –

+6

Không nên là [tra cứu không gian chứa '] (https://docs.djangoproject.com/en/1.5/ref/contrib/gis/geoquerysets/#contained)? – borges

+0

Đồng ý với borges. "objects.filter (poly__contained)" là tra cứu chính xác để tìm tất cả các đối tượng có trường poly trong hộp giới hạn. Nếu không câu trả lời này đã cho tôi 90% ở đó! –

5

@ Câu trả lời của Tyler là sai nhiều cách. Mã đúng sẽ là:

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) 
Các vấn đề liên quan