Проблема с использованием функции dist2isobath (пакет marmap) с проецированной системой координат - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть сетка с созданным в проецируемой системе координат (WGS84 зона 30N), и я пытаюсь извлечь наименьшее расстояние от всех ячеек сетки до побережья и до других изобат, используя функцию "dist2isobath" изКарта пакета.

Для этого я перепроецировал данные 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 голосов
/ 01 октября 2018

Под капотом dist2isobath() использует функцию dist2Line() из пакета geosphere, которая опирается на функцию pointsToMatrix() из того же пакета ( см. Код здесь ).pointsToMatrix() ожидает, что точки не будут спроецированы.

Поэтому я думаю, что все, что вам нужно сделать, это удалить проекцию ваших точек вместо проецирования батиметрии, полученной вами из etopo1.Для etopo1 уже используется WGS84, и dist2isobath() предназначен для работы с ним: вы будете получать только точные вычисления расстояний с непроецированными данными.

...