ArcGIS Runtime SDK for Android获取动态图层图例

通过调用dynamiclayer.getAllLayers()[0].getLegend()方法无法获取图例信息。
已邀请:

张赛

赞同来自:

【解决办法】:
ArcGIS Runtime SDK for Android的官方文档中明确说明:在获取地图图例的时候,需要先取回LegendInfo信息。具体阐述如下: 

public boolean retrieveLegendInfo () 

Supported on ArcGIS Server 10.01 and above. 
Synchronously retrieves the legend information for all the layers and populate each layers legend info into its Layer info. Once finished, getLegend() may be called on the individual ArcGISLayerInfos that make up this ArcGISDynamicMapServiceLayer. 
Note: The developer is responsible for calling this method in a non-UI thread. 

即:
同步获取所有图层的图例信息,并将每个图层的图例信息添加到其图层信息中。retrieveLegendInfo调用完成后,才能够对ArcGISDynamicMapServiceLayer的ArcGISLayerInfos项调用getLegend方法。
注:开发者需要在非UI线程中调用这一方法。

示例:

        mMapView.setOnStatusChangedListener(new OnStatusChangedListener() {
            @Override
            public void onStatusChanged(Object o, STATUS status) {
                if (status == STATUS.LAYER_LOADED) {
                    if (o instanceof ArcGISDynamicMapServiceLayer) {
                        //retrieving legend info
                        new AsyncTask<Void, Void, Void>() {
                            @Override
                            protected Void doInBackground(Void... voids) {
                                //调用retrieveLegendInfo方法              
                                dynamicMapServiceLayer.retrieveLegendInfo();
                            }
                            protected void onPostExecute(Void result){
                                for (ArcGISLayerInfo layerInfo:dynamicMapServiceLayer.getLayers()){
                                    //对layerInfo调用getLegend方法获取Legend
                                }
                            }
                        }.execute();
                    }
            }
        }});


更加完整的应用示例,请访问ArcGIS Runtime SDK for Android开发包中的示例。其中的MapLegend提供了完整的地图Legend的展示。

要回复问题请先登录注册