起因是這樣一段對話,領導:你會用指令碼生成熱力圖圖片嗎?我:可以研究下。領導:那這個需求就給你了。我:……
經過一番研究,研究出大概的思路,先將有經緯度的表中的資料篩選出表並生成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