Добавление препятствий и целей из шейп-файла в netlogo - PullRequest
0 голосов
/ 22 февраля 2019

Я новичок в NetLogo, поэтому заранее извиняюсь, если этот вопрос очень глупый.Я хотел бы создать агентную модель, в которой животные перемещаются по сложной местности в поисках источников воды.Движение должно быть наклонным, ограниченным крутыми склонами (> 25 °), а цели должны быть озерами.Для этого я использую реальный пример из данных ГИС, и мне уже удалось настроить мир, содержащий сетку высот ASCII, шейп-файл, содержащий линии, которые представляют склоны с более крутыми 25 градусами, и шейп-файл, содержащий области, представляющие озера.Я создал животных (коров) и нашел кодовую строку, указывающую им двигаться вниз по склону.Теперь я хотел бы сказать им

a) избегать уклонов> 25 °, используя шейп-файлы склона в качестве препятствий, и

b) идти к озерам, используя шейп-файлы озера в качестве целей

Может кто-нибудь помочь мне, как это кодировать?Спасибо заранее!Вот код, который я собрал до сих пор

breed [ cows cow ]

extensions [ gis ]
patches-own [ elevation ]

globals [ 
  slope-dataset
  lake-dataset
elevation-dataset
]

to setup-terrain

  clear-all

  reset-ticks

set slope-dataset gis:load-dataset "FILENAME.shp" ;;extent of GIS datasets is N42.3-43.4 and W120.0-121.1

set lake-dataset gis:load-dataset "FILENAME.shp"

set elevation-dataset gis:load-dataset "FILENAME.asc"

gis:set-world-envelope gis:envelope-of slope-dataset

gis:set-world-envelope gis:envelope-of lake-dataset

gis:set-world-envelope gis:envelope-of elevation-dataset

end

to display-slopes


gis:set-drawing-color red

gis:draw slope-dataset 0.5

end


to display-lakes

gis:set-drawing-color blue

gis:draw lake-dataset 2

end


to display-elevation-in-patches

gis:apply-raster elevation-dataset elevation

let min-elevation gis:minimum-of elevation-dataset

let max-elevation gis:maximum-of elevation-dataset

ask patches

[ ; note the use of the "<= 0 or >= 0" technique to filter out

; "not a number" values, as discussed in the documentation.

if (elevation <= 0) or (elevation >= 0)

[ set pcolor scale-color black elevation min-elevation max-elevation ] ]

end


to setup-cows

set-default-shape cows "cow"

create-cows 100 [

setxy random-pxcor random-pycor

set size 1

set color white
  ]

end


to move

move-to patch-here ;; go to patch center

let p min-one-of neighbors [elevation]

if [elevation] of p < elevation [

face p

move-to p ;; makes cows move to the next lower elevation patch, if no lower 
elevetion is present, cow doesn't move
  ]

end


to go

ask cows [

move
  ]
end  

1 Ответ

0 голосов
/ 08 марта 2019

Спасибо, Сет, я нашел решение, используя gis: intersects?Примитив, который вы предложили:

to display-slopes
ask patches gis:intersecting slope-dataset
[ set pcolor red ]
end 

to go
ask cows
[fd 1
avoid-ostacles]
tick
end

to avoid-obstacles 
ask cows [
if [pcolor] of patch-ahead 1 = red 
[rt 90 fd 1]] 
end 

Таким образом, я могу покрасить участки в красный цвет, которые пересекаются с шейп-файлом, содержащим набор векторных данных об уклоне, и затем попросить коров избегать и перемещаться по участкам, окрашенным в красный цвет.Еще раз спасибо!

...