from osgeo import gdal

from osgeo import gdal_array

from mpl_toolkits.basemap import Basemap

import matplotlib.pyplot as plt

import numpy as np

# import rasterio

import pyproj

import math

file = r'F:\***.tif'

# 读取tif影像函数

def readTifAsArray(tifPath):

dataset = gdal.Open(tifPath)

if dataset == None:

print(tifPath + "文件错误")

return tifPath

image_datatype = dataset.GetRasterBand(1).DataType

row = dataset.RasterYSize

col = dataset.RasterXSize

nb = dataset.RasterCount

proj = dataset.GetProjection()

gt = dataset.GetGeoTransform()

if nb != 1:

array = np.zeros((row, col, nb),

dtype = gdal_array.GDALTypeCodeToNumericTypeCode(

image_datatype))

for b in range(nb):

band = dataset.GetRasterBand(b + 1)

nan = band.GetNoDataValue()

array[:, :, b] = band.ReadAsArray()

else:

array = np.zeros((row,col),

dtype = gdal_array.GDALTypeCodeToNumericTypeCode(

image_datatype))

band = dataset.GetRasterBand(1)

nan = band.GetNoDataValue()

array = band.ReadAsArray()

return array, nan, gt, proj

data = readTifAsArray(file)[0] # 栅格数组

data[data>320] = np.nan # 去除海面 999

affine = readTifAsArray(file)[2] # 读取仿射变换参数

width = data.shape[1]

height = data.shape[0]

map_width = width * affine[1] # 影像的宽度米

map_height = height * affine[1] # 高度 米

xmin = affine[0] # 分别为左下xy 右上xy坐标

xmax = xmin + map_width

ymax = affine[3]

ymin = ymax - map_height

extent = [xmin, xmax, ymin, ymax] # [left, right, bottom, top]

crs = readTifAsArray(file)[3] # 原始影像的投影albers

crs2 = readTifAsArray(r'Y:\folder\仿射变换_final_test.tif')[3] # WGS84大地坐标系

crs = pyproj.CRS.from_proj4('+proj=aea +lat_0=0 +lon_0=105 +lat_1=25 +lat_2=47 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs')

crs2 = pyproj.CRS.from_wkt(crs2)

x1 = np.array([xmin, xmax]) # 一定要转换为numpy数组形式,否则转换后可能出现inf等无效值

y1 = np.array([ymin, ymax])

proj = pyproj.Transformer.from_crs(crs, crs2)

lat, lon = proj.transform(x1, y1) # 将左下右上xy坐标(米)转化为大地坐标系(经纬度)

# Instantiate Basemap class

plt.style.use(['no-latex'])

plt.rcParams['font.sans-serif']=['SimHei']

plt.rcParams['axes.unicode_minus']=False

fig = plt.figure(figsize=(8,5))

ax = fig.add_subplot(121)

m = Basemap(llcrnrlon=lon[0], llcrnrlat=lat[0], urcrnrlon=lon[1], urcrnrlat=lat[1], # 左下右上经纬度坐标 关键在于如何将已投影的坐标转换为经纬度坐标

projection='aea', # albers等面积投影

resolution='h', lat_0=0, lon_0=105, lat_1=25, lat_2=47) # 指定albers的参考纬度线和中心经度线

# There might be other parameters to set depending on your CRS

# m.drawmapboundary(fill_color='skyblue') # 背景绘制蓝色

# m.shadedrelief() # 灰蓝背景

# m.etopo() # 绘制noaa浮雕底图 etopo

# m.bluemarble() # 大理石蓝背景

# m.fillcontinents(lake_color='aqua')

# m.drawcoastlines() # 绘制世界矢量边界

import matplotlib

norm = matplotlib.colors.Normalize(vmin=275, vmax=325)

m.imshow(data, origin='upper', extent=extent, cmap='jet', norm=norm) # 绘制栅格数据

cb = m.colorbar(extend='both' ,location="bottom", pad=0.3)

cb.ax.tick_params(labelsize=10) #设置色标刻度字体大小。

font = {'family' : 'serif',

# 'color' : 'darkred',

'color' : 'black',

'weight' : 'normal',

'size' : 10,

}

cb.set_label('Temperature/K' ,fontdict=font)

parallels = np.arange(0.,43,1.) # 绘制经纬度线

meridians = np.arange(116.,125.,2.)

m.drawparallels(parallels,labels=[True,False,False,False], linewidth=0.1) # labels = [left,right,top,bottom]

m.drawmeridians(meridians,labels=[False,False,False,True], linewidth=0.1)

# plt.show()

# plt.savefig('figure_name.png',dpi=300, bbox_inches='tight') # , transparent=True透明保存

############################################################################### 绘制第二个子图

ax = fig.add_subplot(122)

m = Basemap(llcrnrlon=lon[0], llcrnrlat=lat[0], urcrnrlon=lon[1], urcrnrlat=lat[1], # 左下右上经纬度坐标 关键在于如何将已投影的坐标转换为经纬度坐标

projection='aea', # albers等面积投影

resolution='h', lat_0=0, lon_0=105, lat_1=25, lat_2=47) # 指定albers的参考纬度线和中心经度线

import matplotlib

norm = matplotlib.colors.Normalize(vmin=275, vmax=325)

m.imshow(data, origin='upper', extent=extent, cmap='jet', norm=norm) # 绘制栅格数据

cb = m.colorbar(extend='both' ,location="bottom", pad=0.3)

cb.ax.tick_params(labelsize=10) #设置色标刻度字体大小。

font = {'family' : 'serif',

# 'color' : 'darkred',

'color' : 'black',

'weight' : 'normal',

'size' : 10,

}

cb.set_label('Temperature/K' ,fontdict=font)

parallels = np.arange(0.,43,1.) # 绘制经纬度线

meridians = np.arange(116.,125.,2.)

m.drawparallels(parallels,labels=[True,False,False,False], linewidth=0.1) # labels = [left,right,top,bottom]

m.drawmeridians(meridians,labels=[False,False,False,True], linewidth=0.1)

plt.savefig('figure_name.png', dpi=300, bbox_inches='tight') # , transparent=True透明保存

python浮雕图片_Python+basemap绘制投影图像,PythonBasemap,已,的,影像相关推荐

  1. python浮雕图片_Python bug只会出现在使用Numpy的浮雕图像上

    该程序的目的是拍摄ppm图像并对其进行浮雕. (整个项目的详细信息可以找到 here)我正在帮助分配任务,似乎无法找到学生的错误. 我使用的原始图像如下所示: 结果应如下所示: 这是整个程序(围绕问题 ...

  2. python浮雕图片_Python bug,只出现在使用Numpy的浮雕图像上

    这个程序的目的是采取一个ppm图像和浮雕它.(整个项目的细节可以找到here)我正在帮作业评分,似乎找不到学生的缺陷.在 我使用的原始图像如下所示: 结果应该如下所示: 以下是整个程序(在问题行周围加 ...

  3. python浮雕图片_python图像数据增强——imgaug (二)

    在这章我们展示一个涵盖了大部分数据增强方法的例子.这里有大量的代码,可能会引起部分读者的不适,但是大家可以主要看注释,以及最后的总结性的话语,在实际上使用的时候再详细的看具体的实现,有一些.from ...

  4. python浮雕图片_python图片处理PIL

    一.PIL介绍 PIL中所涉及的基本概念有如下几个:通道(bands).模式(mode).尺寸(size).坐标系统(coordinate system).调色板(palette).信息(info)和 ...

  5. python显示图片_python 一个figure上显示多个图像的实例

    方法一:主要是inshow()函数的使用 首先基本的画图流程为: import matplotlib.pyplot as plt #创建新的figure fig = plt.figure() #必须通 ...

  6. python 添加图片_python 图片读取、添加等

    一 opencv import cv2 as cv # load img = cv.imread(imagepath) # shape=(height, width, channel) h,w,c = ...

  7. python控制台图片_Python实现图像信息隐藏

    Python实现图像信息隐藏 之前学习密码学的时候老师有提到过『信息隐藏』,现在用图像的方法尝试一下.思想是:把信息藏到RGB通道中的B通道,然后利用奇偶性可以恢复过来 原理 从源图中提取文字图像信息 ...

  8. python开发图片_python实现图片上添加图片

    在介绍完给图上添加文字后,我们再介绍给图片上添加图片,也就是图片的叠加. 需要使用的Python的图像库:PIL.更加详细的知识点如下: Imaga模块:用来创建,打开,保存图片文件 new(path ...

  9. python 缩放图片_python实现按长宽比缩放图片

    使用python按图片固定长宽比缩放图片到指定图片大小,空白部分填充为黑色. 代码 # -*- coding: utf-8 -*- from pil import image class image_ ...

最新文章

  1. iframe 有那些缺
  2. python调用接口requests_【python接口自动化】- 使用requests库发送http请求
  3. 微软System Center 2012推进私有云计算
  4. 【ios】Storyboard教程
  5. C语言之从内存角度理解不同类型的变量
  6. Java并发编程之并发容器ConcurrentHashMap(JDK1.8)解析
  7. haproxy 负载_负载测试HAProxy(第1部分)
  8. Qt QMenu圆角阴影超详细 干净圆角 屏蔽原生阴影 绘制阴影
  9. C语言-字符型数据与ASCII码表
  10. FBI教你破解身体语言
  11. python lncrna_使用CNCI分析lncRNA
  12. python优点是代码库支持、灵活_Google将限制Python语言的应用 开发社区热议
  13. AC/DC电源模块输入电压范围
  14. Webbrowser指定IE内核版本(更改注册表)
  15. Python趣味案例 - 抓扑克牌的手气
  16. RNA 10. SCI 文章中基因表达富集之 KEGG 注释
  17. UINavigation导航栏和UITabbar布局和样式
  18. 天融信上网行为管理如何做短信验证?
  19. 外国建筑史的学习资料
  20. 第三十七章 SQL函数 CURRENT_TIMESTAMP

热门文章

  1. 多多客api_【新功能上线】多多客API“主题活动推广”已上线!
  2. 关于K3wise系列的二次开发
  3. C# JArray 转前台JS json数组
  4. nmap端口扫描安装以及使用
  5. electron 使用shell.openExternal 打开系统浏览器报错
  6. CSDN上传图片提示上传失败
  7. 常见的语法错误(持续更新)
  8. 不同系统下,复制文件时新文件的日期区别
  9. 如何将有打开密码的PDF转换成Word文件
  10. 2022杭电多校第一场