有没有办法在导入栅格数据到补丁时提高计算时间?
这是我的代码,通常需要约20分钟才能完成。我的世界是500x500。我发现,如果只考虑真或假,使用gis:intersect?要比gis:apply-coverage快得多。祝好运。
*我的编辑说明:我找到了一种方法,可以通过只询问感兴趣的补丁来加快速度。在我的情况下,它们是具有LGA(LGA是区域标识符)的补丁,因此将排除地理信息系统地图之外的补丁以运行ifelse循环,在底部。
这是我的代码,通常需要约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是区域标识符)的补丁,因此将排除地理信息系统地图之外的补丁以运行ifelse循环,在底部。
但是有没有办法改进这个?
一些运行时间结果
- 50*50花费23秒
- 100*100花费79.5秒
- 400*400花费30分钟