php 获取行政区域

记录:php获取四级行政区域,拉取高德接口数据

API接口文档:
https://lbs.amap.com/api/webservice/guide/api/district
获取API

<?php
/*** 服务器接口类*/
namespace queryAreaInfo;class queryArea{//发送private function sendData($dataStr){// $url = 'http://restapi.amap.com/v3/config/district?';	//获取url$url = 'https://restapi.amap.com/v3/config/district?parameters';$ch = curl_init();curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS,$dataStr);curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);curl_setopt($ch, CURLOPT_TIMEOUT, 30);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);curl_setopt($ch, CURLOPT_URL,$url);//设置获取的信息以文件流的形式返回,而不是直接输出。  curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);//返回值赋值给$result$result = curl_exec($ch);//调试整套请求代码//释放      curl_close($ch);$result = json_decode($result,true);return $result;}//获取地区信息public function getAreaInfo($data){$dataStr = implode('&',$data);return $this->sendData($dataStr);}
}

调用API并数据保存

use queryAreaInfo\queryArea;
use fast\Pinyin;
    //获取区域信息,调用高德地图接口public function getSonAreaInfos($provid){//获取key$key = 'web服务类型API';//组合接口数据$data=['keywords='.$provid.'','subdistrict=6','key='.$key.'',];//获取验证字符串$queryArea=new queryArea();$result=$queryArea->getAreaInfo($data);return $result;}//获取区域,四个等级 province、city、district、streetpublic function get_area_info(){$Pinyin = new Pinyin();$levalArr = ['province'=>1,'city'=>2,'district'=>3,'street'=>4,];// $provinceArr = ["北京市","天津市","河北省","山西省","内蒙古自治区","辽宁省","吉林省","黑龙江省","上海市","江苏省","浙江省","安徽省","福建省","江西省","山东省","河南省","湖北省","湖南省","广东省","广西壮族自治区","海南省","重庆市","四川省","贵州省","云南省","西藏自治区","陕西省","甘肃省","青海省","宁夏回族自治区","新疆维吾尔自治区","台湾省","香港特别行政区","澳门特别行政区"];$provinceArr = ["北京市"];foreach($provinceArr as $province){$provinceInfoArr = $this->getSonAreaInfos($province)['districts'];// echo '<pre>';print_r($provinceInfoArr);exit;foreach ($provinceInfoArr as $key => $provinceInfo) {if(!Db::name('area1')->where(['pid'=>0,'name'=>$provinceInfo['name']])->find()){// 省$provinceData = ['pid'=>0,'shortname'=>'','name'=>$provinceInfo['name'],'mergename'=>$provinceInfo['name'],'level'=>$levalArr[$provinceInfo['level']],'pinyin'=>$Pinyin->get($provinceInfo['name'],$onlyfirst = false, $delimiter = '', $ucfirst = false),'code'=>$provinceInfo['citycode'],'zip'=>'','first'=>explode('|',$Pinyin->get($provinceInfo['name'],$onlyfirst = true, $delimiter = '|', $ucfirst = true))[0],'lng'=>explode(',',$provinceInfo['center'])[0],'lat'=>explode(',',$provinceInfo['center'])[1],];echo '<pre>';print_r($provinceData);$provinceId = Db::name('area1')->insertGetId($provinceData);}else{$provinceId = Db::name('area1')->where(['pid'=>0,'name'=>$provinceInfo['name']])->value('id');}foreach ($provinceInfo['districts'] as $key => $cityInfo) {if(!Db::name('area1')->where(['pid'=>$provinceId,'name'=>$cityInfo['name']])->find()){// 市$cityData = ['pid'=>$provinceId,'shortname'=>'','name'=>$cityInfo['name'],'mergename'=>$provinceInfo['name'].','.$cityInfo['name'],'level'=>$levalArr[$cityInfo['level']],'pinyin'=>$Pinyin->get($cityInfo['name'],$onlyfirst = false, $delimiter = '', $ucfirst = false),'code'=>$cityInfo['citycode'],'zip'=>'','first'=>explode('|',$Pinyin->get($cityInfo['name'],$onlyfirst = true, $delimiter = '|', $ucfirst = true))[0],'lng'=>explode(',',$cityInfo['center'])[0],'lat'=>explode(',',$cityInfo['center'])[1],];echo '<pre>';print_r($cityData);$cityId = Db::name('area1')->insertGetId($cityData);}else{$cityId = Db::name('area1')->where(['pid'=>$provinceId,'name'=>$cityInfo['name']])->value('id');}foreach ($cityInfo['districts'] as $key => $districtInfo) {if(!Db::name('area1')->where(['pid'=>$cityId,'name'=>$districtInfo['name']])->find()){// 县区$districtData = ['pid'=>$cityId,'shortname'=>'','name'=>$districtInfo['name'],'mergename'=>$provinceInfo['name'].','.$cityInfo['name'].','.$districtInfo['name'],'level'=>$levalArr[$districtInfo['level']],'pinyin'=>$Pinyin->get($districtInfo['name'],$onlyfirst = false, $delimiter = '', $ucfirst = false),'code'=>$districtInfo['citycode'],'zip'=>'','first'=>explode('|',$Pinyin->get($districtInfo['name'],$onlyfirst = true, $delimiter = '|', $ucfirst = true))[0],'lng'=>explode(',',$districtInfo['center'])[0],'lat'=>explode(',',$districtInfo['center'])[1],];echo '<pre>';print_r($districtData);$districtId = Db::name('area1')->insertGetId($districtData);}else{$districtId = Db::name('area1')->where(['pid'=>$cityId,'name'=>$districtInfo['name']])->value('id');}foreach ($districtInfo['districts'] as $key => $streetInfo) {if(!Db::name('area1')->where(['pid'=>$districtId,'name'=>$streetInfo['name']])->find()){// 街道$streetData = ['pid'=>$districtId,'shortname'=>'','name'=>$streetInfo['name'],'mergename'=>$provinceInfo['name'].','.$cityInfo['name'].','.$districtInfo['name'].','.$streetInfo['name'],'level'=>$levalArr[$streetInfo['level']],'pinyin'=>$Pinyin->get($streetInfo['name'],$onlyfirst = false, $delimiter = '', $ucfirst = false),'code'=>$streetInfo['citycode'],'zip'=>'','first'=>explode('|',$Pinyin->get($streetInfo['name'],$onlyfirst = true, $delimiter = '|', $ucfirst = true))[0],'lng'=>explode(',',$streetInfo['center'])[0],'lat'=>explode(',',$streetInfo['center'])[1],];echo '<pre>';print_r($streetData);$streetId = Db::name('area1')->insertGetId($streetData);}}}}}}}

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

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

相关文章

全国水科技大会 免费征集《水环境治理减污降碳协同增效示范案例》

申报时间截止到2024年4月15日&#xff0c;请各单位抓紧申报&#xff0c;申报条件及申报表请联系&#xff1a;13718793867 围绕水环境治理减污降碳协同增效领域&#xff0c;以资源化、生态化和可持续化为导向&#xff0c;面向生态、流城、城市、农村、工业园区、电力、石化、钢…

在VsCode中写vue的css,代码提示一直不出现或提示错误

在我们vue项目正常写css样式&#xff0c;便会出现一下提示&#xff0c;如&#xff1a; 但有时无提示&#xff0c;那么这种情况有以下几种解决方案 观察Vscode插件是否正常 Vetur和Vue - Official是否安装(Vue - Official的前身就是Volar) 安装了检查是否最新版本 确保你的s…

.Net6 使用Autofac进行依赖注入

一、背景 刚接触.net 6&#xff0c;记录一下在.net6上是怎么使用Autofac进行动态的依赖注入的 二、注入方式 1、新建一个webapi项目&#xff0c;框架选择net 6 2、引用Nuget包---Autofac.Extensions.Dependency   3、在Program.cs上添加如下代码 //依赖注入 builder.Host.Us…

el-table 设置固定列导致行错位的解决方案

element 官方给出的解决办法是使用doLayout&#xff0c;使用doLayout重新加载一下table就好了。 updated() {// tableRef是表格的ref属性值if (this.$refs.tableRef&& this.$refs.tableRef.doLayout) {this.$refs.tableRef.doLayout();}},调整前后效果对比&#xff1a…

lua学习笔记14(协程的学习)

print("*****************************协程的学习*******************************") --创建1 coroutine.create(function()) 使用1 coroutine.resume(co) -- 创建2 co2coroutine.wrap(fun) 使用2 co2() --协程的挂起函数 coroutine.yield() --协程的状态 --c…

跨学科高手揭秘:仿真技术如何改变工程世界

编辑 / 木子 审核 / 朝阳 “在高铁上睡觉&#xff0c;最大的噪音不是来自车轮与铁轨的摩擦声&#xff0c;也不是汽笛的轰鸣&#xff0c;而是巨大的‘嘶嘶’声——那是我大学时期做实验发出的声音。”12月9日&#xff0c;中国科学技术大学2024届毕业生郭骞在“伟骅科技”公众号…

构建第一个ArkTS之创建自定义组件

在ArkUI中&#xff0c;UI显示的内容均为组件&#xff0c;由框架直接提供的称为系统组件&#xff0c;由开发者定义的称为自定义组件。在进行 UI 界面开发时&#xff0c;通常不是简单的将系统组件进行组合使用&#xff0c;而是需要考虑代码可复用性、业务逻辑与UI分离&#xff0c…

vue中使用use引入的svg怎么添加title

项目框架&#xff1a; vue2 使用场景&#xff1a; 我们项目中的svg文件比较多&#xff0c;每个都copy里面的svg代码的话&#xff0c;会造成需要写很多个vue文件&#xff0c;于是乎当时采用了use的方式引入了svg文件 代码如下&#xff08;当然中间省去了其他步骤&#xff0c…

4.19号驱动

1. ARM裸机开发和Linux系统开发的异同 相同点&#xff1a;都是对硬件进行操作 不同点&#xff1a; 有无操作系统 是否具备多进程多线程开发 是否可以调用库函数 操作地址是否相同&#xff0c;arm操作物理地址&#xff0c;驱动操作虚拟地址 2. Linux操作系统的层次 应用层…

(2022级)成都工业学院数据库原理及应用实验二:CASE工具关系模型建模

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、代码仅提供参考 3、如果代码不满足你的要求&#xff0c;请寻求其他的途径 运行环境 window11家庭版 PowerDesigner 16.1 实验要求 某医院一个门诊部排班管理子系统涉及如下信息&#xff1a; 若干科室&a…

Echarts+vue-baidu-map绘制行驶路线

依赖下载 首先要在Vue项目中结合vue-baidu-map和ECharts绘制行驶路线&#xff0c;需要先安装并导入相关的库 npm install vue-baidu-map echarts --save注册引入 Echarts引入详情 官网查看 import * as echarts from echarts;// 基于准备好的dom&#xff0c;初始化echarts实…

成都百洲文化传媒有限公司靠谱吗?怎么样?

随着互联网的迅猛发展&#xff0c;电子商务行业迎来了前所未有的发展机遇。在这个变革的浪潮中&#xff0c;成都百洲文化传媒有限公司凭借其深厚的行业经验和创新的服务模式&#xff0c;正逐渐成为电商服务领域的新领军者。 一、创新引领&#xff0c;塑造电商服务新标准 成都百…

VS选择数据源数据提供程序的区别

VS选择数据源数据提供程序的区别 1、用于OLE DB的.net framework 数据提供程序 OLE DB是微软提供的一种数据访问技术&#xff0c;它允许应用程序访问存储在不同类型的数据源中的数据。.NET Framework 提供了一个用于OLE DB的数据提供程序&#xff0c;允许开发人员使用ADO.NET…

Windows下docker-compose部署DolphinScheduler

参照&#xff1a;快速上手 - Docker部署(Docker) - 《Apache DolphinScheduler v3.1.0 使用手册》 - 书栈网 BookStack 下载源文件 地址&#xff1a;https://dolphinscheduler.apache.org/zh-cn/download/3.2.1 解压到指定目录&#xff0c;进入apache-dolphinscheduler-xxx-…

蓝桥杯备考随手记: 递归

递归是一种解决问题的方法&#xff0c;通过将原问题分解为更小的、相同形式的子问题来解决。在递归中&#xff0c;函数会调用自身来解决这些子问题&#xff0c;直到达到基本情况&#xff08;终止条件&#xff09;&#xff0c;然后逐层返回结果&#xff0c;最终得到整个问题的解…

vscode开发小程序项目并在微信开发者工具运行

需求&#xff1a;vscode开发uniapp之后在微信开发者工具运行&#xff0c;更改的时候微信开发者也同步更改 创建微信小程序所需插件&#xff0c;在vscode的插件管理里面安装就可以了 1.微信小程序开发工具 2.vscode weapp api 3.vscode wxml 4.vscode wechat 1.创建小程序命…

vue3的 watch

两个例子中&#xff0c;主要区别在于监视的对象不同 watch( tablelist.value, () > { console.log(tablelist.value, "tablelist"); }, { deep: true }, ); watch 监视的是 tablelist.value 的值。也就是说&#xff0c;当 tablelist.value 发生变化时&#xff0c…

[HDCTF 2023]Normal_Rsa(revenge)(素数分解)

题目&#xff1a;&#xff08;注释为分析&#xff09; from Crypto.Util.number import * #from shin import flagmbytes_to_long(bHDCTF{******}) e65537 pgetPrime(256) qgetPrime(512) rgetPrime(512) np*q*r## phi(p-1)*(q-1)*(r-1) Ppow(p,2,n)## Pp**2 piroof(P,2) Qpo…

前端md5校验文件

前端获取文件的md5值&#xff0c;与文件一同传到后端&#xff0c;后端同样对md5值进行校验。如果相同&#xff0c;则文件未被损坏&#xff08;其实这种方式优点类似于tcp、ip的差错校验&#xff0c;好像token也是这种方式&#xff09; 项目准备 前端并不可能手写一个算法来实…

python新特性

字符串格式化输出 字符串格式化输出 formatted字符串是带有f字符前缀的字符串&#xff0c;可以很方便的格式化字符串 #旧版本 name 泉信 print(公司是&#xff1a; %s%name) print(公司是&#xff1a; {}.format(name)) #新版本 print(f欢迎加入&#xff1a; {name}) lang…