2017-10-18 1 views
4

Ist es möglich, Standortdaten aus der KML-Datei basierend auf dem Breiten- und Längengrad abzurufen? Wenn ich npm node-geocoder dieses Mal verwende, bekomme ich ein Ergebnis, das Google zur Verfügung gestellt hat. Aber hier habe ich KML-Datei von dieser Datei, die ich brauche, um das Ergebnis zu erhalten. Bitte führen Sie mich, um ein Ergebnis aus der KML-Datei zu erhalten.Abrufen von Daten aus der KML-Datei mithilfe von node.js

Unten: der Code, den ich benutze, um Daten von Geocoder API zu bekommen.

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,"####"); 
}); 

Antwort

0

Ich nehme an, Sie haben die KML-Datei von Ihrem Google Standortverlauf heruntergeladen.

Da KML basierend auf dem XML-Standard eine tagbasierte Struktur mit verschachtelten Elementen und Attributen verwendet, können Sie die read-xml package verwenden, um die Daten aus Ihrer KML-Datei abzurufen. Diese

ist, was Ihre KML-Datei sein sollte:

<?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> 

Dann habe ich den XML-Text Javascript Objekt/JSON Text konvertieren. Du musst diesen Schritt nicht machen, aber für mich ist es einfacher zu tun und zu erklären. Sie können das tun, indem Sie die xml-js package verwenden.

Eine andere Sache, die Sie tun müssen, ist den Wert dieses Tags <gx:coord>-16.9251961 32.6586912 0</gx:coord> zu teilen, da Sie zuerst den Längengrad und dann den Breitengrad innerhalb desselben Tags haben.

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

Ich hoffe, es könnte Ihnen helfen!

Verwandte Themen