adehabitat包的位置数据格式

时间:2011-10-28 10:06:19

标签: r

我有这种格式的文件:

ASCII format

第一行看起来像这样:

ncols 1440
nrows 720
xllcorner -180.0
yllcorner -90
cellsize 0.25
NODATA_value -9999

基本上我的世界在x方向(经度)上有1440'瓦片',在y方向(纬度)有720'瓦片'。每个“瓷砖”是一个长度为0.25度的正方形。我想我有xllcorner和yllcorner正确。我可以在R:

中绘制这样的地图
library("adehabitat")
bio1 <- import.asc("D:/ENFA/data.asc")
maps <- as.kasc(list(data = bio1))
image(maps, col = cm.colors(256), clfac = list(Aspect = cl))

地图看起来不错。

我想使用adehabitat包进行一些生态利基因子分析(ENFA),我对位置数据不太了解。基本上我现在把它们作为经度和纬度但我也可以生成“瓷砖指数”(例如左下角有纬度-90和经度-180所以'瓷砖指数'会是0,0-对吗? )。哪个是正确的位置数据格式?我会像这样使用ENFA代码:

locs <- read.table("D:/ENFA/Locs.txt", header = TRUE, sep="\t")
dataenfa1 <- data2enfa(maps, locs)
pc <- dudi.pca(dataenfa1$tab, scannf = FALSE)
enfa1 <- enfa(pc, dataenfa1$pr,scannf = FALSE)
hist(enfa1)

我将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:7)

将坐标保持为纬线形状的问题在于,在地球上的大多数地方,经度的长度与纬度不同。这可能会通过夸大某些方向上的距离来扭曲您的ENFA。

特别是如果您的数据来自相对较小的区域,我建议沿着W / E x轴和S / N y轴重新表示以米为单位的坐标。如果您的所有积分都在一个UTM zone内,那么您可以使用R包中的project()rgdal内进行转换:

以下是一个示例,taken from here

library(rgdal)

# Make a two-column matrix, col1 = long, col2 = lat
xy <- cbind(c(118, 119), c(10, 50))
# Convert it to UTM coordinates (in units of meters)
project(xy, "+proj=utm +zone=51 ellps=WGS84")
          [,1]    [,2]
[1,] -48636.65 1109577
[2,] 213372.05 5546301 

Bivand,Pebesma和Gomez-Rubio在“使用R的应用空间数据分析”中提供了有关如何操纵空间数据的更多信息。如果您需要更具体的帮助,请尝试R-sig-Geo mailing list

希望这有帮助。

答案 1 :(得分:1)

也许您想将坐标转换为

  

GHAM(全局,分层,字母数字和莫顿编码)

以任意精度的单元格表示地球(如您所希望的那样精细或粗糙),因此任何纬度/经度都有一个仍可排序的字母数字地址。

以下是来自GHAM: A compact global geocode suitable for sorting的摘要Duncan Agnew

  

GHAM代码是一种基于地理位置标记的技术   在他们的位置。它定义了有界的等面积单元的地址   通过不变的纬度和经度,任意精确的精度。   通过将Morton排序应用于递归来定义单元代码   划分为16乘16格,由此产生的数字编码成   字母对。如此标记的词汇列表   近邻(通常)靠近;测试各种   全局数据集显示,在大多数情况下,实际的最近点是   列表中相邻的时间占50%,而5个条目中占80%   时间。

源代码是IAMG存储库,但如果您无法访问它,我相信他会提供它。