【问题标题】:GeoDjango with PostGIS - distance calculation is wrong带有 PostGIS 的 GeoDjango - 距离计算错误
【发布时间】:2020-10-06 01:04:39
【问题描述】:

我正在尝试将 GeoDjango 与 PostGIS 一起使用以测量距离,但我得到的结果偏离了 20%。

为了测试,我选择了海洋中的 2 个随机点:(40.607532, -72.829369) 和 (40.366040, -73.556856)。

为了获得预期的结果,我使用了 2 种不同的方法:

  • 谷歌地图“测量距离”功能。
  • 我自己的python代码使用大弧距计算。

两者都给我 41.71 英里的相同结果。 Django 给了我 50.49。

这是我的代码:

# models.py

from django.contrib.gis.db import models

class Location(models.Model):
    point = models.PointField(null=True)

然后从 django shell:

>>> from loc.models import Location
>>> from django.contrib.gis.geos import Point
>>> from django.contrib.gis.db.models.functions import Distance
>>> loc = Location(point=Point(40.366040, -73.556856, srid=4326))
>>> loc.save()
>>> pnt = Point(40.607532, -72.829369, srid=4326)
>>> qs = Location.objects.annotate(distance=Distance('point', pnt))
>>> qs[0].distance.mi
50.4954671273202

【问题讨论】:

    标签: python django postgis geodjango


    【解决方案1】:

    好的。我知道了。 lat 和 lng 颠倒了。 Point 应该将 lng 作为第一个参数,将 lat 作为第二个参数。谷歌地图正好相反。

    切换后,TADA...

    >>> qs[0].distance.mi
    41.7114806274482
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-02
      • 2014-08-28
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      相关资源
      最近更新 更多