Netlogo-导入Shapefile并计算每个补丁上的条目数

时间:2018-08-21 20:52:54

标签: gis netlogo shapefile

我有一个shapefile,其中包含数千人的位置。我想导入该补丁,对于每个补丁,我想计算该确切补丁上的人数(每个人都是形状文件中的一个条目,但是根据我的世界大小,可以在精确补丁上找到多个人)。

我已经使用以下代码成功做到了:

set population-here 0
let population-dataset gis:load-dataset "population_file.shp"
foreach gis:feature-list-of population-dataset [a ->
    ask patches gis:intersecting a [
      set population-here population-here + 1]

但是,在-300到300像素的环境中加载数据集需要花费几个小时。有没有一种更快的方法来计算每个补丁的单独条目数?

应将总体放置在某个区域的基础shapefile上。该区域的导入方式如下:

let area-dataset gis:load-dataset "area.shp"
  ask patches [set world? false]
  gis:set-world-envelope gis:envelope-of area-dataset
  ask patches gis:intersecting area-dataset
  [ set pcolor grey
    set world? true
  ]

1 个答案:

答案 0 :(得分:1)

好的,我无法对此进行测试,并且我对这个答案并不完全有信心,因为我很少使用GIS。但是我建议您修改NetLogo模型库中 GIS常规示例中的代码(请参见“文件”菜单)。您似乎想要做的就是为您的人创建一个海龟品种,并在您的人口数据集中有一个人的每个位置创建一个人。

breed [people person]

patches-own [population]

to setup
  < all the other stuff you have >
  let population-dataset gis:load-dataset "population_file.shp"
  foreach gis:feature-list-of population-dataset
  [ thisFeature ->
    [ let location gis:centroid-of (first (first (gis:vertex-lists-of thisFeature )))
      create-people 1
      [ set xcor item 0 location
        set ycor item 1 location
      ]
    ]
  ]
  ask patches [ set population count people-here ]
end

您还可以从总体集中导入其他变量(例如性别或年龄组),并将这些变量转移到NetLogo人员的适当属性。

如果尚未找到它,我建议您使用本教程https://simulatingcomplexity.wordpress.com/2014/08/20/turtles-in-space-integrating-gis-and-netlogo/

请注意,这是出于一个原因,您希望人们在模型中处于正确的位置(由GIS数据集定义),而不是在GIS文件中简单地包含某种人口计数(或密度),然后在正确的补丁程序上在NetLogo中创建人员。