2017-10-18 42 views
4

是否可以根據經度和緯度從KML文件獲取位置數據?當我使用npm node-geocoder時,我得到了Google提供的結果。但在這裏,我從這個文件中獲取KML文件,我需要得到結果。 請指導我從KML文件中獲取結果。使用node.js從KML文件獲取數據

下面是我使用從geocoder 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,"####"); 
}); 

回答

0

我假設您從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); 
     } 
}); 

希望它能幫助你!