分享

Arcpy之多线程热力图

 点点GIS 2021-04-06

起因是这样一段对话~~~~

领导:你会用脚本生成热力图图片吗? 

我:可以研究下。 

领导:那这个需求就给你了。

我:......

 经过一番研究,研究出大概的思路,先将有经纬度的表中的数据筛选出表并生成xy事件,接着利用核密度工具生成栅格,最后呢裁剪栅格通过mapping出图。


出图过程比较,所以考虑使用多线程(一张图五分钟,十九张图多线程九分钟你说吼不吼)。

多线程第一次用,一开始打算用数据库存放数据表和栅格,不过锁表比较难解决,于是选择了简单粗暴地在文件地理数据库(gdb)里处理,每个文件使用一个gdb,这样速度快也不用考虑会被锁表,处理完以后就直接删库(跑路)。

多线程中尽量不要有删除操作,容易冲突,把删除都放在单线程中这样不容易出错

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

 worker中使用别的脚本要使用importScripts导入,当需要传递参数可以transferable object(通讯时会比较快,参考worker使用),本次项目中使用Float64Array.看几个初始化范例

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, ly

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章