netlogo:如何将属性补丁分组

时间:2018-07-26 00:26:20

标签: gis netlogo

我想知道您可以通过什么方式将补丁程序拥有的变量分组?我正在使用NetLogo 5.3.1。

具体地说,我正在这样做:

patches-own[some-variable other-variables]
to setup
    gis:apply-coverage dataset-1 "some-variable" some-variable 
             ;this line above for 1000 other-variables
end

我想这样做:

globals [group-variables]
patches-own [some-variable other-variables]
to setup
    set group-variables (list some-variable other-variables)
    foreach group-variables[
        gis:apply-coverage dataset-1 "?" ?
        ]
end

但这似乎是不可能的:现在,安装程序仅是乌龟/补丁程序。我还收到gis:apply-coverage期望的消息,但是却得到了任何消息。

在不减慢程序速度的情况下,我还可以使用什么其他方式对这些变量进行分组?

我看过列表,数组和表,但问题是gis:apply-coverage需要补丁变量。这不包括数组和表。列表需要在补丁程序上下文中定义,但是gis:apply-coverage需要在观察者上下文中调用。 read-from-string变量不支持读取变量并创建所有字符串,然后对其调用run不会提高执行速度。

1 个答案:

答案 0 :(得分:2)

我认为主要问题是您使用了?变量作为字符串(“?”)。这是行不通的,因为它没有引用当前的foreach循环变量。 也许有更好的解决方案,但是我通过使用run原语使它起作用,该原语允许根据字符串和变量的组合创建命令。 这是一个简短的示例,使用GIS代码示例中的国家/地区数据集:

extensions[gis]
globals [group-vars shp]
patches-own [CNTRY_NAME POP_CNTRY]

to load-multiple-vars-from-shp

ca
; Load Data
set shp gis:load-dataset "C:/Program Files/NetLogo 5.3.1/app/models/Code Examples/GIS/data/countries.shp"
; Print properties
print gis:property-names shp
; Select two properties to write to patch-variable
set group-vars (list "CNTRY_NAME" "POP_CNTRY")
; Loop over group-vars
foreach group-vars
[
  ; Apply coverage of current variable
  run (word "gis:apply-coverage shp \"" ? "\"" ?)
]
; Visualize patch variables to check if everything is working
ask patches
[
  set plabel substring (word CNTRY_NAME) 0 1
  set pcolor POP_CNTRY
]

end