首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NetLogo -与导入的GIS shapefiles不对齐

NetLogo -与导入的GIS shapefiles不对齐
EN

Stack Overflow用户
提问于 2014-03-18 16:27:44
回答 3查看 1.1K关注 0票数 2

我有一个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所固有的错误?这里的任何帮助都是很棒的,因为让它们对齐可以解决几个问题,包括上一篇文章。整个代码都很长,所以我在下面附加了一些最相关的代码片段。谢谢!

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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错误。

票数 1
EN

Stack Overflow用户

发布于 2014-03-19 04:28:00

我认为Seth是正确的,在将补丁坐标映射到世界坐标时,这是一个不一致的错误。这可能与这里提到的的错误有关。他提出的使用(list min-pxcor - 0.5 max-pxcor + 0.5 min-pycor - 0.5 max-pycor + 0.5)的解决方案应该有效。如果没有,把模型给我,如果我有时间的话,我会看看的。

票数 2
EN

Stack Overflow用户

发布于 2020-08-06 07:57:17

我也有同样的问题。我找到了一种更简单的方法来处理这两张地图的不对齐。

在我的例子中,一个是光栅地图,另一个是shapefile。两者都有着相同的世界范围。

解决方案是,当导入第一个文件"A“时,将”world-信封“设置为"A”文件。然后,在导入第二个文件"B“时,设置与文件"A”相同的“世界信封”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22485341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档