ArcGIS Runtime SDK for Android 100过滤ArcGISMapImageLayer子图层要素

本文介绍如何使用ArcGIS Runtime SDK for Android 100.x版本中的ArcGISMapImageSublayer的setDefinitionExpression方法来实现对ArcGISMapImageLayer子图层的过滤。具体案例为在地图子图层中隐藏特定区域的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:

使用ArcGIS Runtime SDK for Android100.x实现过滤ArcGISMapImageLayer子图层要素,通过筛选进行过滤其子图层中的一些要素的显示和隐藏。

思路:

①发布动态地图服务

ArcGISMapImageLayer对应的地图服务类型是动态地图服务

②使用ArcGISMapImageSublayer下的setDefinitionExpression方法实现对ArcGISMapImageLayer子图层进行过滤。链接:https://developers.arcgis.com/android/api-reference/reference/com/esri/arcgisruntime/layers/ArcGISMapImageSublayer.html#setDefinitionExpression(java.lang.String)

案例实现:

runtime for android 版本:100.9

假设在北京子图层中只显示除了房山区以外的其它要素

①使用arcgis desktop发布动态地图服务

如下图,可见发布的动态地图服务中有3个子图层(AAAAA风景名胜区、水系面、北京)

②使用ArcGISMapImageSublayer下的setDefinitionExpression方法实现对ArcGISMapImageLayer子图层进行过滤。


public class MainActivity extends AppCompatActivity {

  private MapView mMapView;
  private Button mQueryButton;
  private EditText mQueryInputBox;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // inflate views from layout
    mMapView = findViewById(R.id.mapView);

    // create a map with a streets vector basemap and set initial viewpoint
    ArcGISMap map = new ArcGISMap(Basemap.createStreetsVector());
    Point initialLocation = new Point(12973064.334,4892683.809, SpatialReferences.getWebMercator());
    Viewpoint viewpoint = new Viewpoint(initialLocation, 4000000);
    map.setInitialViewpoint(viewpoint);

    // set the map to be displayed in this view
    mMapView.setMap(map);

    // create and add a map image layer to the map
    ArcGISMapImageLayer imageLayer = new ArcGISMapImageLayer(getString(R.string.usa_map));
    map.getOperationalLayers().add(imageLayer);

   // wait until the layer is loaded before enabling the query button
    imageLayer.addDoneLoadingListener(() -> {
      if (imageLayer.getLoadStatus() == LoadStatus.LOADED) {

        // get and load each sublayer to query
        ArcGISMapImageSublayer citiesSublayer = (ArcGISMapImageSublayer) imageLayer.getSublayers().get(0);
        ArcGISMapImageSublayer statesSublayer = (ArcGISMapImageSublayer) imageLayer.getSublayers().get(1);
        ArcGISMapImageSublayer countiesSublayer = (ArcGISMapImageSublayer) imageLayer.getSublayers().get(2);
        countiesSublayer.setDefinitionExpression("NAME <> '房山区'" );
        citiesSublayer.loadAsync();
        statesSublayer.loadAsync();
        countiesSublayer.loadAsync();


      }
    });
  }


  @Override
  protected void onPause() {
    super.onPause();
    mMapView.pause();
  }

  @Override
  protected void onResume() {
    super.onResume();
    mMapView.resume();
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    mMapView.dispose();
  }
}

其中setDefinitionExpression的参数是一条sql语句,可以通过arcmap的定义查询还获得,以免自己写语句时拼写错误,如下图:

最终的效果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值