如何用Python在.tiff文件上叠加城市标签与县界
在TIFF插值地图上叠加城市标签与县界的实现方法
下面提供两种主流实现方案,分别适合可视化操作和代码自动化场景:
方案一:使用QGIS(可视化工具,无需编程)
- 加载底图:打开QGIS,直接将你的TIFF插值地图拖拽到图层面板,它会自动作为底图显示。
- 导入县界数据:获取SHP/GPKG格式的县界矢量数据(可从公开地理数据平台下载),通过「图层」→「添加图层」→「添加矢量图层」导入。在图层属性中调整样式:设置边框颜色(如白色)、线条粗细(0.8-1px),面填充设为透明,避免遮挡底图。
- 添加城市标签:导入包含城市名称和点位的矢量数据(同样支持SHP/GPKG),打开图层属性的「标签」选项卡,选择存储城市名称的字段(如
name),设置字体大小(8-12号)、颜色(黑色或白色,根据底图对比度调整),启用标签避让功能防止重叠。 - 导出成果:调整好布局后,通过「项目」→「导出地图」保存为PNG、TIFF等格式。
方案二:使用Python代码(适合批量/自动化处理)
依赖rasterio、geopandas、matplotlib库,先通过pip install rasterio geopandas matplotlib安装。
示例代码:
import rasterio from rasterio.plot import show import geopandas as gpd import matplotlib.pyplot as plt # 读取TIFF底图 with rasterio.open("你的插值地图.tiff") as src: tiff_data = src.read(1) # 获取地理范围用于对齐矢量数据 map_extent = [src.bounds.left, src.bounds.right, src.bounds.bottom, src.bounds.top] # 加载县界和城市矢量数据 county_gdf = gpd.read_file("县界数据.shp") city_gdf = gpd.read_file("城市点位数据.shp") # 统一坐标系(若底图与矢量数据CRS不同,需转换) # county_gdf = county_gdf.to_crs(src.crs) # city_gdf = city_gdf.to_crs(src.crs) # 创建绘图画布 fig, ax = plt.subplots(figsize=(12, 8)) # 绘制TIFF底图 show(tiff_data, extent=map_extent, ax=ax, cmap='viridis') # 叠加县界 county_gdf.plot(ax=ax, edgecolor='white', linewidth=0.8, facecolor='none') # 添加城市标签 for _, city in city_gdf.iterrows(): ax.text(city.geometry.x, city.geometry.y, city['name'], fontsize=8, color='black', ha='center', va='bottom') # 调整布局并保存 plt.tight_layout() plt.savefig("叠加完成的地图.png", dpi=300) plt.close()
关键注意事项
- 坐标系统一:必须确保TIFF底图与矢量数据的空间参考(CRS)一致,否则会出现错位。QGIS中可通过「右键图层」→「导出」→「保存要素为」转换;Python中用
to_crs方法处理。 - 样式优化:根据底图颜色调整县界和标签的颜色、粗细,保证可读性;标签重叠时可缩小字体、启用避让功能(QGIS)或手动调整位置(Python)。
内容的提问来源于stack exchange,提问作者Lemming
相关产品推荐
相关产品推荐

