我有一个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
]
答案 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中创建人员。