{"version":"0.1.0","code":"0000","result":true,"message":"处理成功","errdetail":"","timestamp":1671508857575,"data":{"id":71712559,"title":"6.3.1概述","slug":"nfl7cg","format":"lake","bookId":26046811,"body":null,"body_draft":null,"body_html":"

基本介绍


图层

图元

图元类型

基础图层 BaseLayer

点图元:PointLayerItem

线图元:LineLayerItem

多边形图元:PolygonLayerItem

扇形图元:SectorLayerItem

3D模型图元:MapModelLayerItem

车标图元:NaviPointLayerItem

箭头图元:ArrowLayerItem

栅格图图元:RasterImageLayerItem

3D精品大图图元:RctRouteLayerItem

点图元:LayerItemPointType

线图元:LayerItemLineType

多边形图元:LayerItemPolygonType

扇形图元:LayerItemSectorType

3D模型图元:LayerItem3DModelType

车标图元:LayerItemNaviCarType

箭头图元:LayerItemArrowType

栅格图图元:LayerItemRasterImageType

3D精品大图图元:LayerItemRealCityCrossType


路线图层 RouteLayer

路线图元:RouteLayerItem

路线图元:LayerItemPathType

2D矢量放大路口图图层 VectorCrossLayer

2D矢量放大路口图图元

VectorCrossLayerItem

矢量路口大图图元:LayerItemVectorCrossType


\"image.png\"

场景图

点图元

\"image.png\"

线图元

\"image.png\"

多边形图元

\"image.png\"

箭头图元

\"image.png\"

圆图元

\"image.png\"

关键参数

com.autonavi.gbl.map.layer.model.LayerItemType

枚举值

描述

LayerItemPointType

点图元类型

LayerItemLineType

线图元类型

LayerItemPolygonType

多边形图元类型

LayerItemSectorType

扇形(圆)图元类型

LayerItemArrowType

箭头图元类型

LayerItem3DModelType

3D模型图元类型

LayerItemVectorCrossType

矢量路口大图图元类型

LayerItemRealCityCrossType

3D路口大图图元类型

LayerItemNaviCarType

导航车标图元类型

LayerItemPathType

路线图元类型

LayerItemRasterImageType

栅格图路口大图图元类型

核心接口

基础图层

//添加点击观察者回调\nvoid com.autonavi.gbl.map.layer.BaseLayer.addClickObserver(ILayerClickObserver pObserver)\n//图元批量添加items\nboolean com.autonavi.gbl.map.layer.BaseLayer.addItem(LayerItem item)\nvoid com.autonavi.gbl.map.layer.BaseLayer.addItems(ArrayList<LayerItem> items)\n//清除所有图元,内部会释放图元的内存\nvoid com.autonavi.gbl.map.layer.BaseLayer.clearAllItems()\n//清除焦点\nvoid com.autonavi.gbl.map.layer.BaseLayer.clearFocus()\n//开启或关闭碰撞,默认未开启\nvoid com.autonavi.gbl.map.layer.BaseLayer.enableCollision(boolean enable)\n//开启或关闭Poi Filter,默认未开启\nvoid com.autonavi.gbl.map.layer.BaseLayer.enablePoiFilter(boolean enable)\n//获取图层所有图元\nArrayList<LayerItem> com.autonavi.gbl.map.layer.BaseLayer.getAllItems()\n//获取图元数目\nint com.autonavi.gbl.map.layer.BaseLayer.getCount()\n//获取避让框要避让的类型\nint com.autonavi.gbl.map.layer.BaseLayer.getFilterPoiType()\n//通过ID获取某个图元,item必须有设置id\nLayerItem com.autonavi.gbl.map.layer.BaseLayer.getItem(String strID)\n//图元删除item\nvoid com.autonavi.gbl.map.layer.BaseLayer.removeItem(String itemID)\n//图元批量删除items\nvoid com.autonavi.gbl.map.layer.BaseLayer.removeItems(String[] itemIDs)\n//控制图层是否可点击\nvoid com.autonavi.gbl.map.layer.BaseLayer.setClickable(boolean bClickable)\n//设置避让框要避让的类型,默认dice::FilterTypeAll避让所有\nvoid com.autonavi.gbl.map.layer.BaseLayer.setFilterPoiType(int filterPoiType)\n//设置图层的某个图元为焦点\nvoid com.autonavi.gbl.map.layer.BaseLayer.setFocus(String strID, boolean bFocus )\n//设置图层绘制层级以及显示优先级\nvoid com.autonavi.gbl.map.layer.BaseLayer.setPriority(LayerPriority priority)\n//设置图层样式回调接口\nvoid com.autonavi.gbl.map.layer.BaseLayer.setStyle(IPrepareLayerStyle pStyle)\n//控制图层显隐\nvoid com.autonavi.gbl.map.layer.BaseLayer.setVisible(boolean bVisible)\n//图层样式更新\nvoid com.autonavi.gbl.map.layer.BaseLayer.updateStyle()

基础图元

//获取item的碰撞区域\nArrayList<PixelPoint> com.autonavi.gbl.map.layer.LayerItem.getBound()\n//获取Auto图层业务类型,方便第三方根据业务类型传对应的纹理\nint com.autonavi.gbl.map.layer.LayerItem.getBusinessType()\n//获取item是否为焦点态\nboolean com.autonavi.gbl.map.layer.LayerItem.getFocus()\n//获取图元唯一ID\nString com.autonavi.gbl.map.layer.LayerItem.getID()\n//返回layer item类型\nLayerItemType1 int com.autonavi.gbl.map.layer.LayerItem.getItemType()\n//获取图元优先级\nint com.autonavi.gbl.map.layer.LayerItem.getPriority()\n//获取item是否可见\nboolean com.autonavi.gbl.map.layer.LayerItem.getVisible()\n//设置Auto图层业务类型,方便第三方根据业务类型传对应的纹理\nvoid com.autonavi.gbl.map.layer.LayerItem.setBusinessType(int nType)\n//设置图元ID,由使用者根据需要自己设置\nboolean com.autonavi.gbl.map.layer.LayerItem.setID(String strID)\n//设置图元优先级    \nvoid com.autonavi.gbl.map.layer.LayerItem.setPriority(int priority)\n//设置item是否可见\nvoid com.autonavi.gbl.map.layer.LayerItem.setVisible(boolean bVisible)\n//图元样式更新接口,主要用于昼夜切换或者中英文切换等需要进行样式更新的场景\nvoid com.autonavi.gbl.map.layer.LayerItem.updateStyle()

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

调用示例

/** @brief 定义类BaseLayerDemo,使用基础图层、基础图元实现显示点、线、面等的demo */\npublic class BaseLayerDemo {\n\n    private MapView mMapView;\n    private LayerMgr mLayerMgr;\n    private BaseLayer mBaseLayer;\n\n    public BaseLayerDemo(MapView mapView) {\n        mMapView = mapView;\n        if (mMapView != null) {\n            mLayerMgr = mMapView.getLayerMgr();\n        }\n    }\n\n    public void init() {\n        if (mMapView != null) {\n            PrepareLayerStyleDemo.getInstance().init(mMapView);\n            mBaseLayer = new BaseLayer("BaseLayer", mMapView);\n            if (mLayerMgr != null && mBaseLayer != null) {\n                mLayerMgr.addLayer(mBaseLayer); //把图层添加到图层管理器中\n                mBaseLayer.setStyle(PrepareLayerStyleDemo.getInstance());\n                mBaseLayer.addClickObserver(LayerClickObserverDemo.getInstance());\n                mBaseLayer.setClickable(true);\n            }\n        }\n    }\n\n    public void unInit() {\n        if (mMapView != null) {\n            mBaseLayer.setStyle(null);\n            mBaseLayer.removeClickObserver(LayerClickObserverDemo.getInstance());\n            mMapView.getLayerMgr().removeLayer(mBaseLayer); //从图层管理器中把图层删除,同时图层也会被delete释放\n            mBaseLayer = null;\n        }\n    }\n\n    //添加点图元\n    public void addPointLayerItem() {\n        if (mBaseLayer == null) {\n            return;\n        }\n\n        PointLayerItem pointItem = new PointLayerItem();\n        pointItem.setID("id1");\n        pointItem.setPriority(0);\n        pointItem.setBusinessType(DemoConstant.BusinessTypePoint);\n        Coord3DDouble position = new Coord3DDouble(116.470735, 39.992745, 0.0);\n        pointItem.setPosition(position);\n        boolean success = mBaseLayer.addItem(pointItem);\n        if (!success) {\n            CommonUtil.showShortToast("addItem failed,id重复");\n        }\n    }\n\n    //添加线图元\n    public void addLineLayerItem() {\n        if (mBaseLayer == null) {\n            return;\n        }\n\n        LineLayerItem lineItem = new LineLayerItem();\n        lineItem.setID("id2");\n        lineItem.setPriority(1);\n        lineItem.setBusinessType(DemoConstant.BusinessTypeLine);\n        ArrayList<Coord3DDouble> points = new ArrayList<Coord3DDouble>();\n        Coord3DDouble start = new Coord3DDouble(116.470735, 39.992745, 0.0);\n        Coord3DDouble end = new Coord3DDouble(116.472575,39.992096, 0.0);\n        points.add(start);\n        points.add(end);\n        lineItem.setPoints(points);\n        boolean success = mBaseLayer.addItem(lineItem);\n        if (!success) {\n            CommonUtil.showShortToast("addItem failed,id重复");\n        }\n    }\n\n    //添加多边形图元\n    public void addPolygonLayerItem() {\n        if (mBaseLayer == null) {\n            return;\n        }\n\n        PolygonLayerItem polygonItem = new PolygonLayerItem();\n        polygonItem.setID("id3");\n        polygonItem.setPriority(3);\n        polygonItem.setBusinessType(DemoConstant.BusinessTypePolygon);\n        ArrayList<Coord3DDouble> points = new ArrayList<Coord3DDouble>();\n        Coord3DDouble start = new Coord3DDouble(116.475536, 39.992828, 0.0);\n        Coord3DDouble mid = new Coord3DDouble(116.478883,39.994776, 0.0);\n        Coord3DDouble end = new Coord3DDouble(116.47884,39.992737, 0.0);\n        points.add(start);\n        points.add(mid);\n        points.add(end);\n        polygonItem.setPoints(points);\n        boolean success = mBaseLayer.addItem(polygonItem);\n        if (!success) {\n            CommonUtil.showShortToast("addItem failed,id重复");\n        }\n    }\n\n    //添加箭头图元\n    public void addArrowLayerItem() {\n        if (mBaseLayer == null) {\n            return;\n        }\n\n        ArrowLayerItem arrowItem = new ArrowLayerItem();\n        arrowItem.setID("id4");\n        arrowItem.setPriority(4);\n        arrowItem.setBusinessType(DemoConstant.BusinessTypeArrow);\n        ArrayList<Coord3DDouble> points = new ArrayList<Coord3DDouble>();\n        Coord3DDouble start = new Coord3DDouble(116.470735, 39.992745, 0.0);\n        Coord3DDouble mid = new Coord3DDouble(116.47236, 39.993411, 0.0);\n        points.add(start);\n        points.add(mid);\n        arrowItem.setPoints(points);\n        arrowItem.setPoints3D(points);\n\n        boolean success = mBaseLayer.addItem(arrowItem);\n        if (!success) {\n            CommonUtil.showShortToast("addItem failed,id重复");\n        }\n    }\n\n    //添加圆图元\n    public void addCircleLayerItem() {\n        if (mBaseLayer == null) {\n            return;\n        }\n\n        SectorLayerItem sectorItem = new SectorLayerItem();\n        sectorItem.setID("id5");\n        sectorItem.setPriority(5);\n        sectorItem.setBusinessType(DemoConstant.BusinessTypeCircle);\n        Coord3DDouble center = new Coord3DDouble(116.475064,39.995137, 0.0);\n        sectorItem.setRadius(500.0);\n        sectorItem.setPosition(center);\n        SectorAngles angles = new SectorAngles();\n        angles.startAngle = 0.0;\n        angles.endAngle = 360.0;\n        angles.stepAngle = 1.0;\n        sectorItem.setSectorAngles(angles);\n\n        boolean success = mBaseLayer.addItem(sectorItem);\n        if (!success) {\n            CommonUtil.showShortToast("addItem failed,id重复");\n        }\n    }\n\n    public void removeAllLayerItems() {\n        if (mMapView == null || mBaseLayer == null) {\n            return;\n        }\n\n        mBaseLayer.clearAllItems(); //删除全部图元\n    }\n}\n
public class LayerClickObserverDemo implements ILayerClickObserver {\n\n    private LayerClickObserverDemo() {\n    }\n\n    private static class SingletonInstance {\n        private static final LayerClickObserverDemo INSTANCE = new LayerClickObserverDemo();\n    }\n\n    public static LayerClickObserverDemo getInstance() {\n        return LayerClickObserverDemo.SingletonInstance.INSTANCE;\n    }\n\n    @Override\n    public void onNotifyClick(BaseLayer baseLayer, LayerItem layerItem) {\n        //需要特别注意:baseLayer和layerItem只能在这个函数中使用,不能抛到其它线程中使用(因为对象可能已经被释放)\n        if (baseLayer == null || layerItem == null) {\n            return;\n        }\n\n        int businessType = layerItem.getBusinessType();\n        int itemType = layerItem.getItemType();\n        String id = layerItem.getID();\n\n        switch (businessType) {\n            default: {\n                CommonUtil.showShortToast("onNotifyClick: " + businessType + ", id: " + layerItem.getID());\n                break;\n            }\n        }\n    }\n}\n
public class PrepareLayerStyleDemo implements IPrepareLayerStyle {\n    private static final String TAG = "PrepareLayerStyleDemo";\n    private volatile MapView mMapView;\n    private boolean mIsNightMode = false;\n    private double mScaleFactor = 2;\n    private int mDynamicMarkerId = 0;\n    private List<String> mImageNameList = new ArrayList<>();\n    private Map<Integer, ArrayList<DynamicItemsId> > mLayerDynamicIds = new HashMap<Integer, ArrayList<DynamicItemsId> >();\n\n    class DynamicItemsId {\n        DynamicItemsId(String itemId, int dynamicId) {\n            this.itemId = itemId;\n            this.dynamicId = dynamicId;\n        }\n\n        String itemId;\n        int dynamicId;\n    }\n\n    private PrepareLayerStyleDemo() {\n    }\n\n    private static class SingletonInstance {\n        private static final PrepareLayerStyleDemo INSTANCE = new PrepareLayerStyleDemo();\n    }\n\n    public static PrepareLayerStyleDemo getInstance() {\n        return PrepareLayerStyleDemo.SingletonInstance.INSTANCE;\n    }\n\n    public void init(MapView mapView) {\n        this.mMapView = mapView;\n    }\n\n    public void setScaleFactor(double scaleFactor) {\n        this.mScaleFactor = scaleFactor;\n    }\n\n    public void setNightMode(boolean nightMode) {\n        this.mIsNightMode = nightMode;\n    }\n\n    /**\n     * @brief         获取静态markrid\n     */\n    public int getStaticMarkerId(int index) {\n        return 0x660000 + index;\n    }\n\n    /**\n     * @brief         获取动态markrid\n     */\n    public int getDynamicMarkerId() {\n        if (mDynamicMarkerId >= 0x660000) {\n            mDynamicMarkerId = 0x360000;\n        }\n\n        return mDynamicMarkerId++;\n    }\n\n    /**\n     * @brief               对于不存在的静态纹理通过添加并生成id\n     * @return bool         纹理ID\n     */\n    public synchronized int AddStaticMarker(BaseLayer pLayer, LayerItem pItem, String imageName, String strMarkerInfo) {\n        if (mMapView == null) {\n            CommonUtil.showShortToast("mapview is null");\n            return -1;\n        }\n\n        if (strMarkerInfo.isEmpty()) {\n            strMarkerInfo = imageName;\n        }\n        MarkerInfoBean markerInfoBean = CommonUtil.getMarkerInfoFromJson(strMarkerInfo);\n        LayerTexture layerTexture = new LayerTexture();\n        if (markerInfoBean != null) {\n            layerTexture.anchorType = markerInfoBean.getAnchor();\n            layerTexture.xRatio = markerInfoBean.getX_ratio();\n            layerTexture.yRatio = markerInfoBean.getY_ratio();\n            layerTexture.isRepeat = markerInfoBean.getRepeat() == 1;\n            layerTexture.isGenMipmaps = markerInfoBean.getGen_mipmaps() == 1;\n            layerTexture.isPreMulAlpha = markerInfoBean.getPre_mul_alpha() == 1;\n        } else {\n            layerTexture.anchorType = LayerIconAnchor.LayerIconAnchorCenter;\n            layerTexture.isRepeat = false;\n            layerTexture.xRatio = 0;\n            layerTexture.yRatio = 0;\n            layerTexture.isGenMipmaps = false;\n            layerTexture.isPreMulAlpha = true;\n        }\n\n        int resID = CC.getApplication().getResources().getIdentifier(imageName, "drawable"\n                , CC.getApplication().getApplicationInfo().packageName);\n        Bitmap bitmap = BitmapFactory.decodeResource(CC.getApplication().getResources(), resID);\n        if (bitmap == null) {\n            if (pLayer == null) {\n                CommonUtil.showShortToast("创建新图片纹理" + imageName + "失败");\n            } else {\n                CommonUtil.showShortToast(pLayer.getName() + ",创建新图片纹理" + imageName + "失败");\n            }\n            return -1;\n        }\n\n        ByteBuffer dataBuffer = ByteBuffer.allocate(bitmap.getByteCount());\n        bitmap.copyPixelsToBuffer(dataBuffer);\n        layerTexture.dataBuff = new BinaryStream(dataBuffer.array());\n        layerTexture.width = bitmap.getWidth();\n        layerTexture.height = bitmap.getHeight();\n        layerTexture.iconType = LayerIconTypeBMP;\n        int markerId = getStaticMarkerId(mImageNameList.size());\n        layerTexture.resID = markerId;\n        boolean isAddSuccess = mMapView.addLayerTexture(layerTexture);\n        mImageNameList.add(imageName);\n\n        return markerId;\n    }\n\n    public synchronized int AddDynamicMarder(String text, String strMarkerId, String strMarkerInfo) {\n        if (mMapView == null) {\n            CommonUtil.showShortToast("mapview is null");\n            return -1;\n        }\n\n        int resID = CC.getApplication().getResources().getIdentifier(strMarkerId, "drawable"\n                , CC.getApplication().getApplicationInfo().packageName);\n        Bitmap bitmap = BitmapFactory.decodeResource(CC.getApplication().getResources(), resID);\n        if (bitmap == null) {\n            CommonUtil.showShortToast("创建新图片纹理" + strMarkerId + "失败");\n            return -1;\n        }\n\n        int width = bitmap.getWidth();\n        int height = bitmap.getHeight();\n        Bitmap dynamicBitmap = Bitmap.createBitmap(300, 100, Bitmap.Config.ARGB_8888);\n        Canvas canvas = new Canvas(dynamicBitmap);\n        Paint paint = new Paint();\n        paint.setTextSize(50);\n        paint.setColor(Color.parseColor("#ff0000"));\n        Rect src = new Rect(0, 0, width, height);\n        Rect dst = new Rect(0, 0, dynamicBitmap.getWidth(), dynamicBitmap.getHeight());\n        canvas.drawBitmap(bitmap, src, dst, paint);\n        canvas.drawText(text, 40, dynamicBitmap.getHeight()/2, paint);\n\n        ByteBuffer dataBuffer = ByteBuffer.allocate(dynamicBitmap.getByteCount());\n        dynamicBitmap.copyPixelsToBuffer(dataBuffer);\n        LayerTexture layerTexture = new LayerTexture();\n        layerTexture.dataBuff = new BinaryStream(dataBuffer.array());\n        layerTexture.width = dynamicBitmap.getWidth();\n        layerTexture.height = dynamicBitmap.getHeight();\n        layerTexture.iconType = LayerIconTypeBMP;\n        int dynamicId = getDynamicMarkerId();\n        layerTexture.resID = dynamicId;\n        boolean isAddSuccess = mMapView.addLayerTexture(layerTexture);\n\n        return dynamicId;\n    }\n\n    public synchronized int isDynamicMarker(BaseLayer pLayer, LayerItem layerItem, String strMarkerId, String strMarkerInfo) {\n        int dynamicId = -1;\n        if (pLayer == null || layerItem == null || strMarkerId == null || strMarkerId.isEmpty()) {\n            return  dynamicId;\n        }\n\n        int itemType = layerItem.getItemType();\n        int businessType = layerItem.getBusinessType();\n\n        switch (businessType) {\n            case BizRouteType.BizRouteTypeGuidePathBoard: {\n                PathBoardLayerItem pathBoardItem = (PathBoardLayerItem) (layerItem);\n\n                if (pathBoardItem != null) {\n                    String roadName = pathBoardItem.getMBoardName();\n                    if (roadName.isEmpty()) {\n                        roadName = "无名道路";\n                    }\n\n                    dynamicId = AddDynamicMarder(roadName, strMarkerId, strMarkerInfo);\n                }\n                break;\n            }\n        }\n\n        if (dynamicId != -1) {\n            Integer layerId = Integer.valueOf((int)pLayer.getLayerID());\n            ArrayList<DynamicItemsId> dynamicIds = new ArrayList<DynamicItemsId>();\n            if (mLayerDynamicIds.containsKey(layerId))\n            {\n                dynamicIds = mLayerDynamicIds.get(layerId);\n            }\n\n            DynamicItemsId itemsId = new DynamicItemsId(layerItem.getID(), dynamicId);\n            dynamicIds.add(itemsId);\n\n            mLayerDynamicIds.put(layerId, dynamicIds);\n        }\n\n        return dynamicId;\n    }\n\n    /**\n     * @brief                    图元样式中通过marker  图片文件名获取对应的marker id回调接口\n     * @param[in] pLayer         图元所在图层\n     * @param[in] pItem          需要更新样式的具体图元,通过GetBusinessType返回值判断具体图层\n     * @param[in] strMarkerInfo  marker对应纹理的数据参数配置名\n     * @return int32_t           返回图片的marker id\n     * @note thread:main        HMI根据图片文件名添加纹理并且返回相应的marker id,如果是marker id,则转换成int32_t后返回\n     */\n    @Override\n    public synchronized int getMarkerId(BaseLayer pLayer, LayerItem pItem, String strMarkerId, String strMarkerInfo)  {\n        int markerId = -1;\n        strMarkerId = strMarkerId.trim();\n        if (TextUtils.isEmpty(strMarkerId)) {\n            return markerId;\n        }\n\n        if (CommonUtil.isInteger(strMarkerId)) {\n            // 如果样式json中配置的纹理id是数字,说明已经由HMI提早在某个地方把纹理添加到mapview,这里直接把id值返回即可。\n            markerId = NumberUtil.str2Int(strMarkerId, 10, AutoConstant.DEFAULT_ERR_CODE);\n        } else {\n            // 否则根据样式json配种的信息和图层图元判断是否是需要根据图元信息动态生成的纹理(简称动态纹理),如果是则绘制纹理并添加到mapview并返回对应的纹理id\n            int dynamicMarderId = isDynamicMarker(pLayer, pItem, strMarkerId, strMarkerInfo);\n            if (dynamicMarderId > 0) {\n                return dynamicMarderId;\n            }\n\n            // 如果纹理不是动态纹理,则直接根据样式json中配置的纹理对应的图片名添加纹理或直接返回纹理id(如果已经添加过)\n            // 这里静态纹理id取在列表中的序列。\n            int index = mImageNameList.indexOf(strMarkerId);\n            if (index >= 0) {\n                markerId = getStaticMarkerId(index);\n                return markerId;\n            }\n\n            markerId = AddStaticMarker(pLayer, pItem, strMarkerId, strMarkerInfo);\n        }\n\n        return markerId;\n    }\n\n\n    /**\n     * @brief                       图元样式中通过3Dmodel 模型文件名获取对应的3Dmodel id回调接口\n     * @param[in] pLayer            图元所在图层\n     * @param[in] pItem             需要更新样式的具体图元,通过GetBusinessType返回值判断具体图层\n     * @return int32_t              返回模型3Dmodel id\n     * @note thread:main           HMI根据模型文件名添加纹理并且返回相应的3Dmodel id,如果是3Dmodel id,则转换成int32_t后返回\n     */\n    @Override\n    public int get3DModelId(BaseLayer pLayer, LayerItem pItem, String str3DModelId) {\n        int retValue = -1;\n        if (CommonUtil.isInteger(str3DModelId.trim())) {\n            retValue = NumberUtil.str2Int(str3DModelId.trim(), 10, AutoConstant.DEFAULT_ERR_CODE);\n        } else {\n            CommonUtil.showShortToast("未识别的3D纹理" + str3DModelId);\n        }\n\n        return retValue;\n    }\n\n    /**\n     * @brief                       图元样式JSON串回调接口\n     * @param[in] pLayer            图元所在图层\n     * @param[in] layerItem         需要更新样式的具体图元,通过GetBusinessType返回值判断具体图层\n     * @param[in] forJava           参数暂时无用,只是标示当前接口用于支持Java端,传递Stirng而非cJSON*\n     * @return String               返回的样式JSON内容字符串,由客户端构造\n     * @note thread:main\n     */\n    @Override\n    public String getLayerStyle(final BaseLayer pLayer, LayerItem layerItem, boolean forJava) {\n        String strStyleJson = "EMPTY";\n        if (pLayer == null || layerItem == null) {\n            return strStyleJson;\n        }\n\n        int itemType = layerItem.getItemType();\n        int businessType = layerItem.getBusinessType();\n\n        switch (itemType) {\n            case LayerItemType.LayerItemPointType:\n                switch (businessType) {\n                    case DemoConstant.BusinessTypePoint:\n                        strStyleJson = CommonUtil.getDemoStyleBeanJsonWithNightMode("point_demo_style", mIsNightMode);\n                        break;\n                }\n                break;\n            case LayerItemNaviCarType:\n                switch (businessType) {\n\n                }\n                break;\n\n            case LayerItemLineType:\n                switch (businessType) {\n                    case DemoConstant.BusinessTypeLine:\n                        strStyleJson = CommonUtil.getDemoStyleBeanJsonWithNightMode("line_demo_style", mIsNightMode);\n                        break;\n                }\n                break;\n            case LayerItemPolygonType:\n                switch (businessType) {\n                    case DemoConstant.BusinessTypePolygon:\n                        strStyleJson = CommonUtil.getDemoStyleBeanJsonWithNightMode("polygon_demo_style", mIsNightMode);\n                        break;\n                }\n                break;\n            case LayerItemSectorType:\n                switch (businessType) {\n                    case DemoConstant.BusinessTypeCircle:\n                        strStyleJson = CommonUtil.getDemoStyleBeanJsonWithNightMode("circle_demo_style", mIsNightMode);\n                        break;\n                }\n                break;\n\n            case LayerItem3DModelType:\n                switch (businessType) {\n                    case BizCarType.BizCarTypeCruise:\n                    case BizCarType.BizCarTypeGuide:\n                    case BizCarType.BizCarTypeSearch:\n                    case BizCarType.BizCarTypeFamiliar:\n                        strStyleJson = CommonUtil.getStyleBeanJson("3dcar_style");\n                        break;\n                }\n                break;\n\n            case LayerItemArrowType:\n                switch (businessType) {\n                    case DemoConstant.BusinessTypeArrow:\n                        strStyleJson = CommonUtil.getDemoStyleBeanJsonWithNightMode("arrow_demo_style", mIsNightMode);\n                        break;\n                }\n                break;\n            default:\n\n                break;\n        }\n\n        return strStyleJson;\n    }\n\n    /**\n     * @brief                    路线图元样式回调接口\n     * @param[in] pLayer         图元所在图层\n     * @param[in] pItem          需要更新样式的具体图元,通过GetBusinessType返回值判断具体图层\n     * @param[in] style          返回的样式数据结果\n     * @return bool              true:成功 false:失败\n     * @note thread:main\n     */\n    @Override\n    public boolean getRouteLayerStyle(BaseLayer baseLayer, LayerItem layerItem, RouteLayerStyle routeLayerStyle) {\n        return false;\n    }\n\n    /**\n     * <\n     *\n     * @brief                      清除图层所有item时,通知HMI的接口,上层根据该接口删除动态纹理或者静态纹理\n     * @param[in] pLayer           图层对象\n     * @note thread:main          HMI或BL内部调用ClearAllItems时触发该回调\n     */\n    @Override\n    public synchronized void clearLayerItems(BaseLayer baseLayer) {\n        if (baseLayer == null || mMapView == null) {\n            return;\n        }\n\n        Integer layerId = Integer.valueOf((int)baseLayer.getLayerID());\n        if (mLayerDynamicIds.containsKey(layerId)) {\n            ArrayList<DynamicItemsId> dynamicIds = mLayerDynamicIds.get(layerId);\n\n            for (int i = 0; i < dynamicIds.size(); i++) {\n                DynamicItemsId itemsId = dynamicIds.get(i);\n                mMapView.destroyTexture(itemsId.dynamicId);\n            }\n\n            mLayerDynamicIds.remove(layerId);\n        }\n    }\n\n    /**\n     * <\n     *\n     * @brief                   清除图层所有item时,通知HMI的接口,上层根据该接口删除动态纹理或者静态纹理\n     * @param[in] pLayer         图层对象\n     * @note thread:main        HMI或BL内部调用ClearAllItems时触发该回调\n     */\n    @Override\n    public synchronized void clearLayerItem(BaseLayer baseLayer, LayerItem layerItem) {\n        if (baseLayer == null || layerItem == null || mMapView == null) {\n            return;\n        }\n\n        Integer layerId = Integer.valueOf((int)baseLayer.getLayerID());\n        String itemId = layerItem.getID();\n\n        if (mLayerDynamicIds.containsKey(layerId)) {\n            boolean removed = false;\n            ArrayList<DynamicItemsId> dynamicIds = mLayerDynamicIds.get(layerId);\n\n            for (int i = 0; i < dynamicIds.size(); i++) {\n                DynamicItemsId itemsId = dynamicIds.get(i);\n                if (itemsId.itemId.equals(itemId)) {\n                    removed = true;\n                    mMapView.destroyTexture(itemsId.dynamicId);\n                }\n            }\n\n            if (removed) {\n                dynamicIds.remove(itemId);\n                mLayerDynamicIds.put(layerId, dynamicIds);\n            }\n        }\n    }\n\n    public synchronized void uninit() {\n        mMapView = null;\n        mImageNameList.clear();\n        mLayerDynamicIds.clear();\n    }\n}\n

JSON配置

{\n  "demo_info": {\n\t\t"point_demo_style": {\n\t\t\t"point_layer_item_style": {\n\t\t\t\t"normal_style": {\n\t\t\t\t\t"poi_marker_id": "global_image_auto_ic_road_facilities_village",\n\t\t\t\t\t"poi_marker_info": "road_facilities_x_y"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t"point_demo_style_night": {\n\t\t\t"point_layer_item_style": {\n\t\t\t\t"normal_style": {\n\t\t\t\t\t"poi_marker_id": "auto_navi_ns_share_new_night"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t"line_demo_style": {\n\t\t\t"line_layer_item_style": {\n\t\t\t\t"priority":0,\n\t\t\t\t"use_cap":1,\n\t\t\t\t"use_color":1,\n\t\t\t\t"draw_cover":1,\n\t\t\t\t"can_be_coveredbylabel":1,\n\t\t\t\t"fill_texture": {\n\t\t\t\t\t"marker_id":"map_frontlr",\n\t\t\t\t\t"marker_info":"",\n\t\t\t\t\t"color":"0xff00baff",\n\t\t\t\t\t"width":32\n\t\t\t\t},\n\t\t\t\t"border_texture": {\n\t\t\t\t\t"marker_id":"map_frontlr",\n\t\t\t\t\t"marker_info":"",\n\t\t\t\t\t"color":"0xff0066ff",\n\t\t\t\t\t"width":40\n\t\t\t\t},\n\t\t\t\t"texture_info": {\n\t\t\t\t\t"x1":0.0,\n\t\t\t\t\t"y1":0.5,\n\t\t\t\t\t"x2":1.0,\n\t\t\t\t\t"y2":0.5,\n\t\t\t\t\t"texture_len":32\n\t\t\t\t},\n\t\t\t\t"cap_texture_info": {\n\t\t\t\t\t"x1":0.0,\n\t\t\t\t\t"y1":0.5,\n\t\t\t\t\t"x2":1.0,\n\t\t\t\t\t"y2":0.75\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t"polygon_demo_style": {\n\t\t\t"polygon_layer_item_style": {\n\t\t\t\t"color": "0x5990b8f5"\n\t\t\t}\n\t\t},\n\t\t"circle_demo_style": {\n\t\t\t"sector_layer_item_style": {\n\t\t\t\t"color": "0x770f0b01"\n\t\t\t}\n\t\t},\n\t\t"arrow_demo_style": {\n\t\t\t"arrow_layer_item_style": {\n\t\t\t\t"arrow_2d_texture_info": {\n\t\t\t\t\t"use_cap": 1,\n\t\t\t\t\t"use_color": 1,\n\t\t\t\t\t"draw_cover": 1,\n\t\t\t\t\t"can_be_coveredbylabel": 0,\n\t\t\t\t\t"solid_arrow_in2dmap": 1,\n\t\t\t\t\t"fill_texture": {\n\t\t\t\t\t\t"marker_id": "arrow_line_inner",\n\t\t\t\t\t\t"color": "0xffffffff",\n\t\t\t\t\t\t"width": 48\n\t\t\t\t\t},\n\t\t\t\t\t"border_texture": {\n\t\t\t\t\t\t"marker_id": "arrow_line_outer",\n\t\t\t\t\t\t"color": "0xff0b6fc4",\n\t\t\t\t\t\t"width": 40\n\t\t\t\t\t},\n\t\t\t\t\t"texture_info": {\n\t\t\t\t\t\t"x1": 0.12,\n\t\t\t\t\t\t"y1": 0.77,\n\t\t\t\t\t\t"x2": 0.88,\n\t\t\t\t\t\t"y2": 0.77,\n\t\t\t\t\t\t"texture_len": 0\n\t\t\t\t\t},\n\t\t\t\t\t"cap_texture_info": {\n\t\t\t\t\t\t"x1": 0.12,\n\t\t\t\t\t\t"y1": 0.85,\n\t\t\t\t\t\t"x2": 0.88,\n\t\t\t\t\t\t"y2": 1\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t"arrow_3d_texture_info": {\n\t\t\t\t\t"draw_3d_arrow": 1,\n\t\t\t\t\t"bias_width": 0,\n\t\t\t\t\t"auto_zoomer_width": 0,\n\t\t\t\t\t"solid_res_marker_id": "threed_arrow_line_shadow",\n\t\t\t\t\t"solid_top_face_color": "0xfff0f9ff",\n\t\t\t\t\t"solid_side_face_color": "0xff2c428a",\n\t\t\t\t\t"solid_shadow_color": "0x4d000000",\n\t\t\t\t\t"solid_height": 5,\n\t\t\t\t\t"solid_thickness": 10,\n\t\t\t\t\t"solid_border_line_top_line_width": 3,\n\t\t\t\t\t"solid_border_line_side_line_width": 0,\n\t\t\t\t\t"solid_border_line_bottom_line_width": 0,\n\t\t\t\t\t"solid_border_line_top_line_color": "0xff506cc9",\n\t\t\t\t\t"solid_border_line_side_line_color": "0xff1c3575",\n\t\t\t\t\t"solid_border_line_bottom_line_color": "0xff1c3575",\n\t\t\t\t\t"solid_arrow_header_param": {\n\t\t\t\t\t\t"header_angle": 55,\n\t\t\t\t\t\t"header_width_rate": 2.8\n\t\t\t\t\t},\n\t\t\t\t\t"solid_texture_info": {\n\t\t\t\t\t\t"x1": 0.3,\n\t\t\t\t\t\t"y1": 0.77,\n\t\t\t\t\t\t"x2": 0.7,\n\t\t\t\t\t\t"y2": 0.77,\n\t\t\t\t\t\t"texture_len": 0.01\n\t\t\t\t\t},\n\t\t\t\t\t"solid_cap_texture_info": {\n\t\t\t\t\t\t"x1": 0.3,\n\t\t\t\t\t\t"y1": 0.8,\n\t\t\t\t\t\t"x2": 0.7,\n\t\t\t\t\t\t"y2": 1.0\n\t\t\t\t\t},\n\t\t\t\t\t"solid_header_texture_info": {\n\t\t\t\t\t\t"x1": 0.12,\n\t\t\t\t\t\t"y1": 0.75,\n\t\t\t\t\t\t"x2": 0.88,\n\t\t\t\t\t\t"y2": 0.0\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}
","body_lake":null,"pub_level":null,"status":"0","updated_at":"2022-04-06 07:03:39","deleted_at":null,"nameSpace":"mnlcaa/v610","browseCount":183,"collectCount":0,"estimateDate":59,"docStatus":0,"permissions":true,"overView":false}}