{"version":"0.1.0","code":"0000","result":true,"message":"处理成功","errdetail":"","timestamp":1671516354265,"data":{"id":71712540,"title":"6.3.2.2图层碰撞","slug":"pg7ed2","format":"lake","bookId":26046811,"body":null,"body_draft":null,"body_html":"
图层碰撞分为图层内部图元的碰撞和图层之间的碰撞。根据图元的优先级或图层的优先级进行碰撞,高优先级碰撞掉低优先级。如果图元或图层处在焦点态,则优先级最高,不会被其它图元碰撞掉。
只要开启了图层内碰撞能力,就会根据图元的优先级进行碰撞,高优先级图元碰掉低优先级图元。通过接口BaseLayer.enableCollision开启或关闭图层内碰撞。
图层与图层之间的碰撞,碰撞规则是可配置的,客户端需要调用BizControlService.initCollisionConfig,传入包含配置信息的配置文件。具体见"业务图层间碰撞"
终点区域图层,父节点(清华大学)与子节点间的业务图层间碰撞,以及子节点(出入口,停车场)图层内碰撞
//开启或关闭图层内碰撞,默认未开启\nvoid com.autonavi.gbl.map.layer.BaseLayer.enableCollision(boolean enable)
说明:函数详情,请复制函数名称到在线API搜索
public 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 enableCollision(true); //启用图层的图元间的碰撞功能\n }\n }\n\n public void unInit() {\n MapView mapView = getMapView();\n if (mapView != null) {\n setStyle(null);\n removeClickObserver(LayerClickObserverDemo.getInstance());\n enableCollision(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、碰撞并非是把图元删除掉,碰撞只是把图元隐藏掉,如果两个图元或图层不再碰撞,则会再次显示出来;
2、碰撞计算是发生在渲染每一帧当中,所以碰撞比较消耗性能,不建议包含20个以上图元的碰撞,否则会影响图面的流畅度;
","body_lake":null,"pub_level":null,"status":"0","updated_at":"2022-04-06 07:03:42","deleted_at":null,"nameSpace":"mnlcaa/v610","browseCount":160,"collectCount":0,"estimateDate":6,"docStatus":0,"permissions":true,"overView":false}}