WedX - журнал о программировании и компьютерных науках

Ошибка при повторном проецировании пространственных точек с использованием spTransform в rgdal R

Добрый день,
У меня есть большое количество координат долготы и широты, которые находятся в системе CRS Australian Geodetic Datum 66/84 (для краткости AGD66). Я хочу изменить эти координаты с AGD66 на WGS84, потому что между ними разница около 200 м, а у меня есть другие координаты и слои в WGS84. Я пытался сделать это:

lon        lat
147.1428   -43.49083

library(rgdal)
pts<-read.table(file.choose(),header=TRUE,sep=',')  
# I first project the pts in their original CRS
pts66<-project(cbind(pts$lon,pts$lat), "+init=epsg:4202")
# Then to transform it to WGS84
pts84 = spTransform(pts66,CRS("+init=epsg:3033"))

Error in function (classes, fdef, mtable)  : 
unable to find an inherited method for function "spTransform", for signature "matrix", "CRS"

Кто-нибудь знает, почему я получаю эту ошибку, или есть предложения, как изменить эти координаты с AGD66 на WGS84? Заранее благодарны за Вашу помощь.

С уважением,
Адам


Ответы:


1

Я удалил часть неверного ответа.

Функция project() не может выполнять преобразования данных, поэтому у вас может быть проблема, и я думаю, что у вас неправильно.

Проблема в том, что вы можете использовать только project() из/в лонглат на WGS84, поэтому ваше первое использование проекта неверно. Если я правильно понял, у вас есть координаты в AGD66, поэтому вы должны сначала назначить эту проекцию, а затем вы можете преобразовать. Вы не можете выполнять преобразования данных с помощью project(), но spTransform() может.

Я думаю, вам нужно это:

pts = read.table(text = "lon        lat
147.1428   -43.49083", header = TRUE)

## assign original coordinate system
pts66 = SpatialPoints(cbind(pts$lon,pts$lat), CRS("+init=epsg:4202"))

## Then to transform it to WGS84
pts84 = spTransform(pts66, CRS("+init=epsg:3033"))


pts66
SpatialPoints:
     coords.x1 coords.x2
[1,]  147.1428 -43.49083
Coordinate Reference System (CRS) arguments: +init=epsg:4202 +proj=longlat +ellps=aust_SA
+no_defs 

pts84
SpatialPoints:
     coords.x1 coords.x2
[1,]  11126605   2971806
Coordinate Reference System (CRS) arguments: +init=epsg:3033 +proj=lcc +lat_1=-68.5     +lat_2=-74.5
+lat_0=-50 +lon_0=70 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs
+towgs84=0,0,0 

Это означает, что pts66 не изменяются по сравнению с их первоначальными значениями, но у них есть правильные метаданные для следующего шага, который преобразует их в вашу цель (кстати, это конформная коническая форма Ламберта). Возможно, вам потребуется немного больше исследований, чтобы выяснить, что требуется.

CRS("+init=epsg:4202")
CRS arguments:
+init=epsg:4202 +proj=longlat +ellps=aust_SA +no_defs 

CRS("+init=epsg:3033")

CRS arguments:
+init=epsg:3033 +proj=lcc +lat_1=-68.5 +lat_2=-74.5 +lat_0=-50
+lon_0=70 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m
+no_defs +towgs84=0,0,0 

Ваш исходный проект() неправильно пытался преобразовать лонглат на WGS84 в лонглат на AGD66, но эта функция не может этого сделать, поэтому это просто добавило путаницы в смесь. Датум не является проекцией, это важная часть определения проекции, и в этом смысле «лонглат на AGD66» является проекцией так же, как и «Конформная коническая Ламберта на WGS84».

02.04.2012
  • Привет @mdsummer, спасибо за ответ. Я пробую это сейчас, но когда я пытаюсь сделать свою долготу/широту для SpatialPoint(), я получаю следующую ошибку: Ошибка в validObject(.Object): недопустимый объект класса «SpatialPoints»: bbox никогда не должен содержать значения NA. Любые идеи, что это значит, я проверил значения NA в наборе данных, но не могу их найти. Эти точки имеют связанные с ними переменные, с которыми возникают проблемы? В очередной раз благодарим за помощь. 04.04.2012
  • Пожалуйста, проигнорируйте комментарий выше. У меня отсутствовали данные в переменных, связанных с точками долготы/широты. 04.04.2012
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]