shapefile 不重叠补丁

shapefile not overlapping patches

我正在构建一个模型,它要求我将 shapefile 加载到 netlogo。我已经做到了,并且视图上显示的地图与它应该的对应。问题是 shapefile 没有与补丁重叠。我的 shapefile 由 x|y|attribute 组成,文件中有大约 800 000 行。理想的情况是让每一行对应一个补丁,但是当我执行计数补丁时它只有 1089。更糟糕的是,当我请求属性值时每个补丁都检索到 NaN。我将粘贴与此问题相关的部分代码:

globals [ mintempcm-dataset
  maxtemphm-dataset
  precipitation-dataset
  meantemp-dataset
  color-list
]

patches-own [
  mintempcm
  maxtemphm
  meantemp
  precipitation
]
to setup
  ca

  gis:load-coordinate-system (word "WGS_84_Geographic.prj")
  set maxtemphm-dataset gis:load-dataset "mxtwm.shp"


  gis:set-world-envelope (gis:envelope-union-of 
    (gis:envelope-of maxtemphm-dataset)

  )
  gis:apply-coverage maxtemphm-dataset "MAXTEMPHM" maxtemphm

  ask patches[

    set maxtemphm maxtemphm

  ]

  gis:set-drawing-color blue
  gis:draw maxtemphm-dataset 1


  reset-ticks
end

我是不是遗漏了什么或做错了什么? 澄清一下,我需要让文件的每个坐标对应一个补丁,并将属性传递给补丁。

谢谢。

您可以使用 gis:intersecting 来执行此操作,但对于您想要执行的操作来说效率不高。例如,我从 this site 下载了机场数据集,其中包含一些免费的 gis 数据。机场数据集 (ne_10m_airports.shp) 包含每个机场的点数据和有关每个机场的一些信息。要将一些数据分配给补丁,请参见下文-评论中的一些信息:

extensions [ gis ]

globals [ airports ]

patches-own [ airport-name ]

to setup
  ca
  resize-world 0 125 0 50
  set-patch-size 5

  ; Load the dataset
  set airports gis:load-dataset "ne_10m_airports.shp"
  gis:set-world-envelope gis:envelope-of airports

  ; For each point listed in 'airports', ask any patches
  ; that are intersecting that point to take the name
  ; of the airport that intersects them (since these are points,
  ; intersection in this case means the airport coordinates
  ; lie within the patch.

  foreach gis:feature-list-of airports [
    x ->
    ask patches gis:intersecting x [
      set airport-name gis:property-value x "NAME"
      set pcolor red
    ]
  ]

  reset-ticks
end

您可以使用温度数据集中的 "MAXTEMPHM" 值来执行此操作。但是,您必须考虑您的 NetLogo 世界大小,以确保补丁的数量与您拥有的点数相对应 - gis:set-world-envelope 仅将 gis 数据集与 NetLogo 世界对齐,它不会'影响目前的补丁。如果你有 800000 个温度点要加载,你需要让你的 NetLogo 世界大约有 895 个方块,这是一个相当大的世界。如上所述,加载温度数据需要 while。使用栅格数据集和 gis:apply-raster.

会使事情变得更简单、更高效(并且明显更快)