2015-06-03 15 views
12

ho trovato il mio Google Cronologia delle posizioni inCome posso leggere il mio Google Location History in R

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

Ho poi scaricato il file delle KML

ho installato rgdal correttamente, ma sono in grado di leggere il file

ho messo il nome del file e lo strato di nome come da https://gis.stackexchange.com/questions/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") 
.515.053.691,36321 milioni

questo è il modo di file assomiglia

<?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"> 

Questo è l'errore

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

Informazioni aggiuntive

> 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 
+0

http://gis.stackexchange.com/questions/58131/how-to-efficiently-read-a-kml-file-into-r – lnNoam

+0

già fatto questo, ma non ha funzionato. vedi la struttura del file kml –

+0

'library (XML); kml <- xmlToList (xmlParse ("history-07-01-2013.kml")) 'ti fornisce la struttura come una lista da poter iterare sopra. – hrbrmstr

risposta

0
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)) 

For 1 months data location history

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)) 

enter image description here

5

ho letto un file in un oggetto trajectories:Track con:

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) 

La chiamata sub si prende cura di diversi fusi orari; R strptime non può essere letto ad es. -07: 00, ma capisce -0700.

è possibile convertirlo in un data.frame da:

as(track, "data.frame") 

Più recentemente (dal luglio 2015), Google ti consente di download a copy of all your data. È possibile importare il file json così ottenuto da

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) 

questo set di dati ha anche informazioni sulla precisione e classificazioni della modalità di attività.

+0

Per il fuso orario, è possibile modificarlo in: 'sub (" ([+ \\ -]) (\\ d \\ d): (\\ d \\ d) $ "," \\ 1 \\ 2 \\ 3 ", ...)' –

+0

Fantastico !! Grazie per la regexp intelligente, ho modificato la mia risposta di conseguenza. –

+0

Ricevo questo errore in checkSlotAssignment (oggetto, nome, valore): l'assegnazione di un oggetto di classe "S4" non è valida per lo slot 'time' in un oggetto di classe "STIDF"; è (valore, "xts") non è VERO –

2

Normalmente dovrebbe funzionare in questo modo:

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

Ma vedo:

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 

Probabilmente ci sono problemi con il driver KML. Un driver leggermente migliore è LIBKML, ma non è installato per la mia versione di rgdal (ed è difficile farlo).


Si potrebbe provare a convertire il file KML in un GML utilizzando GDAL con LIBKML. Ad esempio, dal prompt dei comandi, prima esecuzione ogrinfo per vedere se è possibile leggere il file con LIBKML, quindi provare a eseguire ogr2ogr di convertirlo:

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 

(Nota: vedo anche "Attenzione 1: nome Layer ' history-05-04-2015 'aggiustato a' history_05_04_2015 'per validità XML.")

Poi R:

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

che mostra

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 

Ma il risultato altrimenti funziona bene con, ad esempio plot(tracks)

Problemi correlati