如何以指定经纬度为中心绘制2km×2km方格网格并设置米制坐标轴
解决方案:绘制指定中心的2km×2km网格并满足坐标/地理要素需求
关键调整思路
- 改用UTM投影:UTM是局部米制投影,适配小范围区域,能直接以米为单位定义地图范围,解决比例失真和坐标单位问题
- 基于中心经纬度转换为UTM坐标,将其设为绘图原点(0,0),再向四周扩展±1km得到2km×2km的网格范围
- 调用Basemap专用方法加载并绘制河流、湖泊等地理要素
完整代码实现
import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap import pyproj # 中心经纬度 center_lat, center_lon = 47.9187393, 106.9175013 # 步骤1:将经纬度转换为UTM米制坐标 # 自动匹配该点对应的UTM投影带 utm_proj = pyproj.Proj(proj='utm', zone=pyproj.Proj(proj='utm').from_latlon(center_lat, center_lon), ellps='WGS84') center_x, center_y = utm_proj(center_lon, center_lat) # 步骤2:定义2km×2km网格范围(中心向四周延伸1km) grid_half_size = 1000 # 半边长1000米 min_x, max_x = center_x - grid_half_size, center_x + grid_half_size min_y, max_y = center_y - grid_half_size, center_y + grid_half_size # 步骤3:创建UTM投影的Basemap实例 fig, ax = plt.subplots(figsize=(8, 8)) # 正方形画布保证比例正确 m = Basemap( projection='utm', zone=pyproj.Proj(proj='utm').from_latlon(center_lat, center_lon), llcrnrx=min_x, urcrnrx=max_x, llcrnry=min_y, urcrnry=max_y, resolution='h', # 高分辨率保证地理要素清晰 ax=ax ) # 步骤4:绘制各类地理要素 m.drawcoastlines() m.drawcountries(color='gray') m.drawstates(color='gray') m.drawrivers(color='blue') # 绘制河流 m.drawlakes(color='lightblue') # 绘制湖泊 m.drawmapboundary(fill_color='aliceblue') # 地图背景填充 m.fillcontinents(color='wheat', lake_color='lightblue') # 陆地填充 # 步骤5:绘制2km×2km正方形网格 grid_points = [ (min_x, min_y), (max_x, min_y), (max_x, max_y), (min_x, max_y), (min_x, min_y) ] x_plot, y_plot = zip(*grid_points) ax.plot(x_plot, y_plot, color='red', linewidth=2, label='2km×2km网格') # 步骤6:调整坐标轴为(0,0)原点(中心对应(0,0)) ax.set_xticks([min_x, center_x, max_x]) ax.set_xticklabels([-1000, 0, 1000]) ax.set_yticks([min_y, center_y, max_y]) ax.set_yticklabels([-1000, 0, 1000]) ax.set_xlabel('X (米)') ax.set_ylabel('Y (米)') ax.legend() ax.set_aspect('equal') # 强制等比例,避免网格变形 plt.show()
关键说明
- UTM投影适配:UTM投影会根据经纬度自动划分投影带,确保小范围区域的比例准确,解决之前的比例失真问题
- 坐标原点偏移:通过修改坐标轴刻度标签,将中心的UTM坐标映射为(0,0),实现需求的坐标系统
- 地理要素加载:调用
drawrivers()、drawlakes()等方法,直接加载并显示河流、湖泊、陆地等要素 - 等比例约束:
ax.set_aspect('equal')强制画布等比例,避免网格出现拉伸变形
内容的提问来源于stack exchange,提问作者jim_athon
相关产品推荐
相关产品推荐

