Pasos de implementación
1. Interfaz de consulta
Hay bastantes interfaces de este tipo en el sitio web. El autor encontró directamente la interfaz de los mapas de Baidu para hacerlo. La API llamada es un servicio de geocodificación en la API de geocodificación.
Ejemplo de solicitud: consulta de geocodos del edificio Baidu en Beijing
http://api.map.baidu.com/geocoder/v2/?ak=E4805d16520de693a3fe707cdc962045&callback=renderOption&output=json&address=百度大厦&city=北京市
Esto requiere un parámetro AK, que es una cadena generada por el usuario al crear una aplicación y debe llamarse al solicitar datos.
[Aviso]
La aplicación creada es tipo de servidor
Hay dos métodos de verificación para elegir al crear una aplicación. Puede optar por usar la verificación de la lista blanca IP o usar SN para la verificación. La diferencia entre los dos es que la IP debe establecer la dirección IP cuando la solicite por adelantado. Si no desea establecer la dirección IP muerta por adelantado, también puede elegir la verificación SN. Este es el método de verificación utilizando MD5 como algoritmo de cifrado.
El autor eligió SN para la verificación al principio, pero llamó a Crypto para generar firmas MD5 y siguió verificándolo. Solo podía usar la lista blanca IP como verificación.
2. Consulta de NodeJs
Con una interfaz para llamar, podemos escribir un pequeño script para solicitar datos. Necesitamos tres dependencias, a saber, Express, Superagent y EventProxy
Express es una aplicación web ligera
Superagente es una biblioteca que a menudo usa rastreadores, que puede simular varias solicitudes.
EventProxy es un controlador concurrente
* Consulta simple
Primero, escribamos una solicitud simple para detectar si se puede obtener la ubicación geográfica:
app.get ('/un', function (req, res, next) {var sk = 'suyok' // crea la aplicación sk, dirección = 'beijing'; superagent.get ('http://api.map.baidu.com/geocoder/v2/') .Query ({dirección: dirección}) .query ({salida: '}). sk}) .end (function (err, sres) {if (err) {console.log ('err:', err); return;} res.send (sres.text);})}) Luego abra el navegador para visitar: http://localhost:8888/one
{Estado: 0, resultado: {ubicación: {lng: 116.39564503787867, Lat: 39.92998577808024}, Precisión: 0, confianza: 10, nivel: "Ciudad"}Cuando puede ver esta información, significa que la interfaz es exitosa. Si el estado no es 0, consulte la tabla de estado del código de retorno
¿Por qué necesitamos abrir un servidor para solicitarlo? Debido a que la aplicación que creamos es un servidor, necesitamos crear un servidor para solicitarla.
* Consulta por lotes
Bien, se puede consultar una ciudad. A continuación, realizaremos consultas múltiples ciudades. Utilizamos EventProxy para el control de concurrencia. Puedes pensar en ello como un mostrador. Puede orientarlo que escuche un evento y ejecute la función correspondiente n Times.
El código clave es el siguiente:
app.get ('/Many', function (req, res, next) {var sk = 'suyok', direcciones = ['beijing', 'shenzhen', 'guangzhou', 'tocing']; ep.after ('getLocation', direccional.length, function (ubicaciones) {res.send (ubicaciones);}) direcciones. Superagent.get ('http://api.map.baidu.com/geocoder/v2/') .query ({dirección: e}) .query ({output: 'json'}) .query ({ak: sk}) .end (función (err, sres) {ep.emit ('getLocational', {dirección: e, res: e, res: s, res: s, res: s, sh. })})})}) Abra el navegador para acceder a: 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," Result ": {" ubicación ": {" lng ": 114.0259736573215," lat ": 22.546053546205248}," preciso ": 0," confianza ": 14," nivel ":" ciudad "}}}",}, {dirección " City",res: "{"status":0,"result":{"location":{"lng":113.30764967515182,"lat":23.12004910207623},"precise":0,"confidence":12,"level":"city"}}"},{address: "Puning City",res: "{" estado ": 0," resultado ": {" ubicación ": {" lng ": 116.07816590835329," lat ": 23.28895358314155}," preciso ": 0," confianza ": 14," nivel ":" Distrito "}"]]]Bien, no hay problema con la consulta por lotes. A continuación, usaremos NodeJS para leer el archivo de Excel lanzado por el ingeniero de fondo.
3. NodeJs leer y escribir archivos
Esta vez necesitamos dos dependencias más, uno es el módulo FS incorporado para NodeJS, y una es la biblioteca Node-XLSX para leer y escribir Excel
Tire el archivo de Excel de la ciudad al directorio raíz e inicie otro script xls2js.js:
var xlsx = request ('node-xlsx'), fs = require ('fs'); var file_path = './Query_result.xlsx';var file_data = xlsx.parse (file_path);Luego llame a Fs.WriteFile para escribir la ciudad extraída al siguiente código:
file_data.forEach (function (sheet, index) {var sheetname = sheet.name // name de tabla, sheetData = sheet.data // table data, sheethead = sheetData [0] // La primera fila es generalmente un encabezado, pero no cierto, sheetbody = sheetData.slice (1) // data real, file_path_towrite = './static/adress.JAT , Cities_name = []; // Escribe los datos de la ciudad en SheetBody.ForEach (Function (E, I) {Cities_name.Push ('' + E [1] + ',' + E [2])}) File_Data_Json = JSON.Stringify ({Cities_Name: Cities_Name}); function (err) {if (err) console.log ('escribir datos fallidos', err);Abra el archivo static/dirección.json y verá texto en el siguiente formato:
{"Cities_name": ["Beijing, Beijing", "Beijing, Distrito Municipal", "Tianjin, Tianjin"]}4. Pasos completos 2 y 3 para realizar una interfaz que lea archivos locales de la ciudad, lotes de consultas y escribe nuevos archivos
Ok, con este archivo, podemos leerlo nuevamente y luego realizar una consulta por lotes:
app.get ('/', function (req, res, next) {var sk = 'suyok', direcciones = [], file_path = './static/address.json', file_path_towrite = './static/geocoder.json', file_data; fs.readfile (file_path, function (err, data) {if ((err) {{»falló (» archivo ', err); [e ['ubicación'] ['lng'], e ['ubicación'] ['lat']];}) fs.writeFile (file_path_towrite, json.stringify (file_data), function (err) {if (err) console.log ('escribir datos fallido', err); else console.log ('get data and shreet exitoso'); }) direcciones.forEach (function (e, i) {superagent.get ('http://api.map.baidu.com/geocoder/v2/') .query ({dirección: e.split (','). Join ('' ')}) .Query ({City: e.split (', ') .query ({ak: sk}) .end (function (err, sres) {var ubicación, res_json; res_json = json.parse (sres.text); if (res_json.status == 0) {ubicación = res_json.result && res_json.result.location || ';} más {"lng": 0, "lat": 0};} ep.emit ('getLocation', {dirección: e, ubicación: ubicación})})})})})});})5. Implemente una página web, que puede ingresar la ubicación geográfica para realizar una consulta por lotes de la ubicación geográfica.
Estas son las cosas front-end, cómo escribirlas
6. Resumen
Lo anterior es todo el contenido de usar NodeJS para implementar una consulta por lotes de interfaces de latitud e longitud. Espero que sea útil para todos los que usen NodeJs.