我在
找到了我的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
答案 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))
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))