我有一个NetLogo模型,其中每个动物占据一个“领土”,其中所有属于动物的斑块都与动物的颜色相同。然后,我使用NetLogo中的R扩展来创建一个最小凸多边形(MCP),并将这些多边形作为一个形状文件导出。然后,我使用地理信息系统扩展将该地理信息系统文件导入NetLogo。我这样做的理由与我之前发布的这个问题有关(NetLogo -将值应用于多边形内的补丁)。也就是说,我可以使用gis:intersecting为那些属于GIS导入多边形的补丁提供一个变量。创建MCP、导出和导入的过程是在每个时间步骤中完成的,因为区域会更新每个滴答。所有的工作良好,除了导入的shapefile没有完全对齐与原始多边形。所附的图像显示了这一点,其中蓝色轮廓来自导入的shapefile。

。我试过gis:set-world-envelope (list min-pxcor max-pxcor min-pycor max-pycor),但没有用。有人知道我是否做错了什么,或者它是否是导出并导入不存在投影的shapefile所固有的错误?这里的任何帮助都是很棒的,因为让它们对齐可以解决几个问题,包括上一篇文章。整个代码都很长,所以我在下面附加了一些最相关的代码片段。谢谢!
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发布于 2014-03-19 01:30:53
不错的屏幕截图,谢谢提供,它使问题很容易掌握。看起来离原点越远,差异越差,就像错误从原点辐射出来一样。
我知道推荐gis:set-world-envelope (list min-pxcor max-pxcor min-pycor max-pycor),但我想知道它是否真的是正确的。min/max-pxcor/pycor是最小和最大的补丁坐标,而不是最小和最大的海龟坐标。例如,如果max-pxcor是10,那么海龟的x坐标可以高达10.499999.,如果min-pxcor是-10,海龟的x坐标可以是低-10.5。因此,world-width是21,而不是20。
也许可以尝试将它更改为gis:set-world-envelope (list min-pxcor - 0.5 max-pxcor + 0.5 min-pycor - 0.5 max-pycor + 0.5),看看它是否修复了它。或者,如果它没有完全修复它,试着翻转标志,或者尝试1而不是0.5。从屏幕截图上看,这个问题确实是一个过场或0.5错误。
发布于 2014-03-19 04:28:00
我认为Seth是正确的,在将补丁坐标映射到世界坐标时,这是一个不一致的错误。这可能与这里提到的的错误有关。他提出的使用(list min-pxcor - 0.5 max-pxcor + 0.5 min-pycor - 0.5 max-pycor + 0.5)的解决方案应该有效。如果没有,把模型给我,如果我有时间的话,我会看看的。
发布于 2020-08-06 07:57:17
我也有同样的问题。我找到了一种更简单的方法来处理这两张地图的不对齐。
在我的例子中,一个是光栅地图,另一个是shapefile。两者都有着相同的世界范围。
解决方案是,当导入第一个文件"A“时,将”world-信封“设置为"A”文件。然后,在导入第二个文件"B“时,设置与文件"A”相同的“世界信封”。
https://stackoverflow.com/questions/22485341
复制相似问题