Langkah Implementasi
1. Antarmuka kueri
Ada beberapa antarmuka jenis ini di situs web. Penulis secara langsung menemukan antarmuka peta Baidu untuk melakukannya. API yang dipanggil adalah layanan geocoding di API geocoding.
Contoh Permintaan: Permintaan Geocode dari Baidu Building di Beijing
http://api.map.baidu.com/geocoder/v2/?ak=E4805d16520de693a3fe707cdc962045&callback=renderOption&output=json&address=百度大厦&city=北京市
Ini membutuhkan parameter AK, yang merupakan string yang dihasilkan oleh pengguna saat membuat aplikasi dan perlu dipanggil saat meminta data.
[Melihat]
Aplikasi yang dibuat adalah jenis sisi server
Ada dua metode verifikasi untuk dipilih saat membuat aplikasi. Anda dapat memilih untuk menggunakan verifikasi IP WhiteList atau menggunakan SN untuk verifikasi. Perbedaan antara keduanya adalah bahwa IP perlu mengatur alamat IP saat Anda memintanya terlebih dahulu. Jika Anda tidak ingin mengatur alamat IP mati terlebih dahulu, Anda juga dapat memilih verifikasi SN. Ini adalah metode verifikasi menggunakan MD5 sebagai algoritma enkripsi.
Penulis memilih SN untuk verifikasi di awal, tetapi memanggil crypto untuk menghasilkan tanda tangan MD5 dan terus memverifikasi. Dia hanya bisa menggunakan daftar putih IP sebagai verifikasi sebagai gantinya.
2. Kueri NodeJS
Dengan antarmuka untuk panggilan, kami dapat menulis skrip kecil untuk meminta data. Kami membutuhkan tiga dependensi, yaitu Express, Superagent, dan EventProxy
Express adalah aplikasi web yang ringan
Superagent adalah perpustakaan yang sering digunakan oleh crawler, yang dapat mensimulasikan berbagai permintaan.
EventProxy adalah pengontrol bersamaan
* Kueri sederhana
Pertama, mari kita tulis permintaan sederhana untuk mendeteksi apakah lokasi geografis dapat diperoleh:
app.get ('/one', function (req, res, next) {var sk = 'yourk' // buat skl aplikasi, alamat = 'beijing'; superagent.get ('http://api.map.baidu.com/geocoder/v2/') .Query ({address:} {{{} {{{} {{{{{{{{{') ({{{{{{{{{{') ({{{{{{{{{{{{') ({{{{{{{{{{{") sk}) .EnnD (function (err, sRes) {if (err) {console.log ('err:', err); return;} res.send (sres.text);})})) Kemudian buka browser untuk mengunjungi: http://localhost:8888/one
{Status: 0, hasilnya: {location: {lng: 116.39564503787867, Lat: 39.9299857808024}, presisi: 0, Keyakinan: 10, level: "City"}Ketika Anda dapat melihat informasi ini, itu berarti antarmuka berhasil. Jika statusnya bukan 0, silakan merujuk ke tabel status kode pengembalian
Mengapa kita perlu membuka server untuk memintanya? Karena aplikasi yang kami buat adalah server, kami perlu membangun server untuk memintanya.
* Kueri batch
Oke, kota bisa ditanya. Selanjutnya kami akan melakukan kueri beberapa kota. Kami menggunakan EventProxy untuk kontrol konkurensi. Anda dapat menganggapnya sebagai penghitung. Anda dapat memerintahkannya untuk mendengarkan suatu acara dan menjalankan fungsi yang sesuai N kali.
Kode kuncinya adalah sebagai berikut:
app.get ('/many', function (req, res, next) {var sk = 'yourk', addresses = ['beijing', 'shenzhen', 'guangzhou', 'puning']; ep.after ('getLocation', alamat. superagent.get ('http://api.map.baidu.com/geocoder/v2/') .Query ({alamat: e}) .query ({output: 'json'}) .p.p.plexes). })})})}) Buka browser untuk mengakses: 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," hasil ": {" lokasi ": {" lng ": 114.0259736573215," lat ": 22.546053546205248}," presise ": 0," kepercayaan diri ":" ":" ":" ":" ":" ":" ":" "." City ", res:" {"status": 0, "hasil": {"location": {"lng": 113.30764967515182, "lat": 23.12004910207623}, "precise": 0, "percaya": 12, "level": "city"}} "}," {"{12," level ":" City "}}} {" {12, " "{"status":0,"result":{"location":{"lng":116.07816590835329,"lat":23.28895358314155},"precise":0,"confidence":14,"level":"district"}}"}]Oke, tidak ada masalah dengan kueri batch. Selanjutnya, kami akan menggunakan nodeJs untuk membaca file Excel yang dilemparkan oleh insinyur latar belakang.
3. NodeJS membaca dan menulis file
Kali ini kita membutuhkan dua dependensi lagi, satu adalah modul FS bawaan untuk nodeJs, dan satu adalah pustaka node-xlsx untuk membaca dan menulis excel
Lemparkan file Excel kota ke direktori root dan mulai skrip lain xls2js.js:
var xlsx = membutuhkan ('node-xlsx'), fs = membutuhkan ('fs'); var file_path = './query_result.xlsx'; var file_data = xlsx.parse (file_path);Kemudian hubungi fs.writeFile untuk menulis kota yang diekstraksi ke kode berikut:
file_data.foreach (function (sheet, index) {var sheetname = sheet.name // nama tabel, sheetData = sheet.data // data tabel, sheethead = sheetData [0] // baris pertama umumnya header, tetapi bukan yang tertentu, sheettePeTe.slice (1) // Data Real, File_POCHBODE = SheetTiCE. file_data_json, cities_name = []; // Tulis data kota ke dalam sheetbody.foreach (fungsi (e, i) {cities_name.push ('' + e [1] + ',' + e [2])}) file_data_json = json.stringify ({{2]) {{{{{2]) fs.writeFile (file_path_towrite, file_data_json, function (err) {if (err) console.log ('tulis data gagal', err); else console.log ('tulis file berhasil');})}))Buka file static/address.json dan Anda akan melihat teks dalam format berikut:
{"Cities_Name": ["Beijing, Beijing", "Beijing, Distrik Kota", "Tianjin, Tianjin"]}4. Langkah Komprehensif 2 dan 3 untuk mewujudkan antarmuka yang membaca file kota lokal, batch kueri, dan menulis file baru
Oke, dengan file ini, kita dapat membacanya lagi dan kemudian melakukan kueri batch:
app.get ('/', function (req, res, next) {var sk = 'yourk', addresses = [], file_path = './static/address.json', file_path_towrite = '. baca 'err); [E ['Lokasi'] ['lng'], e ['Lokasi'] ['lat']];}) fs.writefile (file_path_towrite, json.stringify (file_data), fungsi (err) {if (err) console.log ('Write Data gagal', err); lainnya console.log) (if if (err) Data ('Write Data Gagal', err); lain Consol })}) addresses.foreach (function (e, i) {superagent.get ('http://api.map.baidu.com/geocoder/v2/') .Query ({{out {{{{{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.reCule. {"lng": 0, "lat": 0};5. Menerapkan halaman web, yang dapat memasukkan lokasi geografis untuk melakukan kueri batch dari lokasi geografis.
Ini adalah hal-hal front-end, cara menulisnya jika Anda terlihat bagus
6. Ringkasan
Di atas adalah semua konten menggunakan nodeJs untuk mengimplementasikan kueri batch antarmuka Latitude dan Longitude. Saya harap ini akan membantu semua orang yang menggunakan nodeJs.