marmap包,getNOAA.bathy

时间:2014-02-20 10:22:09

标签: r

我有来自NE Atlantic的拖网数据的纬度和经度值矢量。不幸的是,这些职位没有深度信息。我以为我可以使用getNOAA.bathy(R中的包MARMAP)生成深度信息。该软件包还有一个名为get.depth()的函数,允许用户单击地图并在该位置生成深度。

所以我的问题是,我可以自动生成一个深度向量,从我的lat和lon向量中,而不是单击每个地图(我要做700个条目)吗?

##load package
library(marmap)

## generate bathymetric data
bio_depth<-getNOAA.bathy(-25, -5, 50, 68)
## vectors of lat, lon (reduced sample for demo purposes)
lat<-c(54.487, 54.487, 54.487, 54.535, 54.535)
lon<-c(-5.187, -5.187, -5.187, -5.267, -5.267)

2 个答案:

答案 0 :(得分:1)

是的,这可能比你想象的要容易。您创建的bio_depth矩阵实际上只是一个包含所有深度的大矩阵,纬度和经度为行名和列名。所以你可以直接提取这样的深度:

library(marmap)

## generate bathymetric data
bio_depth<-getNOAA.bathy(-25, -5, 50, 68)
## vectors of lat, lon (reduced sample for demo purposes)
lat<-c(54.487, 54.487, 54.487, 54.535, 54.535)
lon<-c(-5.187, -5.187, -5.187, -5.267, -5.267)

# Grab the lat/long from the row names
mat.lon <- as.numeric(rownames(bio_depth))
mat.lat <- as.numeric(colnames(bio_depth))

# For each lat/long, exact matches are unlikely, find the range 
# in which each one falls.
x<-findInterval(lon,mat.lon)
y<-findInterval(lat,mat.lat)
# Find depth of each lat/long
bio_depth[cbind(x,y)]
# [1] -108 -108 -108 -108 -108

答案 1 :(得分:1)

现在可以使用get.depth及更高版本中的新marmap 0.8功能来执行此操作。您所要做的就是:

library(marmap)

## generate bathymetric data
bio_depth<-getNOAA.bathy(-25, -5, 50, 68)

## vectors of lat, lon (reduced sample for demo purposes)
lat<-c(54.487, 54.487, 54.487, 54.535, 54.535)
lon<-c(-5.187, -5.187, -5.187, -5.267, -5.267)

get.depth(bio_depth, x=lon, y=lat, locator=F)

#      Lon    Lat Depth
# 1 -5.187 54.487  -108
# 2 -5.187 54.487  -108
# 3 -5.187 54.487  -108
# 4 -5.267 54.535  -126
# 5 -5.267 54.535  -126