3d distance calculations with GeoDjango

自作多情 提交于 2019-11-29 11:51:21

Let's break the problem down:

  1. In the Distance class documentation, we can read the following:

    Accepts two geographic fields or expressions and returns the distance between them, as a Distance object.

    So the Distance(p1, p2) returns a Distance object.
    If you do:

    p1 = Instrument.objects.get(pk=151071000).coordinates
    p2 = Instrument.objects.get(pk=151071008).coordinates
    d = Distance(m=p1.distance(p2))
    print d.m
    

    You will get the measurement in meters.

    I would stick with the annotate solution, which seems more solid! (opinionated response)

  2. Distance calculates the 2D distance between two point. In order to get a 3D calculation you need to create one yourself.
    You can have a look at my method from this question: Calculating distance between two points using latitude longitude and altitude (elevation)

    • Let polar_point_1 = (long_1, lat_1, alt_1) and polar_point_2 = (long_2, lat_2, alt_2)

    • Translate each point to it's Cartesian equivalent by utilizing this formula:

      x = alt * cos(lat) * sin(long)
      y = alt * sin(lat)
      z = alt * cos(lat) * cos(long)
      

      and you will have p_1 = (x_1, y_1, z_1) and p_2 = (x_2, y_2, z_2) points respectively.

    • Finally use the Euclidean formula:

      dist = sqrt((x_2-x_1)**2 + (y_2-y_1)**2 + (z_2-z_1)**2)
      
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!