Python 有没有办法在博克绘制一条非圆弧?
我正在Bokeh进行飞行轨迹数据可视化,我想知道是否有更精确的方法来绘制圆弧。使用两个地理位置之间的大圆导航方程,我可以找到一个中点,目前我正在使用弧形图示符绘制一个由飞行路径的点(起点、中点、终点)定义的圆,起点和终点角度是两个机场的位置 它适用于短路线,但靠近极点的很长路线会变得非常扭曲,弧线看起来不正确。这是由于Bokeh在CartodBPositon地图中使用了Web Mercator标准投影 我还可以从大圆导航方程中fid初始标题和最终标题。所以我的基本问题是,我想做一些类似的事情:Python 有没有办法在博克绘制一条非圆弧?,python,python-3.x,bokeh,Python,Python 3.x,Bokeh,我正在Bokeh进行飞行轨迹数据可视化,我想知道是否有更精确的方法来绘制圆弧。使用两个地理位置之间的大圆导航方程,我可以找到一个中点,目前我正在使用弧形图示符绘制一个由飞行路径的点(起点、中点、终点)定义的圆,起点和终点角度是两个机场的位置 它适用于短路线,但靠近极点的很长路线会变得非常扭曲,弧线看起来不正确。这是由于Bokeh在CartodBPositon地图中使用了Web Mercator标准投影 我还可以从大圆导航方程中fid初始标题和最终标题。所以我的基本问题是,我想做一些类似的事情:
m = figure()
m.non_circular_arc(start_x, start_y, start_angle, mid_x, mid_y, end_x, end_y, end_angle)
Bokeh中是否存在这种类型的曲线?Bokeh支持使用
bezier
glyph方法绘制三次Bézier曲线:
或者是二次曲线,如果足够的话 从到开始,我设计了这个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
其中,输入为四倍(以度为单位),用于描述
大弧的起点和终点,输出为
用于描述标准化数据的经度函数(以度为单位)
(-1z = make_z(45, 10, 30, 100)
print(z(10), z(100))
# 0.7071067811865475 0.5000000000000003
你能在这里发布一个输出样本吗?或者演示想要的结果看看