翼度科技»论坛 编程开发 python 查看内容

基于Python的地图绘制教程

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
本文将介绍通过Python绘制地形图的方法,所需第三方Python相关模块包括 rasteriogeopandascartopy 等,可通过 pip 等方式安装。
1 示例代码

1.1 导入相关模块
  1. import rasterio
  2. import geopandas as gpd
  3. import numpy as np
  4. import cartopy.crs as ccrs
  5. import matplotlib.pyplot as plt
  6. from matplotlib.colors import LinearSegmentedColormap
复制代码
1.2 设置地图字体及字号
  1. plt.rcParams["font.family"] = "Times New Roman"
  2. plt.rcParams["font.size"] = 14
复制代码
1.3 绘制地图
  1. # 设置投影:墨卡托投影
  2. # cartopy 投影说明:https://www.cnblogs.com/youxiaogang/p/14247184.html
  3. projection = ccrs.Mercator()
  4. # 绘制地图
  5. fig, ax = plt.subplots(figsize=(20, 10), subplot_kw={'projection': projection})
  6. # 设置地图范围(数值参数为对应投影下的范围坐标)
  7. ax.set_extent([13530000, 14630000, 4960000, 5850000], crs=projection)
  8. # 读取矢量文件
  9. shp = gpd.read_file("Data/Jilin_Mercator.shp")
  10. shp.plot(ax=ax, transform=projection, edgecolor="black", linewidth=1, facecolor="none")
  11. # 创建自定义颜色映射
  12. colors = ["#369121", "#95C769", "#FFFFBF", "#E6865A", "#D14E30", "#BA1414"]
  13. n_bins = 100  # 定义色带的颜色数量
  14. cmap_name = "green_brown"
  15. cm = LinearSegmentedColormap.from_list(cmap_name, colors, N=n_bins)
  16. # 读取地形栅格数据
  17. dataset = rasterio.open("Data/DEM_Jilin_Mercator.tif")
  18. data = dataset.read(1)  # 读取第一个波段的数据
  19. nodata_value = dataset.nodata   # 获取NoData值
  20. # 创建掩膜,去除NoData区域
  21. data = np.ma.masked_where(data == nodata_value, data)
  22. # 将地形栅格添加到地图中
  23. extent = [dataset.bounds.left, dataset.bounds.right,
  24.           dataset.bounds.bottom, dataset.bounds.top]
  25. im = ax.imshow(data, origin="upper", extent=extent,
  26.                transform=projection, cmap=cm)
  27. # 绘制网格线并添加标签
  28. gl = ax.gridlines(draw_labels=True, line, color="#4F4F4F")
  29. gl.xlocator = plt.FixedLocator(range(120, 135, 3))
  30. gl.ylocator = plt.FixedLocator(range(40, 50, 2))
  31. # 添加色带,设置色带的缩放比例为 0.4,主图和色带之间的间距为 0.1
  32. cbar = plt.colorbar(im, ax=ax, orientation="horizontal", shrink=0.4, pad=0.1)
  33. cbar.set_label("Elevation (m)", labelpad=10) # 设置色带标签与色带的距离为 10 点
  34. cbar.ax.xaxis.set_label_position("top")  # 设置色带标签位置
  35. plt.savefig("Pic.jpg", dpi=600)
  36. plt.show()
复制代码
2 结果图展示



来源:https://www.cnblogs.com/qsgeo/p/18030978
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具