使用apply-raster

时间:2016-06-08 12:55:33

标签: gis netlogo

我正在尝试使用以下代码将ascii(241行,463列)应用于netlogo:

set my-dataset "data/my-folder/my-file.asc"
resize-world 0 gis:width-of (gis:load-dataset my-dataset) - 1 0 gis:height-of (gis:load-dataset my-dataset) - 1
gis:set-world-envelope-ds (gis:envelope-of (gis:load-dataset my-dataset))
gis:apply-raster (gis:load-dataset my-dataset) my-variable

在resize-world命令中,我添加-1,因为netlogo从0开始,而gis:width-of从1开始。结果是一个netlogo世界,min-pycor 0 max-pycor 240和min-pxcor 0 max-pxcor 462(一个241x463世界),完全匹配我的ascii的大小。 gis-world envelop命令确保ascii和Netlogo世界的范围相似。我检查过这个,并且它再次完美匹配。

我面临的问题是,尽管netlogo行和列与ascii行和列匹配,但应用的ascii在y方向上移位1。 netlogo世界的第一行填充了零,而我的ascii的顶行填充了高值。

图:顶行为红色,显示0值,不应为0.

  • 有人知道问题是什么吗?或者如何正确地将ascii应用于netlogo世界,以便一个ascii值填充相应的netlogo补丁?

  • 也许除此之外:我可以阻止netlogo自动重新取样,这样我就可以确定netlogo中的值与我的ascii中的值相同。

感谢您的帮助

更多信息:

ascii header

NCOLS 463
NROWS 241
XLLCORNER 2.54710299910375
YLLCORNER 49.4941766658013
CELLSIZE 0.00833333333339921
NODATA_value -9999

netlogo信封:

 show gis:world-envelope
 observer: [2.5471029991037497 6.405436332467584 49.49417666580129 51.502509999150504]

我的文件信封:

 show gis:envelope-of gis:load-dataset my-dataset
 observer: [2.54710299910375 6.405436332467584 49.4941766658013 51.502509999150504]

请注意,存在轻微的舍入差异,无论我如何编码世界信封,我都无法删除。在任何情况下,考虑到它是如此微小的差异,我不认为这是问题。

  • 编辑:我通过将netlogo值导出到栅格并在ArcGIS中比较它们来检查实际发生的情况。这不是一个简单的重采样问题。实际上,顶行只是缺少值,没有移动值。此外,中间的列和行重复,导致一切从中间向下和向右移动。我添加了一个简单的插图,希望这可以澄清问题。

enter image description here

1 个答案:

答案 0 :(得分:2)

我进一步调查了,我认为错误源于apply-raster similar to the problem here.背后的代码

我分析了应用栅格on github的java代码,它似乎在使用gis范围执行某些操作时引用了世界的min-pxcor和min-pycor。由于真实边缘坐标与补丁中心坐标不相似,这可能导致问题?我不是一个java专家,它可能是进一步调查的东西(我可能错了..)。

无论如何,为了让我的ascii很好地适用于我的世界(设置为ascii的大小),我现在运行以下代码:

file-open "data/my-folder/my-file.asc"
let temp []
while [file-at-end? = false][repeat 6 [let header file-read-line] ; skip header
                             set temp lput file-read temp 
                              ]
file-close
(foreach sort patches temp
     [ ask ?1 [ set my-variable ?2 ] ] )