GeoDjango in einem NE, SW-Box

Ich schaffe eine Geo-App mit Google Maps und ich bekomme Bounding Box als 2 Koordinaten:

  • Nordöstlich
  • Südwesten

Ich habe ein Modell mit 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() 

Wie könnte ich eine Abfrage ausführen, um alle Plätze in der Begrenzungsbox zu bekommen?

2 Solutions collect form web for “GeoDjango in einem NE, SW-Box”

Angenommen, die "2 Koordinaten" sind x, y Tupel, zum Beispiel:

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

Sie können die Koordinaten extrahieren und ein Bounding-Box-Tupel erstellen:

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

Verwenden Sie die Begrenzungsbox-Geometrie, fragen Sie Ihre Platzdatensätze mit einer räumlichen Suche ab :

 from django.contrib.gis.geos import Polygon geom = Polygon.from_bbox(bbox) queryset = Place.objects.filter(poly__contained=geom) 

@ Tylers Antwort ist in vielerlei Hinsicht falsch. Der richtige Code wäre:

 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) 
Python ist die beste Programmiersprache der Welt.