美文网首页
Arcgis for Android加载离线图例(转)

Arcgis for Android加载离线图例(转)

作者: 曾经的追风少年 | 来源:发表于2018-10-08 16:23 被阅读0次

    原文地址:https://blog.csdn.net/bit_kaki/article/details/76984503

    这里使用geodatebase文件来初始化离线地图:
    https://www.jianshu.com/p/514eb67ac1ca

    图例显示

    思路:图例是地图展示里常用的辅助展示工具。曾经我采用过将图例截成图片转为2进制保存到数据库里,然后在加载图层时候调取对应图片作为图例展示。但是后来知道geodatabase数据其实就是个空间数据库,如果是通过geodatabase数据加载图层,图斑都是geodatabase数据里的空间数据Geometry根据样式Symbol进行动态渲染,所以这个Symbol如果能提取出来,也就是我们要的图例了。

    if (layer instanceof FeatureLayer) {
        FeatureLayer featureLayer = (FeatureLayer) layer;
        GeodatabaseFeatureTable geoTable = (GeodatabaseFeatureTable) featureLayer.getFeatureTable();
    
        String typeFileid = geoTable.getTypeIdField();
        if (typeFileid.equalsIgnoreCase("")) {//TypeIdField没有值
        //获取图层中的FeatureTemplate
        List<FeatureTemplate> templates = geoTable.getFeatureTemplates();
    
        LayerLegendInfo titleLegend = new LayerLegendInfo();
        titleLegend.setName(featureLayer.getName());
        titleLegend.setType(LayerLegendInfo.Type.TITLE);
        legendInfoList.add(titleLegend);
        //从templates构造出图例
        for (FeatureTemplate template : templates) {
        try {
            //根据FeatureTemplate生成GdbFeature
            //GeodatabaseFeature feature = geoTable.createFeatureWithTemplate(template, null);
            //Renderer renderer = featureLayer.getRenderer();
            ////获取符号
            //Symbol symbol = renderer.getSymbol(feature);
            Symbol symbol = featureLayer.createPopupInfo().createSymbolFromTemplate(template);
            //得到代表图例的图片
            Bitmap bitmap = createBitmapFromSymbol(symbol, layer);
            String name = template.getName();
            LayerLegendInfo legend = new LayerLegendInfo();
            legend.setName(name);
            legend.setType(LayerLegendInfo.Type.ITEM);
            legend.setBitmap(bitmap);
            legendInfoList.add(legend);
            //设置图例的布局和点击事件
            // populateTemplateView(layerTemplate,bitmap,template,symbol,(FeatureLayer)layer);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
     } else {//TypeIdField有值
        List<FeatureType> featureTypes = geoTable.getFeatureTypes();
    
        LayerLegendInfo titleLegend = new LayerLegendInfo();
        titleLegend.setName(featureLayer.getName());
        titleLegend.setType(LayerLegendInfo.Type.TITLE);
        legendInfoList.add(titleLegend);
    
        for (FeatureType featureType : featureTypes) {
            FeatureTemplate[] templates = featureType.getTemplates();
            for (FeatureTemplate template : templates) {
                try {
                    //根据FeatureTemplate生成GeodatabaseFeature
                    //GeodatabaseFeature feature = geoTable.createFeatureWithTemplate(template, null);
                    //Renderer renderer = ((FeatureLayer) layer).getRenderer();
                    ////获取符号
                    //Symbol symbol = renderer.getSymbol(feature);
                    Symbol symbol = featureLayer.createPopupInfo().createSymbolFromTemplate(template);
                    //得到代表图例的图片
                    Bitmap bitmap = createBitmapFromSymbol(symbol, layer);
                    String name = template.getName();
                    LayerLegendInfo legend = new LayerLegendInfo();
                    legend.setName(name);
                    legend.setBitmap(bitmap);
                    legend.setType(LayerLegendInfo.Type.ITEM);
                    legendInfoList.add(legend);
                    //设置图例的布局和点击事件
                    //populateTemplateView(layerTemplate,bitmap,template,symbol,(FeatureLayer)layer);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

    图例显示效果图:


    图例显示效果.png

    相关文章

      网友评论

          本文标题:Arcgis for Android加载离线图例(转)

          本文链接:https://www.haomeiwen.com/subject/ynrjaftx.html