gpt4 book ai didi

javascript - 使用 node.js 从 KML 文件获取数据

转载 作者:可可西里 更新时间:2023-11-01 09:13:58 26 4
gpt4 key购买 nike

是否可以根据经纬度从 KML 文件中获取位置数据?当我使用 npm node-geocoder 时,我得到了 Google 提供的结果。但是在这里我有来自这个文件的 KML 文件,我需要得到结果。请指导我从 KML 文件中获取结果。

下面:我使用的代码从地理编码器 API 获取数据。

var NodeGeocoder = require('node-geocoder');
var options = {
provider: 'google',
// Optional depending on the providers
httpAdapter: 'https',
formatter: 'json'
};

var geocoder = NodeGeocoder(options);

var kmllatitude =req.body.latitude;
var kmllong =req.body.longitude;


geocoder.reverse({lat:kmllatitude, lon:kmllong}, function(err, res) {
console.log(err,"!!!!!!!!");
console.log(res,"####");
});

最佳答案

我假设您从 Google 位置记录下载了 KML 文件。

由于 KML 使用带有嵌套元素和属性的基于标记的结构,基于 XML 标准,您可以使用 read-xml package从您的 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 package 来做到这一点.

你要做的另一件事是拆分这个标签的值<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');

// If your file is located in a different directory than this javascript
// file, just change the directory path.
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}));

// If your KML file is different than the one I provided just change
// result.kml.Document.Placemark['gx:Track']['gx:coord'].
// As you can see it is similar with the KML file provided.
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;

// As I said before you have to split the returned value.
var coordinates = results.split(" ");
var longitude = coordinates[0];
var latitude = coordinates[1];
console.log("lat/long: " + latitude + ", " + longitude);
}
});

希望对您有所帮助!

关于javascript - 使用 node.js 从 KML 文件获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46803558/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com