Arcpy多執行緒熱力圖

polong發表於2018-10-22

    起因是這樣一段對話,領導:你會用指令碼生成熱力圖圖片嗎?我:可以研究下。領導:那這個需求就給你了。我:……

    經過一番研究,研究出大概的思路,先將有經緯度的表中的資料篩選出表並生成xy事件,接著利用核密度工具生成柵格,最後呢裁剪柵格通過mapping包出圖。

    出圖過程比較慢,所以考慮使用多執行緒(一張圖五分鐘,十九張圖多執行緒九分鐘你說吼不吼)。多執行緒第一次用,一開始打算用資料庫存放資料表和柵格,不過鎖表比較難解決,於是選擇了簡單粗暴地在檔案地理資料庫(gdb)裡處理,每個檔案使用一個gdb,這樣速度快也不用考慮會被鎖表,處理完以後就直接刪庫(跑路)。多執行緒中儘量不要有刪除操作,容易衝突,把刪除都放在單執行緒中這樣不容易出錯。

MyGPpool = multiprocessing.Pool(19)
results = MyGPpool.map(batch, parameters)
MyGPpool.close()
MyGPpool.join()

    arcpy.mapping匯出格式推薦使用png格式,可以設定透明背景,最重要一點就是可以在瀏覽器中檢視(這個是tif格式難達到的,也可能是我沒找到好的方法)。replaceDataSource替換資料來源的時候要設定好路徑(不是完整路徑不是完整路徑不是完整路徑),資料來源型別,資料名稱。

mxd = arcpy.mapping.MapDocument(mxd_file)
df = arcpy.mapping.ListDataFrames(mxd, `圖層`)[0]
lyr = arcpy.mapping.ListLayers(mxd)[0]
datasetName = os.path.basename(data_raster)
dataRasterWorkspace = os.path.dirname(data_raster)
if lyr.supports("DATASOURCE"):
       lyr.replaceDataSource(dataRasterWorkspace,"FILEGDB_WORKSPACE", datasetName)
        df.extent = extent
        df.panToExtent(extent)
        arcpy.mapping.ExportToPNG(mxd, out_file, df, color_mode=`24-BIT_TRUE_COLOR`, world_file=True,background_color="No Color", transparent_color="No Color")
    else:
        arcpy.AddMessage("error")
    arcpy.RefreshActiveView()
    del mxd, df, lyr

相關文章