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<DistrictItem> district = result.getDistrict();
    }
});
search.searchDistrictAsyn();

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

接着往下看

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可以获得很多信息,比如区域中心坐标,子区域等。 但是这些都不重要,重要的是下面这个方法:

String[] polyStr = districtItem.districtBoundary();

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

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

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

PolylineOptions polylineOption = new PolylineOptions();
polylineOption.addAll(list);
polylineOption.width(6).color(Color.BLUE);
aMap.addPolyline(polylineOption);

总结

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我的小碗汤

一文带你读懂:最小栈问题

设一个变量int min = -1; 当一个元素进入栈时,把最小值的下标记录成0,后面进来的数和stack[min]做比较,如果大于等于当前的最小值,那就不做变...

16030
来自专栏web编程技术分享

JavaScript: 零基础轻松学闭包(2)

29390
来自专栏Python数据科学

如何用Python递归地思考问题?

递归是一个很经典的算法,在实际中应用广泛,也是面试中常常会提到的问题。本文就递归算法介绍如何在Python中实现递归的思想,以及递归在Python中使用时的一些...

89960
来自专栏Python入门

十五道Python小案例,学会这些,Python基础已过关!

分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。

61640
来自专栏好好学java的技术栈

轻松看懂java设计模式简单工厂模式

简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

19420
来自专栏HansBug's Lab

从Hash Killer I、II、III论字符串哈希

首先,Hash Killer I、II、III是BZOJ上面三道很经典的字符串哈希破解题。当时关于II,本人还琢磨了好久,但一直不明白为啥别人AC的代码都才0....

36340
来自专栏web前端教室

震惊了!这样的js面试题让所有人-男默女泪

Sorry,大周末的搞一下标题党玩玩,但这个面试题倒是真的有坑,很sorry,这一次我掉进了第一个坑。 看问题一, (function(xxx){ delet...

224100
来自专栏CSDN技术头条

为什么我坚持使用 JavaScript 函数声明

时光溯回到上世纪 90 年代晚期,在初次接触 JavaScript 时,老师教我们使用函数声明写下Hello World,它看上去是这样的······ fun...

22680
来自专栏python3

python--初始面向对象:类的相关知识,对象的相关知识

当然很简单,两个角色,1个人物,1个boss,且人物和boss都有不同的技能,比如人物用觉醒技能秒了boss,掉了xx装备,boss用大招秒了人物,人物死亡,怎...

10720
来自专栏小樱的经验随笔

BZOJ 3670: [Noi2014]动物园【KMP变形 】

3670: [Noi2014]动物园 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 2738  Solve...

36770

扫码关注云+社区

领取腾讯云代金券