我刚刚使用GeoDjango安装了PostGIS。一切都很好,但现在我有一个问题,无法找到原因。
我有这样的模特:
from django.contrib.gis.db import models
class Shop(models.Model):
name = models.CharField(max_length=80)
point = models.PointField(null=True, blank=True)
objects = models.GeoManager()
我指出这个位置(49.794254,9.927489)。然后我创建一个像这样的点:
pnt = fromstr('POINT(50.084068 8.238381)')
这些点之间的距离应该约为125公里,但是当我这样做时:
results = Shop.objects.distance(pnt)
print results[0].distance.km
我的结果总是超过60公里,所以返回190公里!我的两个积分的SRID都是4326 ...可能有问题吗?
也许是另一个有趣的事实,当我这样做时:
pnt.distance(shop.point)
它返回1.713790 ...结果。
我做错了什么?我可以选择使用python + django吗?如果有更好的解决方案,我就不需要使用PostGIS。
希望你能帮助我!
克里斯
答案 0 :(得分:3)
我刚刚在postgis中运行了此查询:
select round(CAST(ST_Distance_Sphere(ST_GeomFromText('POINT(49.794254 9.927489)',4326), ST_GeomFromText('POINT(50.084068 8.238381)',4326)) As numeric)/1000.0,2) as distance_km;
distance_km
-------------
190.50
结果实际上是190.50,所以你的190公里结果似乎没有错误
与这个令人敬畏的page相同的结果,有一个如何计算这个距离的简要说明。
1.713790 ...结果似乎与srid的单位相同,换句话说,这个数字不是以米为单位。
修改强> 哦,我刚刚看到你的问题,你错位了纬度和经度,在WKT格式中,经度首先出现,所以真正的查询应该是:
select round(CAST(ST_Distance_Sphere(ST_GeomFromText('POINT(9.927489 49.794254)',4326), ST_GeomFromText('POINT(8.238381 50.084068)',4326)) As numeric)/1000.0,2) as distance_km;
distance_km
-------------
125.10
因此应该像这样创建点
POINT(9.927489 49.794254)
POINT(8.238381 50.084068)