【问题标题】:error in applying an ascii to netlogo with apply-raster使用 apply-raster 将 ascii 应用于 netlogo 时出错
【发布时间】:2016-06-08 12:55:33
【问题描述】:

我正在尝试使用以下代码将 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 命令确保范围与 Netlogo 世界的 ascii 相似。我检查了这个,它再次完美匹配。

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

图:顶行是红色的,显示 0 值,它们不应该是 0。

  • 有人知道问题出在哪里吗?或者如何正确地将 ascii 应用到 netlogo 世界,以便一个 ascii 值填充相应的 netlogo 补丁?

  • 也许除了这个:我可以阻止 netlogo 自动重新采样,这样我就可以确定 netlogo 中的值与我的 ascii.

感谢您的帮助

更多信息:

ascii 头文件

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 中进行比较来检查实际发生的情况。这不是一个简单的重采样问题。实际上,顶行只是缺少值,没有移位值。此外,中间的列和行重复,导致所有内容从中间向外移动到底部和右侧。我添加了一个简单的插图,希望这可以澄清问题。

【问题讨论】:

    标签: gis netlogo


    【解决方案1】:

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

    我分析了apply rasteron 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 ] ] )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多