Netlogo:使用.csv作为光栅值的交叉引用
我正在尝试导入包含土地覆盖代码的光栅文件。一旦光栅将面片变量设置为这些土地覆盖代码,我想将这些代码链接到一个单独的.csv,其中包含每个土地覆盖代码的植被特定参数。因此,每个补丁将根据其土地覆盖代码分配.csv变量。我完全不知道该怎么做。一般来说,如何使用.csv作为交叉引用文件?我没有任何代码示例,但下面是我想要使用的.csv类型的示例:Netlogo:使用.csv作为光栅值的交叉引用,csv,key,netlogo,raster,cross-reference,Csv,Key,Netlogo,Raster,Cross Reference,我正在尝试导入包含土地覆盖代码的光栅文件。一旦光栅将面片变量设置为这些土地覆盖代码,我想将这些代码链接到一个单独的.csv,其中包含每个土地覆盖代码的植被特定参数。因此,每个补丁将根据其土地覆盖代码分配.csv变量。我完全不知道该怎么做。一般来说,如何使用.csv作为交叉引用文件?我没有任何代码示例,但下面是我想要使用的.csv类型的示例: 因此,这个.csv将GR1变量分配给多个土地覆盖代码为GR1的斑块,我肯定同意JenB的观点,尤其是如果您的值表相对较短的话。但是,如果您有很多值,则可以
因此,这个.csv将GR1变量分配给多个土地覆盖代码为GR1的斑块,我肯定同意JenB的观点,尤其是如果您的值表相对较短的话。但是,如果您有很多值,则可以将
csv
和表
扩展一起使用,以创建一个字典,其中“土地覆盖代码”充当检索修补程序其他数据的键。因此,一条途径是:
- 阅读csv
- 将其中一列作为键
- 将其余列保留为值列表
- 将这两个列表合并为一个列表列表
- 用这两张单子编一本词典
- 让每个修补程序在字典中查询感兴趣的值
lcover,fuel,type
GR1,15,a
GR2,65,b
GR3,105,a
这些扩展和变量:
extensions [ csv table ]
globals [ csvRaw keyValList dataList patchDataDict ]
patches-own [ land-cover fuel patchType]
我们可以运行一个代码块来执行所有这些步骤(注释中有更多解释):
这将生成一个玩具场景,其中根据基于该csv第一列的查询,为每个补丁分配一个fuel
和patchType
值:
希望这能让您开始表中的值会发生变化吗?如果没有,我会编写代码,而不是导入csv,因为这样做比键入5行数据和一些
ifelse
和set
语句更麻烦。
to setup
ca
; Load the csv
set csvRaw but-first csv:from-file "landCoverMeta.csv"
print csvRaw
; Pull first value (land cover)
set keyValList map first csvRaw
print keyValList
; Pull data values
set dataList map but-first csvRaw
print dataList
; Combine these two lists into a list of lists
let tempList ( map [ [ a b ] -> list a b ] keyValList dataList )
; Make a dictionary with the land cover as the key
; and the other columns as the value (in a list)
set patchDataDict table:from-list tempList
ask patches [
; Randomly set patch 'land cover' for this example
set land-cover one-of [ "GR1" "GR2" "GR3" ]
; Query the dictionary for the fuel column (item 0 since
; we've used landcover as the key) and for the type (item 1)
set fuel item 0 table:get patchDataDict land-cover
set patchType item 1 table:get patchDataDict land-cover
]
; Do some stuff based on the retrieved values
ask patches [
set pcolor fuel
if patchType = "a" [
sprout 1
]
]
reset-ticks
end