GIS 矢量在 Netlogo 和补丁兼容性中的使用
GIS Vector use in Netlogo and patches compatibility
使用 Netlogo 中的 gis extension
我打算将一个大矢量上传到 NETLOGO 中。
在 apply-coverage
命令和以下代码行之间,我选择了以下代码,因为它们速度更快并且导致相同的结果(我使用 export-world
命令进行了检查。
以下几行代码的灵感来自此来源 http://geospatialcss.blogspot.com/2015/10/tutorial-on-using-and-exporting-gis.html 和 Brooks (2019) 的“基于代理的建模和 GIS”一书。
想法是将每个多边形的属性应用到每个补丁的质心,以便使用。
let n 1
foreach gis:feature-list-of Parcels_2015 [
polygone ->
let center-point gis:location-of gis:centroid-of polygone
let x-coordinate item 0 center-point
let y-coordinate item 1 center-point
ask patch x-coordinate y-coordinate [
;; set an ID to the patch
set ID_temp n
set ID_Parcel gis:property-value polygone "ID_PRCL"
;; and others....
;; we set the variables of each patch
set LU gis:property-value polygone "LUCTGRY"
;; and other variable....
;;and color the map depending on the LUCTGRY
if gis:property-value polygone "LUCTGRY" = "Extensive grassland" [
set pcolor green
]
set n n + 1
]
]
然而我意识到补丁仍然是“方形”的,并不代表“真实世界”。
后来我增加了Netlogo地图,这样两个补丁就不会在同一个包裹上了,见下图:
但是,在我的代码的下一行(尚未编写)中,目标是与邻近的补丁一起工作。如果你看图片,识别一个包裹(彩色)的补丁是一个没有代表任何东西的补丁的邻居。
那么最后,是否真的有可能用“连续”矢量 GIS 数据填充一个 netlogo 世界?
是的,但不是,但也许吧。这取决于您实际需要做什么。 GIS 中的栅格数据集是这种 'problem' 的一个很好的例子 - 它们是 real-world 数据的离散表示,但通常分解为单元格/网格。例如,海拔有时以 20-30 米的单元格表示 - 这并不意味着整个单元格的海拔高度相同,但我们如何在数字世界中表示现实世界 'analog' 数据存在限制。 NetLogo 'world' 类似 - 您可以通过更改补丁大小来修改您的世界的分辨率,以最好地让您探索手头的问题。如果您使用非常小的补丁大小(相对于您的空间数据集)并使用类似 gis:apply-coverage
的东西,您可能会得到一个像样的 近似值 的连续世界。您可以查看名为“GIS 梯度示例”的模型库示例,以获取在网格系统中表示的 'continuous' real-world 数据示例。
或者,您可能会发现 gis:have-relationship? or the gis:relationship-of
函数可以让您探索不同地块之间的关联方式,并可能以这种方式处理事物。但是,如果这些选项中的任何一个可行,这实际上取决于您的需求/目标。
使用 Netlogo 中的 gis extension
我打算将一个大矢量上传到 NETLOGO 中。
在 apply-coverage
命令和以下代码行之间,我选择了以下代码,因为它们速度更快并且导致相同的结果(我使用 export-world
命令进行了检查。
以下几行代码的灵感来自此来源 http://geospatialcss.blogspot.com/2015/10/tutorial-on-using-and-exporting-gis.html 和 Brooks (2019) 的“基于代理的建模和 GIS”一书。
想法是将每个多边形的属性应用到每个补丁的质心,以便使用。
let n 1
foreach gis:feature-list-of Parcels_2015 [
polygone ->
let center-point gis:location-of gis:centroid-of polygone
let x-coordinate item 0 center-point
let y-coordinate item 1 center-point
ask patch x-coordinate y-coordinate [
;; set an ID to the patch
set ID_temp n
set ID_Parcel gis:property-value polygone "ID_PRCL"
;; and others....
;; we set the variables of each patch
set LU gis:property-value polygone "LUCTGRY"
;; and other variable....
;;and color the map depending on the LUCTGRY
if gis:property-value polygone "LUCTGRY" = "Extensive grassland" [
set pcolor green
]
set n n + 1
]
]
然而我意识到补丁仍然是“方形”的,并不代表“真实世界”。
后来我增加了Netlogo地图,这样两个补丁就不会在同一个包裹上了,见下图:
但是,在我的代码的下一行(尚未编写)中,目标是与邻近的补丁一起工作。如果你看图片,识别一个包裹(彩色)的补丁是一个没有代表任何东西的补丁的邻居。
那么最后,是否真的有可能用“连续”矢量 GIS 数据填充一个 netlogo 世界?
是的,但不是,但也许吧。这取决于您实际需要做什么。 GIS 中的栅格数据集是这种 'problem' 的一个很好的例子 - 它们是 real-world 数据的离散表示,但通常分解为单元格/网格。例如,海拔有时以 20-30 米的单元格表示 - 这并不意味着整个单元格的海拔高度相同,但我们如何在数字世界中表示现实世界 'analog' 数据存在限制。 NetLogo 'world' 类似 - 您可以通过更改补丁大小来修改您的世界的分辨率,以最好地让您探索手头的问题。如果您使用非常小的补丁大小(相对于您的空间数据集)并使用类似 gis:apply-coverage
的东西,您可能会得到一个像样的 近似值 的连续世界。您可以查看名为“GIS 梯度示例”的模型库示例,以获取在网格系统中表示的 'continuous' real-world 数据示例。
或者,您可能会发现 gis:have-relationship? or the gis:relationship-of
函数可以让您探索不同地块之间的关联方式,并可能以这种方式处理事物。但是,如果这些选项中的任何一个可行,这实际上取决于您的需求/目标。