代码之家  ›  专栏  ›  技术社区  ›  MistyD Harish Kumar Kailas

计算两点域之间的距离-为什么我的结果不正确?

  •  1
  • MistyD Harish Kumar Kailas  · 技术社区  · 6 年前

    我试图计算两个地点之间的距离,以英里为单位,但我得到的结果是不正确的。

    website 我得到的距离以英里为单位 0.055 . 下面是我代码中的详细信息

    PointField A : (-122.1772784, 47.7001663)
    PointField B : (-122.1761632, 47.700408)
    Distance : 0.001141091551967795
    

    Distance: 0.055 miles
    

    这是我计算距离的方法。

    这是我的模型

    class modelEmp(models.Model):
           user                = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
           location            = models.PointField(srid=4326,max_length=40, blank=True, null=True)  
           objects             = GeoManager() 
    

     result = modelEmpInstance.location.distance(PointFieldBLocation)
       where result = 0.001141091551967795
    

    关于我在这里可能做错了什么,以及为什么我的结果与网站不同,有什么建议吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   John Moutafis Milani Igor    6 年前

    你的计算没有错,但结果是正确的 EPSG:4326 的单位,即 degrees . 为了计算所需单位的距离,我们需要执行以下操作:

    1. 将点转换为一个EPSG meter 单位。

      • EPSG:3857 (但结果将是 0.08104046068988752mi ).
      • 如果你 不过,要注意计算的准确性,您需要找到一个适合您所在位置的带有仪表单位的EPSG。由于您的点位于西雅图地区周围,因此适当的EPSG是 32148 .
    2. 创建 Distance

    3. 最后,将其转换为 miles :

      from django.contrib.gis.measure import Distance
      
      result = Distance(
          m = modelEmpInstance.location.transform(
              32148, clone=True
          ).distance(PointFieldBLocation.transform(32148, clone=True)
      )
      print(
          'Raw calculation: {}\nRounded calculation: {}'
          .format(result.mi, round(result.mi, 2)
      )
      

      这将打印:

      Raw calculation: 0.0546237743898667 
      Rounded calculation: 0.055