如何在R中阅读我的Google位置记录

时间:2015-06-03 03:16:05

标签: r google-maps gis

我在

找到了我的Google位置记录

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

然后我下载了KML文件

我正确安装了rgdal但无法读取文件

我将文件名和图层名称设为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")

这就是文件的样子

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

3 个答案:

答案 0 :(得分:5)

我将文件读入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&#39 {s} strptime无法阅读,例如-07:00,但确实理解-0700。

您可以将其转换为data.frame

as(track, "data.frame")

最近(自2015年7月起),谷歌允许您download a copy of all your data。您可以导入由

获得的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, loc.sp@data))
plot(tr)

此数据集还具有准确度信息和活动模式分类。

答案 1 :(得分:2)

通常它应该像这样工作:

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版本没有安装(很难这样做)。

您可以尝试使用带有LIBKML的GDAL将KML文件转换为GML。例如,在命令提示符下,首先运行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

(注意:我也看到&#34;警告1:图层名称&#39;历史记录-05-04-2015&#39;已调整为&#39; history_05_04_2015&#39;用于XML有效性。&#34; )

然后在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)

答案 2 :(得分: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