起因是這樣一段對(duì)話(huà),領(lǐng)導(dǎo):你會(huì)用腳本生成熱力圖圖片嗎?我:可以研究下。領(lǐng)導(dǎo):那這個(gè)需求就給你了。我:......
??經(jīng)過(guò)一番研究,研究出大概的思路,先將有經(jīng)緯度的表中的數(shù)據(jù)篩選出表并生成xy事件,接著利用核密度工具生成柵格,最后呢裁剪柵格通過(guò)mapping包出圖。
??出圖過(guò)程比較慢,所以考慮使用多線程(一張圖五分鐘,十九張圖多線程九分鐘你說(shuō)吼不吼)。多線程第一次用,一開(kāi)始打算用數(shù)據(jù)庫(kù)存放數(shù)據(jù)表和柵格,不過(guò)鎖表比較難解決,于是選擇了簡(jiǎn)單粗暴地在文件地理數(shù)據(jù)庫(kù)(gdb)里處理,每個(gè)文件使用一個(gè)gdb,這樣速度快也不用考慮會(huì)被鎖表,處理完以后就直接刪庫(kù)(跑路)。多線程中盡量不要有刪除操作,容易沖突,把刪除都放在單線程中這樣不容易出錯(cuò)。
MyGPpool = multiprocessing.Pool(19)
results = MyGPpool.map(batch, parameters)
MyGPpool.close()
MyGPpool.join()
arcpy.mapping導(dǎo)出格式推薦使用png格式,可以設(shè)置透明背景,最重要一點(diǎn)就是可以在瀏覽器中查看(這個(gè)是tif格式難達(dá)到的,也可能是我沒(méi)找到好的方法)。replaceDataSource替換數(shù)據(jù)源的時(shí)候要設(shè)置好路徑(不是完整路徑不是完整路徑不是完整路徑),數(shù)據(jù)源類(lèi)型,數(shù)據(jù)名稱(chēng)。
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
本次編碼過(guò)程中感謝污吳道長(zhǎng)大力支持.