Не удается назначить проекцию объекту sp SpatialPointsDataFrame - PullRequest
0 голосов
/ 06 августа 2020

У меня есть SpatialPointsDataFrame с именем johnny, созданный из ванильного фрейма данных путем назначения координат. Эти координаты находятся в системе координат EPSG 4326 (стандартная система координат GPS geographi c), но Джонни этого не знает. Итак, я пытаюсь назначить EPSG 4326 Джонни, по сути, как в предыдущем вопросе проекция данных в R с использованием пакета SP . Я тоже пользуюсь sp. Моя конечная цель - спроецировать Джонни на projected_johnny. Однако я не могу сначала правильно назначить существующую проекцию. Кто видит мою ошибку?

library(sp)
x <- seq(80,90,by=1)
y <- seq(40,50,by=1)
value <- seq(10,20,by=1)
johnny <- data.frame(cbind(x,y,value))
coordinates(johnny) <- ~x+y
class(johnny)

[1] "SpatialPointsDataFrame"
attr(,"package")
[1] "sp"

proj4string(johnny) <- CRS("+init=epsg:4326")

Error in if (is.na(get("has_proj_def.dat", envir = .RGDAL_CACHE))) { : 
  argument is of length zero

Я рассмотрел и отклонил следующие возможные решения после их тестирования:

  1. Добавление библиотеки rdgal напрямую
  2. с использованием CRS ( "+ proj = longlat + datum = WGS84") вместо CRS ("+ init = epsg: 4326")

Я использую R 3.6.0 и sp 1.3-1. Версия rgdal, загружаемая через sp, - 1.5-15. Любые идеи приветствуются. Это должно быть такое простое действие ...

1 Ответ

1 голос
/ 06 августа 2020

Я просмотрел ваш код и догадался, чего вы, вероятно, пытаетесь достичь sh. Но то, как вы подходите к делу, гораздо больше, чем должно быть. Есть простой способ сделать это. Безусловно, самый простой способ сделать это sh - использовать инструменты из пакета R, sf. Знайте, что пакет sf более новый, чем пакет sp. А пакет sf предоставляет простые в использовании инструменты для выполнения этих задач.

Приведенный ниже код несколько отличается от вашего. Матрица из двух столбцов использовалась вместо вашего фрейма данных из трех столбцов.

Простые геометрические точки пространственных объектов были созданы из матрицы. Затем из геометрических точек был создан простой объект-столбец. Затем был создан график.

Код:

# Create matrix

x <- seq(80,90,by=1)
y <- seq(40,50,by=1)
# value <- seq(10,20,by=1)
#johnny <- data.frame(cbind(x,y))
jm <- matrix(data = c(x,y), nrow = 11, ncol = 2)

# coordinates(johnny) <- ~x+y
# class(johnny)
# johnny

Создать многоточечную геометрию SF:

jm.sfg <- st_multipoint(jm)
jm.sfg

Создать объект столбца SF:

jm.sfc <- st_sfc(jm.sfg, crs = 4326)
jm.sfc

Участок

plot(jm.sfc, axes = TRUE)

Участок можно посмотреть по ссылке ниже.

Участок

...