Gis 如何在Netlogo中从形状文件中创建移动的海龟

Gis 如何在Netlogo中从形状文件中创建移动的海龟,gis,netlogo,Gis,Netlogo,我刚开始使用Netlogo创建一个基于代理的模型。我有两个要使用的形状文件:城市的网络地图(直线形状文件)和城市中摩托车的点形状文件。我们的想法是让他们沿着网络形状文件的线条在城市中穿行。因为我是Netlogo的新手,所以我只在模型中加载了这些形状文件。有没有人能给我一个起点,帮助我从踏板车注册(点)创建海龟,让它们在网络线路上移动。到目前为止,我在互联网上几乎找不到任何帮助,而且这种尝试和错误都不起作用。到目前为止,我的代码是: extensions [ gis ] to load ca

我刚开始使用Netlogo创建一个基于代理的模型。我有两个要使用的形状文件:城市的网络地图(直线形状文件)和城市中摩托车的点形状文件。我们的想法是让他们沿着网络形状文件的线条在城市中穿行。因为我是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
所以,据我所知,我需要一个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)
  • 邓肯·戈利彻: