首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将栅格gis数据更快地应用于修补程序网络徽标

将栅格gis数据更快地应用于修补程序网络徽标
EN

Stack Overflow用户
提问于 2015-08-23 08:27:21
回答 1查看 819关注 0票数 3

在将栅格数据导入到补丁中时,是否有一种方法可以提高计算时间?

这是我的密码。这通常需要20分钟左右才能完成。我的世界是500×500。我发现,如果只考虑真假,使用gis:intersect?要比使用gis:apply-coverage,快得多。干杯。

代码语言:javascript
复制
 to setup-gis
  set city gis:load-dataset "GSR_GIS.shp"
  set LGA_nodes gis:load-dataset "LGA_nodes.shp"
  set builtuparea gis:load-dataset "GSR_builtuparea.shp"
  set recreationalarea gis:load-dataset "GSR_recreationalareas.shp"
  set natural gis:load-dataset "GSR_natural.shp"
  set reserves gis:load-dataset "GSR_reserves.shp"
  set rail_network gis:load-dataset "Greater_Sydney_rail_networkt.shp"
  set roads gis:load-dataset "GSR_road_network.shp"

  gis:set-world-envelope gis:envelope-of city 
  gis:set-drawing-color white 
  gis:draw city 1 
  gis:apply-coverage city "LGA" zone 

  set patchesinlga (patch-set patches with [ zone > 0 ])

      ask patchesinlga [
    ifelse gis:intersects? builtuparea self [set builtuparea? true][set builtuparea? false]
    ifelse gis:intersects? recreationalarea self [set recreationalarea? true][set recreationalarea? false]
    ifelse gis:intersects? natural self [set natural? true][set natural? false]
    ifelse gis:intersects? reserves self [set reserves? true][set reserves? false]
    ifelse gis:intersects? roads self [set roads? true][set roads? false]
    ifelse gis:intersects? rail_network self [set rail? true][set rail? false]
    if gis:intersects? LGA_nodes self [sprout-LGAs 1 [set color red set shape "flag" set size 2 set LGAid [zone] of patch-here]]
    ]

    ask patches with [zone > 0 and (round([zone] of self) / [zone] of self) != 1][set zone 0] ;; fixed the zone floating point issue
end  

*请注意我的编辑:我找到了一种方法,通过只询问一些兴趣来使这件事更快。在我的例子中,它们是带有LGA的补丁(LGA是一个分区id),因此我的GIS地图之外的补丁将被排除在外,以运行底部的ifelse循环。

但有什么办法可以改善这种状况吗?

一些运行时结果

  • 50*50花了23秒
  • 100*100用了79.5秒
  • 400*400花了30分钟
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-23 20:05:04

我也遇到了同样的问题:我的代码花了30+分钟才完成,我的世界只有500x700个补丁。延迟不是在加载数据,而是在我的示例中显示数据。查看上面的代码,我相信您正在经历类似的现象。

在您的askpatchesinlga[]过程中,您要求每个修补程序检查它是否与数据交叉。我想这就是为什么要花这么长时间来执行。2500名代理,每秒钟就有大约45分钟的处理时间。为了加快速度,预先创建栅格,并将每个光栅加载到网络标识中。这将将2500条命令转换为7 (ish),并相应地减少处理时间。

总之:如果您正在加载数据,不要要求每个修补程序都做一些事情。先做处理,然后加载完成的数据集-在你的例子中,一个建立区域光栅,一个区域栅格,一个自然区域栅格,等等。任何的地理处理工具包应该能够为你做这些。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32164677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档