前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android高德之旅(14)行政区划搜索废话简介总结

Android高德之旅(14)行政区划搜索废话简介总结

作者头像
大公爵
发布2018-09-05 17:23:13
8770
发布2018-09-05 17:23:13
举报
文章被收录于专栏:葬爱家族葬爱家族

废话

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

简介

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

代码语言:javascript
复制
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<DistrictItem> district = result.getDistrict();
    }
});
search.searchDistrictAsyn();

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

接着往下看

代码语言:javascript
复制
ArrayList<DistrictItem> 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<DistrictItem> subDistrict = districtItem.getSubDistrict();
}

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

代码语言:javascript
复制
String[] polyStr = districtItem.districtBoundary();

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

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

代码语言:javascript
复制
private List<LatLng> parseData(DistrictItem districtItem) {
    String[] polyStr = districtItem.districtBoundary();
    if (polyStr == null || polyStr.length == 0) {
        return null;
    }

    List<LatLng> 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<LatLng>后,下面要做的就是在地图上显示出来了,还是用之前的技术,都用烂了。

代码语言:javascript
复制
PolylineOptions polylineOption = new PolylineOptions();
polylineOption.addAll(list);
polylineOption.width(6).color(Color.BLUE);
aMap.addPolyline(polylineOption);

总结

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.11.09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 废话
  • 简介
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档