離散點插值 一直在使用Python的讀者應(yīng)該會發(fā)現(xiàn)一個問題:大部分的離散點插值為網(wǎng)格數(shù)據(jù)的Python第三方庫都相當(dāng)不好用(其中包括了Scipy),,經(jīng)常會由于數(shù)據(jù)量過大,、內(nèi)存不足等原因造成程序崩潰,。那么我們是否能夠調(diào)用Arcgis工具箱里各種強大的插值函數(shù)來完成該任務(wù)呢,?答案是肯定的。 Arcpy為用戶提供的主要模塊之一名為arcpy.sa,,是spatialanalyst的簡寫,,也就是對應(yīng)了Arcgis工具箱中的spatialanalyst工具: 上圖中所示的大部分功能都能通過arcpy在腳本中調(diào)用,同時還提供了大量的運算符,、數(shù)據(jù)類型等等,。 現(xiàn)在我們手頭有這樣一組數(shù)據(jù): 如何通過arcpy中的插值函數(shù)將這組散點數(shù)據(jù)利用反距離權(quán)重插值法插值為柵格呢?先來看看腳本吧: 這段腳本除開最開始的載入模塊,首先我寫了一行arcpy.env.overwriteOutput=True,,這一句的目的是告訴arcpy,,我的程序是支持文件覆蓋的。如果不把overwriteOutput設(shè)為True,,那么當(dāng)遇到覆蓋文件的操作時腳本會報錯,。而arcpy.CheckOutExtension(“spatial”)這句命令,是為了讓arcpy檢查擴展模塊許可,,在外部腳本(比如現(xiàn)在這樣在spyder環(huán)境中)編寫arcpy有關(guān)的代碼,,必須要對腳本中加載的模塊進行許可檢查,否則是無法使用該模塊的,。Arcgis其他模塊對應(yīng)的擴展代碼可以再官網(wǎng)查到: 舉個例子,,比如我要在腳本中調(diào)用Arcgis3d Analyst模塊,那么我就必須在腳本開頭寫上一行:arcpy.CheckOutExtension(“3D”),。以此類推,。 接下來讀取數(shù)據(jù)的代碼應(yīng)該沒什么問題,可以直接跳過了,。 pt =arcpy.Point()是創(chuàng)建一個arcpy的Point數(shù)據(jù)類型,,通過對其中的X、Y,、Z賦值來獲得一個包含了xy坐標(biāo)和數(shù)值z的點,,最后將這些點存放到ptGeoms這個列表中。 sr=arcpy.SpatialReference(“WGS1984”)作用是獲得一個arcgis的地圖投影對象,,這里的輸入除了簡單的投影類型名稱外,,還可以使用arcgis地圖投影文件、地圖投影的工廠代碼作為輸入,。 search_radius=RadiusFixed(distance=3)是調(diào)用arcpy.sa中的RadiusFixed方法得到一個RadiusFixed對象,,以作為反距離插值的影響半徑。對于Idw方法來說,,除了以RadiusFixed對象作為影響半徑外,,還可以使用RadiusVariable對象作為影響半徑。RadiusVariable對象是通過控制臨近的采樣點數(shù)量來確認插值影響半徑,,而RadiusFixed則是通過設(shè)置實際距離來控制,。 接下來就簡單了,直接調(diào)用arcpy.sa的函數(shù)Idw對ptGeoms這個存放了離散點對象的列表進行插值,,返回一個柵格對象outIDW,。此時如果操作完成,則可以直接調(diào)用arcpy柵格對象的方法save,,將柵格保存到本地,。如果想要用matplotlib來進行繪圖操作,,則可以通過arcpy.RasterToNumPyArray工具將柵格對象轉(zhuǎn)化為numpy數(shù)組,然后利用matplotlib繪制圖形: 除了可以使用Idw工具外,,用戶還可以使用Kriging工具來進行克里金插值: outIDW=Kriging(ptGeoms,'SHAPE','Spherical',search_radius=search_radius)最后得到的插值結(jié)果為: 可見對于離散點生成網(wǎng)格這類工作,,選擇好的插值方法以及適當(dāng)?shù)牟逯祬?shù)是離散點插值所必須的。 另外注意看我腳本中注釋掉的部分,,可以發(fā)現(xiàn)arcpy的工具不僅僅是對特定變量對象進行操作,,還可以直接對文件進行操作。比如上面我是直接對Idw生成的柵格對象進行數(shù)組轉(zhuǎn)換,,但我還可以先把柵格保存到本地,,然后使用RasterToNumPyArray去讀取改柵格文件從而獲得一樣的結(jié)果。同理,,Idw也不僅僅是對保存了離散點的列表進行操作,,它也可以對本地的離散點文件實現(xiàn)插值。但需要注意的是,,在arcpy中的文件路徑請盡量使用絕對路徑,。因為arcpy存在environment workspace的概念,相當(dāng)于默認的當(dāng)前目錄,,因此使用絕對路徑進行文件操作將更為保險,。 更多關(guān)于插值工具的參數(shù)信息可以在官網(wǎng)上查明: http://pro./zh-cn/pro-app/tool-reference/spatial-analyst/idw.htm http://desktop./zh-cn/arcmap/10.3/tools/spatial-analyst-toolbox/kriging.htm |
|
來自: LibraryPKU > 《GIS》