废话
前后两千万,拍照更清晰。大家好,这里是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);
总结
好啦,本期节目就到这里,感谢大家的收看,我们下期再见~