Etapas de implementação
1. Interface de consulta
Existem algumas interfaces desse tipo no site. O autor encontrou diretamente a interface do Baidu Maps para fazê -lo. A API chamada é um serviço de geocodificação na API de geocodificação.
Exemplo de solicitação: Consulta Geocode do Buidu Building em Pequim
http://api.map.baidu.com/geocoder/v2/?ak=E4805d16520de693a3fe707cdc962045&callback=renderOption&output=json&address=百度大厦&city=北京市
Isso requer um parâmetro AK, que é uma sequência gerada pelo usuário ao criar um aplicativo e precisa ser chamada ao solicitar dados.
[Perceber]
O aplicativo criado é o tipo de servidor
Existem dois métodos de verificação para escolher ao criar um aplicativo. Você pode optar por usar a verificação da lista de permissões IP ou usar SN para verificação. A diferença entre os dois é que o IP precisa definir o endereço IP quando você o solicita com antecedência. Se você não deseja definir o endereço IP morto com antecedência, também poderá escolher a verificação do SN. Este é o método de verificação usando o MD5 como o algoritmo de criptografia.
O autor escolheu SN para verificação no início, mas chamou a Crypto para gerar assinaturas de MD5 e continuou a verificando. Ele só podia usar a lista de permissões IP como verificação.
2. Consulta NodeJS
Com uma interface para chamada, podemos escrever um pequeno script para solicitar dados. Precisamos de três dependências, nomeadamente expressas, superagentes e eventproxy
Express é um aplicativo da Web leve
SuperAgent é uma biblioteca que é frequentemente usada por rastreadores, que pode simular várias solicitações.
EventProxy é um controlador simultâneo
* Consulta simples
Primeiro, vamos escrever uma solicitação simples para detectar se a localização geográfica pode ser obtida:
App.get ('/One', function (req, res, o próximo) {var sk = 'itensk' // Crie o sk do aplicativo, endereço = 'beijing'; superaGent.get ('http://api.map.baidu.com/geocoder/v2/') .query ({{endereço}). sk}) .nd (function (err, sres) {if (err) {console.log ('err:', err); return;} res.send (sres.text);})}) Em seguida, abra o navegador para visitar: http://localhost:8888/one
{Status: 0, Resultado: {Localização: {lng: 116.39564503787867, Lat: 39.92998577808024}, precisão: 0, confiança: 10, nível: "cidade"}Quando você pode ver essas informações, significa que a interface é bem -sucedida. Se o status não for 0, consulte a tabela de status de código de retorno
Por que precisamos abrir um servidor para solicitá -lo? Como o aplicativo que criamos é um servidor, precisamos criar um servidor para solicitá -lo.
* Consulta em lote
Ok, uma cidade pode ser consultada. Em seguida, realizaremos consultas várias cidades. Usamos o EventProxy para controle de simultaneidade. Você pode pensar nisso como um contador. Você pode comandar para ouvir um evento e executar a função correspondente n vezes.
O código -chave é o seguinte:
App.get ('/muitos', function (req, res, o próximo) {var sk = 'yoursek', endereços = ['beijing', 'shenzhen', 'guangzhou', 'punindo']; ep.after ('getLocation', endereços.Length, function (Locations) {SERSEND (Locações); SuperaGent.get ('http://api.map.baidu.com/geocoder/v2/') .Query ({endereço: e}) .Query ({output: 'json'}) .Query ({ak: sk}). })})})}) Abra o navegador para acessar: http://localhost:8888/many
[{Endereço: "Pequim", res: "{" status ": 0," resultado ": {" location ": {" lng ": 116.39564503787867," Lat ": 39.92998577808024}," precise ":}}:" 10: 10: 10: "10:" 10998577808084} ","}}}: "10: 10: 10:" 10: " "Shenzhen", res: "{" status ": 0," resultado ": {" location ": {" lng ": 114.0259736573215," lat ": 22.546053546205248}," precise ": 0," confiança ": 143546205248," precise ": 0," confiança ": 14," "": ":": ":": City",res: "{"status":0,"result":{"location":{"lng":113.30764967515182,"lat":23.12004910207623},"precise":0,"confidence":12,"level":"city"}}"},{address: "Puning City",res: "{" status ": 0," resultado ": {" location ": {" lng ": 116.07816590835329," Lat ": 23.28895358314155}," preciso ": 0," confiança ": 14": "District"}} "]Ok, não há problema com a consulta em lote. Em seguida, usaremos o NodeJS para ler o arquivo do Excel lançado pelo engenheiro de segundo plano.
3. Nodejs Leia e grava arquivos
Desta vez, precisamos de mais duas dependências, uma é um módulo FS integrado para o NodeJS e um é o Node-XLSX Library para ler e escrever Excel
Jogue o arquivo do Excel da cidade no diretório raiz e inicie outro script xls2js.js:
var xlsx = requer ('node-xlsx'), fs = requer ('fs'); var file_path = './Query_result.xlsx';Em seguida, ligue para FS.WriteFile para escrever a cidade extraída para o seguinte código:
file_data.foreach (function (folha, índice) {var sheetname = chaphe.name // Nome da tabela, SheetData = Sheet.data // Dados da tabela, sheeTead = sheetData [0] // a primeira linha é geralmente um cabeçalho, mas não um certo, sheetbybody = '' '/. file_data_json, cidades_name = []; file_data_json, function (err) {if (err) console.log ('Dados de gravação falhou', err);Abra o arquivo estático/endereço.json e você verá o texto no seguinte formato:
{"cities_name": ["Pequim, Pequim", "Pequim, distrito municipal", "Tianjin, Tianjin"]}4. Etapas abrangentes 2 e 3 para realizar uma interface que lê arquivos da cidade local, lotes de consultas e grava novos arquivos
OK, com este arquivo, podemos lê -lo novamente e depois executar a consulta em lote:
App.get ('/', function (req, res, next) {var sk = 'yoursk', endereços = [], file_path = './static/address.json', file_path_towrite = './static/geocoder.json', file_data; finaRet (FILHILE (FILHO_PATH, (FILHO (FILHO) (FILHO (FILHA (FILHA) (FILHA) (FILDRITE) (FILDRITE) (FILDRATE) (FILDRATE). arquivo ', err); [e ['localização'] ['lng'], e ['localização'] ['lat']]; })}) endereços.ForEach (function (e, i) {SuperaGent.get ('http://api.map.baidu.com/geocoder/v2/') .Query ({{'split (','). junção (')). 'JSON'}) .Query ({ak: sk}) .nd (function (err, sres) {var location, res_json; res_json = json.parse (sres.text); if (res_json.status == 0) {location = res_json.Result && res_json.rsult == 0) {location = res_json.Result &&_json.r.Lson.Lonocation; {"LNG": 0, "Lat": 0};5. Implemente uma página da web, que pode inserir o local geográfico para realizar a consulta em lote da localização geográfica.
Essas são as coisas do front-end, como escrevê-las se você parecer bem
6. Resumo
O exposto acima é todo o conteúdo do uso do NodeJS para implementar a consulta em lote das interfaces de latitude e longitude. Espero que seja útil para todos que usam o NodeJS.