地图投影上的等距网格

时间:2018-07-02 04:22:25

标签: python-3.x matplotlib-basemap map-projections

我希望使用纬度和经度而不是度数在曼哈顿地图(例如200m x 200m)投影上创建等距网格。我正在使用底图,但无法找到继续执行此任务的方法。这是投影代码。

m = Basemap(projection='mill',
        llcrnrlat= 40.6968,
        llcrnrlon= -74.0224,
        urcrnrlat= 40.8964, 
        urcrnrlon= -73.8927,
        resolution='h')

执行上述操作的最佳方法是什么,我还需要存储每个网格顶点的经度和纬度值。

1 个答案:

答案 0 :(得分:0)

来自basemap documentation

  

为了在地图上绘制数据,数据的坐标必须为   以地图投影坐标给出。调用底图类实例   使用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()

结果如下:

result of the above code

希望这会有所帮助。