ArcGIS Runtime SDK for Android 入门(23):操作地图选择集

       选择集是存放当前地图中查询选择结果的集合,通过Select方法进行查询操作后,查询结果就会被关联至选择集中,通过访问选择集可以获取以前的查询结果。本实例以美国行政区数据为例,根据用户设定的查询条件,执行Select查询并将查询结果要素与选择集进行关联,然后对选择集中的要素进行显示。

实现步骤:

1.创建Android项目   

2.添加Runtime SDK依赖   

    前两步本文省略,初学者可参照 ArcGIS Runtime SDK for Android 入门(1):第一个地图应用程序(二维)

3.添加权限及OpenGL ES支持

    在AndroidManifest.xml中添加:

    <!--联网权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!--OpenGL ES支持 -->
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

4.设置界面布局

    布局XML代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:orientation="horizontal"
        android:layout_weight="1">
        <Spinner
            android:id="@+id/spnState"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:spinnerMode="dropdown"
            android:overlapAnchor="false"
            android:layout_weight="1"/>
        <Spinner
            android:id="@+id/spnSelectionMode"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:spinnerMode="dropdown"
            android:overlapAnchor="false"
            android:layout_weight="1"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="Select"
            android:textSize="15sp"
            android:id="@+id/btnSelect"/>
    </LinearLayout>


    <!-- MapView组件 -->
    <com.esri.arcgisruntime.mapping.view.MapView
        android:id="@+id/mapView"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="11">
    </com.esri.arcgisruntime.mapping.view.MapView>

    <Button
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:text="清空选择集"
        android:textSize="16sp"
        android:id="@+id/btnClearSelection"/>
</LinearLayout>

5.编写代码

思路:

(1)加载在线要素服务数据。

(2)通过设置下拉框,来进行查询条件的构造执行Select查询。

(3)通过设置下拉框,设置选择集的关联模式,将查询结果关联至图层选择集中。

步骤:

(1)变量准备:

    private ArcGISMap mMap;                             //地图对象
    private MapView mMapView;                           //MapView组件对象
    private ServiceFeatureTable mServiceFeatureTable;   //要素表服务对象
    private FeatureLayer mFeaturelayer;                 //要素图层对象
    private Spinner mStatesSpinner;                     //用于选择州名的下拉框组件件对象
    private Spinner mSelectionModesSpinner;             //用于选择州名的下拉框组件对象
    private Button mSelectButton;                       //用于触发Query查询的按钮对象
    private Button mClearSelectionButton;               //用于清空查询结果的按钮对象

(2)onCreate方法:

        //获取各UI元素
        mMapView =(MapView)findViewById(R.id.mapView);
        mStatesSpinner=(Spinner)findViewById(R.id.spnState);
        mSelectionModesSpinner=(Spinner)findViewById(R.id.spnSelectionMode);
        mSelectButton=(Button)findViewById(R.id.btnSelect);
        mClearSelectionButton=(Button)findViewById(R.id.btnClearSelection);
        //初始化下拉框
        initSpinner();
        //以地形图为底图创建地图对象
        mMap = new ArcGISMap(Basemap.createTopographic());
        //设置地图在MapView中显示
        mMapView.setMap(mMap);
        //通过URL创建ServiceFeatureTable对象
        mServiceFeatureTable= new ServiceFeatureTable(getResources().getString(R.string.sample_service_url));
        //使用ServiceFeatureTable对象创建Featurelayer对象
        mFeaturelayer = new FeatureLayer(mServiceFeatureTable);
        //设置图层不透明度
        mFeaturelayer.setOpacity(0.8f);
        //重写图层显示的Renderer渲染器
        SimpleLineSymbol lineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.BLACK, 1);
        SimpleFillSymbol fillSymbol = new SimpleFillSymbol(SimpleFillSymbol.Style.SOLID, Color.YELLOW, lineSymbol);
        mFeaturelayer.setRenderer(new SimpleRenderer(fillSymbol));
        //设置选择集显示样式
        mFeaturelayer.setSelectionColor(Color.RED);
        mFeaturelayer.setSelectionWidth(5);
        //将图层添加到地图中
        mMap.getOperationalLayers().add(mFeaturelayer);
        //设置一个初始的地图视点
        mMapView.setViewpointCenterAsync(new Point(-11000000, 5000000, SpatialReferences.getWebMercator()), 100000000);
        //“SELECT”按钮的点击监听事件
        mSelectButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //调用queryStateByAttribute方法执行属性查询
                selectState(mStatesSpinner.getSelectedItem().toString(),mSelectionModesSpinner.getSelectedItem().toString());
            }
        });
        //“清空选择集”按钮的点击监听事件
        mClearSelectionButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //删除图层选择集
                mFeaturelayer.clearSelection();
            }
        });

(3)初始化下拉框方法:

    //初始化下拉框
    private void initSpinner() {
        //创建并实例化用于获取下拉框显示内容的泛型对象
        ArrayList<String> stateArrayList=new ArrayList<String>();
        ArrayList<String> selectionArrayList=new ArrayList<String>();
        //通过资源文件设置下拉框中的显示内容
        //获取XML中定义的数组
        String[] stateStringArray=getResources().getStringArray(R.array.sample_state_names);
        String[] selectionStringArray=getResources().getStringArray(R.array.sample_selection_modes);
        //将数组导入到ArrayList对象中
        for(int i=0;i<stateStringArray.length;i++){
            stateArrayList.add(stateStringArray[i]);
        }
        for(int i=0;i<selectionStringArray.length;i++){
            selectionArrayList.add(selectionStringArray[i]);
        }
        //创建并绑定用于控制下拉框显示的适配器对象
        ArrayAdapter arrayAdapter1=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,stateArrayList);
        arrayAdapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        mStatesSpinner.setAdapter(arrayAdapter1);
        ArrayAdapter arrayAdapter2=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,selectionArrayList);
        arrayAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        mSelectionModesSpinner.setAdapter(arrayAdapter2);
    }

(4)执行Select查询并关联选择集的核心方法:

    //执行Select查询并对选择集进行展示
    public void selectState(String strSearch,String strSelectionMode) {
        //创建查询参数对象
        QueryParameters queryParameters = new QueryParameters();
        //构建where子句
        queryParameters.setWhereClause("upper(STATE_NAME) LIKE '%" + strSearch.toUpperCase() + "%'");
        //根据选择集关联模式执行Select
        switch (strSelectionMode){
            case "ADD":
                mFeaturelayer.selectFeaturesAsync(queryParameters, FeatureLayer.SelectionMode.ADD);
                break;
            case "NEW":
                mFeaturelayer.selectFeaturesAsync(queryParameters, FeatureLayer.SelectionMode.NEW);
                break;
            case "SUBTRACT":
                mFeaturelayer.selectFeaturesAsync(queryParameters, FeatureLayer.SelectionMode.SUBTRACT);
                break;
        }
    }

6.运行App:能够实现简单的操作选择集操作。

补充:在string.xml中添加字符串与数组资源:

    <string name="sample_service_url">https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer/2</string>
    <string-array name="sample_state_names">
        <item>Arkansas</item>
        <item>California</item>
        <item>Colorado</item>
        <item>Connecticut</item>
        <item>Delaware</item>
        <item>District of Columbia</item>
        <item>Florida</item>
        <item>Georgia</item>
        <item>Hawaii</item>
        <item>Idaho</item>
        <item>Illinois</item>
        <item>Indiana</item>
        <item>Iowa</item>
        <item>Kansas</item>
        <item>Kentucky</item>
        <item>Louisiana</item>
        <item>Maine</item>
        <item>Maryland</item>
        <item>Massachusetts</item>
        <item>Michigan</item>
        <item>Minnesota</item>
        <item>Mississippi</item>
        <item>Missouri</item>
        <item>Montana</item>
        <item>Nebraska</item>
        <item>Nevada</item>
        <item>New Hampshire</item>
        <item>New Jersey</item>
        <item>New Mexico</item>
        <item>New York</item>
        <item>North Carolina</item>
        <item>North Dakota</item>
        <item>Ohio</item>
        <item>Oklahoma</item>
        <item>Oregon</item>
        <item>Pennsylvania</item>
        <item>Rhode Island</item>
        <item>South Carolina</item>
        <item>South Dakota</item>
        <item>Tennessee</item>
        <item>Texas</item>
        <item>Utah</item>
        <item>Vermont</item>
        <item>Virginia</item>
        <item>Washington</item>
        <item>West Virginia</item>
        <item>Wisconsin</item>
        <item>Wyoming</item>
    </string-array>

    <string-array name="sample_selection_modes">
        <item>ADD</item>
        <item>NEW</item>
        <item>SUBTRACT</item>
    </string-array>

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值