Jestem nieco zdezorientowany, co powinienem ustawić moją wartość SRID w GeoDjango PointField, aby zachować dokładność w kontekście adresów geokodowanych za pomocą map Google api do współrzędnych i odległości zapytanych przez django-postgis?GeoDjango, jakiego identyfikatora SRID użyć do interfejsu PointField z interfejsem API Map Google V3?
Im coraz mieszane opinie czytania wątków wokół sieci i przepływu stackover i jestem pewien, co robić. Jak widzisz, moja aplikacja używa geopii z apikcjami google maps do geokodowania adresu. Teraz moje pole współrzędnych nie ma zestawu SRID, którego domyślna wartość to 4326 (EPSG: 4326). Teraz najwyraźniej widzi ziemię jako kulę, a nie płaską powierzchnię.
Zgodnie z odpowiedzią na pytanie następujące rzeczy takie jak google maps użyciu EPSG (3857), który podobno ma SRID z 900913. https://gis.stackexchange.com/questions/48949/epsg-3857-or-4326-for-googlemaps-openstreetmap-and-leaflet
Czy to oznacza, należy ustawić mój SRID do 900913? Wszystkie współrzędne mojego modelu restauracji są zapisywane w tej samej metodzie, co poniżej, przy użyciu geokodera. Zakładam, że tak.
Teraz jest to miejsce, w którym zostanę odrzucony. Poniższy samouczek: http://invisibleroads.com/tutorials/geodjango-googlemaps-build.html używa pola punktowego z ich SRID ustawionym na 4326 (domyślnie), a ich punkty znacznikowe wyglądają idealnie na mapach google.
Obecnie moje zapytania są przyzwoicie dokładne, ale nadal wydaje się trochę nie tak.
Pomoc jest doceniana, dzięki!
from geopy.geocoders import GoogleV3
from django.contrib.gis.geos import *
from django.contrib.gis.measure import D
geo = GoogleV3()
def home_page(request):
distance = 3680
address, coordinates = geo.geocode('Swanston Street, Melbourne Australia')
ref_location = Point(coordinates)
query = Restaurant.objects.filter(restaurant_location__distance_lte=(ref_location, D(m=distance))).distance(ref_location).order_by('distance')
return render(request, 'swings/home.html', {'restaurants': query})
Restauracja model
class Restaurant(models.Model):
name = models.CharField(max_length=25, blank=False)
user = models.ForeignKey(User)
address = models.CharField(max_length=50, blank=False)
restaurant_location = models.PointField(null=False, blank=False)
objects = models.GeoManager()
def __str__(self):
return self.name
to było bardzo pomocne. Lekcja historii rzeczywiście pomogła wyjaśnić sprawę. Dzięki! – user3739703
Czy to oznacza również, że powinienem użyć 4326 dla punktów zwróconych przez API wyszukiwania? – bigblind
@bigblind, przepraszam, który interfejs API wyszukiwania? –