通过Node.js获取高德的省市区数据并插入数据库

通过Node.js获取高德的省市区数据并插入数据库

  • 1 创建秘钥
    • 1.1 登录高德地图开放平台
    • 1.2 创建应用
    • 1.3 绑定服务创建秘钥
  • 2 获取数据并插入
    • 2.1 创建数据库连接工具
    • 2.2 请求数据
    • 2.3 数据处理
    • 2.4 全部代码
  • 3 还可以打印文件到本地

1 创建秘钥

1.1 登录高德地图开放平台

打开开放平台地址

注册账号 或 申请账后

1.2 创建应用

在这里插入图片描述

1.3 绑定服务创建秘钥

在这里插入图片描述
在这里插入图片描述

2 获取数据并插入

将使用高德地图API https://restapi.amap.com/v3/config/district?parameters进行行政区域查询,API详细文档可看官方说明

2.1 创建数据库连接工具

const mysql = require('mysql');const pool = mysql.createPool({host: 'XXX',port: '3306',database: 'XXX',user: 'user',password: 'password',
});
function query(sql, data = {}) {return new Promise((resolve, reject) => {pool.getConnection(function (err1, connection) {if (err1) {reject(err1);}connection.query(sql, data, function (err2, rows) {connection.release();if (err2) {reject(err2);} else {resolve(rows);}});});});
}

2.2 请求数据

const requestUrl = "https://restapi.amap.com/v3/config/district"
const secretKey = "高德地图上的秘钥"
// 仅获取到区级const url = `${requestUrl}?keywords=中国&subdistrict=3&key=${secretKey}`let { data } = await axios.get(encodeURI(url))if (!data.districts ||data.districts.length !== 1 ||data.districts[0].name !== "中华人民共和国")throw Error("数据获取失败")

2.3 数据处理

for (const province of data.districts[0].districts) {// 排除香港、台湾、澳门。台湾、香港、澳门的数据具有一定的问题,台湾省下无具体市区(县)等行政单位,香港和澳门特别行政区仅有两级行政单位。if(["810000", "710000", "820000"].includes(province.adcode)) continue;let provinceData:Line = {address_code: province.adcode,address_name: province.name,parent_address_code: "0",create_time:new Date().getTime().toString(),}await sqlCommand('insert into t_address set ?', provinceData);for (const city of province.districts) {let cityData:Line = {address_code: city.adcode,address_name: city.name,parent_address_code: province.adcode,create_time:new Date().getTime().toString()}await sqlCommand('insert into t_address set ?', cityData);for (const area of city.districts) {let areaData:Line = {address_code: area.adcode,address_name: area.name,parent_address_code: city.adcode,create_time:new Date().getTime().toString()}await sqlCommand('insert into t_address set ?', areaData);}}console.log(`${province.name}数据插入完成`)
}

2.4 全部代码

import axios from "axios"
import mysql from "mysql"
export type Line = {address_code: stringaddress_name: stringparent_address_code: stringcreate_time: string
}
const requestUrl = "https://restapi.amap.com/v3/config/district"
const secretKey = "获取到的秘钥"
const pool = mysql.createPool({host: "XXX",port: "3306",database: "XXX",user: "user",password: "password",
});function sqlCommand(sql, data = {}) {return new Promise((resolve, reject) => {pool.getConnection(function (err1, connection) {if (err1) {reject(err1);}connection.query(sql, data, function (err2, rows) {connection.release();if (err2) {reject(err2);} else {resolve(rows);}});});});
}
async function main() {// 仅获取到:1.省级,2.市级,3.区级const url = `${requestUrl}?keywords=中国&subdistrict=3&key=${secretKey}`let { data } = await axios.get(encodeURI(url))if (!data.districts ||data.districts.length !== 1 ||data.districts[0].name !== "中华人民共和国")throw Error("数据获取失败")for (const province of data.districts[0].districts) {// 排除香港、台湾、澳门。台湾、香港、澳门的数据具有一定的问题,台湾省下无具体市区(县)等行政单位,香港和澳门特别行政区仅有两级行政单位。console.time(province.name)if(["810000", "710000", "820000"].includes(province.adcode)) continue;let provinceData:Line = {address_code: province.adcode,address_name: province.name,parent_address_code: "0",create_time:new Date().getTime().toString(),}await sqlCommand('insert into t_address set ?', provinceData);for (const city of province.districts) {let cityData:Line = {address_code: city.adcode,address_name: city.name,parent_address_code: province.adcode,create_time:new Date().getTime().toString()}await sqlCommand('insert into t_address set ?', cityData);for (const area of city.districts) {let areaData:Line = {address_code: area.adcode,address_name: area.name,parent_address_code: city.adcode,create_time:new Date().getTime().toString()}await sqlCommand('insert into t_address set ?', areaData);}}console.timeEnd(province.name)}console.log("所有数据处理完毕")
}
main()

3 还可以打印文件到本地

import axios from "axios"
import mysql from "mysql"
export type Line = {address_code: stringaddress_name: stringparent_address_code: stringcreate_time: string
}
const requestUrl = "https://restapi.amap.com/v3/config/district"
const secretKey = "获取到的秘钥"
const pool = mysql.createPool({host: "XXX",port: "3306",database: "XXX",user: "user",password: "password",
});
function sqlCommand(sql, data = {}) {return new Promise((resolve, reject) => {pool.getConnection(function (err1, connection) {if (err1) {reject(err1);}connection.query(sql, data, function (err2, rows) {connection.release();if (err2) {reject(err2);} else {resolve(rows);}});});});
}
// 打印JSON到根目录
function writeToJson(fileName: string, data: any) {if (!fs.existsSync(resolve(process.cwd(), "dist"))) {fs.mkdirSync(resolve(process.cwd(), "dist"));}const path = resolve(process.cwd(), "dist", fileName);return fs.writeFileSync(path, JSON.stringify(data));
}
async function main() {// 仅获取到:1.省级,2.市级,3.区级const url = `${requestUrl}?keywords=中国&subdistrict=3&key=${secretKey}`;let { data } = await axios.get(encodeURI(url));const datas = [];if (!data.districts ||data.districts.length !== 1 ||data.districts[0].name !== "中华人民共和国")throw Error("数据获取失败");for (const province of data.districts[0].districts) {// 排除香港、台湾、澳门。台湾、香港、澳门的数据具有一定的问题,台湾省下无具体市区(县)等行政单位,香港和澳门特别行政区仅有两级行政单位。console.time(province.name);if (["810000", "710000", "820000"].includes(province.adcode)) continue;let provinceData: Line = {address_code: province.adcode,address_name: province.name,parent_address_code: "0",create_time: new Date().getTime().toString(),};await sqlCommand("insert into t_address set ?", provinceData);datas.push(provinceData);for (const city of province.districts) {let cityData: Line = {address_code: city.adcode,address_name: city.name,parent_address_code: province.adcode,create_time: new Date().getTime().toString(),};await sqlCommand("insert into t_address set ?", cityData);datas.push(cityData);for (const area of city.districts) {let areaData: Line = {address_code: area.adcode,address_name: area.name,parent_address_code: city.adcode,create_time: new Date().getTime().toString(),};await sqlCommand("insert into t_address set ?", areaData);datas.push(areaData);}}console.timeEnd(province.name);}writeToJson("mapData", datas);console.log("所有数据处理完毕");
}
main();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/155733.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MATLAB源码-第46期】基于matlab的OFDM系统多径数目对比,有无CP(循环前缀)对比,有无信道均衡对比。

操作环境: MATLAB 2022a 1、算法描述 OFDM(正交频分复用)是一种频域上的多载波调制技术,经常用于高速数据通信中。以下是关于多径数目、有无CP(循环前缀)以及有无信道均衡在OFDM系统中对误码率的影响&am…

@所有燃气企业,城燃企业数字化转型重点抓住的八个关键点

关键词:智慧燃气、燃气数字化、设备设施数字化 数字化转型是用信息技术全面重塑企业经营管理模式,是企业发展模式的变革创新,是企业从工业经济时代迈向数字经济时代的必然选择。加快推进企业数字化转型,打造数字时代企业业务运行…

数据结构题型17-树、森林

文章目录 1 树转换为二叉树2 森林转换为二叉树3 二叉树转换为树4 二叉树转换为森林 1 树转换为二叉树 参考博客:如何将一棵树转化成二叉树 2 森林转换为二叉树 参考博客:树、森林与二叉树的转换 3 二叉树转换为树 参考博客:树、森林与…

【PyQt5图形界面编程(4)】:界面开发

界面开发 需求开发思路开发过程QTreeWidget问题1、item文本如果过长,显示不完全,出现省略号 开发1、获取当前鼠标选中的行,进而显示对应的属性 QStackedWidget:堆栈窗体总结 需求 开发一个界面,用于配置具体功能属性&…

如何使用数字化系统赋能企业营销?数字化系统对于企业的作用?

数字化系统对于企业的营销活动能够提供多方面的帮助。 1. 数字化系统可以帮助企业更精准地了解客户的需求和行为,从而更好地定位产品和服务。如蚓链数字化营销系统可以通过数据分析和挖掘,帮助企业深入了解客户群体的特点和喜好,进而调整企业…

成都瀚网科技有限公司:怎么优化抖店体验分?

近年来,抖音电商平台凭借强大的用户基础和广阔的销售渠道吸引了越来越多的商家入驻。然而,对于新手卖家来说,提高抖店经验值却成了一件头疼的事情。那么,如何优化抖店体验分呢?本文将从产品质量、服务态度、运营策略等…

构建精致 Chrome 插件:开箱即用的 TypeScript 模板 | 开源日报 No.51

tonsky/FiraCode Stars: 72.7k License: OFL-1.1 Fira Code 是一种免费的等宽字体,具有编程连字符。 Fira Code 提供了丰富多样的箭头和标点符号调整功能。Fira Code 支持各种不同的字符变体、风格集和其他字体特性,以满足用户个性化需求。Fira Code …

React Native从0到1开发一款App

先贴上项目地址,有需要的大佬可以去github看看: WinWang/RNOpenEye: React Native(0.72)版本开眼OpenEye项目 (github.com) React Native(0.72)版本OpenEye项目,主要用来熟悉并上手RN项目的开发,是Flutte…

意大利航天飞行器公司【Sidereus】完成510万欧元融资

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,位于意大利萨莱诺的航天飞行器公司Sidereus Space Dynamics今日宣布已完成510万欧元融资。 本轮融资由Primo Space和CDP Venture Capital Sgr领投,通过Italia Venture II - Fondo Impr…

计算机网络 | 数据链路层

计算机网络 | 数据链路层 计算机网络 | 数据链路层数据链路层基本概念数据链路层功能概述 参考视频:王道计算机考研 计算机网络 参考书:《2022年计算机网络考研复习指导》 计算机网络 | 数据链路层 数据链路层基本概念 数据链路层功能概述 为网络层提…

服务器数据恢复-服务器硬盘指示灯黄灯闪烁的数据恢复案例

服务器数据恢复环境: 服务器面板上的硬盘指示灯显示黄色是一种警告,提示指示灯对应的服务器硬盘已经被服务器识别出存在故障,硬盘即将下线。如果出现这种情况,建议服务器管理员/运维人员及时用完好的硬盘替换显示黄色指示灯对应的…

win10 wsl安装步骤

参考&#xff1a; 安装 WSL | Microsoft Learn 一、安装wsl 1.若要查看可通过在线商店下载的可用 Linux 发行版列表&#xff0c;请输入&#xff1a; wsl --list --online 或 wsl -l -o> wsl -l -o 以下是可安装的有效分发的列表。 使用 wsl.exe --install <Distro>…

Kaadas凯迪仕助力亚运盛会,尽展品牌硬核科技与智能锁行业风采

9月23日至10月8日&#xff0c;亚洲最大规模体育赛事亚运会在杭州举办。作为国际性体育赛事&#xff0c;除赛中的各类竞赛项目外&#xff0c;杭州亚运会前后相关活动也吸引了大众目光的聚焦。 Kaadas凯迪仕智能锁作为此次杭州亚运会官方指定智能门锁&#xff0c;以#凯迪仕守护每…

第二证券:市净率高好还是低好?

市净率是一个衡量公司股票投资价值的指标&#xff0c;通过比较公司股票价格和公司每股净资产的比值来评估公司股票的估值水平。市净率高好还是低好这个问题并没有一个简单的答案&#xff0c;取决于具体的市场环境和投资者的需求。本文将从多个角度分析市净率高好还是低好。 首…

百度小程序制作源码 百度引流做关键词排名之技巧

百度作为国内最大的搜索引擎&#xff0c;对于关键词排名和流量获取的策略格外重要&#xff0c;下面给大家分享一个百度小程序制作源码和做百度引流、关键词排名的一些技巧。 移动设备的普及和微信小程序的火热&#xff0c;百度也推出了自己的小程序。百度小程序与微信小程序类…

允许访问:掌握权限的艺术

回到20世纪&#xff0c;网络攻击更难实施&#xff0c;因为大多数计算机没有联网&#xff0c;互联网并不普及&#xff0c;只有少数人群可以访问计算机&#xff0c;更重要的是&#xff0c;没有足够的动机来进行攻击。 访问控制政策 而今天&#xff0c;情况完全不同。在糟糕的数据…

本地部署Element-Plus开发文档

访问Element-Plus文档官网的时候&#xff0c;时不时会很卡&#xff0c;直接卡死 https://element-plus.gitee.io/zh-CN/ 有点影响 CV 大法的施展&#xff0c;看了一下又是 gitee.io &#xff0c;而且开源的项目&#xff0c;找到文档搞下来本地部署就不用担心卡不卡的问题了 文章…

201、RabbitMQ 之 Exchange 典型应用模型 之 工作队列(Work Queue)

目录 ★ 工作队列介绍代码演示测试注意点1&#xff1a;注意点2&#xff1a; ★ 工作队列介绍 工作队列&#xff1a; 就是让多个消费者竞争消费同一个消息队列的消息&#xff0c;相当于多个消费者共享消息队列。 ▲ RabbitMQ可以让多个消费者竞争消费同一个消息队列 ▲ 消息队…

【新书推荐】AI时代,当程序员遇到ChatGPT,开发效率飞起来!

文章目录 ChatGPT为开发提速一、ChatGPT自动生成代码二、优化代码结构三、自动化测试四、智能推荐五、ChatGPT在开发中的实际应用六、总结 新书推荐《AI时代程序员开发之道&#xff1a;ChatGPT让程序员插上翅膀》内容简介作家简介目录获取方式 ChatGPT为开发提速 人工智能是当…

EDUSRC-记某擎未授权与sql注入

目录 360天擎 - 未授权与sql注入 信息收集 FOFA语法 鹰图搜索 360天擎未授权访问 - 数据库信息泄露 漏洞复现 修复方案 360天擎终端安全管理系统ccid处SQL注入 漏洞复现 手动测试方法 修复方案 360天擎 - 未授权与sql注入 通常访问的页面如下&#xff0c;存在登录框…