92 lines
5.8 KiB
Python
92 lines
5.8 KiB
Python
|
"""
|
|||
|
Author : XinYi Song
|
|||
|
Time : 2021/11/4 16:59
|
|||
|
Desc:
|
|||
|
"""
|
|||
|
import rasterio
|
|||
|
import requests
|
|||
|
|
|||
|
from util.xml_util import xml_to_dict, dict_to_xml
|
|||
|
|
|||
|
|
|||
|
def gf4_pmi_001(file_name, xml_name):
|
|||
|
"""
|
|||
|
|
|||
|
:param file_name: 扫描文件传过来的遥感数据源文件的路径
|
|||
|
:param xmlPath: 解析出的xml文件存储的路径
|
|||
|
:param ThumbnailPath: 解析出的缩略图文件存储的路径
|
|||
|
:return:
|
|||
|
"""
|
|||
|
file_path = 'E:/sensing/GF4_PMI_001/'
|
|||
|
with rasterio.open(file_path+file_name, 'r') as ds:
|
|||
|
# 存放xml,缩略图的文件夹,由根文件夹+数据集代码命名的文件夹组成
|
|||
|
print('该栅格数据的基本数据集信息:')
|
|||
|
CollectionCode = 'GF4_PMI_001' # 数据集代码
|
|||
|
DataFormat = ds.driver # DataFormat 数据格式
|
|||
|
NumberBands = ds.count # NumberBands 波段数目
|
|||
|
ImageWidth = ds.width # ImageWidth 影像宽度
|
|||
|
ImageHeight = ds.height # ImageHeight 影像高度
|
|||
|
GeographicScope = ds.bounds # GeographicScope 地理范围
|
|||
|
ReflectionParameter = ds.transform # ReflectionParameter 反射变换参数(六参数模型)
|
|||
|
ProjectionDefinition = ds.crs # ProjectionDefinition 投影定义
|
|||
|
# print(CRS.from_epsg(4326))
|
|||
|
# 获取第一个波段数据,跟GDAL一样索引从1开始
|
|||
|
# 直接获得numpy.ndarray类型的二维数组表示,如果read()函数不加参数,则得到所有波段(第一个维度是波段)
|
|||
|
band1 = ds.read(1)
|
|||
|
FirstBindMax = band1.max() # FirstBindMax 第一波段的最大值
|
|||
|
|
|||
|
FirstBindMin = band1.min() # FirstBindMin 第一波段的最小值
|
|||
|
FirstBindAverage = band1.mean() # FirstBindAverage 第一波段的平均值
|
|||
|
# 根据地理坐标得到行列号
|
|||
|
x, y = (ds.bounds.left + 300, ds.bounds.top - 300) # 距离左上角东300米,南300米的投影坐标
|
|||
|
row, col = ds.index(x, y) # 对应的行列号
|
|||
|
print(f'(投影坐标{x}, {y})对应的行列号是({row}, {col})')
|
|||
|
ProjectedCoordinates = x, y # ProjectedCoordinates 投影坐标
|
|||
|
RowNumber = row, col # RowNumber 对应的行列号
|
|||
|
# 根据行列号得到地理坐标
|
|||
|
x, y = ds.xy(row, col) # 中心点的坐标
|
|||
|
print(f'行列号({row}, {col})对应的中心投影坐标是({x}, {y})') #
|
|||
|
CenterProjectionCoordinates = x, y # CenterProjectionCoordinates 中心投影坐标
|
|||
|
# 'C:/Users/HP/Desktop/Number tube/GF4_PMI_E119.8_N35.3_20210908_L1A0000417337/GF4_PMS_E119.8_N35.3_20210908_L1A0000417337.xml'
|
|||
|
# 传入xml文件路径,解析xml文件
|
|||
|
# xml_name 存储后的xml文件的路径+文件名
|
|||
|
xml_dict = xml_to_dict(file_path+xml_name)
|
|||
|
StartTime = xml_dict['ProductMetaData']['StartTime'] # 开始采集时间
|
|||
|
EndTime = xml_dict['ProductMetaData']['EndTime'] # 结束采集时间
|
|||
|
CloudPercent = xml_dict['ProductMetaData']['CloudPercent'] # 云覆盖量百分比
|
|||
|
TopLeftLatitude = xml_dict['ProductMetaData']['TopLeftLatitude'] # 左上纬度
|
|||
|
TopLeftLongitude = xml_dict['ProductMetaData']['TopLeftLongitude'] # 左上经度
|
|||
|
TopRightLatitude = xml_dict['ProductMetaData']['TopRightLatitude'] # 右上纬度
|
|||
|
TopRightLongitude = xml_dict['ProductMetaData']['TopRightLongitude'] # 右上经度
|
|||
|
BottomRightLatitude = xml_dict['ProductMetaData']['BottomRightLatitude'] # 右下纬度
|
|||
|
BottomRightLongitude = xml_dict['ProductMetaData']['BottomRightLongitude'] # 右下经度
|
|||
|
BottomLeftLatitude = xml_dict['ProductMetaData']['BottomLeftLatitude'] # 左下纬度
|
|||
|
BottomLeftLongitude = xml_dict['ProductMetaData']['BottomLeftLongitude'] # 左下经度
|
|||
|
boundaryGeomStr = f'POLYGON(({TopLeftLatitude} {TopLeftLongitude},' \
|
|||
|
f'{TopRightLatitude} {TopRightLongitude},' \
|
|||
|
f'{BottomRightLatitude} {BottomRightLongitude},' \
|
|||
|
f'{BottomLeftLatitude} {BottomLeftLongitude},' \
|
|||
|
f'{TopLeftLatitude} {TopLeftLongitude}))'
|
|||
|
# ThumbnailPath 存储后的缩略图的路径+文件名 ThumbnailName 缩略图文件名称
|
|||
|
# xmlPath 存储后的xml文件路径+文件名 xmlFileName xml文件名称
|
|||
|
sensing_dict = {'StartTime': StartTime, 'EndTime': EndTime, 'CloudPercent': CloudPercent,
|
|||
|
'boundaryGeomStr': boundaryGeomStr, 'DataFormat': DataFormat, 'NumberBands': NumberBands,
|
|||
|
'ImageWidth': ImageWidth, 'ImageHeight': ImageHeight, 'GeographicScope': GeographicScope,
|
|||
|
#'ReflectionParameter': ReflectionParameter, 'ProjectionDefinition': ProjectionDefinition,
|
|||
|
#'FirstBindMax': FirstBindMax, 'FirstBindMin': FirstBindMin,
|
|||
|
'FirstBindAverage': FirstBindAverage,
|
|||
|
'ProjectedCoordinates': ProjectedCoordinates, 'RowNumber': RowNumber,
|
|||
|
#'CenterProjectionCoordinates': CenterProjectionCoordinates,
|
|||
|
'CollectionCode': CollectionCode,
|
|||
|
"ThumbnailPath": file_path+"GF4_IRS_E119.8_N35.3_20210908_L1A0000417337_thumb.jpg",
|
|||
|
"ThumbnailName": "GF4_IRS_E119.8_N35.3_20210908_L1A0000417337_thumb.jpg",
|
|||
|
"xmlPath": "", "xmlFileName": "",
|
|||
|
'DirectoryDepth': 'day'}
|
|||
|
return sensing_dict
|
|||
|
|
|||
|
|
|||
|
if __name__ == '__main__':
|
|||
|
file_path = 'C:/Users/HP/Desktop/Number tube/GF4_PMI_E119.8_N35.3_20210908_L1A0000417337/GF4_PMS_E119.8_N35.3_20210908_L1A0000417337.tiff'
|
|||
|
xml_path = 'C:/Users/HP/Desktop/Number tube/GF4_PMI_E119.8_N35.3_20210908_L1A0000417337/GF4_PMS_E119.8_N35.3_20210908_L1A0000417337.xml'
|
|||
|
gf4_pmi_001(file_path, xml_path)
|