2016-06-12 10 views
0

GeoDjangoを使用してPointFieldにlat/lonを格納し、次に2つのPointFieldの距離をキロメートルで照会しようとしています。距離計算で地理的距離ではなく幾何学的距離が返されるように機能していないものがあります。私はgeography=Trueをモデルに使用していますが、それは役に立たないようです。私はpostgispostgresqlGeoDjango-lon/lat PointFields distanceは地理の代わりにジオメトリを使用しています

モデルを使用しています:

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) 

出力:これは代わりの2点間だけ幾何学的距離を返して

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

地理的距離。私はどのように私は回転楕円体でKMsの距離を返すためにこれを得ることができるかのためのアドバイスを誰も持っていますか?

ありがとうございます!

答えて

0

ドキュメントを読む私はGEOSGeometryクラスのこの距離計算がSRIDを尊重しないことを発見しました。これはPostGISデータベースが直接提供するものとは異なります。

距離を計算する方法がdistanceのPythonライブラリgeopyを使用しました。

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

残念ながら、私はまだDjangoのGISライブラリを使用して、2つのPoint Sとの距離計算を行う方法を見つけ出すことはできません。

関連する問題