第18行: | 第18行: | ||
//画出行政区多边形 | //画出行政区多边形 | ||
LatLngBounds.Builder builder = new LatLngBounds.Builder(); | LatLngBounds.Builder builder = new LatLngBounds.Builder(); | ||
− | for (List<LatLng> polyline | + | for (List<LatLng> polyline: polyLines) { |
OverlayOptions ooPolyline = new PolylineOptions().width(10).points(polyline).dottedLine(true).color(0xAA00FF00); | OverlayOptions ooPolyline = new PolylineOptions().width(10).points(polyline).dottedLine(true).color(0xAA00FF00); | ||
mBaiduMap.addOverlay(ooPolyline); | mBaiduMap.addOverlay(ooPolyline); | ||
第25行: | 第25行: | ||
Polygon polygon = (Polygon) mBaiduMap.addOverlay(ooPolygon); | Polygon polygon = (Polygon) mBaiduMap.addOverlay(ooPolygon); | ||
polygonList.add(polygon); | polygonList.add(polygon); | ||
− | for (LatLng latLng | + | for (LatLng latLng: polyline) { |
builder.include(latLng); | builder.include(latLng); | ||
} | } | ||
第36行: | 第36行: | ||
</pre> | </pre> | ||
− | <div class="pre-btn"><div class="pre-btn-copy-and">复制</div><div class="pre-btn-cb-and">深色</div></div><div class="success">复制成功</div></div></div><div class="pre-nav"><div>3.判断是否在行政区内</div></div><div class="pre-wrap"><div class="pre-wrap-nav"><div>JAVA</div></div><!-- 安卓示例代码位置 --><div class="pre-wrap-w pre-wrap-w-and"><pre class="prettyprint prettyprinted pre-and">for (List<LatLng> list | + | <div class="pre-btn"><div class="pre-btn-copy-and">复制</div><div class="pre-btn-cb-and">深色</div></div><div class="success">复制成功</div></div></div><div class="pre-nav"><div>3.判断是否在行政区内</div></div><div class="pre-wrap"><div class="pre-wrap-nav"><div>JAVA</div></div><!-- 安卓示例代码位置 --><div class="pre-wrap-w pre-wrap-w-and"><pre class="prettyprint prettyprinted pre-and">for (List<LatLng> list: mLatLngList) { |
// 判断点是否在多边形内 | // 判断点是否在多边形内 | ||
boolean isPolygonContains = SpatialRelationUtil.isPolygonContainsPoint(list, point); | boolean isPolygonContains = SpatialRelationUtil.isPolygonContainsPoint(list, point); | ||
第61行: | 第61行: | ||
// 判断点击是否在多边形overlay范围内 | // 判断点击是否在多边形overlay范围内 | ||
_isSelected = BMKPolygonContainsPoint(point, _points, _pointCount); | _isSelected = BMKPolygonContainsPoint(point, _points, _pointCount); | ||
− | _polygonView.fillColor = _isSelected | + | _polygonView.fillColor = _isSelected? [COLOR(0x008B00) colorWithAlphaComponent:0.6]: [COLOR(0x90EE90) colorWithAlphaComponent:0.5]; |
} | } | ||
} | } |
2022年1月21日 (五) 14:20的版本
Overlay点击选中
功能场景
支持开发者选中目标路线、多边形区域,常用于路线切换、检索等场景。
Android
iOS
//mapopen-website-wiki.bj.bcebos.com/demos/AndroidVideos/Overlay点击选中@android.mp4
1590746640|//mapopen-website-wiki.bj.bcebos.com/demos/newqrcodes/Overlay点击选中@2xanidroid.png
扫码体验
使用产品
Android地图SDK|/index.php?title=androidsdk
>
绘制弧线和面|/index.php?title=androidsdk/guide/render-map/ploygon
下载源码
//mapopen-website-wiki.bj.bcebos.com/demos/BaiduMapSDKExample.zip
核心接口
类
接口
描述
DistrictSearch
searchDistrict (DistrictSearchOption option)
检索行政区
DistrictSearch
setOnDistrictSearchListener(OnGetDistrictSearchResultListener districtResultListener)
设置检索结果回调
DistrictSearchOption
cityName(String city)
设置检索城市
DistrictSearchOption
districtName(String district)
搜索行政区
SpatialRelationUtil
searchDistrictisPolygonContainsPoint(List<Latlng> list, Latlng latlng)
返回一个点是否在多边形内
重点关注
检索完成后,需要调用PoiSearch的destroy()方法,否则会有内存泄露。
核心代码
1.发起检索请求
JAVA
// 发起请求 mDistrictSearch.searchDistrict(new DistrictSearchOption().cityName(city).districtName(district));
复制
深色
复制成功
2.检索结果回调处理
JAVA
@Override public void onGetDistrictResult(DistrictResult districtResult) { mBaiduMap.clear(); if (districtResult == null) { return; } if (districtResult.error == SearchResult.ERRORNO.NO_ERROR) { List<List<LatLng>> polyLines = districtResult.getPolylines(); if (polyLines == null) { return; } mLatLngList = polyLines; //画出行政区多边形 LatLngBounds.Builder builder = new LatLngBounds.Builder(); for (List<LatLng> polyline: polyLines) { OverlayOptions ooPolyline = new PolylineOptions().width(10).points(polyline).dottedLine(true).color(0xAA00FF00); mBaiduMap.addOverlay(ooPolyline); OverlayOptions ooPolygon = new PolygonOptions().points(polyline).stroke(new Stroke(5, 0xAA00FF88)) .fillColor(0xAAFFFF00); Polygon polygon = (Polygon) mBaiduMap.addOverlay(ooPolygon); polygonList.add(polygon); for (LatLng latLng: polyline) { builder.include(latLng); } } mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLngBounds(builder.build())); MapStatus.Builder mapBuilder = new MapStatus.Builder(); mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(mapBuilder.zoom(11).build())); } }
复制
深色
复制成功
3.判断是否在行政区内
JAVA
for (List<LatLng> list: mLatLngList) { // 判断点是否在多边形内 boolean isPolygonContains = SpatialRelationUtil.isPolygonContainsPoint(list, point); if (isPolygonContains) { //更换颜色 OverlayOptions ooPolygon = new PolygonOptions().points(list).stroke(new Stroke(5, 0xAA00FF88)) .fillColor(0xAAFF7700); Polygon polygon = (Polygon) mBaiduMap.addOverlay(ooPolygon); polygonList.add(polygon); } else { OverlayOptions ooPolygon = new PolygonOptions().points(list).stroke(new Stroke(5, 0xAA00FF88)) .fillColor(0xAAFFFF00); Polygon polygon = (Polygon) mBaiduMap.addOverlay(ooPolygon); polygonList.add(polygon); } }
复制
深色
复制成功
更多功能
绘制线|/index.php?title=androidsdk/guide/render-map/ployline