我正在尝试使用以下代码将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]
请注意,存在轻微的舍入差异,无论我如何编码世界信封,我都无法删除。在任何情况下,考虑到它是如此微小的差异,我不认为这是问题。
答案 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 ] ] )