我试图在散景图中绘制一些圆形标记,在stamer碳粉地图上绘制python。 我有谷歌地图api的位置,格式如下:
latitude 41.552164 longitude 44.990961
但散景图绘图以X和Y坐标格式获取数据点。 如何将这些纬度/经度坐标转换为X和Y?
提前谢谢。
答案 0 :(得分:4)
你的问题对于你究竟要做的事情有点含糊不清,而代码示例将有助于提供更好的答案。
通常在尝试绘制在线资源获取的地理数据时,您将拥有坐标系(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 map api v3 projection?
答案 1 :(得分:1)
为了轻松地从经度/纬度(EPSG:4326)转换为另一个投影(例如WebMercator EPSG:3857,由GoogleMaps AFAIK使用),我建议将pyproj
包与shapely
,例如:
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)