腾讯地图开放平台中获取全国行政区域的地址: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,默认json | output=json |
callback | - | jsonp方式回调函数 | callback=function1 |
响应结果
名称 | 类型 | 必有 | 说明 | ||
---|---|---|---|---|---|
status | number | 是 | 状态码,0为正常, 310请求参数信息有误, 311key格式错误, 306请求有护持信息请检查字符串, 110请求来源未被授权 | ||
message | string | 是 | 状态说明 | ||
result | array | 是 | 结果数组,第0项,代表一级行政区划,第1项代表二级行政区划,以此类推;使用getchildren接口时,仅为指定父级行政区划的子级 | ||
id | number | 是 | 行政区划唯一标识 | ||
name | string | - | 简称,如“内蒙古” | ||
fullname | string | 是 | 全称,如“内蒙古自治区” | ||
location | string | 是 | 中心点坐标 | ||
lat | number | 是 | 纬度 | ||
lng | number | 是 | 经度 | ||
pinyin | array | - | 行政区划拼音,每一下标为一个字的全拼,如:["nei","meng","gu"] | ||
cidx | array | - | 子级行政区划在下级数组中的下标位置 |
调用示例
// Get请求,注意参数值要进行URL编码
// list接口:获取全部行政区划数据
// getchildren接口:获取北京市的子级行政区划
// search接口:搜索关键词为北京的行政区划
// 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"
}
},
//以下省略
]
]
}
使用如下接口地址可获取全部的地址信息:
然后将地址信息进行转换后存入数据库中:代码如下(基于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(); }
|