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)
我失败的尝试:
我考虑过对 1 英里东点 进行硬编码,但由于
到地球的曲率。每度变化的英里数。
Copius 谷歌搜索 SO 和地理信息交换。我假设我找不到术语?
- Python 3.6
- Django 1.11
您可以使用 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
。当然,这些必须相同。
否则这是一个很好的答案。谢谢。
给定一个点 (django.contrib.gis.geos.Point) 我如何找到距该点对象以东 1 英里的另一个点?
(A) ---[ 1 mile ]---> (B)
我失败的尝试:
我考虑过对 1 英里东点 进行硬编码,但由于 到地球的曲率。每度变化的英里数。
Copius 谷歌搜索 SO 和地理信息交换。我假设我找不到术语?
- Python 3.6
- Django 1.11
您可以使用 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
。当然,这些必须相同。
否则这是一个很好的答案。谢谢。