Gis 如何在Netlogo中从形状文件中创建移动的海龟
我刚开始使用Netlogo创建一个基于代理的模型。我有两个要使用的形状文件:城市的网络地图(直线形状文件)和城市中摩托车的点形状文件。我们的想法是让他们沿着网络形状文件的线条在城市中穿行。因为我是Netlogo的新手,所以我只在模型中加载了这些形状文件。有没有人能给我一个起点,帮助我从踏板车注册(点)创建海龟,让它们在网络线路上移动。到目前为止,我在互联网上几乎找不到任何帮助,而且这种尝试和错误都不起作用。到目前为止,我的代码是:Gis 如何在Netlogo中从形状文件中创建移动的海龟,gis,netlogo,Gis,Netlogo,我刚开始使用Netlogo创建一个基于代理的模型。我有两个要使用的形状文件:城市的网络地图(直线形状文件)和城市中摩托车的点形状文件。我们的想法是让他们沿着网络形状文件的线条在城市中穿行。因为我是Netlogo的新手,所以我只在模型中加载了这些形状文件。有没有人能给我一个起点,帮助我从踏板车注册(点)创建海龟,让它们在网络线路上移动。到目前为止,我在互联网上几乎找不到任何帮助,而且这种尝试和错误都不起作用。到目前为止,我的代码是: extensions [ gis ] to load ca
extensions [ gis ]
to load
ca
let network gis:load-dataset "Roads_Asmterdam.shp"
foreach gis:feature-list-of network
[ gis:set-drawing-color white
gis:draw ? 0.3
]
let people gis:load-dataset "scooters_Amsterdam.shp"
foreach gis:feature-list-of people
[ gis:set-drawing-color blue
gis:draw people 3
]
end
所以,据我所知,我需要一个togo函数来移动海龟。我需要一个函数来创建可能移动的海龟离开点形状文件,但我还需要让它们知道只使用线条,而不是整个区域
非常感谢 加载lines shape文件后,您需要将其转换为代理/海龟网络,并将其链接起来。NetLogo不适合您,您需要自己迭代所有功能、线段和坐标。然后,您需要将滑板车放置在直线网络的坐标上,然后您可以“要求”它们四处移动 以下是我的想法:
extensions [ gis ]
globals [ roads-dataset scooter-dataset ]
breed [ nodes node ]
breed [ scooters scooter ]
breed [ walkers walker ]
walkers-own [ wlocation ]
scooters-own [slocation]
to setup
; reset
clear-all
reset-ticks
; load data set
gis:load-coordinate-system (word "C:/Program Files/NetLogo 5.3.1/app/models/Code Examples/GIS/data/WGS_84_Geographic.prj")
set roads-dataset gis:load-dataset "C:/shape/roads.shp"
set scooter-dataset gis:load-dataset "C:/shape/scooter.shp"
gis:set-world-envelope (gis:envelope-of roads-dataset)
; draw data set
gis:set-drawing-color blue
gis:draw roads-dataset 1
make-road-network
end
to make-road-network
clear-links
let first-node nobody
let previous-node nobody
foreach gis:feature-list-of roads-dataset [ ; each polyline
foreach gis:vertex-lists-of ? [ ; each polyline segment / coordinate pair
foreach ? [ ; each coordinate
let location gis:location-of ?
if not empty? location [ ; some coordinates are empty []
create-nodes 1 [
set color green
set size 1
set xcor item 0 location
set ycor item 1 location
set hidden? true
if first-node = nobody [
set first-node self
]
if previous-node != nobody [
create-link-with previous-node
]
set previous-node self
]
]
]
set previous-node nobody
]
]
; connect adjacent polylines/roads
ask nodes [ create-links-with other nodes in-radius 0.001 ]
end
to add-agents
create-walkers 5 [
set color red
set wlocation one-of nodes
move-to wlocation
]
end
to add-scooters
foreach gis:feature-list-of scooter-dataset [
foreach gis:vertex-lists-of ? [
let location gis:location-of (first ?)
create-scooters 1 [
set color yellow
set size 1
set xcor item 0 location
set ycor item 1 location
let nearest-node min-one-of (nodes in-radius 10)[distance myself]
set slocation nearest-node
move-to slocation
]
]
]
end
to go
ask walkers [
let new-location one-of [link-neighbors] of wlocation
move-to new-location
set wlocation new-location
]
ask scooters [
let new-location one-of [link-neighbors] of slocation
move-to new-location
set slocation new-location
]
end
我发现一些资源和示例代码特别有用:
- NetLogo附带的有关“行走”和“网络”的示例模型(&C)
- 邓肯·戈利彻: