2016-06-12 48 views
0

我試圖使用GeoDjango在PointField中存儲緯度/經度,然後查詢以公里爲單位的兩個PointField之間的距離。有些東西不能使距離計算返回幾何距離而不是地理距離。我在模型中使用geography=True,但似乎沒有幫助。我使用postgispostgresqlGeoDjango - lon/lat PointFields距離使用的是幾何學而不是地理學

型號:

from django.contrib.gis.db import models 

class Customer(models.Model): 
    location = models.CharField(max_length=100) 
    gis_location = models.PointField(u"longitude/latitude", 
            geography=True, 
            blank=True, 
            null=True) 

測試:

from django.contrib.gis.geos import Point 

# some set up 

customer1.gis_location = Point(-79.3, 43.6) 
print('Customer 1:', customer1.gis_location) 

customer2.gis_location = Point(-89.2, 48.4) 
print('Customer 2:', customer2.gis_location) 

distance = customer1.gis_location.distance(customer2.gis_location) 
print('Distance: ', distance) 

輸出:

Customer 1: SRID=4326;POINT (-79.2999999999999972 43.6000000000000014) 
Customer 2: SRID=4326;POINT (-89.2000000000000028 48.3999999999999986) 
Distance: 11.002272492535353 

這是隻返回兩個點,而不是之間的幾何距離地理距離。有沒有人有任何建議,我怎麼能得到這個返回球體的KM距離?

謝謝!

回答

0

通讀文檔我發現GEOSGeometry類中的距離計算不考慮SRID,並且不同於直接由PostGIS數據庫提供的距離計算。

我使用了python libray geopy,它提供了用於計算距離的distance方法。

from geopy.distance import distance as geopy_distance 
geopy_distance(customer1.gis_location, customer2.gis_location).kilometers 

不幸的是我仍然無法弄清楚如何使用Django的GIS庫做一個距離計算有兩個Point秒。

相關問題