首页 文章

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

提问于
浏览
0

我有一个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 回答

  • 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上正确的补丁 .

相关问题