示例中心
功能在线体验
控制台

高德 开发 地图 JS API 开发指南 获取地图数据 行政区划查询

更新时间:2017年08月29日

亲手试一试

行政区划查询插件提供行政区信息的查询,使用该插件,可以获取到行政区域的区号、城市编码、中心点、边界、下辖区域的详细信息,为基于行政区域的地图功能提供支持。

如果需要同时绘制多个区划,也可以使用 UI组件 - 行政区划浏览

插件引入与对象创建

在使用插件之前,需要使用AMap.service方法加载插件,然后在回调函数中可以进行服务的设定和查询:

AMap.service('AMap.DistrictSearch',function(){//回调函数
    //实例化DistrictSearch
    districtSearch = new AMap.DistrictSearch();
    //TODO: 使用districtSearch对象调用行政区查询的功能
})

场景一、获取下级行政区列表

在开发地图产品的时候,经常会有获取某一行政区所有下级行政区信息的需求。以获取中国所有省份信息为例:

查询参数设定

要实现上述查询功能,在查询之前,需要将参数level设定为'country'(国家)表示查询的层级为国家,同时将参数subdistrict设定为1,表示需要下辖1级的行政单位信息。参数设定的方式有两种,一种是在插件对象初始化的时候直接设置相应的参数值:

//在对象初始化的时候设定
var districtSearch = new AMap.DistrictSearch({
    level : 'country',  
    subdistrict : 1    
});

另一种是在插件对象初始化之后,通过调用相应的方法来进行。

//在对象初始化之后进行
var districtSearch = new AMap.DistrictSearch();
districtSearch.setLevel('country');
districtSearch.setSubDistrict(1);
   

查询参数详情

参数名称

类型

说明

level

String

要查询的关键字对应的行政级别或商圈,可选值:country、province、city、district、biz_area

extensions

String

是否返回行政区边界坐标点,可选值:base、all

subdistrict

Bool

期望返回多少级下级行政区信息,可选值:0、1、2、3

showbiz

Boolean

是否显示商圈,默认值true,为了能够精准的定位到街道,特别是在快递、物流、送餐等场景下,建议将此设置为false

参数设定相关方法

方法名

返回值

说明

setLevel(level:String)

设置关键字对应的行政区级别或商圈,可选值:country、province、city、district、biz_area

setSubdistrict(district:Integer)

设定期望返回多少级下级行政区信息,可选值:0、1、2、3

调用search方法

设定好相关的参数值后,调用search方法进行查询,将“中国”作为第一个参数,第二个参数为回调函数,用来处理服务返回的数据

//调用查询方法
districtSearch.search('中国',function(status, result){
    //TODO : 按照自己需求处理查询结果
})
   

回调函数返回查询结果的状态status和查询结果result。当status为complete的时候表示查询到有效结果。

回调结果

名称

类型

说明

status

String

结果状态码,“complete”时说明得到有效查询结果

result

Object

info为状态信息,得到有效查询结果时为“OK”

districtList

Array.<District>

行政区Object的数组

District对象说明

字段名

类型

说明

name

String

行政区名称

citycode

String

城市编码

adcode

String

区域编码

center

LngLat

城市中心点

level

String

行政区划级别

boundaries

Array.<Array.<LngLat>>

extensions为“all”时返回,行政区的边界,二维数组

districtList

Array.<District>

subdistrict 不为0时返回,下级行政区信息列表

下级行政单位列表生成

在取得正确的查询结果之后,我们就可以在subdistrict字段里面获取到中国所有省份的信息了, 下面在回调函数里实现省市之间的位置切换的。

//调用查询方法
districtSearch.search('中国',function(status, result){
    var subDistricts = result.districtList[0].districtList;
    var select = document.getElementById('subDistricts');
    for(var i = 0;i < subDistricts.length; i += 1){
            var name = subDistricts[i].name;
            var option = document.createElement('option');
            option.value = option.innerText = name;
            select.appendChild(option);
    }
    select.onchange = function(){map.setCity(this.value)};
})

场景二、获取与渲染行政区的边界

有的时候我们需要获得行政区域的边界信息,实现一些地图功能,比如在地图上绘制朝阳区的边界:

查询参数设定

将构造函数参数extensions设置为'all',表示需要返回行政区边界坐标组等具体信息。将查询参数level设定为'city',表示查询的层级为市,同时将参数subdistrict设定为0,表示不需要行政单位信息。我们调用方法来设置相应的参数值:

//在对象初始化之后进行
var districtSearch = new AMap.DistrictSearch({
            extensions: 'all',  //返回行政区边界坐标组等具体信息
        });
districtSearch.setLevel('city');
districtSearch.setSubDistrict(0);
 

行政区边界的获取与渲染

实现这一功能需要用到回调函数返回结果的boundaries字段,回调方法中使用得到的边界信息 创建了一个多边行对象, 然后调用了地图的setFitView方法使地图的中心和级别适配多边形 的范围:

//在对象初始化之后进行
districtSearch.search('朝阳区', function(status, result){
    var bounds = result.districtList[0].boundaries;
    var polygon = new AMap.Polygon({  //行政区边界渲染,使用多边形覆盖物实现
        map: map,
        strokeWeight: 1,
        path: bounds,
        fillOpacity: 0.7,
        fillColor: '#CCF3FF',
        strokeColor: '#CC66CC'
    });
    map.setFitView();
}); 
移动端
示例中心
功能
在线体验
常见问题