gpt4 book ai didi

gis - 如何从 Netlogo 中的 shapefile 创建移动的海龟

转载 作者:行者123 更新时间:2023-12-01 16:07:31 25 4
gpt4 key购买 nike

我刚刚开始使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com