{"version":"0.1.0","code":"0000","result":true,"message":"处理成功","errdetail":"","timestamp":1671516354990,"data":{"id":71712560,"title":"6.3.2.3图层避让(Poi Filter)","slug":"sourqv","format":"lake","bookId":26046811,"body":null,"body_draft":null,"body_html":"

基本介绍

图层中,只有点图元及点图层有对接并对外提供避让能力,其它图元没有。点图元对外提供了addPoiFilter和removePoiFilter两个接口,而图层提供enablePoiFilter接口来开启或关闭poi filter。如果开启了避让,图层的所有图元会自动调用addPoiFilter,这样所有图元都会去避让掉可避让的元素。反之,会自动调用removePoiFilter。

启动图层避让后,当前图层的所有图元的纹理所覆盖的面就不再显示任何避让元素。

其中避让元素包括:底图路名、POI名、路牌、第三方Label、主路线高亮路名、备选路线高亮路名等

场景图

\"image.png\"\"image.png\"

核心接口

//开启或关闭Poi Filter,默认未开启\nvoid com.autonavi.gbl.map.layer.BaseLayer.enablePoiFilter(boolean enable)\n\n//对点图元添加避让框\nvoid com.autonavi.gbl.map.layer.PointLayerItem.addPoiFilter()\n\n//移除点图元避让框\nvoid com.autonavi.gbl.map.layer.PointLayerItem.removePoiFilter()


说明:函数详情,请复制函数名称到在线API搜索

调用示例

import com.autonavi.gbl.layer.model.BizPointBusinessInfo;\nimport com.autonavi.gbl.map.MapView;\nimport com.autonavi.gbl.map.layer.BaseLayer;\nimport com.autonavi.gbl.map.layer.LayerItem;\nimport com.autonavi.gbl.map.layer.PointLayerItem;\nimport java.util.ArrayList;\n\npublic class PointLayerDemo extends BaseLayer {\n    public PointLayerDemo(String name, MapView mapView) {\n        super(name, mapView);\n        if (mapView != null) {\n            mapView.getLayerMgr().addLayer(this); //把图层添加到图层管理器中\n        }\n    }\n\n    public void init() {\n        MapView mapView = getMapView();\n        if (mapView != null) {\n            PrepareLayerStyleDemo.getInstance().init(mapView);\n            setStyle(PrepareLayerStyleDemo.getInstance()); //设置图元样式回调\n            addClickObserver(LayerClickObserverDemo.getInstance());\n            setClickable(true);\n\n            enablePoiFilter(true); //启用图元的避让功能\n        }\n    }\n\n    public void unInit() {\n        MapView mapView = getMapView();\n        if (mapView != null) {\n            setStyle(null);\n            removeClickObserver(LayerClickObserverDemo.getInstance());\n            enablePoiFilter(false);\n        }\n    }\n\n    /**< 图层最后不再使用时,从图层管理器中删除,同时图层会被delete释放掉 */\n    public void removeLayer() {\n        MapView mapView = getMapView();\n        if (mapView != null) {\n            mapView.getLayerMgr().removeLayer(this);\n        }\n    }\n\n    /**< 添加用于避让的图元 */\n    public void updatePointInfo(ArrayList<BizPointBusinessInfo> pointList) {\n        if (getMapView() == null || pointList.size() == 0) {\n            return;\n        }\n\n        clearAllItems();\n        ArrayList<LayerItem> items = new ArrayList<>();\n        for (int i = 0; i < pointList.size(); i++) {\n            PointLayerItem item = new PointLayerItem();\n            if (item != null) {\n                String id = pointList.get(i).id;\n                if (id.isEmpty()) {\n                    id = String.valueOf(i);\n                }\n\n                item.setID(id); //id必须唯一\n                item.setBusinessType(DemoConstant.BusinessTypePoint);\n                item.setPriority(i);\n                item.setPosition(pointList.get(i).mPos3D);\n\n                items.add(item);\n            }\n        }\n\n        addItems(items);\n    }\n}\n

注意事项

1、如果是手动调用AddPoiFilter添加避让的,在添加避让后,如果不再需要时须删除避让,否则那些被避让的就不会再显示出来。

2、默认通过enablePoiFilter的方式启用避让,无需关注item的避让添加和删除,内部已实现。

","body_lake":null,"pub_level":null,"status":"0","updated_at":"2022-04-06 07:03:43","deleted_at":null,"nameSpace":"mnlcaa/v610","browseCount":150,"collectCount":0,"estimateDate":7,"docStatus":0,"permissions":true,"overView":false}}