gpt4 book ai didi

gis - 将栅格 GIS 数据应用于补丁的更快方法 netlogo

转载 作者:行者123 更新时间:2023-12-03 03:46:11 29 4
gpt4 key购买 nike

将栅格数据导入到补丁时,有没有办法缩短计算时间?

这是我的代码。这通常需要大约 20 分钟才能完成。我的世界是500x500。我发现,如果只考虑 true 或 false,使用 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 map 之外的补丁将被排除在底部运行 ifelse 循环。

但是有没有办法改善这个问题呢?

一些运行时结果

  • 50*50 需要 23 秒
  • 100*100 需要 79.5 秒
  • 400*400 需要 30 分钟

最佳答案

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

在您的askpatchesinlga[]过程中,您要求每个补丁检查它是否与数据相交。我认为这就是需要很长时间才能执行的原因。 2500 个客服人员每人仅每秒 1 秒,处理时间已约为 45 分钟。为了加快速度,请预先创建栅格,并将它们分别加载到 netlogo 中。这会将 2500 个命令变成 7 个(左右),并且会相应地减少您的处理时间。

总之:如果您正在加载数据,不要要求每个补丁都执行某些操作。首先进行处理,然后加载完成的数据集 - 在您的情况下,可以是建成区域栅格、休闲区域栅格、自然区域栅格等。任何地理处理工具包都应该能够为您制作这些数据。

关于gis - 将栅格 GIS 数据应用于补丁的更快方法 netlogo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32164677/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com