我假设您已经从Google位置历史记录中下载了KML文件。
KML使用基于XML标准的基于标记的结构,具有嵌套元素和属性,因此您可以使用read-xml包从KML文件中获取数据。
以下是您的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'>
<Document>
<Placemark>
<open>1</open>
<gx:Track>
<altitudeMode>clampToGround</altitudeMode>
<when>2018-01-18T23:48:28Z</when>
<gx:coord>-16.9800841 32.6660673 0</gx:coord>
<when>2018-01-18T23:45:06Z</when>
...
<when>2013-12-05T09:03:41Z</when>
<gx:coord>-16.9251961 32.6586912 0</gx:coord>
</gx:Track>
</Placemark>
</Document>
</kml>
我将XML文本转换为JavaScript对象/JSON文本。你不一定需要做这一步,但是对我来说更容易操作和解释。
你可以使用xml-js包来完成这个步骤。
另外一个需要做的事情是分割这个标签<gx:coord>-16.9251961 32.6586912 0</gx:coord>
的值,因为它首先是经度,然后是纬度,全部在同一个标签中。
var fs = require('fs'),
path = require('path'),
xmlReader = require('read-xml');
var convert = require('xml-js');
var FILE = path.join(__dirname, './history.kml');
xmlReader.readXML(fs.readFileSync(FILE), function(err, data) {
if (err) {
console.error(err);
}
var xml = data.content;
var result = JSON.parse(convert.xml2json(xml, {compact: true, spaces: 4}));
for(var i = 0; i < result.kml.Document.Placemark['gx:Track']['gx:coord'].length; i++){
var results = result.kml.Document.Placemark['gx:Track']['gx:coord'][i]._text;
var coordinates = results.split(" ");
var longitude = coordinates[0];
var latitude = coordinates[1];
console.log("lat/long: " + latitude + ", " + longitude);
}
});
希望这能对您有所帮助!