GeoDjango:在给定方向上将坐标移动固定距离(例如,将一个点向东移动一英里)

GeoDjango: Move a coordinate a fixed distance in a given direction (e.g. move a point east by one mile)

给定一个点 (django.contrib.gis.geos.Point) 我如何找到距该点对象以东 1 英里的另一个点?

(A) ---[ 1 mile ]---> (B)

我失败的尝试:


您可以使用 pyproj 的 Geod class 完成此操作。

from pyproj import Geod
geoid = Geod(ellps='WGS84')

def add_distance(lat, lng, az, dist):
    lng_new, lat_new, return_az = geoid.fwd(lon, lat, az, dist)
    return lat_new, lng_new
  • lng: 起始经度
  • lat: 起始纬度
  • az:方位角,运动的方向
  • dist:以米为单位的距离

因此,对于您的具体问题,您可以执行以下操作:

from django.contrib.gis.geos import Point

def move_point_mile_east(point):
    dist = 1609.34
    lat, lng = add_distance(point.y, point.x, 90, dist)
    return Point(lng, lat)

请注意,上面 roob 的回答似乎有错别字。在 add_distance 函数的定义中,使用了参数 lng,但随后在该函数的主体中使用了变量 lon。当然,这些必须相同。

否则这是一个很好的答案。谢谢。