更快速地将栅格gis数据应用于补丁netlogo

时间:2015-08-23 08:27:22

标签: gis netlogo

在将栅格数据导入补丁时,有没有办法改善计算时间?

这是我的代码。这通常需要大约20分钟才能完成。我的世界是500x500。我发现使用 gis:intersect? gis:apply-coverage 快得多,如果只考虑true或false。欢呼声。

 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分钟

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题:我的代码需要30多分钟才能完成,而我的世界只有500x700补丁。延迟不是加载数据,但在我的情况下,显示数据。看看上面的代码,我相信你正在经历类似的现象。

在你的askpatchesinlga []程序中,你要求每个补丁检查它是否与数据相交。我认为这是执行这么长时间的事情。每秒只有2500个代理商已经有大约45分钟的处理时间。为了加快速度,请事先创建栅格,然后将它们分别加载到netlogo中。这将把2500个命令变成7(ish),并相应地减少你的处理时间。

总之:如果要加载数据,请不要让每个补丁都做某事。首先进行处理,然后加载完成的数据集 - 在您的情况下,建立区域栅格,rec区域栅格,自然区域栅格等。任何地理处理工具包都应该能够为您制作这些。