【发布时间】:2014-04-24 11:40:47
【问题描述】:
我有一个 NetLogo 模型,其中每只动物都占据一个“领土”,其中属于该动物的所有斑块都与该动物具有相同的颜色。然后,我使用 NetLogo 中的 R 扩展来创建围绕每个区域的最小凸多边形 (MCP),并将这些多边形导出为 shapefile。然后我使用 GIS 扩展将 GIS 文件重新导入 NetLogo。我这样做的理由与我之前发布的这个问题有关(NetLogo - applying values to patches within polygons)。也就是说,我可以使用gis:intersecting 为那些落在 GIS 导入的多边形内的补丁提供一个变量。创建 MCP、导出和导入的过程在每个时间步都完成,因为区域会在每个刻度上更新。除了导入的 shapefile 与原始多边形不完全对齐之外,一切都很好。附图显示了这一点,其中蓝色轮廓来自导入的 shapefile。 。我试过gis:set-world-envelope (list min-pxcor max-pxcor min-pycor max-pycor) 但无济于事。有谁知道我做错了什么,或者它是否是导出然后导入不存在投影的 shapefile 所固有的错误?这里的任何帮助都会很棒,因为让它们对齐可以解决几个问题,包括上一篇文章。整个代码很长,所以我在下面附上了一些最相关的sn-ps。谢谢!
extensions [r gis ]
breed [females female]
globals
[
hr-dataset
]
females-own
[
Name
X
Y
]
patches-own
[
is-hr?
]
to setup
clear-all
r:clear
...
ask n-of 5 patches
[
sprout-females 1
[
...
set X (list pxcor)
set Y (list pycor)
]
]
reset-ticks
end
to go
...
expand
calc-homerange
tick
end
to expand
repeat 10
[
ask females
[
move-to target
set X lput pxcor X
set Y lput pycor Y
]
]
end
to calc-homerange
r:eval "library(adehabitatHR)"
r:eval "library(sp)"
r:eval "library(rgdal)"
; create an empty data.frame"
r:eval "turtles <- data.frame()"
; merge the Name, X- and Y-lists of all females to one big data.frame
ask females
[
(r:putdataframe "turtle" "X" X "Y" Y)
r:eval (word "turtle <- data.frame(turtle, Name = '" Name "')")
r:eval "turtles <- rbind(turtles, turtle)"
]
; create SpatialPointsDataFrame
r:eval "spdf <- SpatialPointsDataFrame(turtles[1:2], turtles[3])"
r:eval "homerange <- mcp(spdf, percent = 100)"
r:eval "writeOGR(homerange, '.', 'homerange-rgdal', overwrite_layer = TRUE, driver = 'ESRI Shapefile')"
mark-homeranges
end
to mark-homeranges
clear-drawing
...
set hr-dataset gis:load-dataset "C:/Program Files (x86)/NetLogo 5.0.4/homerange-rgdal.shp"
gis:set-world-envelope (list min-pxcor max-pxcor min-pycor max-pycor)
gis:set-drawing-color blue
gis:draw hr-dataset 2
ask patches gis:intersecting hr-dataset
[
set is-hr? true
]
end
【问题讨论】: