使用Python绘制栅格地图(python绘制栅格地图)

本文将介绍如何使用Python语言绘制栅格地图。栅格地图常用于电子地图、遥感图像、卫星影像分析等领域,对于数据分析、可视化、地理信息系统等方面都有很大的作用。

一、安装必要的库

要绘制栅格地图,首先需要安装必要的库。其中,主要使用的是numpy、matplotlib和rasterio库。

!pip install numpy
!pip install matplotlib
!pip install rasterio

安装完毕后,可以开始绘制栅格地图。

二、读取栅格数据

在绘制栅格地图前,需要先读取栅格数据。这里以读取tif格式的栅格文件为例。

import rasterio

# 读取栅格数据
dataset = rasterio.open('path/to/raster/file.tif')

# 获取栅格数据的基本信息
width = dataset.width
height = dataset.height
count = dataset.count
bounds = dataset.bounds

# 获取栅格数据的所有波段
bands = []
for i in range(1, count+1):
    band = dataset.read(i)
    bands.append(band)

读取成功后,现在可以开始绘制栅格地图了。

三、绘制栅格地图

1. 基本地图绘制

要绘制栅格地图,需要先获取栅格数据的坐标系和范围,并根据范围将栅格数据转换为图像数据。这里以坐标系为经纬度坐标系的栅格数据为例,具体实现如下:

import matplotlib.pyplot as plt
from rasterio.plot import show

# 获取栅格数据的坐标系和范围
crs = dataset.crs
transform = dataset.transform

# 将栅格数据转换为图像数据
img = bands[0]
bounds = rasterio.plot.plotting_extent(dataset, transform=transform)
plt.imshow(img, cmap='gray', extent=bounds)
plt.show()

绘制的基本地图如下图所示:

![basic_grid_map](https://i.imgur.com/5FN6TZx.png)

2. 添加比例尺和坐标轴

现在绘制的图像还没有比例尺和坐标轴,可以通过添加axis()函数实现:

fig, ax = plt.subplots(figsize=(10, 10))

# 将栅格数据转换为图像数据
img = bands[0]
bounds = rasterio.plot.plotting_extent(dataset, transform=transform)
plt.imshow(img, cmap='gray', extent=bounds)

ax.set_aspect('equal')
ax.axis('off')
plt.axis('tight')

# 添加比例尺和坐标轴
scalebar = ScaleBar(1, units='m')
plt.gca().add_artist(scalebar)

plt.xlabel('Longitude', fontsize=14)
plt.ylabel('Latitude', fontsize=14)

plt.show()

添加比例尺和坐标轴后的栅格地图如下图所示:

![grid_map_scalebar_axes](https://i.imgur.com/IlIxU8x.png)

3. 更改投影方式

如果希望更改投影方式,可以使用geopandas库进行投影变换,具体实现如下:

import geopandas as gpd

# 读取和绘制卫星影像
geodf = gpd.read_file('path/to/shapefile.shp')
fig, ax = plt.subplots(figsize=(10, 10))
geodf.plot(ax=ax)

plt.xlabel('Longitude', fontsize=14)
plt.ylabel('Latitude', fontsize=14)

plt.show()

绘制后的卫星影像如下图所示:

![grid_map_proj_change](https://i.imgur.com/oL2qJ1J.png)

四、保存栅格地图

最后,可以使用savefig()函数将绘制的栅格地图保存到本地,代码如下:

fig.savefig("path/to/output/file.png", dpi=300, bbox_inches='tight', pad_inches=0)

保存后的栅格地图如下图所示:

![grid_map_save](https://i.imgur.com/BetwNCC.png)

Published by

风君子

独自遨游何稽首 揭天掀地慰生平