地图投影上的等距网格

Equidistant Grid on Map Projection

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

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

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

来自basemap documentation

In order to plot data on a map, the coordinates of the data must be given in map projection coordinates. Calling a Basemap class instance with the arguments lon, lat will convert lon/lat (in degrees) to x/y map projection coordinates (in meters). The inverse transformation is done if the optional keyword inverse is set to True.

文档页面中还有一个示例。为了使这个示例适用于您的用例,我将左下角转换为米,生成了一个间距为 2000 米的规则网格(200 米有点太密)并将网格转换回 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()

结果如下所示:

希望这对您有所帮助。