我正在 netlogo 中构建一个模型,并且有一个非常详细的栖息地地图,其中文件大小为 68mb (67,928 KB) - 我简化了顶点并将文件减少到 47mb (46,958 KB),但是当我尝试导入时,netlogo 仍然崩溃文件。
您会建议什么 - 无论是预处理方法还是 netlogo 方法 - 来提高文件大小或 netlogo 的处理能力?
我加载它的代码是
extensions [gis csv]
globals [world world-shape]
patches-own [habitat]
to set-up
clear-all
reset-ticks
gis:load-coordinate-system "Habitat_map_Pflugmacher_20km_buffer.prj"
set world gis:load-dataset "Habitat_map_Pflugmacher_20km_buffer.shp"
;; load in the circle around the island to create a buffer
set world-shape gis:load-dataset "Habitat_map_Pflugmacher_20km_buffer.shp" gis:set-drawing-color white
gis:set-world-envelope-ds gis:envelope-of world-shape
gis:apply-coverage world "Gridcode" habitat
foreach gis:feature-list-of world
[ ?1 ->
if gis:property-value ?1 "Gridcode" = 1 [ gis:set-drawing-color 6 gis:fill ?1 2.0] ;; artificial land
if gis:property-value ?1 "Gridcode" = 2[ gis:set-drawing-color 46 gis:fill ?1 2.0] ;; seasonal crops
if gis:property-value ?1 "Gridcode" = 3 [ gis:set-drawing-color 43 gis:fill ?1 2.0] ;; perrenial crps
if gis:property-value ?1 "Gridcode" = 4 [ gis:set-drawing-color 57 gis:fill ?1 2.0] ;; broadlead forest
if gis:property-value ?1 "Gridcode" = 5 [ gis:set-drawing-color 52 gis:fill ?1 2.0] ;; conifer forest
if gis:property-value ?1 "Gridcode" = 12 [ gis:set-drawing-color 55 gis:fill ?1 2.0] ;; mixed forest
if gis:property-value ?1 "Gridcode" = 6 [ gis:set-drawing-color 63 gis:fill ?1 2.0] ;; shrubland
if gis:property-value ?1 "Gridcode" = 7 [ gis:set-drawing-color 65 gis:fill ?1 2.0] ;; grassland
if gis:property-value ?1 "Gridcode" = 8 [ gis:set-drawing-color 35 gis:fill ?1 2.0] ;; bareland
if gis:property-value ?1 "Gridcode" = 9 [ gis:set-drawing-color 95 gis:fill ?1 2.0] ;; water
if gis:property-value ?1 "Gridcode" = 10 [ gis:set-drawing-color 85 gis:fill ?1 2.0] ;; wetland
if gis:property-value ?1 "Gridcode" = 11 [ gis:set-drawing-color 68 gis:fill ?1 2.0] ;; wetlands
if gis:property-value ?1 "Gridcode" = 12 [ gis:set-drawing-color 9.9 gis:fill ?1 2.0] ;; snow ]
]
“NetLogo 崩溃”是什么意思?它是永远不会完成,还是您实际上收到错误消息?如果是的话,那是什么?
确保您了解内存分配问题 - 如果没有,请打开用户手册的常见问题解答部分并查找问题“我的模型可以有多大?”
如果您不确定发生了什么,您可以在 foreach 循环中放置一个“show”语句来告诉您它正在处理哪个功能。
(我从未尝试过导入这么大的形状文件,但理论上它应该可以工作。)
我不确定这是否足以实现你想要的,但我建议你尝试一下
to set-up
clear-all
reset-ticks
gis:load-coordinate-system "Habitat_map_Pflugmacher_20km_buffer.prj"
set world gis:load-dataset "Habitat_map_Pflugmacher_20km_buffer.shp"
;; load in the circle around the island to create a buffer
gis:set-world-envelope-ds gis:envelope-of world
gis:apply-coverage world "Gridcode" habitat
let girdcodes [1 2 3 4 5 6 7 8 9 10 11 12]
let colors [6 46 43 57 52 63 65 35 95 85 68 9.9]
(foreach (gis:feature-list-of world) girdcodes colors [ [?1 gc c] ->
if gis:property-value ?1 "Gridcode" = gc [gis:set-drawing-color c gis:fill ?1 2.0]
]
)
end
这里最主要的是删除
world-shape
,因为您再次加载正在使用的大型形状文件。我相信仅对 world
全局执行相同的操作应该可行,并且您可以避免 NetLogo 加载两次。还删除了 gis:set-drawing-color white
,因为在设置该颜色后您实际上并没有绘制任何内容。
一个小的改进是使用
foreach
处理多个列表的方法进行着色。我认为这不是解决您的问题的关键,但使您的代码更清晰(我删除了值等于 12 的网格代码,因为它是重复的)。