Как читать историю местоположений 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
Ответы
Ответ 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)