python+GDAL+numpy,点图层提取栅格像元数据
这部强调:投影坐标一定要一致(shp和栅格)!!!投影坐标一定要一致(shp和栅格)!!!投影坐标一定要一致(shp和栅格)!!!CRS.from_epsg('32650')!CRS.from_epsg('32650')!!CRS.from_epsg('32650')!!
- EPSG:32650: WGS 84 / UTM zone 50N
好了继续,有几个办法,一个是用gdal readRaster,或者把栅格转数组。。。读对应位置的数据(注意位置要对应上)
from osgeo import gdal,ogr
import struct
src_filename = 'D:/Thesis/ML/aodrepro/MCD19A2.A2018001.h28v06.006.2018121012322.hdf.tif'
shp_filename = 'D:/Thesis/point/point72.shp'
src_ds=gdal.Open(src_filename)
gt=src_ds.GetGeoTransform()
rb=src_ds.GetRasterBand(1)
ds=ogr.Open(shp_filename)
lyr=ds.GetLayer()
plist=list()
#inyy=[]
for feat in lyr:
geom = feat.GetGeometryRef()
mx,my=geom.GetX(), geom.GetY() #coord in map units
#Convert from map to pixel coordinates.
#Only works for geotransforms with no rotation.
px = int((mx - gt[0]) / gt[1]) #x pixel
py = int((my - gt[3]) / gt[5]) #y pixel----- ##实在不行就用数组提取吧
# band = src_ds.GetRasterBand(1)#2
# arr = band.ReadAsArray()
# inyy=arr[py,px]
# plist.append(inyy)
# print (inyy)
structval=rb.ReadRaster(px,py,1,1,buf_type=gdal.GDT_UInt16) #Assumes 64 bit int aka 'double'px和py是从左到右,从下到上逐个计算位置的个数,其源码是int,表示个数
intval = struct.unpack('h' , structval) #use the 'double' format code 4 bytes
plist.append(intval[0])
###structval=rb.ReadRaster(px,py,1,1,buf_type=gdal.GDT_UInt16) 解释一下,px是算的,见上面公式,是坐标减去栅格最左值,除以像元大小,就是第几个像元了,同理,py;1,1是计算一个像元的意思,横着1,竖着1.。。。后面就是16位,,,,
得到的结果可以存到csv里
:
1 import numpy as np
2 np.savetxt('E:\forpython\featvector.csv',data_to_save,delimiter=',')
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- synchronized的实现原理——对象头解密
- Golang 汇编入门知识总结
- C语言小笔记(1)
- 这一次搞懂Spring的XML解析原理
- 这一次搞懂Spring自定义标签以及注解解析原理
- 这一次搞懂Spring的Bean实例化原理
- 单片机入门学习十三 STM32单片机学习十 通用定时器
- Spring IOC原理补充(循环依赖、Bean作用域等)
- 这一次搞懂Spring代理创建及AOP链式调用过程
- 这一次搞懂Spring事务注解的解析
- 这一次搞懂Spring事务是如何传播的
- 这一次搞懂SpringMVC原理
- 这一次搞懂Spring Web零xml配置原理以及父子容器关系
- 这一次搞懂SpringBoot核心原理(自动配置、事件驱动、Condition)
- 全网最深分析SpringBoot MVC自动配置失效的原因