0

R を使用して、Google マイ トラックによって作成された .kml ファイルから「いつ」の値を読み取りたいと考えています (以下の抜粋)。

 ?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:atom="http://www.w3.org/2005/Atom">
 <Document>
 <open>1</open>
 <visibility>1</visibility>
 <name><![CDATA[2013-06-29 1:09pm]]></name>
 <atom:author><atom:name><![CDATA[Created by Google My Tracks on Android.]]></atom:name>     </atom:author>

 ...

 <gx:MultiTrack>
 <altitudeMode>absolute</altitudeMode>
 <gx:interpolate>1</gx:interpolate>
 <gx:Track>
 <when>2013-06-29T17:09:04.564Z</when>
 <gx:coord>-79.305048 43.710639 72.9000015258789</gx:coord>
 <when>2013-06-29T17:09:06.135Z</when>
 <gx:coord>-79.304971 43.710653 67.4000015258789</gx:coord>
 <when>2013-06-29T17:09:08.135Z</when>
 <gx:coord>-79.305193 43.710535 78.19999694824219</gx:coord>
 <when>2013-06-29T17:09:09.135Z</when>

ノード「when」は、「(gx:coord要素で指定された)位置に対応する時間値」です。「gx:coord」は「経度、緯度、高度の3つの値からなる座標値」です。( https://developers.google.com/kml/documentation/kmlreference#gxtrack )

必要な値へのパスは次のとおりです。

 kml/Document/Placemark/gx:MultiTrack/gx:Track/when

from: xmlstarlet el "ファイル名.kml"

次を使用して座標と高度を抽出できました。

 coords <- xpathSApply(check, "//gx:coord", xmlValue)
 lat <- sapply(strsplit(as.character(coords)," "), "[",1)
 lon <- sapply(strsplit(as.character(coords)," "), "[",2)
 ele <- sapply(strsplit(as.character(coords)," "), "[",3)

しかし、私はその時に得ることができませんでした。ファイルから引き出したいのは次のとおりです。

 17:09:04.564
 17:09:06.135
 17:09:08.135
 17:09:09.135

そして、それらを座標と標高に合わせます。

私が試してみました:

timeStamp <- xpathSApply(check, "//gx:MultiTrack", xmlValue)

時間が「T」で始まり「Z」で終わるため、解析できる可能性のある文字列を取得します。

 [1] "absolute12013-06-29T17:09:04.564Z-79.305048 43.710639 72.90000152587892013-06-   29T17:09:06.135Z-79.304971 43.710653 67.40000152587892013-06-29T17:09:08.135Z-79.305193 43.710535 78.199996948242192013-06-29T17:09:09.135Z-79.305164 43.710592 77.699996948242192013-06-29T17:09:10.134Z-79.305097 43.710614 67.52013-06-29T17:09:11.137Z-79.305066 43.710572 

明るいアイデアはありますか?前もって感謝します。

編集 ------>

私の洗練されていない解決策:

 file_name <- "2013-06-29 1-09pm.kml"
 library(XML)
 # read XML tree schema
 check <-xmlInternalTreeParse(file=file_name)
 library(gsubfn)
 # read kml file into a string 
 z <- xpathSApply(check, "//gx:MultiTrack", xmlValue)
 # find text bounded by (and including) T and Z
 x <- strapply(z,"T.+?Z")
 # unpack the resulting list
 x1 <- unlist(x)
 # get rid of the initial T
 x2 <- gsub("T", "", x1)
 # get rid of the trailing Z
 x3 <- gsub("Z", "", x2)
 # convert it to a time format
 time <- strptime(x3, "%H:%M:%OS")
4

1 に答える 1