腾讯地图开放平台中获取全国行政区域的地址: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接口:获取全部行政区划数据
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
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接口返回结果与此类似:
{
"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
然后将地址信息进行转换后存入数据库中:代码如下:
$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();
}
参考:http://blog.csdn.net/ning521513/article/details/54133732