天天看點

Android GIS開發系列-- 入門季(5) FeatureLayer加載本地shp檔案與要素查詢

private void initLayer() {  

        try {  

            featureLayer = new FeatureLayer(new ShapefileFeatureTable(  

                    shpPath));  

            featureLayer.setRenderer(new SimpleRenderer(new SimpleFillSymbol(  

                    Color.GREEN)));  

            mapView.addLayer(featureLayer);  

        } catch (Exception e) {  

            e.printStackTrace();  

        }  

    }

效果圖如下。

Android GIS開發系列-- 入門季(5) FeatureLayer加載本地shp檔案與要素查詢

這樣就可以很簡單地加載shp檔案了。下面我們來學習一下FeatureLayer的查詢。

一、FeatureLayer點選查詢主要用到的方法是featureLayer.getFeatureIDs(float x, float y, int tolerance),方法與上一講GraphicsLayer的查詢差不多。可以擷取每個要素的屬性屬性值。

private void handleSingleTap(float x, float y) {  

        long[] featureIds = featureLayer.getFeatureIDs(x, y, 8);  

        if (featureIds != null && featureIds.length > 0) {  

            for (long id : featureIds) {  

                com.esri.core.map.Feature feature = featureLayer.getFeature(id);  

                Map<String, Object> attrs = feature.getAttributes();  

                Set<Entry<String, Object>> setEntry = attrs.entrySet();  

                for (Entry<String, Object> entryItem : setEntry) {  

                    Log.e(TAG,  

                            entryItem.getKey() + "====" + entryItem.getValue());  

                }  

            }  

private void queryTable() {  

        FeatureTable featureTable = featureLayer.getFeatureTable();  

        QueryParameters parameters = new QueryParameters();  

        //查詢條件,有點像資料庫中的查詢  

        parameters.setWhere("name = 'shanghai'");<span style="white-space:pre">                     </span>Future<long[]> queryIds = featureTable.queryIds(parameters,new CallbackListener<long[]>() {  

                    @Override  

                    public void onError(Throwable arg0) {  

                        // TODO Auto-generated method stub  

                    }  

                    public void onCallback(long[] arg0) {  

                });  

            long[] Ids = queryIds.get();  

            if (Ids != null && Ids.length > 0) {  

                for (int i = 0; i < Ids.length; i++) {  

                    Feature feature = featureLayer.getFeature(Ids[i]);  

                    Log.i(TAG, feature.getAttributes().get("name") + "");  

        } catch (InterruptedException e) {  

        } catch (ExecutionException e) {  

        }

這樣就可以快速查詢到某個具體的要素。

 Code for all

沒有整理與歸納的知識,一文不值!高度概括與梳理的知識,才是自己真正的知識與技能。 永遠不要讓自己的自由、好奇、充滿創造力的想法被現實的架構所束縛,讓創造力自由成長吧! 多花時間,關心他(她)人,正如别人所關心你的。理想的騰飛與實作,沒有别人的支援與幫助,是萬萬不能的。

    本文轉自wenglabs部落格園部落格,原文連結:http://www.cnblogs.com/arxive/p/7751880.html,如需轉載請自行聯系原作者