将dist2isobath函数(marmap程序包)与投影坐标系一起使用时出现问题

时间:2018-09-28 13:33:39

标签: r utm

我有一个在投影坐标系(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

1 个答案:

答案 0 :(得分:0)

在后台,dist2isobath()使用dist2Line()程序包中的geosphere函数,该函数依赖于同一程序包(see code here中的pointsToMatrix()函数。 pointsToMatrix()希望这些点不会投影。

因此,我想您要做的就是删除点的投影,而不是投影从etopo1获得的深度计。 etopo1的原点已经是WGS84,dist2isobath()被设计为可以使用它:您将只获得具有未投影数据的精确距离计算。