arcpy多線程熱力圖

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

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

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

<code>MyGPpool = multiprocessing.Pool(

19

) results = MyGPpool.

map

(batch, parameters) MyGPpool.

close

() MyGPpool.join() /<code>

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

<code>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/<code>


分享到:


相關文章: