首页 文章

NetLogo - 导入的GIS shapefile未对齐

提问于
浏览
1

我有一个NetLogo模型,其中每只动物占据一个"territory",其中属于动物的所有斑块都与动物颜色相同 . 然后,我使用NetLogo中的R扩展来创建围绕每个区域的最小凸多边形(MCP),并将这些多边形导出为shapefile . 然后,我使用GIS扩展将GIS文件导回NetLogo . 我的理由与之前发布的这个问题(NetLogo - applying values to patches within polygons)有关 . 也就是说,我可以使用 gis:intersecting 为那些属于GIS导入的多边形的补丁提供变量 . 创建MCP,导出和导入的过程在每个时间步骤完成,因为区域更新每个滴答 . 除了导入的shapefile与原始多边形不完全对齐外,一切都很好 . 附图显示了这一点,其中蓝色轮廓来自导入的shapefile .
enter image description here
. 我试过 gis:set-world-envelope (list min-pxcor max-pxcor min-pycor max-pycor) 但无济于事 . 有没有人知道我是否附上了一些最相关的片段 . 谢谢!

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

2 回答

  • 1

    漂亮的屏幕截图,感谢提供,它使问题易于掌握 . 它看起来离原点越远,差异就越大,就像误差从原点辐射出来一样 .

    我知道GIS扩展文档建议 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的错误 .

  • 2

    我认为Seth是正确的,它是将贴片坐标映射到世界坐标时的一个一个错误 . 它可能与mentioned here的错误有关 . 他提出的使用 (list min-pxcor - 0.5 max-pxcor + 0.5 min-pycor - 0.5 max-pycor + 0.5) 的解决方案应该可行 . 如果没有,请把模型寄给我,如果我有时间,我会看看 .

相关问题