我有来自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)
答案 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