我希望使用纬度和经度而不是度数在曼哈顿地图(例如200m x 200m)投影上创建等距网格。我正在使用底图,但无法找到继续执行此任务的方法。这是投影代码。
m = Basemap(projection='mill',
llcrnrlat= 40.6968,
llcrnrlon= -74.0224,
urcrnrlat= 40.8964,
urcrnrlon= -73.8927,
resolution='h')
执行上述操作的最佳方法是什么,我还需要存储每个网格顶点的经度和纬度值。
答案 0 :(得分:0)
为了在地图上绘制数据,数据的坐标必须为 以地图投影坐标给出。调用底图类实例 使用lon参数,lat会将lon / lat(以度为单位)转换为x / y 地图投影坐标(以米为单位)。逆变换是 如果可选关键字inverse设置为True,则完成。
文档页面中还有一个示例。为了使该示例适应您的用例,我将左下角转换为米,生成了一个具有2000 m间距的常规网格(200 m有点太稠密),然后将网格转换回lon / lat坐标,然后可以由drawparallels()
和drawmeridians
使用。
from matplotlib import pyplot as plt
from mpl_toolkits.basemap import Basemap
import numpy as np
fig, ax = plt.subplots()
lon0 = -74.0224
lat0 = 40.6968
m = Basemap(
projection='mill',
llcrnrlat= 40.6968,
llcrnrlon= -74.0224,
urcrnrlat= 40.8964,
urcrnrlon= -73.8927,
resolution='h',
ax = ax,
)
x0, y0 = m(lon0, lat0)
x = np.arange(20)*2000+x0
y = np.arange(20)*2000+y0
lons, lats = m(x,y,inverse=True)
m.drawcoastlines()
m.drawcountries()
m.drawstates()
m.drawmeridians(lons)
m.drawparallels(lats)
plt.show()
结果如下:
希望这会有所帮助。