提问人:Denis Kotov 提问时间:11/15/2023 最后编辑:Denis Kotov 更新时间:11/15/2023 访问量:14
传单 JavaScript 方位与 Python 计算不匹配
Leaflet JavaScript bearings do not match Python calculations
问:
在我的应用程序中,我使用方位角来检测信号交叉点。 我使用以下 python 代码来检测轴承的交叉点:
import nvector as nv
def bearing_intersect_nvector(point_0, bearing_0, point_1, bearing_1):
point_a1 = nv.GeoPoint(point_0[0], point_0[1], degrees=True)
point_a2 = point_a1.displace(10, bearing_0, degrees=True)[0]
point_b1 = nv.GeoPoint(point_1[0], point_1[1], degrees=True)
point_b2 = point_b1.displace(10, bearing_1, degrees=True)[0]
path_a = nv.GeoPath(point_a1, point_a2)
path_b = nv.GeoPath(point_b1, point_b2)
point_c = path_a.intersect(path_b)
point_c = point_c.to_geo_point()
lat, lon = point_c.latitude_deg, point_c.longitude_deg
return Coord(lon, lat)
在 JavaScript 上,我使用以下代码作为绘制方位线的第二个线点:
const end_x = (startCoords as LatLng).lng + length * Math.cos(-(angle - 90) * Math.PI / 180);
const end_y = (startCoords as LatLng).lat + length * Math.sin(-(angle - 90) * Math.PI / 180);
但问题是,使用 JavaScript 代码绘制的方位角使用 and 作为端坐标与使用上述 python 代码绘制的方位角计算交点不匹配。end_x
end_y
我在以下 python 代码中遇到了同样的问题,它与上面的 JavaScript 方位计算匹配,但方位与 nvector 计算不匹配。
import math
from geojson import LineString, Feature, Point
from turfpy.misc import line_intersect
def bearing_intersect_turfpy(point_0, bearing_0, point_1, bearing_1):
def add_bearing(coord, angle):
length = 1
end_lat = coord["coordinates"][0] + length * math.sin(-(angle - 90) * math.pi / 180)
end_lon = coord["coordinates"][1] + length * math.cos(-(angle - 90) * math.pi / 180)
azimuth = Feature(geometry=LineString([coord, Point((end_lat, end_lon))]))
return azimuth
point_0 = Point((point_0[0], point_0[1]))
point_1 = Point((point_1[0], point_1[1]))
bearing_0 = add_bearing(point_0, bearing_0)
bearing_1 = add_bearing(point_1, bearing_1)
point_2 = line_intersect(bearing_0, bearing_1)["features"][0]["geometry"]["coordinates"]
return Coord(point_2[1], point_2[0])
我想知道为什么??哪种计算是正确的?? 根据我的经验,nvector 实现比计算的简单几何效果要好得多,但我不确定为什么......
答: 暂无答案
评论