2012-02-27 14 views
8

मैं गूगल मैप्स के साथ एक भू एप्लिकेशन बना रहा हूं और मैं 2 निर्देशांकों के रूप में बॉक्स बाउंडिंग प्राप्त करें:GeoDjango, दप बॉक्स

  • उत्तर पूर्वी
  • दक्षिण पश्चिम

मेरे पास है प्वाइंटफिल्ड के साथ एक मॉडल।

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() 

मैं सभी जगहों को बाउंडिंग बॉक्स के भीतर कैसे प्राप्त कर सकता हूं?

उत्तर

6

यह मानते हुए कि "2 निर्देशांक" एक्स, वाई tuples, उदाहरण के लिए कर रहे हैं:

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) 

ज्यामिति, spatial lookup का उपयोग करके अपने प्लेस रिकॉर्ड पूछें:

from django.contrib.gis.geos import Polygon 

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

धन्यवाद, यह काम करता है, लेकिन xmin और ymin एक ही tuple से नहीं होना चाहिए? (xmax/ymax के साथ) –

+6

['' 'स्थानिक 'लुकअप] नहीं होना चाहिए (https://docs.djangoproject.com/en/1.5/ref/contrib/gis/geoquerysets/#contained)? – borges

+0

बोर्गेस से सहमत हैं। "ऑब्जेक्ट्स। फिल्टर (पॉली__ कंटेनर)" बाध्यकारी बॉक्स के भीतर पॉली फ़ील्ड के साथ सभी ऑब्जेक्ट्स को खोजने के लिए सही लुकअप है। अन्यथा इस जवाब में मुझे 9 0% मिल गया! –

5

@ टायलर का जवाब गलत है कई तरीकों से। सही कोड होगा:

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) 
संबंधित मुद्दे