如何使用 NetLogo GIS 扩展为其内部现有的海龟分配多边形值?

问题描述 投票:0回答:1

我正在研究一个使用同一地点的不同地图的模型。我希望海龟具有与它们所在的每个地图的多边形相关的变量。当地图数量减少(2 或 3)时,我已经能够在 NetLogo 之外轻松解决这个问题。

假设我有地图 A 和地图 B,它们都是形状文件。我一直在做的是创建它们的交集,因此我有多个多边形,其中包含地图 A 和 B 中的变量,并使用 NetLogo 模型库中的“GIS 一般示例”模型中的方法在这些交集内创建海龟,以便它们与多边形变量命名相同的变量会自动设置。

to create-citizens-in-countries
  foreach gis:feature-list-of countries-dataset [ this-country ->
    gis:create-turtles-inside-polygon this-country citizens num-citizens-to-create [
      set shape "person"
      ; since we included cntry_name as a citizens-own variable,
      ; if we wanted to we could give each citizen a label
      ; with their corresponding cntry_name like so:

      ;; set label cntry_name
    ]
  ]
end

但是,添加地图 C 并最终添加地图 D 使得这种方法非常不方便,因为交叉点产生的多边形每次都会变小,因此有必要简化它们以避免 NetLogo 充电时出现问题。

然后我认为可能有一种替代方法,但我不确定使用 NetLogo GIS 扩展是否可行。我一直在查看扩展文档,但未能找到解决方案。用自然语言来说,对于地图 C,地图 A 和地图 B 已加载并已用于创建海龟,我想要实现的是:

加载地图 C 并要求每只海龟检查它们放置在地图 C 的哪个多边形中,然后要求它们设置自己的变量

turtle-variable-C
与它们所在的地图 C 中的多边形的
map-C-polygon-variable
变量值相同.

可以使用 NetLogo GIS 扩展来编程类似的东西吗?如果没有,有人能想象一种替代方法来解决这个问题吗?

gis netlogo
1个回答
3
投票

我认为你可以使用 gis:contains 来实现你的替代方法?或 gis:包含者?您可以要求每个多边形询问每个海龟该多边形是否包含海龟,如果是,则将海龟的变量设置为多边形的值。每张地图看起来都是这样的:

  foreach (gis:feature-list-of polygons-dataset )
  [ the-polygon ->
      ask turtles with [gis:contains? the-polygon self]
        [ set turtle-var (gis:property-value the-polygon poly-variable)]
  ]

另一个技巧是定义 patch 变量来保存多边形的特征。补丁可以有诸如

map-A-var-1 map-B-var-1
等变量。然后使用
gis:apply-coverage
设置这些变量。海龟会自动使用它们所在补丁的变量。这本质上会将多边形转换为栅格变量,因此您必须使用足够小的面片才能充分表示多边形。

© www.soinside.com 2019 - 2024. All rights reserved.