Python 如何在博克绘制纬度和经度

Python 如何在博克绘制纬度和经度,python,maps,bokeh,Python,Maps,Bokeh,我在博克创建了一个图形,其中X轴和Y轴标签显示纬度和经度坐标,但使用的是WMTS平铺地图,当然使用墨卡托投影。我认为Bokeh进行了某种转换,因为他们在文件中说: 还请注意,将x_axis_type=“mercator”和y_axis_type=“mercator”传递到地物会生成带有纬度和经度标签的轴,而不是原始Web mercator坐标 () 但是,当我绘制由LAT和LON设置的标记时,它们忽略X轴和Y轴比例,而是根据墨卡托比例绘制 title = "test" mercator_ext

我在博克创建了一个图形,其中X轴和Y轴标签显示纬度和经度坐标,但使用的是WMTS平铺地图,当然使用墨卡托投影。我认为Bokeh进行了某种转换,因为他们在文件中说:

还请注意,将x_axis_type=“mercator”和y_axis_type=“mercator”传递到地物会生成带有纬度和经度标签的轴,而不是原始Web mercator坐标 ()

但是,当我绘制由LAT和LON设置的标记时,它们忽略X轴和Y轴比例,而是根据墨卡托比例绘制

title = "test"

mercator_extent = dict(start=-20000000, end=20000000,bounds=None)

# create a tile source
tile_options = {}
tile_options['url'] = 'http://tile.stamen.com/watercolor/{z}/{x}/{y}.jpg'
tile_options['attribution'] = """
    Map tiles by <a href="http://stamen.com">Stamen Design</a>, under
    <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a>.
    Data by <a href="http://openstreetmap.org">OpenStreetMap</a>,
    under <a href="http://www.openstreetmap.org/copyright">ODbL</a>.
    """

mq_tile_source = WMTSTileSource(**tile_options)

source = ColumnDataSource(data=OrderedDict(lat=([50]), lon=([50])))

x_range= Range1d(**mercator_extent)
y_range= Range1d(**mercator_extent)

plot = figure(title='printed line on map',
              tools= "pan,wheel_zoom",
              x_range=x_range,
              x_axis_type="mercator",
              y_axis_type="mercator",
              y_range=y_range,
              sizing_mode = 'stretch_both')#create a figure

plot.add_tile(mq_tile_source)#add the map

plot.circle(source=source,x='lon',y='lat',line_color ='red')

output_file("file.html")
save(plot)
title=“测试”
墨卡托范围=dict(开始=-20000000,结束=20000000,边界=无)
#创建平铺源
tile_选项={}
平铺选项['url']='http://tile.stamen.com/watercolor/{z} /{x}/{y}.jpg'
平铺选项['attribute']=“”“
按贴图平铺,在
.
数据来源:,
在下面
"""
mq_tile_source=WMTSTileSource(**tile_选项)
source=ColumnDataSource(data=OrderedDict(lat=([50]),lon=([50]))
x_范围=范围1D(**墨卡托范围)
y_范围=范围1D(**墨卡托范围)
绘图=图形(标题=‘地图上的打印线’,
tools=“平移、旋转和缩放”,
x_范围=x_范围,
x_轴类型=“墨卡托”,
y轴类型=“墨卡托”,
y_范围=y_范围,
大小调整模式=‘拉伸’#创建一个图形
plot.add_tile(mq_tile_source)#添加地图
圆图(源=源,x='lon',y='lat',线颜色='红色')
输出文件(“file.html”)
保存(绘图)
我的印象是,设置X轴和Y轴=“墨卡托”我的X轴和Y轴标签显示为纬度和经度,因此我的标记应相应地与轴相对。换句话说,根据上面的例子,我应该有一个能观察X和Y轴的标记,但我没有

下图显示了输出;悬停工具显示我的数据为50 LAT和LON,因此我希望标记位于我手动绘制紫色斑点的位置,但它绘制的几乎是死点


有什么想法吗?

我会回答我自己的问题

标签为LAT和LNG,但基础图为墨卡托坐标

通过将带有LAT和Lon列的DF传递到以下函数,可以将LAT/LNG转换为Mercator:

def wgs84_to_web_mercator(df, lon="LON", lat="LAT"):

      k = 6378137
      df["x"] = df[lon] * (k * np.pi/180.0)
      df["y"] = np.log(np.tan((90 + df[lat]) * np.pi/360.0)) * k

      return df

我会回答我自己的问题

标签为LAT和LNG,但基础图为墨卡托坐标

通过将带有LAT和Lon列的DF传递到以下函数,可以将LAT/LNG转换为Mercator:

def wgs84_to_web_mercator(df, lon="LON", lat="LAT"):

      k = 6378137
      df["x"] = df[lon] * (k * np.pi/180.0)
      df["y"] = np.log(np.tan((90 + df[lat]) * np.pi/360.0)) * k

      return df