我撰寫了以下 python 代碼以將 XYZ 資料讀取為 CSV,然后將網格轉換為 GTiff 格式。
當我運行代碼時,我沒有收到任何錯誤。
但是,在嘗試除錯之后,我添加了一些列印陳述句并注意到實際上并沒有呼叫這些函式。
如何運行此腳本以使其全部完成?
import sys
from botocore.exceptions import ClientError
import pandas as pd
import numpy as np
import rasterio
from datetime import datetime
from osgeo import gdal
class gdal_toolbox:
## CONSTANTS ##
## API handling Globals ##
gdal_types = [ 'GDT_Unknown','GDT_Byte','GDT_UInt16','GDT_Int16',\
'GDT_UInt32','GDT_Int32','GDT_Float32','GDT_Float64',\
'GDT_CInt16','GDT_CInt32','GDT_CFloat32','GDT_CFloat64',\
'GDT_TypeCount' ]
jobDict = {}
xyz_dict = {}
layerJson = {}
msk = {}
def __init__( self, kwargs ):
self.jobDict = kwargs
if self.jobDict['no_data'] is None:
self.jobDict['no_data'] = -11000
else:
self.jobDict['no_data'] = int(self.jobDict['no_data'])
if self.jobDict['gridAlgorithm'] is None:
self.jobDict['gridAlgorithm'] = 'nearest:radius1=2.25:radius2=2.25:nodata=' str(self.jobDict['no_data'])
def normalizeToCsv( self ):
MAX_POINTS = 64000000
try:
# Read in ungridded data
self.df = pd.read_csv('C:/Users/......xyz', sep='\s |,|:|\t',header=None, engine='python')
cnt = self.df.shape[0]
if(cnt > MAX_POINTS):
raise ValueError('Maximum number of points (' str(cnt) ' > ' str(MAX_POINTS) ') in datasource exceeded')
# convert to named x,y,z columns
print(str(datetime.now()) ' normalizeToCsv: to_csv (start)')
self.ds = self.df.to_csv(self.csv_buf,sep=',',header=['x','y','z'],index=None)
self.csv_buf.seek(0)
print(str(datetime.now()) ' normalizeToCsv: to_csv (end)')
dfsize = sys.getsizeof(self.df)
print('df (1) size : ' str(dfsize))
#return df
except Exception as e:
self.logException(e)
raise
def csvToTiff(self):
try:
x = self.xyz_dict['xAxis'] / self.xyz_dict['xCellSize']
y = self.xyz_dict['yAxis'] / self.xyz_dict['yCellSize']
no_data = str(self.jobDict['no_data'])
if self.jobDict['srs'] is not None:
srs = self.jobDict['srs']
elif self.jobDict['wkt'] is not None:
srs = rasterio.crs.CRS.from_wkt(self.jobDict['wkt'])
option = gdal.GridOptions(format = 'GTIFF', outputType = gdal.GDT_Float32, width = x, height = y, \
outputBounds = [self.xyz_dict['minX'], self.xyz_dict['minY'], self.xyz_dict['maxX'], self.xyz_dict['maxY']], \
outputSRS = srs, algorithm=self.jobDict['gridAlgorithm'])
self.ds_tif = gdal.Grid('C:/Users/Public/......tif', self.ds, options = option)
except Exception as e:
self.logException(e)
raise
uj5u.com熱心網友回復:
用
if __name__ == "__main__":
app = gdal_toolbox(kwargs)
app.run()
或者
if __name__ == "__main__":
gdal_toolbox(kwargs).run()
在腳本末尾使用這些代碼。
解決方案是:
class gdal_toolbox:
## CONSTANTS ##
def __init__( self, kwargs ):
print(kwargs)
def normalizeToCsv( self ):
MAX_POINTS = 64000000
print(MAX_POINTS)
def csvToTiff(self):
print("Its the secoend function")
if __name__ == "__main__":
kwargs="Its the keyword arguments"
gdal_toolbox(kwargs)
uj5u.com熱心網友回復:
在這段代碼中,您似乎沒有執行任何操作,只是在其中定義了類和函式,對嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/363892.html
下一篇:使用NULL作為函式引數的缺點
