実装手順
1。クエリインターフェイス
ウェブサイトには、このタイプのインターフェイスがかなりあります。著者は、それを行うためにBaiduマップのインターフェイスを直接見つけました。呼び出されたAPIは、ジオコーディングAPIのジオコーディングサービスです。
リクエスト例:北京のバイドゥビルのジオコードクエリ
http://api.map.baidu.com/geocoder/v2/?ak=E4805d16520de693a3fe707cdc962045&callback=renderOption&output=json&address=百度大厦&city=北京市
これには、アプリケーションを作成するときにユーザーが生成する文字列であるAKパラメーターが必要であり、データを要求するときに呼び出される必要があります。
[知らせ]
作成されたアプリケーションはサーバー側タイプです
アプリケーションを作成するときに選択する2つの検証方法があります。 IPホワイトリストの検証を使用するか、検証にSNを使用することを選択できます。 2つの違いは、事前にIPアドレスを要求するときにIPアドレスを設定する必要があることです。死んだIPアドレスを事前に設定したくない場合は、SN検証を選択することもできます。これは、暗号化アルゴリズムとしてMD5を使用する検証方法です。
著者は、最初に検証のためにSNを選択しましたが、MD5署名を生成するためにCryptoと呼ばれ、検証を続けました。彼は、代わりに検証としてIPホワイトリストのみを使用できました。
2。NodeJSクエリ
通話用のインターフェイスを使用すると、データを要求する小さなスクリプトを記述できます。 Express、Superagent、およびEventProxyの3つの依存関係が必要です
Expressは軽量のWebアプリケーションです
Superagentは、クローラーがよく使用するライブラリであり、さまざまなリクエストをシミュレートできます。
EventProxyは同時コントローラーです
*簡単なクエリ
まず、地理的位置を取得できるかどうかを検出するための簡単なリクエストを書きましょう。
app.get( '/one'、function(req、res、next){var sk = 'yoursk' //アプリケーションのSK、address = 'beijing'; superagent.get( 'http://api.map.baidu.com/geocoder/v2/').query({address})。 Sk})次に、 http://localhost:8888/oneアクセスするブラウザを開きます
{status:0、result:{location:{lng:116.3956450378787867、lat:39.929985778024}、精度:0、信頼性:10、レベル: "city"}この情報を見ることができるとき、それはインターフェイスが成功することを意味します。ステータスが0でない場合は、返品コードステータステーブルを参照してください
なぜそれを要求するためにサーバーを開く必要があるのですか?作成したアプリケーションはサーバーであるため、リクエストするサーバーを構築する必要があります。
*バッチクエリ
さて、都市を照会することができます。次に、複数の都市のクエリを実施します。 Concurrency ControlにはEventProxyを使用します。あなたはそれをカウンターと考えることができます。イベントを聴き、対応する関数n回を実行するようにコマンドすることができます。
重要なコードは次のとおりです。
app.get( '/many'、function(req、res、next){var sk = 'yoursk'、addresses = ['beijing'、 'shenzhen'、 'guangzhou'、 'puning']; ep.after( 'getlocation'、address.length、function(locations){res.send); superagent.get( 'http://api.map.baidu.com/geocoder/v2/')。 })})})アクセスするためにブラウザを開きます: http://localhost:8888/many
[{住所: "Beijing"、res: "{" status ":0、" result ":{" location ":{" lng ":116.39564503787867、" lat ":39.92998577808024}、" precise ":" addersed ":" " "Shenzhen"、Res: "{" status ":0、" result ":{" location ":{" lng ":114.0259736573215、" lat ":22.546053546205248}、" precise ":0、" nows "}" City "、res:" {"status":0、 "result":{"location":{"lng":113.30764967515182、 "lat":23.12004910207623}、 "precise":0、 "confidence":12、 "level": "city"} "{" status ":0、" result ":{" location ":{" lng ":" lng ":116.07816590835329、" lat ":23.28895358314155}、" precise ":0、"信頼 ":14、"}}さて、バッチクエリに問題はありません。次に、nodejsを使用して、バックグラウンドエンジニアがスローしたExcelファイルを読み取ります。
3。NodeJSファイルの読み取りと書き込み
今回はさらに2つの依存関係が必要です。1つはNodeJS用のFSモジュールが組み込まれており、1つはExcelを読み書きするためのNode-XLSXライブラリです。
市のExcelファイルをルートディレクトリに投げ、別のスクリプトxls2js.jsを起動します。
var xlsx = require( 'node-xlsx')、fs = require( 'fs'); var file_path = './query_result.xlsx';var file_data = xlsx.parse(file_path);
次に、fs.writefileに電話して、抽出された都市を次のコードに書き込みます。
file_data.foreach(function(sheet、index){var sheetname = sheet.name // table name、sheetdata = sheet.data // table data、sheethead = sheetdata [0] //最初の行は一般的にヘッダーではありませんが、特定の1つではありません。 file_data_json、cities_name = []; file_data_json、function(err)console.log( 'Write data failed'、enrog( 'write file');static/address.jsonファイルを開くと、次の形式でテキストが表示されます。
{"cities_name":["北京、北京"、「北京、自治体地区 "、" Tianjin、Tianjin "]}4.包括的な手順2および3ローカルシティファイル、クエリのバッチ、および新しいファイルを書き込むインターフェイスを実現する
OK、このファイルを使用して、もう一度読んでからバッチクエリを実行できます。
app.get( '/'、function(req、res、next){var sk = 'yoursk'、addresses = []、file_path = './static/address.json'、file_path_towrite = './static/geocoder.json'、file_data; fs.readfile(file_path( 'fruction(err、err)) file '、return} file_son.parse(file_data.cities_name; [e ['location'] ['lng']、e ['location'] ['lat']; })})addresses.foreach(function(e、i){superagent.get( 'http://api.map.baidu.com/geocoder/v2/').query({address: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.Rusult.Location.Location.Location.Location.Location.Location.Location.Location {"lng":0、 "lat":0}5。地理的な場所を入力して地理的位置のバッチクエリを実行できるWebページを実装します。
これらはフロントエンドのものです、あなたがよく見える場合にそれらを書く方法
6。概要
上記は、nodejsを使用して緯度と経度のインターフェイスのバッチクエリを実装するすべての内容です。 Nodejsを使用しているすべての人に役立つことを願っています。