我有一个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 回答
好吧,我对这个答案并不完全有信心,因为我很少使用GIS . 但我建议您调整NetLogo模型库中GIS一般示例中的代码(请参阅“文件”菜单) . 您似乎想要做的是为您的员工创建一个海龟品种,并在您的人口数据集中有人的每个位置创建一个人 .
您还可以从人口集中导入其他变量(例如,性别或年龄组),并将这些变量转移到NetLogo人员的相应属性 .
如果你还没有找到它,我推荐这个教程https://simulatingcomplexity.wordpress.com/2014/08/20/turtles-in-space-integrating-gis-and-netlogo/ .
请注意,这假设您有理由希望人员处于正确的(由GIS数据集定义)位置,而不是简单地在GIS文件中使用某种人口数(或密度),然后创建人员在NetLogo上正确的补丁 .