Implementierungsschritte
1. Abfrageschnittstelle
Es gibt einige Schnittstellen dieses Typs auf der Website. Der Autor fand direkt die Schnittstelle von Baidu -Karten, um dies zu tun. Die API, die als Geokodierungsdienst in der Geocoding -API bezeichnet wird.
Anfrage Beispiel: Geocode -Abfrage des Baidu -Gebäudes in Peking
http://api.map.baidu.com/geocoder/v2/?ak=E4805d16520de693a3fe707cdc962045&callback=renderOption&output=json&address=百度大厦&city=北京市
Dies erfordert einen AK -Parameter, bei dem es sich um eine Zeichenfolge handelt, die vom Benutzer beim Erstellen einer Anwendung generiert wird und bei der Anforderung von Daten aufgerufen werden muss.
[Beachten]
Die erstellte Anwendung ist serverseitiger Typ
Beim Erstellen einer Anwendung stehen zwei Überprüfungsmethoden zur Auswahl. Sie können die Überprüfung der IP -Whitelist oder zur Überprüfung verwenden. Der Unterschied zwischen den beiden besteht darin, dass die IP die IP -Adresse festlegen muss, wenn Sie sie im Voraus anfordern. Wenn Sie die tote IP -Adresse nicht im Voraus festlegen möchten, können Sie auch die SN -Überprüfung auswählen. Dies ist die Verifizierungsmethode mit MD5 als Verschlüsselungsalgorithmus.
Der Autor hat SN zu Beginn zur Überprüfung ausgewählt, rief jedoch Krypto an, um MD5 -Signaturen zu erzeugen und zu überprüfen, und es weiterhin überprüfte. Er konnte den IP -Whitelist stattdessen nur als Überprüfung verwenden.
2. NodeJS -Abfrage
Mit einer Schnittstelle für Anruf können wir ein kleines Skript schreiben, um Daten anzufordern. Wir brauchen drei Abhängigkeiten, nämlich Express, Superagent und EventProxy
Express ist eine leichte Webanwendung
Superagent ist eine Bibliothek, die häufig von Crawlern verwendet wird, die verschiedene Anfragen simulieren kann.
EventProxy ist ein gleichzeitiger Controller
* Einfache Abfrage
Schreiben wir zunächst eine einfache Anfrage, um festzustellen, ob der geografische Ort erhalten werden kann:
app.get ('/One', Funktion (req, res, next) {var sk = 'minderk' // Erstellen Sie die Anwendung SK, Adresse = 'Beijing'; SuperAgent.get ('http://api.map.baidu.com/Geocoder/v2/') .query ({adress: adress}). sk}) .end (Funktion (err, sres) {if (err) {console.log ('err:', err); return;} Res.Send (sres.text);})}) Öffnen Sie dann den Browser zu besuchen: http://localhost:8888/one
{Status: 0, Ergebnis: {Ort: {lng: 116.39564503787867, lat: 39.9299857808024}, Präzision: 0, Vertrauen: 10, Level: "City"}Wenn Sie diese Informationen sehen können, bedeutet dies, dass die Schnittstelle erfolgreich ist. Wenn der Status nicht 0 ist
Warum müssen wir einen Server öffnen, um ihn anzufordern? Da die von uns erstellte Anwendung ein Server ist, müssen wir einen Server erstellen, um ihn anzufordern.
* Batch -Abfrage
Okay, eine Stadt kann gefragt werden. Als nächstes werden wir mehrere Städte abfragen. Wir verwenden EventProxy für die Parallelitätskontrolle. Sie können es als Zähler betrachten. Sie können befehlen, es für ein Ereignis zu hören und die entsprechende Funktion n -mal auszuführen.
Der Schlüsselcode lautet wie folgt:
app.get ('/viele', function (req, res, next) {var sk = 'yottk', adresses = ['pejing', 'shenzhen', 'Guangzhou', 'puning']; ep.After ('getlocation', adressive, adresgth, function (loten) {res.s.send (locations); superagent.get ('http://api.map.baidu.com/geocoder/v2/') .query ({adresse: e}) .query ({output: 'JSON'}) .Query ({ak: sk}) .end (function (err, sres) {ep.emit ('get) (' get: {adres. })})})}) Öffnen Sie den Browser zuzugreifen: http://localhost:8888/many
[{address: "Beijing",res: "{"status":0,"result":{"location":{"lng":116.39564503787867,"lat":39.92998577808024},"precise":0,"confidence":10,"level":"city"}}"},{address: "Shenzhen", res: "{" Status ": 0," Ergebnis ": {" Ort ": {" lng ": 114.0259736573215," lat ": 22.546053546205248}," präsis ": 0," Vertrauen ": 14," Level " City",res: "{"status":0,"result":{"location":{"lng":113.30764967515182,"lat":23.12004910207623},"precise":0,"confidence":12,"level":"city"}}"},{address: "Puning City",res: "{"status":0,"result":{"location":{"lng":116.07816590835329,"lat":23.28895358314155},"precise":0,"confidence":14,"level":"district"}}"}]Okay, es gibt kein Problem mit der Batch -Abfrage. Als nächstes werden wir NodeJs verwenden, um die vom Hintergrundingenieur geworfene Excel -Datei zu lesen.
3.. Nodejs Lesen und Schreiben von Dateien
Dieses Mal brauchen wir zwei weitere Abhängigkeiten, eines ist ein integriertes FS-Modul für NodeJs und eine ist die Node-XLSX-Bibliothek zum Lesen und Schreiben von Excel
Werfen Sie die Excel -Datei der Stadt in das Root -Verzeichnis und starten Sie ein anderes Skript XLS2Js.js:
var xlsx = required ('node-xlsx'), fs = required ('fs'); var file_path = './query_result.xlsx';var file_data = xlsx.parse (file_path);Rufen Sie dann fs.writeFile an, um die extrahierte Stadt in den folgenden Code zu schreiben:
file_data.forEach(function(sheet, index) { var sheetname = sheet.name // Table name, sheetdata = sheet.data // Table data, sheethead = sheetdata[0] // The first row is generally a header, but not a certain one, sheetbody = sheetdata.slice(1) // Real data, file_path_towrite = './static/address.json' , Datei_data_json, Cities_name = []; Datei_data_json, Funktion (err) {if (err) console.log ('Daten schreiben', err.Öffnen Sie die Datei static/address.json und Sie sehen Text im folgenden Format:
{"Cities_Name": ["Peking, Peking", "Peking, Gemeinde Distrikt", "Tianjin, Tianjin"]}4. Umfassende Schritte 2 und 3, um eine Schnittstelle zu realisieren, die lokale Stadtdateien, Stapel von Abfragen liest und neue Dateien schreibt
OK, mit dieser Datei können wir sie erneut lesen und dann eine Batch -Abfrage ausführen:
app.get ('/', function (req, res, next) {var sk = 'minderk', adresses = [], file_path = './static/address.json', File_path_towrite = './static/Geocoder.json', Datei_Data; Datei ', Err); [E ['Ort'] ['lng'], e ['Ort'] ['lat']; })}) adresses.foreach (Funktion (e, i) {superagent.get ('http://api.map.baidu.com/geocoder/v2/') .Query ({Adresse: e.Split (','). Join (')}) .query ({{City: E.Split: E.SPLIT (', '). 'json'}) .query ({ak: sk}) .end (function (err, sres) {var location, res_json; res_json = json.parse (sres.text); if (res_json.status == 0) {location = res_json.result && res_json {"lng": 0, "lat": 0};5. Implementieren Sie eine Webseite, mit der der geografische Standort eingebracht werden kann, um eine Batch -Abfrage des geografischen Standorts durchzuführen.
Dies sind die Front-End-Dinge, wie man sie schreibt
6. Zusammenfassung
Das obige ist der gesamte Inhalt der Verwendung von NodeJs zur Implementierung der Stapelabfrage von Breiten- und Längengrenzen. Ich hoffe, es wird für alle hilfreich sein, die NodeJs verwenden.