Android高德之旅(14)行政区划搜索

废话

前后两千万,拍照更清晰。大家好,这里是OPPO R11独家冠名赞助播出的大型情感类电视连续剧《Android高德之旅》,我是主持人大公爵。(开篇占位)

简介

这篇文章来讲个简单的,行政区划搜索。api极其简单,只需要一个行政区划的名称即可,比如北京市,或者朝阳区、通州区等等。直接看代码

DistrictSearch search = new DistrictSearch(this);
DistrictSearchQuery query = new DistrictSearchQuery();
query.setKeywords("朝阳区");//传入关键字
query.setShowBoundary(true);//是否返回边界值
search.setQuery(query);
search.setOnDistrictSearchListener(new DistrictSearch.OnDistrictSearchListener() {
    @Override
    public void onDistrictSearched(DistrictResult result) {
        ArrayList district = result.getDistrict();
    }
});
search.searchDistrictAsyn();

查询结果通过onDistrictSearched(DistrictResult result)回调,通过result.getDistrict(),我们可以获取一个区划列表ArrayList,这里需要解释下,一个行政区域可能是不连续的,会分成多块,每一块就是一个DistrictItem,比如我们的demo中,朝阳区就是两块不连续的区域。

Android高德之旅(14)行政区划搜索_第1张图片

接着往下看

ArrayList district = result.getDistrict();
for (DistrictItem districtItem : district) {
    String adcode = districtItem.getAdcode();
    LatLonPoint center = districtItem.getCenter();
    String citycode = districtItem.getCitycode();
    String level = districtItem.getLevel();
    String name = districtItem.getName();
    List subDistrict = districtItem.getSubDistrict();
}

for循环就可以得到每一个DistrictItem,通过DistrictItem可以获得很多信息,比如区域中心坐标,子区域等。
但是这些都不重要,重要的是下面这个方法:

String[] polyStr = districtItem.districtBoundary();

这个方法返回一个String数组,数组的每一项就是一块区域的经纬度集合,朝阳区有两块区域,这个数组长度就是2。

下面要做的就是解析这个String[] 数组,解析成经纬度格式。

private List parseData(DistrictItem districtItem) {
    String[] polyStr = districtItem.districtBoundary();
    if (polyStr == null || polyStr.length == 0) {
        return null;
    }

    List list = new ArrayList<>();
    for (String str : polyStr) {
        String[] lat = str.split(";");
        boolean isFirst = true;
        LatLng firstLatLng = null;
        for (String latstr : lat) {
            String[] lats = latstr.split(",");
            if (isFirst) {
                isFirst = false;
                firstLatLng = new LatLng(Double
                        .parseDouble(lats[1]), Double
                        .parseDouble(lats[0]));
            }
            list.add(new LatLng(Double
                    .parseDouble(lats[1]), Double
                    .parseDouble(lats[0])));
        }
        if (firstLatLng != null) {
            list.add(firstLatLng);
        }
    }
    return list;
}

这段代码并不复杂,但是其中的isFirst可能会让你很蒙,没事,试下去掉就知道为什么了。

接着往下看,得到List后,下面要做的就是在地图上显示出来了,还是用之前的技术,都用烂了。

PolylineOptions polylineOption = new PolylineOptions();
polylineOption.addAll(list);
polylineOption.width(6).color(Color.BLUE);
aMap.addPolyline(polylineOption);
Android高德之旅(14)行政区划搜索_第2张图片

总结

好啦,本期节目就到这里,感谢大家的收看,我们下期再见~

你可能感兴趣的:(Android高德之旅(14)行政区划搜索)