有没有办法在波基画一条非圆弧?

2024-04-27 17:54:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在Bokeh进行飞行轨迹数据可视化,我想知道是否有更精确的方法来绘制圆弧。使用两个地理位置之间的大圆导航方程,我可以找到一个中点,我目前正在使用弧形图示符绘制一个由飞行路径的点(起点、中点、终点)定义的圆,起点和终点角度是两个机场的位置。你知道吗

它适用于短路线,但是靠近两极的很长路线会变得非常扭曲,而且弧线看起来不太正确。这是由于Bokeh在CARTODBPOSITRON图中使用了webmercator标准投影。你知道吗

我也可以从大圆导航方程中确定首字母和末字母。所以我的基本问题是,我想做一些类似的事情:

m = figure()
m.non_circular_arc(start_x, start_y, start_angle, mid_x, mid_y, end_x, end_y, end_angle)

博基有这种东西吗?你知道吗


Tags: 数据方法轨迹可视化bokeh绘制地理位置start
2条回答

Bokeh支持使用bezierglyph方法绘制三次Bézier曲线:

https://docs.bokeh.org/en/latest/docs/reference/plotting.html#bokeh.plotting.figure.Figure.bezier

或者quadratic曲线,如果足够的话。你知道吗

this answer"How do great circles project on the mercator projection?"我设计了这个Python函数

def make_z(lat1, lon1, lat2, lon2):
    from math import degrees, radians, sin, sqrt
    from scipy.optimize import newton
    lat1, lon1, lat2, lon2 = map(radians, (lat1, lon1, lat2, lon2))
    z1, z2 = map(sin, (lat1, lat2))
    def find_z2(lon0):
        dd = (1-z1**2)*sin(lon1+lon0)**2/z1**2
        s = sin(lon2+lon0)
        return z2-s/sqrt(dd+s**2)
    lon0 = newton(find_z2, 0)
    dd = (1-z1**2)*sin(lon1+lon0)**2/z1**2
    def z(f):
        s = sin(radians(f)+lon0)
        return s/sqrt(dd+s**2)
    return z

其中输入是描述 大弧的起点和终点,输出为 描述标准化的经度(以度为单位)的函数 (-1<;z<;1)地图上的高度z。你知道吗

你是这样用的

z = make_z(45, 10,   30, 100)
print(z(10), z(100))
# 0.7071067811865475 0.5000000000000003

相关问题 更多 >