几个月前就测试了arcgis for Android 100.2。之前也更新了几篇arcgis 相关的。现在继续。

arcgis for Android 100.1 基本操作(缩小放大旋转定位)

arcgis for Android 100.1 在线加载天地图和谷歌地图

1、显示效果



2、实现代码

package com.arcgis.activity;import android.graphics.Color;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.MotionEvent;import com.arcgis.R;import com.arcgis.until.FilePathManage;import com.esri.arcgisruntime.concurrent.ListenableFuture;import com.esri.arcgisruntime.data.Feature;import com.esri.arcgisruntime.data.FeatureQueryResult;import com.esri.arcgisruntime.data.FeatureTable;import com.esri.arcgisruntime.data.QueryParameters;import com.esri.arcgisruntime.data.ShapefileFeatureTable;import com.esri.arcgisruntime.geometry.Envelope;import com.esri.arcgisruntime.geometry.Geometry;import com.esri.arcgisruntime.geometry.GeometryType;import com.esri.arcgisruntime.geometry.Point;import com.esri.arcgisruntime.geometry.SpatialReference;import com.esri.arcgisruntime.layers.FeatureLayer;import com.esri.arcgisruntime.mapping.ArcGISMap;import com.esri.arcgisruntime.mapping.Basemap;import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener;import com.esri.arcgisruntime.mapping.view.Graphic;import com.esri.arcgisruntime.mapping.view.GraphicsOverlay;import com.esri.arcgisruntime.mapping.view.MapView;import com.esri.arcgisruntime.mapping.view.SketchEditor;import com.esri.arcgisruntime.mapping.view.SketchStyle;import com.esri.arcgisruntime.symbology.SimpleFillSymbol;import com.esri.arcgisruntime.symbology.SimpleLineSymbol;import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol;import com.esri.arcgisruntime.symbology.SimpleRenderer;import java.util.Iterator;import java.util.Map;import java.util.concurrent.ExecutionException;/** * 数据量大的时候,加载速度比较慢,有时候还没加载出来,一直在找 * 最后又pc上软件知道shp的位置,比较好测试 * * 还有shp 必须有least three files (.shp, .shx, .dbf) 如果有prj文件那就更好。位置准确 * * 受之前10的版本影响,我一直在找怎么设置投影,其实是多余的。不用设置,接口都没有。里面已经处理好 * */public class ArcgisShpMapActivity extends AppCompatActivity {    private MapView mMapView;    private ShapefileFeatureTable shapefileFeatureTable;    private ArcGISMap arcGISMap;    private FeatureLayer featureLayer;    private SketchEditor mainSketchEditor;    private SketchStyle mainSketchStyle;    private String shpName = "/DLJX.shp";//    private String shpName = "/未命名_20171130163924.shp";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_map);        mMapView = (MapView) findViewById(R.id.map_view);        showShapefile();//        openShp();    }    //加载shp方式一    private void openShp() {        // 构建ShapefileFeatureTable,引入本地存储的shapefile文件        shapefileFeatureTable = new ShapefileFeatureTable(                FilePathManage.GetInstance().getShpDirectory() + shpName);        shapefileFeatureTable.loadAsync();        // 构建featureLayerr        featureLayer = new FeatureLayer(shapefileFeatureTable);        // 设置Shapefile文件的渲染方式        SimpleLineSymbol lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.RED, 1.0f);        SimpleFillSymbol fillSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID, Color.YELLOW, lineSymbol);        SimpleRenderer renderer = new SimpleRenderer(fillSymbol);        featureLayer.setRenderer(renderer);        // 添加到地图的业务图层组中        arcGISMap = new ArcGISMap(Basemap.createTopographic());        arcGISMap.getOperationalLayers().add(featureLayer);        // set the map to the map view        mMapView.setMap(arcGISMap);    }    //加载shp方式二    private void showShapefile() {        mMapView.setAttributionTextVisible(false);        arcGISMap = new ArcGISMap(new Basemap().createImageryWithLabelsVector());        mMapView.setMap(arcGISMap);        final ShapefileFeatureTable shapefileFeatureTable = new ShapefileFeatureTable(                FilePathManage.GetInstance().getShpDirectory() + shpName);        shapefileFeatureTable.loadAsync();        shapefileFeatureTable.addDoneLoadingListener(new Runnable() {            @Override            public void run() {                GeometryType gt = shapefileFeatureTable.getGeometryType();                String name = shapefileFeatureTable.getTableName();                featureLayer = new FeatureLayer(shapefileFeatureTable);                if (featureLayer.getFullExtent() != null) {                    mMapView.setViewpointGeometryAsync(featureLayer.getFullExtent());                } else {                    featureLayer.addDoneLoadingListener(new Runnable() {                        @Override                        public void run() {                            mMapView.setViewpointGeometryAsync(featureLayer.getFullExtent());                        }                    });                }                arcGISMap.getOperationalLayers().add(featureLayer);            }        });        SimpleLineSymbol lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.RED, 1.0f);        SimpleFillSymbol fillSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID, Color.YELLOW, lineSymbol);        SimpleRenderer renderer = new SimpleRenderer(fillSymbol);        featureLayer.setRenderer(renderer);    }    public void queryShp2(){        //单击shp 进行查询        mMapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mMapView) {            @Override            public boolean  onSingleTapConfirmed(MotionEvent v) {                android.graphics.Point screenPoint=new android.graphics.Point(Math.round(v.getX()), Math.round(v.getY()));                Point clickPoint = mMapView.screenToLocation(screenPoint);                QueryParameters query = new QueryParameters();                query.setGeometry(clickPoint);// 设置空间几何对象                FeatureTable mTable = featureLayer.getFeatureTable();//得到查询属性表                final ListenableFuture featureQueryResult                        = mTable.queryFeaturesAsync(query);                featureQueryResult.addDoneListener(new Runnable() {                    @Override                    public void run() {                        try {                            FeatureQueryResult featureResul = featureQueryResult.get();                            for (Object element : featureResul) {                                if (element instanceof Feature) {                                    Feature mFeatureGrafic = (Feature) element;                                    Map mQuerryString = mFeatureGrafic.getAttributes();                                    for(String key : mQuerryString.keySet()){                                        Log.i("Show"+key,String.valueOf(mQuerryString.get(key)));                                    }                                }                            }                        }catch (Exception e){                            e.printStackTrace();                        }                    }                });                return true;            }        });    }    //查询shp2    public void queryShp() {        try {            mainSketchEditor = new SketchEditor();            mainSketchStyle = new SketchStyle();            mainSketchEditor.setSketchStyle(mainSketchStyle);            mMapView.setSketchEditor(mainSketchEditor);            mMapView.setOnTouchListener(                    new DefaultMapViewOnTouchListener(this, mMapView) {                        @Override                        public boolean onSingleTapConfirmed(MotionEvent e) {                            Point clickPoint = mMapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())));                            int tolerance = 1;                            double mapTolerance = tolerance * mMapView.getUnitsPerDensityIndependentPixel();                            Envelope envelope = new Envelope(clickPoint.getX() - mapTolerance, clickPoint.getY() - mapTolerance, clickPoint.getX() + mapTolerance, clickPoint.getY() + mapTolerance, mMapView.getSpatialReference());                            QueryParameters query = new QueryParameters();                            query.setGeometry(envelope);                            query.setSpatialRelationship(QueryParameters.SpatialRelationship.WITHIN);                            final ListenableFuture future = featureLayer.selectFeaturesAsync(query, FeatureLayer.SelectionMode.NEW);                            future.addDoneListener(new Runnable() {                                @Override                                public void run() {                                    try {                                        FeatureQueryResult result = future.get();                                        //mainShapefileLayer.getFeatureTable().deleteFeaturesAsync(result);                                        Iterator iterator = result.iterator();                                    } catch (Exception e) {                                        e.getCause();                                    }                                }                            });                            return super.onSingleTapConfirmed(e);                        }                    }            );        } catch (Exception e) {            e.getCause();        }    }    //增加    public void addShp() {        // 调用isEditable和canAdd方法判断文件是否支持编辑操作,是否可添加要素;否,则抛出信息        if (shapefileFeatureTable.isEditable() && shapefileFeatureTable.canAdd()) {            // 构建新增几何            Point mapPoint = new Point(140.0, 39.0, SpatialReference.create(4326));            // 构建待增加的Feature对象,设置几何,设置属性            Feature feature = shapefileFeatureTable.createFeature();            feature.setGeometry(mapPoint);            feature.getAttributes().put("NAME", "测试点");            // 调用addFeatureAsync方法增加要素            final ListenableFuture addFeatureOper = shapefileFeatureTable.addFeatureAsync(feature);            // 在操作完成的监听事件中判断操作是否成功            addFeatureOper.addDoneListener(new Runnable() {                @Override                public void run() {                    try {                        addFeatureOper.get();                        if (addFeatureOper.isDone()) {                            Log.i("ShapefileEdit:", "Feature added!");                        }                    } catch (InterruptedException interruptedExceptionException) {                        // 处理异常                    } catch (ExecutionException executionException) {                        // 处理异常                    }                }            });        } else {            Log.i("ShapefileEdit:", "The Shapefile cann't be edited");        }    }    protected void onResume() {        super.onResume();        mMapView.resume();    }    @Override    protected void onPause() {        super.onPause();        mMapView.pause();    }}
测试的注意事项,自已看啦
* 数据量大的时候,加载速度比较慢,有时候还没加载出来,一直在找* 最后又pc上软件知道shp的位置,比较好测试** 还有shp 必须有least three files (.shp, .shx, .dbf) 如果有prj文件那就更好。位置准确** 受之前10的版本影响,我一直在找怎么设置投影,其实是多余的。不用设置,接口都没有。里面已经处理好

3、权限

对于新手开发,我每次都强调权限

            

更多相关文章

  1. 关于PreferenceActivity的使用和一些问题的解决(自己定义Title和
  2. 01-android 4.0 入门配置以及HelloWorld程序讲解
  3. Windows平台上编译OpenCV的Android版本
  4. Android之SharePreference
  5. Android(安卓)对话框【Dialog】去除白色边框代码
  6. 转:Android(安卓)对话框【Dialog】去除白色边框代码
  7. android沉浸式状态栏底部背景用图片代替
  8. Android(安卓)O(8.0)通知栏适配
  9. NPM 和webpack 的基础使用

随机推荐

  1. Android开机向导setupwizard,设置系统语
  2. 一、android学习之Hello word
  3. 自定义Dialog 实现 仿网易云音乐的隐私条
  4. android 实时获取 麦克风 音量大小
  5. Android 抢红包
  6. Android HAL基础
  7. Android 唯一识别码
  8. Android 解决沉浸式状态栏下,输入法弹出,布
  9. 从头开始学Android—Android Studio(一)
  10. Android仿小米商城底部导航栏(基于BottomN