中国城市三级联动数据获取方法

杂类 专栏收录该内容
9 篇文章 0 订阅

腾讯地图开放平台中获取全国行政区域的地址:http://lbs.qq.com/webservice_v1/guide-region.html;


接口信息如下:


URLlist接口: 获取全部行政区划数据。该请求为GET请求。

http://apis.map.qq.com/ws/district/v1/list

getchildren接口:获取指定行政区划的子级行政区划。该请求为GET请求。

http://apis.map.qq.com/ws/district/v1/getchildren

search接口:根据关键词搜索行政区划。该请求为GET请求。

http://apis.map.qq.com/ws/district/v1/search


参数必填说明示例
list接口参数:
无任何参数
getchildren接口参数:
id-父级行政区划ID,缺省时则返回最顶级行政区划id=110000
search接口参数:根据关键词搜索行政区划
keyword-搜索关键词keyword=香格里拉,注意参数值要进行URL编码
通用参数:
key开发密钥(key)key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77
output-返回格式:支持json/jsonp,默认jsonoutput=json
callback-jsonp方式回调函数callback=function1

响应结果

名称类型必有说明
statusnumber状态码,0为正常,
310请求参数信息有误,
311key格式错误,
306请求有护持信息请检查字符串,
110请求来源未被授权
messagestring状态说明
resultarray结果数组,第0项,代表一级行政区划,第1项代表二级行政区划,以此类推;使用getchildren接口时,仅为指定父级行政区划的子级
 idnumber行政区划唯一标识
namestring-简称,如“内蒙古”
fullnamestring全称,如“内蒙古自治区”
locationstring中心点坐标
 latnumber纬度
lngnumber经度
pinyinarray-行政区划拼音,每一下标为一个字的全拼,如:["nei","meng","gu"]
cidxarray-子级行政区划在下级数组中的下标位置

调用示例

// Get请求,注意参数值要进行URL编码
// list接口:获取全部行政区划数据
http://apis.map.qq.com/ws/district/v1/list?
key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77
// 本接口返回数据量较大,要查看效果请打开以上链接
// getchildren接口:获取北京市的子级行政区划
http://apis.map.qq.com/ws/district/v1/getchildren?
&id=110000&
key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77
// Get请求,注意参数值要进行URL编码
// search接口:搜索关键词为北京的行政区划
http://apis.map.qq.com/ws/district/v1/search?
&keyword=香格里拉&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77

// getchildren接口响应示例,list和search接口返回结果与此类似:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
{
     "status" : 0,
     "message" : "query ok" ,
     "result" : [
         [
             {
                 "id" : "110101" ,
                 "fullname" : "东城区" ,
                 "location" : {
                     "lat" : "39.928353" ,
                     "lng" : "116.416357"
                 }
             },
             {
                 "id" : "110102" ,
                 "fullname" : "西城区" ,
                 "location" : {
                     "lat" : "39.912289" ,
                     "lng" : "116.365868"
                 }
             },
             {
                 "id" : "110105" ,
                 "fullname" : "朝阳区" ,
                 "location" : {
                     "lat" : "39.921470" ,
                     "lng" : "116.443108"
                 }
             },
            //以下省略
         ]
    ]
}

使用如下接口地址可获取全部的地址信息:
http://apis.map.qq.com/ws/district/v1/list?
key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77

然后将地址信息进行转换后存入数据库中:代码如下(基于thinkphp框架的):

 $res = '接口获取到的地址的json数据';
$arr = json_decode($res, true);
        $p = M("areas_provinces");  //省信息表
        $c = M("areas_cities");  //市信息表
        $a = M("areas_country");   //县/区表
  	//存入省信息
        $arr_province = $arr['result'][0];
        foreach ($arr_province as $a1) {
            $p->create($a1);
            $p->add();
        }
  	//存入市信息
        $arr_cities = array();
        $arr_country = array();
        foreach ($arr['result'][0] as $v) {
	//对四个直辖市进行单独处理
            if (in_array($v['id'], array('110000', '120000', '500000', '310000'))) {
                $v['pid'] = $v['id'];
                $arr['result'][1][] = $v;
                $start = $v['cidx'][0];
                $end = $v['cidx'][1];
                for ($i = $start; $i <= $end; $i++) {
//                    $arr['result'][2][$i]['pid'] = $v['id'];
                    $arr_country[] = $arr['result'][1][$i];
                }
                $arr_cities[] = $v;
            } else {
                if (isset($v['cidx'])) {
                    $start = $v['cidx'][0];
                    $end = $v['cidx'][1];
                    for ($i = $start; $i <= $end; $i++) {
                        $arr['result'][1][$i]['pid'] = $v['id'];
                        $arr_cities[] = $arr['result'][1][$i];
                    }
                }
            }
        }

        foreach ($arr_cities as $a1) {
            $c->create($a1);
            $c->add();
        }

	//存入县区信息
        foreach ($arr['result'][1] as $v) {
            if (isset($v['cidx'])) {
                $start = $v['cidx'][0];
                $end = $v['cidx'][1];
                for ($i = $start; $i <= $end; $i++) {
                    $arr['result'][2][$i]['pid'] = $v['id'];
                    $arr_country[] = $arr['result'][2][$i];
                }
            }
        }

            foreach ($arr_country as $a1) {
                $a->create($a1);
                $a->add();
            }






  • 5
    点赞
  • 0
    评论
  • 8
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

会跳的绿豆

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值