更新产品xml格式
parent
82de4b4dc2
commit
db14c51ee7
|
@ -0,0 +1,60 @@
|
|||
<Root>
|
||||
<ProductBasicInfo>
|
||||
<ProductName>后向散射系数</ProductName>
|
||||
<ProductIdentifier>BackScattering</ProductIdentifier>
|
||||
<ProductLevel>5</ProductLevel>
|
||||
<ProductResolution> </ProductResolution>
|
||||
<ProductDate> </ProductDate>
|
||||
<ProductFormat> </ProductFormat>
|
||||
<CompressionMethod> </CompressionMethod>
|
||||
<ProductSize> </ProductSize>
|
||||
<SpatialCoverageInformation>
|
||||
<TopLeftLatitude> </TopLeftLatitude>
|
||||
<TopLeftLongitude> </TopLeftLongitude>
|
||||
<TopRightLatitude> </TopRightLatitude>
|
||||
<TopRightLongitude> </TopRightLongitude>
|
||||
<BottomRightLatitude> </BottomRightLatitude>
|
||||
<BottomRightLongitude> </BottomRightLongitude>
|
||||
<BottomLeftLatitude> </BottomLeftLatitude>
|
||||
<BottomLeftLongitude> </BottomLeftLongitude>
|
||||
<CenterLatitude> </CenterLatitude>
|
||||
<CenterLongitude> </CenterLongitude>
|
||||
</SpatialCoverageInformation>
|
||||
<TimeCoverageInformation>
|
||||
<StartTime> </StartTime>
|
||||
<EndTime> </EndTime>
|
||||
<CenterTime> </CenterTime>
|
||||
</TimeCoverageInformation>
|
||||
<CoordinateReferenceSystemInformation>
|
||||
<MapProjection> </MapProjection>
|
||||
<EarthEllipsoid> </EarthEllipsoid>
|
||||
<ZoneNo> </ZoneNo>
|
||||
</CoordinateReferenceSystemInformation>
|
||||
<MetaInfo>
|
||||
<Unit> </Unit>
|
||||
<UnitDes> </UnitDes>
|
||||
</MetaInfo>
|
||||
</ProductBasicInfo>
|
||||
<ProductProductionInfo>
|
||||
<DataSources number="1">
|
||||
<DataSource>
|
||||
<Satellite> </Satellite>
|
||||
<Sensor> </Sensor>
|
||||
</DataSource>
|
||||
</DataSources>
|
||||
<ObservationGeometry>
|
||||
<SatelliteAzimuth> </SatelliteAzimuth>
|
||||
<SatelliteRange> </SatelliteRange>
|
||||
</ObservationGeometry>
|
||||
<BandSelection>1</BandSelection>
|
||||
<DataSourceDescription>None</DataSourceDescription>
|
||||
<DataSourceProcessingDescription>参考产品介绍PDF</DataSourceProcessingDescription>
|
||||
<ProductionDate> </ProductionDate>
|
||||
<AuxiliaryDataDescription> </AuxiliaryDataDescription>
|
||||
</ProductProductionInfo>
|
||||
<ProductPublishInfo>
|
||||
<Processor>德清</Processor>
|
||||
<DistributionUnit> </DistributionUnit>
|
||||
<ContactInformation> </ContactInformation>
|
||||
</ProductPublishInfo>
|
||||
</Root>
|
|
@ -0,0 +1,202 @@
|
|||
#
|
||||
# 样本处理的相关的库
|
||||
#
|
||||
|
||||
from tool.algorithm.image.ImageHandle import ImageHandler
|
||||
import math
|
||||
import numpy as np
|
||||
import random
|
||||
import scipy
|
||||
# 最小二乘求解非线性方程组
|
||||
from scipy.optimize import leastsq,fsolve,root
|
||||
from osgeo import gdal,gdalconst
|
||||
import pandas as pds
|
||||
from scipy import interpolate
|
||||
from multiprocessing import pool
|
||||
# 常量声明区域
|
||||
imageHandler=ImageHandler()
|
||||
|
||||
|
||||
# python 的函数类
|
||||
def read_sample_csv(csv_path):
|
||||
""" 读取样本的csv
|
||||
Args:
|
||||
csv_path (string): 样本csv的地址,绝对路径
|
||||
return:
|
||||
[
|
||||
['日期','样方编号','经度','纬度','叶面积指数',"后向散射系数"],
|
||||
['日期','样方编号','经度','纬度','叶面积指数',"后向散射系数"],......
|
||||
]
|
||||
"""
|
||||
lai_csv=pds.read_csv(csv_path)# 代码测试区域
|
||||
lai_csv=lai_csv.loc[:,['id','lon','lat','leaf',"cal"]]
|
||||
result=[]
|
||||
for i in range(len(lai_csv)):
|
||||
result.append([
|
||||
0,
|
||||
lai_csv.loc[i,'id'],
|
||||
lai_csv.loc[i,'lon'], # lon,x
|
||||
lai_csv.loc[i,'lat'], # lat,y
|
||||
lai_csv.loc[i,'leaf'],
|
||||
10**(float(lai_csv.loc[i,'cal'])/10),
|
||||
])
|
||||
return result
|
||||
def read_tiff(tiff_path):
|
||||
""" 从文件中读取影像
|
||||
|
||||
Args:
|
||||
tiff_path (string): 文件影像路径
|
||||
"""
|
||||
im_proj, im_geotrans, im_arr=imageHandler.read_img(tiff_path)
|
||||
return {
|
||||
'proj':im_proj,
|
||||
'geotrans':im_geotrans,
|
||||
'data':im_arr
|
||||
}
|
||||
|
||||
def ReprojectImages2(in_tiff_path,ref_tiff_path,out_tiff_path,resampleAlg=gdalconst.GRA_Bilinear):
|
||||
""" 将输入影像重采样到参考影像的范围内
|
||||
|
||||
Args:
|
||||
in_tiff_path (string): 输入影像
|
||||
ref_tiff_path (string): 参考影像
|
||||
out_tiff_path (string): 输出地址
|
||||
resampleAlg (gadlconst): 插值方法
|
||||
"""
|
||||
# 若采用gdal.Warp()方法进行重采样
|
||||
# 获取输出影像信息
|
||||
inputrasfile = gdal.Open(in_tiff_path, gdal.GA_ReadOnly)
|
||||
inputProj = inputrasfile.GetProjection()
|
||||
# 获取参考影像信息
|
||||
referencefile = gdal.Open(ref_tiff_path, gdal.GA_ReadOnly)
|
||||
referencefileProj = referencefile.GetProjection()
|
||||
referencefileTrans = referencefile.GetGeoTransform()
|
||||
bandreferencefile = referencefile.GetRasterBand(1)
|
||||
x = referencefile.RasterXSize
|
||||
y = referencefile.RasterYSize
|
||||
nbands = referencefile.RasterCount
|
||||
# 创建重采样输出文件(设置投影及六参数)
|
||||
driver = gdal.GetDriverByName('GTiff')
|
||||
output = driver.Create(out_tiff_path, x, y, nbands, bandreferencefile.DataType)
|
||||
output.SetGeoTransform(referencefileTrans)
|
||||
output.SetProjection(referencefileProj)
|
||||
options = gdal.WarpOptions(srcSRS=inputProj, dstSRS=referencefileProj, resampleAlg=gdalconst.GRA_Bilinear)
|
||||
gdal.Warp(output, in_tiff_path, options=options)
|
||||
|
||||
def combine_sample_attr(sample_list,attr_tiff):
|
||||
""" 构建样本
|
||||
|
||||
Args:
|
||||
sample_list (list): 原样本
|
||||
attr_tiff (string): 添加的属性数据
|
||||
|
||||
Returns:
|
||||
list:[sample,new_attr]
|
||||
"""
|
||||
result=[]
|
||||
# 因为soil_tiff 的影像的 影像分辨率较低
|
||||
inv_gt=gdal.InvGeoTransform(attr_tiff['geotrans'])
|
||||
for sample_item in sample_list:
|
||||
sample_lon=sample_item[2]
|
||||
sample_lat=sample_item[3]
|
||||
sample_in_tiff_x=inv_gt[0]+inv_gt[1]*sample_lon+inv_gt[2]*sample_lat # x
|
||||
sample_in_tiff_y=inv_gt[3]+inv_gt[4]*sample_lon+inv_gt[5]*sample_lat # y
|
||||
x_min=int(np.floor(sample_in_tiff_x))
|
||||
x_max=int(np.ceil(sample_in_tiff_x))
|
||||
y_min=int(np.floor(sample_in_tiff_y))
|
||||
y_max=int(np.ceil(sample_in_tiff_y))
|
||||
if x_min<0 or y_min<0 or x_max>=attr_tiff['data'].shape[1] or y_max>=attr_tiff['data'].shape[0]:
|
||||
continue
|
||||
#
|
||||
"""
|
||||
f = interpolate.interp2d([0,0,1,1], [0,1,1,0],
|
||||
[attr_tiff['data'][y_min,x_min],
|
||||
attr_tiff['data'][y_max,x_min],
|
||||
attr_tiff['data'][y_max,x_max],
|
||||
attr_tiff['data'][y_min,x_min]
|
||||
], kind='linear')
|
||||
interp_value=f(sample_in_tiff_x-x_min,sample_in_tiff_y-y_min)
|
||||
sample_item.append(interp_value[0])
|
||||
"""
|
||||
# 9x9
|
||||
x_min=x_min-4 if x_min-9>=0 else 0
|
||||
y_min=y_min-4 if y_min-9>=0 else 0
|
||||
x_max=x_max+4 if x_max+4<attr_tiff['data'].shape[1] else attr_tiff['data'].shape[1]
|
||||
y_max=y_max+4 if y_max+4<attr_tiff['data'].shape[0] else attr_tiff['data'].shape[0]
|
||||
interp_value=np.mean(attr_tiff['data'][y_min:y_max,x_min:x_max])
|
||||
sample_item.append(interp_value)
|
||||
result.append(sample_item)
|
||||
return result
|
||||
|
||||
def check_sample(sample_list):
|
||||
""" 检查样本值
|
||||
|
||||
Args:
|
||||
sample_list (list): 样本值:[ ['日期', '样方编号', '经度', '纬度', 'LAI','土壤含水量','入射角','后向散射系数'] ]
|
||||
|
||||
Returns:
|
||||
list : 处理之后的样本值
|
||||
"""
|
||||
result=[]
|
||||
for item in sample_list:
|
||||
if len(item)==10:
|
||||
sample_time,sample_code,sample_lon,sample_lat,sample_lai,csv_sigma,sample_soil,sample_inc,sample_sigma,sample_NDVI=item
|
||||
else:
|
||||
sample_time,sample_code,sample_lon,sample_lat,sample_lai,csv_sigma,sample_soil,sample_inc,sample_sigma=item
|
||||
if sample_sigma<=0:
|
||||
continue
|
||||
if (sample_inc*180/np.pi)>90:
|
||||
continue
|
||||
if sample_soil<=0 or sample_soil>=1:
|
||||
continue
|
||||
if sample_lai<=0 or sample_lai>=20:
|
||||
continue
|
||||
result.append(item)
|
||||
# 绘制分布图
|
||||
# lai=[]
|
||||
# sigma=[]
|
||||
# csv_sigmas=[]
|
||||
# text_label=[]
|
||||
# for item in result:
|
||||
# if len(item)==10:
|
||||
# sample_time,sample_code,sample_lon,sample_lat,sample_lai,csv_sigma,sample_soil,sample_inc,sample_sigma,sample_NDVI=item
|
||||
# else:
|
||||
# sample_time,sample_code,sample_lon,sample_lat,sample_lai,csv_sigma,sample_soil,sample_inc,sample_sigma=item
|
||||
# text_label.append(sample_code)
|
||||
# lai.append(sample_lai)
|
||||
# sigma.append(sample_sigma)
|
||||
# csv_sigmas.append(csv_sigma)
|
||||
# from matplotlib import pyplot as plt
|
||||
# plt.scatter(np.array(lai),np.array(sigma),label="lai-tiff_sigma")
|
||||
# for i in range(len(sigma)):
|
||||
# plt.annotate(text_label[i], xy = (lai[i], sigma[i])) # 这里xy是需要标记的坐标,xytext是对应的标签坐标
|
||||
#
|
||||
# plt.scatter(np.array(lai),np.array(csv_sigmas),label="lai-csv_sigmas")
|
||||
# for i in range(len(csv_sigmas)):
|
||||
# plt.annotate(text_label[i], xy = (lai[i],csv_sigmas[i])) # 这里xy是需要标记的坐标,xytext是对应的标签坐标
|
||||
# plt.legend()
|
||||
# plt.show()
|
||||
|
||||
return result
|
||||
|
||||
|
||||
|
||||
def split_sample_list(sample_list,train_ratio):
|
||||
""" 切分样本比值
|
||||
|
||||
Args:
|
||||
sample_list (list): 样本列表
|
||||
train_ratio (double): 训练样本的比重
|
||||
|
||||
Returns:
|
||||
list: [sample_train,sample_test]
|
||||
"""
|
||||
sample_train=[]
|
||||
sample_test=[]
|
||||
n=len(sample_list)
|
||||
for i in range(n):
|
||||
if random.random()<=train_ratio:
|
||||
sample_train.append(sample_list[i])
|
||||
else:
|
||||
sample_test.append(sample_list[i])
|
||||
return [sample_train,sample_test]
|
|
@ -249,7 +249,7 @@ class MoistureMain:
|
|||
bp = BlockProcess()
|
||||
# block_size = bp.get_block_size(self.__rows, self.__cols,block_size_config)
|
||||
block_size = bp.get_block_size(self.__rows, self.__cols)
|
||||
bp.cut(self.__workspace_preprocessed_path, self.__workspace_block_tif_path, ['tif', 'tiff'], 'tif', block_size)
|
||||
bp.cut_new(self.__workspace_preprocessed_path, self.__workspace_block_tif_path, ['tif', 'tiff'], 'tif', block_size)
|
||||
logger.info('blocking tifs success!')
|
||||
|
||||
img_dir, img_name = bp.get_file_names(self.__workspace_block_tif_path, ['tif'])
|
||||
|
@ -339,7 +339,7 @@ class MoistureMain:
|
|||
h = ImageHandler.get_img_height(self.__preprocessed_paras['HH'])
|
||||
out_path = self.__workspace_processing_path[0:-1]
|
||||
tif_type = bp.get_tif_dtype(self.__preprocessed_paras['HH'])
|
||||
bp.combine(data_dir, w, h, out_path, file_type=['tif'], datetype=tif_type)
|
||||
bp.combine_new(data_dir, w, h, out_path, file_type=['tif'], datetype=tif_type)
|
||||
|
||||
# 添加地理信息
|
||||
soil_moisture_path = self.__workspace_processing_path + 'soil_moisture.tif'
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
<Root>
|
||||
<ProductBasicInfo>
|
||||
<ProductName>后向散射系数</ProductName>
|
||||
<ProductIdentifier>BackScattering</ProductIdentifier>
|
||||
<ProductLevel>5</ProductLevel>
|
||||
<ProductResolution> </ProductResolution>
|
||||
<ProductDate> </ProductDate>
|
||||
<ProductFormat> </ProductFormat>
|
||||
<CompressionMethod> </CompressionMethod>
|
||||
<ProductSize> </ProductSize>
|
||||
<SpatialCoverageInformation>
|
||||
<TopLeftLatitude> </TopLeftLatitude>
|
||||
<TopLeftLongitude> </TopLeftLongitude>
|
||||
<TopRightLatitude> </TopRightLatitude>
|
||||
<TopRightLongitude> </TopRightLongitude>
|
||||
<BottomRightLatitude> </BottomRightLatitude>
|
||||
<BottomRightLongitude> </BottomRightLongitude>
|
||||
<BottomLeftLatitude> </BottomLeftLatitude>
|
||||
<BottomLeftLongitude> </BottomLeftLongitude>
|
||||
<CenterLatitude> </CenterLatitude>
|
||||
<CenterLongitude> </CenterLongitude>
|
||||
</SpatialCoverageInformation>
|
||||
<TimeCoverageInformation>
|
||||
<StartTime> </StartTime>
|
||||
<EndTime> </EndTime>
|
||||
<CenterTime> </CenterTime>
|
||||
</TimeCoverageInformation>
|
||||
<CoordinateReferenceSystemInformation>
|
||||
<MapProjection> </MapProjection>
|
||||
<EarthEllipsoid> </EarthEllipsoid>
|
||||
<ZoneNo> </ZoneNo>
|
||||
</CoordinateReferenceSystemInformation>
|
||||
<MetaInfo>
|
||||
<Unit> </Unit>
|
||||
<UnitDes> </UnitDes>
|
||||
</MetaInfo>
|
||||
</ProductBasicInfo>
|
||||
<ProductProductionInfo>
|
||||
<DataSources number="1">
|
||||
<DataSource>
|
||||
<Satellite> </Satellite>
|
||||
<Sensor> </Sensor>
|
||||
</DataSource>
|
||||
</DataSources>
|
||||
<ObservationGeometry>
|
||||
<SatelliteAzimuth> </SatelliteAzimuth>
|
||||
<SatelliteRange> </SatelliteRange>
|
||||
</ObservationGeometry>
|
||||
<BandSelection>1</BandSelection>
|
||||
<DataSourceDescription>None</DataSourceDescription>
|
||||
<DataSourceProcessingDescription>参考产品介绍PDF</DataSourceProcessingDescription>
|
||||
<ProductionDate> </ProductionDate>
|
||||
<AuxiliaryDataDescription> </AuxiliaryDataDescription>
|
||||
</ProductProductionInfo>
|
||||
<ProductPublishInfo>
|
||||
<Processor>德清</Processor>
|
||||
<DistributionUnit> </DistributionUnit>
|
||||
<ContactInformation> </ContactInformation>
|
||||
</ProductPublishInfo>
|
||||
</Root>
|
Binary file not shown.
|
@ -0,0 +1,60 @@
|
|||
<Root>
|
||||
<ProductBasicInfo>
|
||||
<ProductName>后向散射系数</ProductName>
|
||||
<ProductIdentifier>BackScattering</ProductIdentifier>
|
||||
<ProductLevel>5</ProductLevel>
|
||||
<ProductResolution> </ProductResolution>
|
||||
<ProductDate> </ProductDate>
|
||||
<ProductFormat> </ProductFormat>
|
||||
<CompressionMethod> </CompressionMethod>
|
||||
<ProductSize> </ProductSize>
|
||||
<SpatialCoverageInformation>
|
||||
<TopLeftLatitude> </TopLeftLatitude>
|
||||
<TopLeftLongitude> </TopLeftLongitude>
|
||||
<TopRightLatitude> </TopRightLatitude>
|
||||
<TopRightLongitude> </TopRightLongitude>
|
||||
<BottomRightLatitude> </BottomRightLatitude>
|
||||
<BottomRightLongitude> </BottomRightLongitude>
|
||||
<BottomLeftLatitude> </BottomLeftLatitude>
|
||||
<BottomLeftLongitude> </BottomLeftLongitude>
|
||||
<CenterLatitude> </CenterLatitude>
|
||||
<CenterLongitude> </CenterLongitude>
|
||||
</SpatialCoverageInformation>
|
||||
<TimeCoverageInformation>
|
||||
<StartTime> </StartTime>
|
||||
<EndTime> </EndTime>
|
||||
<CenterTime> </CenterTime>
|
||||
</TimeCoverageInformation>
|
||||
<CoordinateReferenceSystemInformation>
|
||||
<MapProjection> </MapProjection>
|
||||
<EarthEllipsoid> </EarthEllipsoid>
|
||||
<ZoneNo> </ZoneNo>
|
||||
</CoordinateReferenceSystemInformation>
|
||||
<MetaInfo>
|
||||
<Unit> </Unit>
|
||||
<UnitDes> </UnitDes>
|
||||
</MetaInfo>
|
||||
</ProductBasicInfo>
|
||||
<ProductProductionInfo>
|
||||
<DataSources number="1">
|
||||
<DataSource>
|
||||
<Satellite> </Satellite>
|
||||
<Sensor> </Sensor>
|
||||
</DataSource>
|
||||
</DataSources>
|
||||
<ObservationGeometry>
|
||||
<SatelliteAzimuth> </SatelliteAzimuth>
|
||||
<SatelliteRange> </SatelliteRange>
|
||||
</ObservationGeometry>
|
||||
<BandSelection>1</BandSelection>
|
||||
<DataSourceDescription>None</DataSourceDescription>
|
||||
<DataSourceProcessingDescription>参考产品介绍PDF</DataSourceProcessingDescription>
|
||||
<ProductionDate> </ProductionDate>
|
||||
<AuxiliaryDataDescription> </AuxiliaryDataDescription>
|
||||
</ProductProductionInfo>
|
||||
<ProductPublishInfo>
|
||||
<Processor>德清</Processor>
|
||||
<DistributionUnit> </DistributionUnit>
|
||||
<ContactInformation> </ContactInformation>
|
||||
</ProductPublishInfo>
|
||||
</Root>
|
|
@ -0,0 +1,60 @@
|
|||
<Root>
|
||||
<ProductBasicInfo>
|
||||
<ProductName>后向散射系数</ProductName>
|
||||
<ProductIdentifier>BackScattering</ProductIdentifier>
|
||||
<ProductLevel>5</ProductLevel>
|
||||
<ProductResolution> </ProductResolution>
|
||||
<ProductDate> </ProductDate>
|
||||
<ProductFormat> </ProductFormat>
|
||||
<CompressionMethod> </CompressionMethod>
|
||||
<ProductSize> </ProductSize>
|
||||
<SpatialCoverageInformation>
|
||||
<TopLeftLatitude> </TopLeftLatitude>
|
||||
<TopLeftLongitude> </TopLeftLongitude>
|
||||
<TopRightLatitude> </TopRightLatitude>
|
||||
<TopRightLongitude> </TopRightLongitude>
|
||||
<BottomRightLatitude> </BottomRightLatitude>
|
||||
<BottomRightLongitude> </BottomRightLongitude>
|
||||
<BottomLeftLatitude> </BottomLeftLatitude>
|
||||
<BottomLeftLongitude> </BottomLeftLongitude>
|
||||
<CenterLatitude> </CenterLatitude>
|
||||
<CenterLongitude> </CenterLongitude>
|
||||
</SpatialCoverageInformation>
|
||||
<TimeCoverageInformation>
|
||||
<StartTime> </StartTime>
|
||||
<EndTime> </EndTime>
|
||||
<CenterTime> </CenterTime>
|
||||
</TimeCoverageInformation>
|
||||
<CoordinateReferenceSystemInformation>
|
||||
<MapProjection> </MapProjection>
|
||||
<EarthEllipsoid> </EarthEllipsoid>
|
||||
<ZoneNo> </ZoneNo>
|
||||
</CoordinateReferenceSystemInformation>
|
||||
<MetaInfo>
|
||||
<Unit> </Unit>
|
||||
<UnitDes> </UnitDes>
|
||||
</MetaInfo>
|
||||
</ProductBasicInfo>
|
||||
<ProductProductionInfo>
|
||||
<DataSources number="1">
|
||||
<DataSource>
|
||||
<Satellite> </Satellite>
|
||||
<Sensor> </Sensor>
|
||||
</DataSource>
|
||||
</DataSources>
|
||||
<ObservationGeometry>
|
||||
<SatelliteAzimuth> </SatelliteAzimuth>
|
||||
<SatelliteRange> </SatelliteRange>
|
||||
</ObservationGeometry>
|
||||
<BandSelection>1</BandSelection>
|
||||
<DataSourceDescription>None</DataSourceDescription>
|
||||
<DataSourceProcessingDescription>参考产品介绍PDF</DataSourceProcessingDescription>
|
||||
<ProductionDate> </ProductionDate>
|
||||
<AuxiliaryDataDescription> </AuxiliaryDataDescription>
|
||||
</ProductProductionInfo>
|
||||
<ProductPublishInfo>
|
||||
<Processor>德清</Processor>
|
||||
<DistributionUnit> </DistributionUnit>
|
||||
<ContactInformation> </ContactInformation>
|
||||
</ProductPublishInfo>
|
||||
</Root>
|
|
@ -0,0 +1,60 @@
|
|||
<Root>
|
||||
<ProductBasicInfo>
|
||||
<ProductName>后向散射系数</ProductName>
|
||||
<ProductIdentifier>BackScattering</ProductIdentifier>
|
||||
<ProductLevel>5</ProductLevel>
|
||||
<ProductResolution> </ProductResolution>
|
||||
<ProductDate> </ProductDate>
|
||||
<ProductFormat> </ProductFormat>
|
||||
<CompressionMethod> </CompressionMethod>
|
||||
<ProductSize> </ProductSize>
|
||||
<SpatialCoverageInformation>
|
||||
<TopLeftLatitude> </TopLeftLatitude>
|
||||
<TopLeftLongitude> </TopLeftLongitude>
|
||||
<TopRightLatitude> </TopRightLatitude>
|
||||
<TopRightLongitude> </TopRightLongitude>
|
||||
<BottomRightLatitude> </BottomRightLatitude>
|
||||
<BottomRightLongitude> </BottomRightLongitude>
|
||||
<BottomLeftLatitude> </BottomLeftLatitude>
|
||||
<BottomLeftLongitude> </BottomLeftLongitude>
|
||||
<CenterLatitude> </CenterLatitude>
|
||||
<CenterLongitude> </CenterLongitude>
|
||||
</SpatialCoverageInformation>
|
||||
<TimeCoverageInformation>
|
||||
<StartTime> </StartTime>
|
||||
<EndTime> </EndTime>
|
||||
<CenterTime> </CenterTime>
|
||||
</TimeCoverageInformation>
|
||||
<CoordinateReferenceSystemInformation>
|
||||
<MapProjection> </MapProjection>
|
||||
<EarthEllipsoid> </EarthEllipsoid>
|
||||
<ZoneNo> </ZoneNo>
|
||||
</CoordinateReferenceSystemInformation>
|
||||
<MetaInfo>
|
||||
<Unit> </Unit>
|
||||
<UnitDes> </UnitDes>
|
||||
</MetaInfo>
|
||||
</ProductBasicInfo>
|
||||
<ProductProductionInfo>
|
||||
<DataSources number="1">
|
||||
<DataSource>
|
||||
<Satellite> </Satellite>
|
||||
<Sensor> </Sensor>
|
||||
</DataSource>
|
||||
</DataSources>
|
||||
<ObservationGeometry>
|
||||
<SatelliteAzimuth> </SatelliteAzimuth>
|
||||
<SatelliteRange> </SatelliteRange>
|
||||
</ObservationGeometry>
|
||||
<BandSelection>1</BandSelection>
|
||||
<DataSourceDescription>None</DataSourceDescription>
|
||||
<DataSourceProcessingDescription>参考产品介绍PDF</DataSourceProcessingDescription>
|
||||
<ProductionDate> </ProductionDate>
|
||||
<AuxiliaryDataDescription> </AuxiliaryDataDescription>
|
||||
</ProductProductionInfo>
|
||||
<ProductPublishInfo>
|
||||
<Processor>德清</Processor>
|
||||
<DistributionUnit> </DistributionUnit>
|
||||
<ContactInformation> </ContactInformation>
|
||||
</ProductPublishInfo>
|
||||
</Root>
|
|
@ -0,0 +1,79 @@
|
|||
#encoding=utf-8
|
||||
import xml.etree.ElementTree as ET
|
||||
import pandas as pd
|
||||
import csv
|
||||
|
||||
def xml2csv(xmlpath):
|
||||
tree_obj = ET.parse(xmlpath)
|
||||
|
||||
# 得到所有匹配Region 标签的Element对象的list集合
|
||||
list_Region = tree_obj.findall("Region")
|
||||
for Region in list_Region:
|
||||
# 几何面对应的类(phenology_name)在标签<Region name="water" color="255,0,0">
|
||||
Region_dict = Region.attrib
|
||||
phenology_name = Region_dict.get("name")
|
||||
print(phenology_name)
|
||||
list_GeometryDef = Region.findall("GeometryDef")
|
||||
list_Polygon = list_GeometryDef[0].findall("Polygon") # 获得该类下的几何面list
|
||||
for polygon in list_Polygon:
|
||||
# 从polygon list中获取得到<Coordinates>标签的数据 注意是空格分隔的和csv中不同
|
||||
Coordinates_list = coordinates = polygon.find('.//Coordinates').text.strip().split()
|
||||
# POLYGON((119.035 31.51,119.035 31.50,119.033 31.50)) csv中
|
||||
print("value")
|
||||
|
||||
# 向csv中写
|
||||
def csvfile(csvpath,data):
|
||||
|
||||
with open(csvpath, 'a', newline='') as file:
|
||||
# 2. step
|
||||
writer = csv.writer(file)
|
||||
# data example
|
||||
#data = ["This", "is", "a", "Test"]
|
||||
writer.writerow(data)
|
||||
|
||||
|
||||
# Define the structure of the data
|
||||
#data示例 student_header = ['name', 'age', 'major', 'minor']
|
||||
def csvcreateTitile(csvpath,data):
|
||||
# 1. Open a new CSV file
|
||||
with open(csvpath, 'w') as file:
|
||||
# 2. Create a CSV writer
|
||||
writer = csv.writer(file)
|
||||
# 3. Write data to the file
|
||||
writer.writerow(data)
|
||||
|
||||
# 将列表中的坐标对转换为字符串
|
||||
def createcsv_roi_polygon(coordinates):
|
||||
coord_str = ', '.join([f'{coordinates[i]} {coordinates[i + 1]}' for i in range(0, len(coordinates), 2)])
|
||||
# 构建最终的POLYGON字符串
|
||||
polygon_str = f'POLYGON(({coord_str}))'
|
||||
print(polygon_str)
|
||||
return polygon_str
|
||||
|
||||
if __name__ == '__main__':
|
||||
xmlpath = r"E:\MicroWorkspace\GF3A_nanjing\input-ortho\test_shp\test.xml"
|
||||
|
||||
tree_obj = ET.parse(xmlpath)
|
||||
csv_header = ['sar_img_name', 'phenology_id', 'phenology_name', 'roi_polygon']
|
||||
csvpath = r"E:\MicroWorkspace\GF3A_nanjing\input-ortho\test_shp\test.csv"
|
||||
# csvcreateTitile(csvpath,csv_header)
|
||||
csvfile(csvpath,csv_header)
|
||||
# 得到所有匹配Region 标签的Element对象的list集合
|
||||
list_Region = tree_obj.findall("Region")
|
||||
for Region in list_Region:
|
||||
# 几何面对应的类(phenology_name)在标签<Region name="water" color="255,0,0">
|
||||
Region_dict = Region.attrib
|
||||
phenology_name = Region_dict.get("name")
|
||||
print(phenology_name)
|
||||
# list_GeometryDef = Region.findall("GeometryDef")
|
||||
list_Polygon = Region.findall(".//Polygon") # 获得该类下的几何面list
|
||||
count = 1
|
||||
for polygon in list_Polygon:
|
||||
# 从polygon list中获取得到<Coordinates>标签的数据 注意是空格分隔的和csv中不同
|
||||
Coordinates_list = coordinates = polygon.find('.//Coordinates').text.strip().split()
|
||||
# 将坐标和ploygon对应的写入到.csv中
|
||||
polygon_str=createcsv_roi_polygon(Coordinates_list)
|
||||
# POLYGON((119.035 31.51,119.035 31.50,119.033 31.50)) csv中
|
||||
data = ['0', count, phenology_name, polygon_str]
|
||||
csvfile(csvpath,data)
|
||||
count += 1
|
Loading…
Reference in New Issue