Bokeh地图绘制。将经度/纬度转换为X和Y。

3

我将尝试在bokeh中绘制一些圆形标记,使用Python和Stamen Toner地图。我有来自Google Map API的位置数据,其格式如下:

 latitude 41.552164 longitude 44.990961

但是,bokeh地图绘图得到的数据点是以X和Y坐标格式表示的。我该如何将这些纬度/经度坐标转换为X和Y坐标?
谢谢。

请看看这个链接是否能帮到你:https://dev59.com/xmQo5IYBdhLWcg3wKstr - Vinícius Figueiredo
1
我认为这个回答与我的问题接近,但并没有完全回答。他们谈论距离,而我只想知道如何将经纬度转换为x、y坐标。 - Nikoloz Mamisashvili
2个回答

5

你的问题有些模糊,不清楚你具体想要做什么。提供一个代码示例会更好地帮助得出更好的答案。

通常情况下,当试图绘制从在线来源获取的地理数据时,您将拥有使用坐标系统(WGS84)获取的数据,其中纬度是y轴,经度是x轴。 Bokeh可以通过在ColumnDataSource中正确指定名称来简单地绘制经度和纬度。

from bokeh.io import show
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure


longitude  = [44.990961]
latitude = [41.552164]

source = ColumnDataSource(data=dict(longitude=longitude, latitude=latitude))

p = figure(plot_width=400, plot_height=400)
p.circle(x='longitude', y='latitude', source=source)
show(p)

如果您的问题确实与数据的坐标转换有关,那么没有更多细节很难回答您的问题。我建议您查看https://en.wikipedia.org/wiki/Map_projection来了解地图投影。

如果您需要将经度/纬度坐标转换为不同的坐标系,则可以使用pyproj软件包。

import pyproj

project_projection = pyproj.Proj("+init=EPSG:4326")  # wgs84
google_projection = pyproj.Proj("+init=EPSG:3857")  # default google projection

longitude = [44.990961]
latitude = [41.552164]

x, y = pyproj.transform(google_projection, project_projection, longitude, latitude)

print(x, y)

Google投影参考:Google地图API v3投影?


如果您不想使用pyproj库,那么在纯Python中转换坐标实际上非常容易,可以参考这里的描述。 - Nick Crews

1
为了方便地将经纬度(EPSG:4326)转换为另一种投影方式(例如WebMercator EPSG:3857,众所周知此投影方式被谷歌地图使用),我建议结合shapely使用pyproj包实现,例如:
from functools import partial
from shapely.geometry import Point
from shapely.ops import transform
import pyproj

pnt = transform(
    partial(
        pyproj.transform,
        pyproj.Proj(init='EPSG:4326'),
        pyproj.Proj(init='EPSG:3857')), Point(44.990961, 41.552164))

print(pnt.x, pnt.y)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接