the*_*oid 3 python matplotlib matplotlib-basemap
我正在尝试学习 matplotlib 和映射函数 Basemap,并尝试在地图上绘制一个简单的经纬度坐标列表。但是,将底图坐标转换为简单的 x/y 坐标会在地图上疯狂地绘制点,我不知道为什么。我的代码如下:
locationData = parseFile(locationFile)
fig = plt.figure(figsize=(8,8))
m = Basemap(projection='merc', resolution='h',
llcrnrlat=49, llcrnrlon=-13.5,
urcrnrlat=59.5, urcrnrlon=4)
m.drawcoastlines()
m.drawmapboundary(fill_color='aqua')
m.fillcontinents(color='green', lake_color='aqua')
index=0
for entry in locationData:
lat = entry["latitudeE7"]/1E7
long = entry["longitudeE7"]/1E7
x,y = m(lat, long)
print("Plotting {} {} to x{} y{}".format(lat,long,x,y))
plt.plot(x,y, 'ok', markersize=20)
# break at 30 points for testing
if index>30: break
index+=1
plt.show()
Run Code Online (Sandbox Code Playgroud)
这是我从打印语句中得到的输出:
Plotting 52.------- 1.------- to x79364--.------- y-31476--.-------
Plotting 52.------- 1.------- to x79368--.------- y-31475--.-------
Plotting 52.------- 1.------- to x79362--.------- y-31471--.-------
Plotting 52.------- 1.------- to x79361--.------- y-31472--.-------
Plotting 52.------- 1.------- to x79360--.------- y-31475--.-------
Plotting 52.------- 1.------- to x79365--.------- y-31476--.-------
Plotting 52.------- 1.------- to x79361--.------- y-31476--.-------
...
Run Code Online (Sandbox Code Playgroud)
出于显而易见的原因,我对确切值进行了审查,但您可以看到,指向英国的 52°N 1°E 的预期值与英国的图表相差甚远。将地图扩展到整个地球显示它正在绘制马达加斯加北海岸附近的点。
我从 Google Location History 下载中获取坐标,然后将其除以 10^7,因为它们以整数形式存储。打印语句显示这些正在被正确解析。
我是 matplotlib 和底图的新手,正在 Windows 10 上运行 Python 3.6。有帮助吗?
编辑 - 发布我的旧代码我的错误
来自底图文档
使用参数 lon 调用 Basemap 类实例,lat 会将 lon/lat(以度为单位)转换为 x/y 地图投影坐标(以米为单位)。如果可选关键字 inverse 为 True(默认为 False),则执行从 x/y 到 lon/lat 的逆变换。
而不是x,y = m(lat, long)你因此需要
x,y = m(long, lat)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1538 次 |
| 最近记录: |