python - GeoDjango:将坐标沿给定方向移动固定距离(例如,将点向东移动一英里)
问题描述
给定一个点(django.contrib.gis.geos.Point),我如何在该点对象以东 1 英里处找到另一个点?
(A) ---[ 1 mile ]---> (B)
我失败的尝试:
我考虑过尝试对1 英里东点进行硬编码,但由于地球的曲率。每度变化的英里数。
Copius 在 SO 和 Geo Info Exchange 上进行谷歌搜索。我想我找不到术语?
- 蟒蛇 3.6
- 姜戈 1.11
解决方案
您可以使用 pyproj 的Geod 类来完成此操作。
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)
推荐阅读
- excel - Excel 2013 VBA:复制粘贴公式从复制的单元格中复制值(除了公式)而不是重新计算
- javascript - URL 编码是否足以用于 href 属性以防止 XSS?
- javascript - Mongoose 查询生成器。或未返回预期结果
- c# - 是否需要在数据库中保留刷新令牌
- java - 球衣。带数组的 POJO 返回 415 不受支持的媒体类型
- c# - SqlDataAdapter 返回零行
- ios - 在 Swift 中解压缩 Base64 编码的图像字节
- ruby - 将 Ruby 块中的变量分配给更高的范围
- ruby-on-rails - 输入后Rails覆盖数据库中的值
- docker - 在每次部署中,构建一个包含应用程序的新 docker 映像而不只是更新应用程序有什么优势?