【问题标题】:Get data from KML file using node.js使用 node.js 从 KML 文件中获取数据
【发布时间】:2017-10-18 05:47:41
【问题描述】:

是否可以根据经纬度从 KML 文件中获取位置数据?当我使用npm node-geocoder 时,我得到了谷歌提供的结果。但是在这里我有来自这个文件的 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,"####");
});

【问题讨论】:

    标签: javascript node.js mongodb kml


    【解决方案1】:

    我假设您从 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 来做到这一点。

    您必须做的另一件事是拆分此标签&lt;gx:coord&gt;-16.9251961 32.6586912 0&lt;/gx:coord&gt; 的值,因为在同一个标​​签内首先有经度,然后是纬度。

    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);
          }
    });
    

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多