Geodjango atstumas tarp dviejų taškų atrodo neteisingas

We are searching data for your request:
Forums and discussions:
Manuals and reference books:
Data from registers:
Upon completion, a link will appear to access the found materials.
Noriu tau kai ką parodyti. Aš naudoju „django + postgis“ ir patyriau neteisingas atstumo vertes tarp dviejų taškų.
Tai mano modelis:
klasės vieta (modeliai.Modelis): pavadinimas = modeliai.CharField (max_length = 255) platuma = models.FloatField (tuščias = True, null = True, verbose_name = "Platuma") longitude = models.FloatField (blank = True, null = = Tiesa, verbose_name = "Ilguma") vieta = modeliai.PointField (tuščias = True, null = Tiesa) objektai = modeliai.GeoManager () def save (self, * args, ** kwargs): self.location = Point (self. geografinė platuma, ilgis. ilgis) super (vieta, savastis). išsaugoti (* args, ** kwargs)
Tai yra duomenys:
bogota = Vieta (vardas = 'bogota', platuma = "4.61779093242", ilguma = "- 74.0893133545") bogota.save () barranquilla = Vieta (vardas = 'barranquilla', platuma = "10.9731710819", ilguma = "- 74.8020513916" ) barranquilla.save ()
Tai yra užklausa:
ls = Location.objects.distance (pelkės vieta) .order_by ('atstumas') l ls: l.name; l.atstumas.km
Tai yra išvestis:
Išėjimas [29]: u'BOGOTA 'Išėjimas [29]: 0.0 Išėjimas [29]: u'BARRANQUILLA' Išėjimas [29]: 205.27667079004999
Bet Barankilja yra ~ 700 km nuo Bogotos miesto, žiūrėkite čia.
Taigi, kas yra negerai? SRID yra numatytosios vertės.
Skambinant buvo pakeista platumos ir ilgumos tvarka
savarankiška vieta = taškas (sav. platuma, sav. ilgis)
Taip yra todėl, kad Taškai tikisi, kad x koordinatė (ilguma) bus pirmasis argumentas.
Iš tiesų, atstumas tarp taškų platuma -74 laipsniai ir ilgumos 4,6 ir 11,0 laipsnių kampu yra maždaug 206 kilometrai.