目录
描述:本篇文章主要内容是基于Basemap绘制专题图,进行地理信息数据可视化;分别从tiff数据获取、专题图画板绘制、专题图颜色填充、底图添加、经纬度刻度线划分及标记、专题图边框设置、图例添加、标题添加及专题图保存这几个方面来描述并提供相关代码及注释说明。
# 导入模块
import os
import sys
import traceback
import gdal
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
# 解决打包时报的RuntimeError: main thread is not in main loop
from osgeo import ogr
plt.switch_backend('agg')
from mpl_toolkits.basemap import Basemap
from utils.configUtils import ConfigUtils
from utils.OSUtils import OSUtils
# 载入宋体
simsunpath = os.path.join(os.path.dirname(os.path.realpath(sys.argv[0])), 'resource', 'font', 'SimSun.ttf')
SimSun = FontProperties(fname=simsunpath)
# 全局设置字体及大小,设置公式字体即可,若要修改刻度字体,可在此修改全局字体
plt.rcParams['font.serif'] = ['SimSun']
plt.rcParams['font.family'] = 'Times New Roman' # 设置默认为Times New Roman
plt.rcParams['mathtext.fontset'] = 'stix' # 设置数学符号字体,stix与Times New Roman接近
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
# 定义类及方法
class Mapping:
def __init__(self, drgs):
"""
:param
drgs: 阈值
"""
self.drgs = drgs
self.config = ConfigUtils()
self.osutils = OSUtils()
self.systempath = self.osutils.get_system_path()
# basemap画专题图
def createBasemap(self, rasterfile, pngpath, tm, algor, ts, point_shp, addvcd):
"""
:param
rasterfile: wgs84坐标下的tif文件
pngpath: 输出路径
tm:起始时间
algor:指标名
ts:时间尺度
prefixe:前缀地区名
addvcd:地区行政编号
"""
# 一 tiff数据获取
try:
# 准备tif数据
dataset = gdal.Open(rasterfile, gdal.GA_ReadOnly)
# 仿射矩阵,左上角像素的大地坐标和像素分辨率。
adfGeoTransform = dataset.GetGeoTransform()
# 宽
im_width = dataset.RasterXSize
# 高
im_height = dataset.RasterYSize
# adfGeoTransform参数:
# adfGeoTransform[0]:影像左上角x坐标
# adfGeoTransform[1]:像元分辨率
# adfGeoTransform[3]:影像左上角y坐标
# llon,ulon,ulat,llat 专题图图像所占的最左、最右、最上、最下位置
llon = adfGeoTransform[0] # 左上角x坐标
ulon = adfGeoTransform[0] + adfGeoTransform[1] * im_width # 最右端x坐标
ulat = adfGeoTransform[3] # 影像左上角y坐标
llat = adfGeoTransform[3] + adfGeoTransform[5] * im_height # 最下端y坐标