Подтвердить что ты не робот

Как читать историю местоположений Google в R

Я нашел свою историю местоположений Google в

https://maps.google.co.uk/locationhistory/b/0/?hl=en-GB

Затем я загрузил файл KML

Я правильно установил rgdal, но не смог прочитать файл

Я поместил имя файла и имя слоя из https://gis.stackexchange.com/info/58131/how-to-efficiently-read-a-kml-file-into-r

 hist = readOGR(dsn="/home/ajay/Desktop/history-05-04-2015",layer="Location history from 05/05/2015 to 06/04/2015")

так выглядит файл

    <?xml version="1.0" encoding="UTF-8"?>
    <kml xmlns="http://www.opengis.net/kml/2.2"         xmlns:gx="http://www.google.com/kml/ext/2.2"       xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
 <name>Location history from 05/05/2015 to 06/04/2015</name>
<open>1</open>
<description/>
<StyleMap id="multiTrack">

Это ошибка

>Error in ogrInfo(dsn = dsn, layer = layer, encoding = encoding, use_iconv = use_iconv,  : 
 Cannot open file

Дополнительная информация

> ogrDrivers()
             name write
1          AVCBin FALSE
2          AVCE00 FALSE
3             BNA  TRUE
4             CSV  TRUE
5             DGN  TRUE
6            DODS FALSE
7             DXF  TRUE
8  ESRI Shapefile  TRUE
9      Geoconcept  TRUE
10        GeoJSON  TRUE
11         GeoRSS  TRUE
12            GML  TRUE
13            GMT  TRUE
14  GPSTrackMaker  TRUE
15            GPX  TRUE
16     Interlis 1  TRUE
17     Interlis 2  TRUE
18            KML  TRUE
19   MapInfo File  TRUE
20         Memory  TRUE
21          MySQL  TRUE
22           ODBC  TRUE
23           OGDI FALSE
24         PCIDSK FALSE
25           PGeo FALSE
26     PostgreSQL  TRUE
27            REC FALSE
28            S57  TRUE
29           SDTS FALSE
30         SQLite  TRUE
31          TIGER  TRUE
32        UK .NTF FALSE
33            VFK FALSE
34            VRT FALSE
35         XPlane FALSE

> sessionInfo()
R version 3.2.0 (2015-04-16)
Platform: i686-pc-linux-gnu (32-bit)
Running under: Ubuntu precise (12.04.5 LTS)

locale:
 [1] LC_CTYPE=en_IN.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_IN.UTF-8        LC_COLLATE=en_IN.UTF-8    
 [5] LC_MONETARY=en_IN.UTF-8    LC_MESSAGES=en_IN.UTF-8   
 [7] LC_PAPER=en_IN.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
 [11] LC_MEASUREMENT=en_IN.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods  
[7] base     

other attached packages:
[1] rgdal_0.9-3 sp_1.1-0   

loaded via a namespace (and not attached):
[1] tools_3.2.0     grid_3.2.0      lattice_0.20-31
4b9b3361

Ответ 1

library(jsonlite)
a=fromJSON("/home/rstudio/R/Takeout/Location History/LocationHistory.json")
b=as.data.frame(a)

mygoog=NULL
mygoog$latitude=b$locations.latitudeE7/10000000
mygoog$longitude=b$locations.longitudeE7/10000000
mygoog$time=as.POSIXct(as.numeric(b$locations.timestampMs)/1000 , origin="1970-01-01")


mygoog=as.data.frame(mygoog)


library(ggmap)
Map <- get_googlemap(center = c(lon = median(mygoog$longitude), lat = median(mygoog$latitude)),
                     zoom = 12, 
                     size = c(640, 640), 
                     scale = 2, maptype = c("terrain"), 
                     color = "color")

plot1 <- ggmap(Map) + 
  geom_path(data = mygoog, aes(x = longitude, y = latitude
                              ), 
            alpha = I(0.5), 
            size = 0.8)
suppressWarnings(print(plot1)) 

В течение 1 месяца истории местоположений данных

mygoog2=mygoog[time>"2015-09-21 12:09:31",,]
plot1 <- ggmap(Map) + 


geom_path(data = mygoog2, aes(x = longitude, y = latitude
                              ), 
            alpha = I(0.5), 
            size = 0.8)
suppressWarnings(print(plot1)) 

введите описание изображения здесь

Ответ 2

Я прочитал файл в trajectories:Track с помощью:

filename = "history-06-14-2015.kml"

library(XML)
kml <- xmlToList(filename)

tr = kml$Document$Placemark$Track
cc = which(names(tr) == "coord")
coord = t(sapply(kml$Document$Placemark$Track[cc], function(x) scan(text = x, quiet = TRUE)))[,1:2]
when = which(names(tr) == "when")
# convert the "-07:00" into " -0700" with sub:
time = strptime(sub("([+\\-])(\\d\\d):(\\d\\d)$", " \\1\\2\\3",
  unlist(kml$Document$Placemark$Track[when])), "%Y-%m-%dT%H:%M:%OS %z")


library(sp)
library(spacetime)
library(trajectories)
track = Track(STI(SpatialPoints(coord, CRS("+proj=longlat +ellps=WGS84")), 
    time))
summary(track)
plot(track, axes = TRUE)

Звонок sub обслуживает различные часовые пояса; R strptime не может считываться, например. -07: 00, но понимает -0700.

Вы можете преобразовать его в data.frame по:

as(track, "data.frame")

Совсем недавно (с июля 2015 года) google позволяет загрузить копию всех ваших данных. Вы можете импортировать json файл, полученный таким образом

library(jsonlite)
system.time(x <- fromJSON("Location History/LocationHistory.json"))
loc = x$locations
loc$time = as.POSIXct(as.numeric(x$locations$timestampMs)/1000, 
    origin = "1970-01-01")

loc$lat = loc$latitudeE7 / 1e7
loc$lon = loc$longitudeE7 / 1e7

library(sp)
loc.sp = loc
coordinates(loc.sp) = ~lon+lat
proj4string(loc.sp) = CRS("+proj=longlat +datum=WGS84")

library(spacetime)
library(trajectories)
tr = Track(STIDF(geometry(loc.sp), loc.sp$time, [email protected]))
plot(tr)

этот набор данных также содержит информацию о точности и классификации режимов активности.

Ответ 3

Обычно он должен работать следующим образом:

library(rgdal)
kml_fname <- "path/to/history-05-04-2015.kml"
tracks <- readOGR(kml_fname, ogrListLayers(kml_fname)[1])

Но я вижу:

Error in ogrInfo(dsn = dsn, layer = layer, encoding = encoding, use_iconv = use_iconv,  : 
  object 'keepGeoms' not found
In addition: Warning message:
In ogrFIDs(dsn = dsn, layer = layer) : no features found

Возможны проблемы с драйвером KML. Немного лучший драйвер LIBKML, но он не установлен для моей версии rgdal (и это сложно сделать).


Вы можете попробовать конвертировать KML файл в GML, используя GDAL с LIBKML. Например, из командной строки сначала запустите ogrinfo, чтобы узнать, можете ли вы прочитать файл с LIBKML, затем попробуйте запустить ogr2ogr в преобразуйте его:

ogrinfo history-05-04-2015.kml
INFO: Open of `history-05-04-2015.kml'
      using driver `LIBKML' successful.
1: history-05-04-2015
ogr2ogr -f GML history-05-04-2015.gml history-05-04-2015.kml

(Примечание: я также вижу "Предупреждение 1: Имя слоя" history-05-04-2015 ', скорректированное до' history_05_04_2015 'для действительности XML. ")

Тогда в R:

gml_fname <- "path/to/history-05-04-2015.gml"
tracks <- readOGR(gml_fname, ogrListLayers(gml_fname)[1])

который показывает

OGR data source with driver: GML 
Source: "C:\Users\mtoews\Downloads\history-05-04-2015.gml", layer: "history_05_04_2015"
with 1 features
It has 12 fields
Warning message:
In readOGR(gml_fname, ogrListLayers(gml_fname)[1]) : Z-dimension discarded

Но результат в противном случае отлично работает, например, plot(tracks)