Ошибка при использовании writeOGR {rgdal} для записи файла gpx

Я пытаюсь использовать writeOGR для создания файла точек gpx. writeOGR() создаст файл shp без ошибок, но если я попытаюсь записать файл KML или GPX, я получу эту ошибку. Я использую R 3.1.1 и rgdal 0.8-16 в Windows (я пробовал на 7 и 8, та же проблема).

writeOGR(points, driver="KML", layer="random_2014",dsn="C:/Users/amvander/Downloads")
Error in writeOGR(points, driver = "KML", layer = "random_2014", dsn = "C:/Users/amvander/Downloads") : 
Creation of output file failed

Именно в географических координатах, я уже понял, что это важно

summary(points)
Object of class SpatialPointsDataFrame
Coordinates:
        min       max
x -95.05012 -95.04392
y  40.08884  40.09588
Is projected: FALSE 
proj4string :
[+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0]
Number of points: 20
Data attributes:
       x                y              ID           
Min.   :-95.05   Min.   :40.09   Length:20         
1st Qu.:-95.05   1st Qu.:40.09   Class :character  
Median :-95.05   Median :40.09   Mode  :character  
Mean   :-95.05   Mean   :40.09                     
3rd Qu.:-95.05   3rd Qu.:40.09                     
Max.   :-95.04   Max.   :40.10       

str(points)
Formal class 'SpatialPointsDataFrame' [package "sp"] with 5 slots
..@ data       :'data.frame': 20 obs. of  3 variables:
.. ..$ x : num [1:20] -95 -95 -95 -95 -95 ...
.. ..$ y : num [1:20] 40.1 40.1 40.1 40.1 40.1 ...
.. ..$ ID: chr [1:20] "nvsanc_1" "nvsanc_2" "nvsanc_3" "nvsanc_4" ...
..@ coords.nrs : num(0) 
..@ coords     : num [1:20, 1:2] -95 -95 -95 -95 -95 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : NULL
.. .. ..$ : chr [1:2] "x" "y"
..@ bbox       : num [1:2, 1:2] -95.1 40.1 -95 40.1
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:2] "x" "y"
.. .. ..$ : chr [1:2] "min" "max"
..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slots
.. .. ..@ projargs: chr "+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0"

может ли кто-нибудь дать какие-либо рекомендации о том, как обойти эту ошибку?

Вот файлы, которые я использовал, и код.

https://www.dropbox.com/sh/r7kz3p68j58c189/AACH0U_PLH7Y6cZW1wdFLQTOa/random_2014


person Community    schedule 31.07.2014    source источник


Ответы (2)


вы уже поняли, что эти форматы будут принимать только географические координаты (широта-долгота, а не проекция), и, по крайней мере, для файлов GPX разрешены очень ограниченные поля, такие как «имя» для имени, «эле» для высоты и «время» для информация о дате и времени. Поля @data в вашем файле не совпадают с ними и вызывают ошибку. Можно написать эти дополнительные поля, используя

dataset_options="GPX_USE_EXTENSIONS=yes"

в этом случае они будут добавлены как подклассы в поле «расширения», но многие простые приемники GPS не будут читать или использовать эти поля. Чтобы создать очень простой файл путевых точек с именами, используйте следующую процедуру.

#I will use your dataset points

#if not already re-project your points as lat-long
ll_points <- spTransform(points, CRS("+proj=longlat + ellps=WGS84"))

# use the ID field for the names
ll_points@data$name <- ll_points@data$ID  

#Now only write the "name" field to the file
writeOGR(ll_points["name"], driver="GPX", layer="waypoints", 
   dsn="C:/whateverdir/gpxfile.gpx")

для меня это выполнило и создало рабочий файл gpx, который мой gps принял с отображаемыми именами.

person Wiebe    schedule 22.11.2014

У меня были некоторые проблемы с реализацией кода для ввода из простого data.frame, и я хотел предоставить полный код для тех, кто работает с такими данными (вместо шейп-файла). Это просто очень немного измененный ответ из ответа @Wiebe, без необходимости искать, как выглядели исходные данные @Auriel Fournier. Спасибо @Wiebe - ваш ответ тоже помог мне решить мою проблему.

Данные выглядят так:

dat
            name  Latitude Longitude
1 AP1402_C110617 -78.43262  45.45142
2 AP1402_C111121 -78.42433  45.47371
3 AP1402_C111617 -78.41053  45.45600
4 AP1402_C112200 -78.42115  45.53047
5 AP1402_C112219 -78.41262  45.50071
6 AP1402_C112515 -78.42140  45.43471

Код, чтобы получить его в GPX для источника карты с помощью writeOGR:

setwd("C:\\Users\\YourfileLocation")

dat <- structure(list(name = c("AP1402_C110617", "AP1402_C111121", "AP1402_C111617", 
"AP1402_C112200", "AP1402_C112219", "AP1402_C112515"), Latitude = c(-78.4326169598409, 
-78.4243276812641, -78.4105301310195, -78.4211498660601, -78.4126208020092, 
-78.4214041610924), Longitude = c(45.4514150332163, 45.4737126348589, 
45.4560042609868, 45.5304703938887, 45.5007103937952, 45.4347135938299
)), .Names = c("name", "Latitude", "Longitude"), row.names = c(NA, 
6L), class = "data.frame")

library(rgdal)
library(sp)

dat <- SpatialPointsDataFrame(data=dat,  coords=dat[,2:3], proj4string=CRS("+proj=longlat +datum=WGS84"))

writeOGR(dat,
         dsn="TEST3234.gpx", layer="waypoints", driver="GPX",
         dataset_options="GPX_USE_EXTENSIONS=yes")
person Nova    schedule 05.12.2014