Step1: 加载GIS数据
首先准备好进行模拟的GIS数据,本教程所使用的GIS数据可以在GAMA导航栏>Library models>Tutorials>Road Traffic>includes中找到,将其复制到新建项目文件夹中的includes文件夹即可,也可从官网Github下载。
基本模型
首先,和之前一样我们先将基本模型框架搭建出来。
//模型名称
model tutorial_gis_city_traffic
//全局定义
global {
//定义模型时间
float step <- 10 #mn;
//初始化
init {
}
}
//创建建筑族
species building {
//类型属性
string type;
//颜色
rgb color <- #gray ;
//定义显示方式
aspect base {
draw shape color: color ;
}
}
//创建道路族
species road {
//颜色
rgb color <- #black ;
//显示方式
aspect base {
draw shape color: color ;
}
}
//实验设置
experiment road_traffic type: gui {
//定义输出
output {
display city_display type:opengl {
species building aspect: base ;
species road aspect: base ;
}
}
}Step : GAMA中默认的一步等于一秒,可以理解为GAMA里的时间每次更新一秒,可以通过重写全局变量step, 来更改GAMA模拟的速度,这里我们将step设置为10分钟,这样GAMA中的时间每次更新10分钟。 #mn : GAMA中的单位表示方式是
#+单位名,如#km、#m等,更多单位详见官方文档中Units and constants。
加载GIS数据
和之间教程的image_file类似,在全局定义中通过file关键字可以直接加载shp格式文件。这里我们通过GIS文件加载建筑数据、路网数据以及模拟边界。
通过GIS数据创建代理
GIS数据是带属性信息的矢量文件,通过GIS数据创建代理时,我们不仅需要读取其图形数据,还需要与图形数据相关联的属性信息。
create ... form ... with: from 后接GIS数据,with 后接一个字典,字典内为属性名与其属性值。此处通过read 读取GIS文件中的NATURE字段作为属性值。
模拟范围
因为GIS文件可能偏离世界坐标原点非常远,因此我们需要定义一个模拟范围来帮助可视化窗口迅速定位模拟的位置,定义模拟范围也非常简单,只需为全局代理的shape变量定义一个图形。
envelop : envelope函数可以自动求出包含给定图形的矩形。
如此,一个通过GIS数据创建的基本模型便已经搭建完毕。

本节完整代码如下:
Last updated
Was this helpful?