作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚开始使用 Netlogo 创建基于代理的模型。我想使用两个形状文件:城市的网络 map (线形状文件)和城市中踏板车的点形状文件。这个想法是让他们沿着网络形状文件的线路穿过城市。由于我是 Netlogo 新手,我只能在我的模型中加载这些形状文件。有人可以帮助我从滑板车注册(点)创建海龟并让它们在网络线路上移动,从而给我带来先机。到目前为止,我在互联网上发现的帮助很少,而且它不会通过反复试验而起作用。到目前为止,我的代码就是这样:
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
所以,据我所知,我需要一个 to go 函数来移动海龟。我需要一个函数来从点形状文件中创建可能移动的海龟,但我还需要让他们知道只使用线条而不是整个区域。
非常感谢!
最佳答案
加载线条形状文件后,您需要将它们转换为代理/海龟网络并链接它们。 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
我发现一些特别有用的资源和示例代码:
关于gis - 如何从 Netlogo 中的 shapefile 创建移动的海龟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26929504/
我是一名优秀的程序员,十分优秀!