将光栅gis数据应用于netlogo的更快方法

将光栅gis数据应用于netlogo的更快方法,gis,netlogo,Gis,Netlogo,在将光栅数据导入到面片时,是否有办法缩短计算时间 这是我的密码。这通常需要大约20分钟才能完成。我的世界是500x500。我发现使用gis:intersect?比gis:apply-coverage要快得多,只要考虑正确或错误。干杯 to setup-gis set city gis:load-dataset "GSR_GIS.shp" set LGA_nodes gis:load-dataset "LGA_nodes.shp" set builtuparea gis:load-d

在将光栅数据导入到面片时,是否有办法缩短计算时间

这是我的密码。这通常需要大约20分钟才能完成。我的世界是500x500。我发现使用gis:intersect?gis:apply-coverage要快得多,只要考虑正确或错误。干杯

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

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

      在askpatchesinlga[]过程中,要求每个修补程序检查其是否与数据相交。我想这就是需要这么长时间才能执行的。每秒2500个代理,每个代理的处理时间大约为45分钟。要加快速度,请事先创建光栅,并将每个光栅加载到netlogo中。这将把2500个命令转换为7(ish),并相应地减少处理时间


      总之:如果你正在加载数据,不要要求每个补丁都做些什么。首先进行处理,然后加载完成的数据集-在您的情况下,是组合区域光栅、rec区域光栅、自然区域光栅,任何地理处理工具包都应该能够为您制作这些工具。

      您可以尝试不同的方法,确定每次运行时哪些部分将是相同的,并将它们与世界上任何随机生成的部分分开。以慢速形式运行GIS代码,然后导出世界。然后,您可以使用
      import world
      作为启动过程的开始(这可能比GIS工具更快)。但是,如果您这样做,请记住所有内容都包括在内,例如随机状态、所有代理等,因此您需要重置随机数生成器,并在导入后创建所有代理。谢谢@Chris的回答。我知道现在说谢谢已经晚了两年。但我当时确实利用了你的建议。非常感谢。:)@z5182非常乐意帮忙!