我有一个在投影坐标系(WGS84区域30N)中创建的网格,我正在尝试使用以下函数使用“ dist2isobath”函数提取网格中所有像元到海岸以及其他等深线的最小距离。包marmap。
为此,我将ETOPO1数据(海洋测深法)重新投影为与网格数据相同的投影,然后使用“ dist2isobath”功能,但它给了我一个错误。显然,它仅适用于地理区域(请参见下面的错误)。您知道我该如何解决它,或者该功能是否可以与投影数据一起使用?
这是我使用的脚本和错误:
head(grid) # example of my data points
Lon Lat
1 -124195.7 4986652
2 -120195.7 4986652
3 -116195.7 4986652
4 -112195.7 4986652
5 -108195.7 4986652
6 -104195.7 4986652
summary(etopo1) # ETOPO1 already reprojected and converte to class "bathy" object
# Bathymetric data of class 'bathy', with 1329 rows and 709 columns
# Latitudinal range: 4306614.28 to 5618264.28 (4306614.28 N to 5618264.28 N)
# Longitudinal range: -550748.25 to 1203531.75 (550748.25 W to 1203171.75 E)
# Cell size: 79258.1 minute(s)
# Depth statistics:
# Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
# -5586.23 -4004.18 -99.56 -1392.81 244.61 2928.77 141413
# First 3 columns and rows of the bathymetric matrix:
# 4306614.27700283 4308466.88999718 4310319.50299153
# -550748.253167697 NA NA NA
# -549427.259191793 NA NA NA
# -548106.265215889 NA NA NA
## Try to obtain the closest distance to the coast
DistCoast <- dist2isobath(etopo1, grid[,1:2], isobath=0)
Error in .pointsToMatrix(p) : longitude < -360
答案 0 :(得分:0)
在后台,dist2isobath()
使用dist2Line()
程序包中的geosphere
函数,该函数依赖于同一程序包(see code here中的pointsToMatrix()
函数。 pointsToMatrix()
希望这些点不会投影。
因此,我想您要做的就是删除点的投影,而不是投影从etopo1获得的深度计。 etopo1的原点已经是WGS84,dist2isobath()
被设计为可以使用它:您将只获得具有未投影数据的精确距离计算。