//模型名称
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。
global{
...
//读取GIS文件
file shape_file_buildings <- file("../includes/building.shp");
file shape_file_roads <- file("../includes/road.shp");
file shape_file_bounds <- file("../includes/bounds.shp");
}
global {
...
init {
//通过读取的建筑GIS文件创建建筑族,建筑族的type属性,读取自GIS文件的"NATURE"字段
create building from: shape_file_buildings with: [type::read ("NATURE")] {
//若建筑类型为工业建筑,显示为蓝色
if type="Industrial" {
color <- #blue ;
}
}
//通过读取的道路GIS文件创建道路族
create road from: shape_file_roads ;
}
}
create ... form ... with: from 后接GIS数据,with 后接一个字典,字典内为属性名与其属性值。此处通过read 读取GIS文件中的NATURE字段作为属性值。
因为GIS文件可能偏离世界坐标原点非常远,因此我们需要定义一个模拟范围来帮助可视化窗口迅速定位模拟的位置,定义模拟范围也非常简单,只需为全局代理的shape变量定义一个图形。
global {
...
//为全局代理的shape变量定义一个图形
geometry shape <- envelope(shape_file_bounds);
...
}
envelop : envelope函数可以自动求出包含给定图形的矩形。
//模型名称
model tutorial_gis_city_traffic
//全局定义
global {
//定义模型时间
float step <- 10 #mn;
//读取GIS文件
file shape_file_buildings <- file("../includes/building.shp");
file shape_file_roads <- file("../includes/road.shp");
file shape_file_bounds <- file("../includes/bounds.shp");
//为全局代理的shape变量定义一个图形
geometry shape <- envelope(shape_file_bounds);
//初始化
init {
//通过读取的建筑GIS文件创建建筑族,建筑族的type属性,读取自GIS文件的"NATURE"字段
create building from: shape_file_buildings with: [type::read ("NATURE")] {
//若建筑类型为工业建筑,显示为蓝色
if type="Industrial" {
color <- #blue ;
}
}
//通过读取的道路GIS文件创建道路族
create road from: shape_file_roads ;
}
}
//创建建筑族
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 {
//将GIS文件位置设置为参数
parameter "Shapefile for the buildings:" var: shape_file_buildings category: "GIS" ;
parameter "Shapefile for the roads:" var: shape_file_roads category: "GIS" ;
parameter "Shapefile for the bounds:" var: shape_file_bounds category: "GIS" ;
//定义输出
output {
display city_display type:opengl {
species building aspect: base ;
species road aspect: base ;
}
}
}