繁体   English   中英

GeoDjango + PostGIS计算错误的距离

[英]GeoDjango + PostGIS calculates wrong Distances

我刚刚用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。

希望你能帮我!

克里斯

我刚刚在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公里的结果似乎没有错

与这个令人敬畏的页面相同的结果,有一个如何计算这个距离的简要说明。

1.713790 ......结果似乎与srid的单位相同,换句话说,这个数字不是以米为单位。

编辑 Ooohh我刚刚看到你的问题,你错误地放置了lat和lon,在WKT格式中,Longitude首先出现,所以真正的查询应该是:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM