Android ArcGIS.100 关于图层的一些操作

展示底图 ArcGISTiledLayer :

ArcGISTiledLayer arcGISTiledLayer;
private GraphicsOverlay overlay;

arcGISMap = new ArcGISMap(Basemap.Type.IMAGERY, 26.75, 106.82, 9);
mapView.setMap(arcGISMap);
overlay = new GraphicsOverlay();
mapView.getGraphicsOverlays().add(overlay);
//去除水印
ArcGISRuntimeEnvironment.setLicense("runtimelite,1000,rud4449636536,none,NKMFA0PL4S0DRJE15166");
mapView.setAttributionTextVisible(false);
//最大放大范围
arcGISMap.setMaxScale(1000.0);

切换底图:
1其他底图:
arcGISMap.getOperationalLayers().remove(basemap);
tiledLayer = new ArcGISTiledLayer("http://map.geoq.cn/arcgis/rest/services/ChinaOnlineCommunity/MapServer");
basemap = new Basemap(tiledLayer);
arcGISMap.setBasemap(basemap);
mapView.setMap(arcGISMap);

2初始原图:
arcGISMap.getOperationalLayers().remove(basemap);
basemap = Basemap.createImagery();
arcGISMap.setBasemap(basemap);
mapView.setMap(arcGISMap);

添加要素图层 FeatureLayer:

ServiceFeatureTable table = new ServiceFeatureTable(
       "http://10.0.0.4:6080/arcgis/rest/services/GYLY_SPECDATA/GYS_SLHZ/MapServer/0");
FeatureLayer layer = new FeatureLayer(table);
arcGISMap.getOperationalLayers().add(layer);

为FeatureLayer设置样式

SimpleLineSymbol lineSymbol = new SimpleLineSymbol(
        SimpleLineSymbol.Style.SOLID, 0xFFF7FCEF, 1F);
layer.setRenderer(new SimpleRenderer(new SimpleFillSymbol(
        SimpleFillSymbol.Style.SOLID, 0x00000000, lineSymbol)));

加载完成后定位到该区域:

layer.addDoneLoadingListener(() -> {
    Envelope envelope = layer.getFeatureTable().getExtent();
    mapView.setViewpointGeometryAsync(envelope, 20);
});

加载 ArcGISMapImageLayer :

ArcGISMapImageLayer imageLayer = new ArcGISMapImageLayer(
        "https://sampleserver6.arcgisonline.com/arcgis/rest/services/SampleWorldCities/MapServer");
imageLayer.addDoneLoadingListener(() -> {
    // 隐藏Continent和World两个图层(仅保存WorldCities点图层)
    imageLayer.getSubLayerContents().get(1).setVisible(false);
    imageLayer.getSubLayerContents().get(2).setVisible(false);
});

可以在 ArcGISMapImageLayer 取出某一个图层单独加载:

FeatureLayer layer1 = new FeatureLayer(
        new ServiceFeatureTable(
                "https://sampleserver6.arcgisonline.com/arcgis/rest/services/SampleWorldCities/MapServer/0"));

点击要素获取区域范围然后再定位到该区域:

mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView){
    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        android.graphics.Point point = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY()));
        ListenableFuture<IdentifyLayerResult> future =
                mapView.identifyLayerAsync(arcGISMap.getOperationalLayers().get(0), point, 8.0, false, -1);
        future.addDoneListener(() -> {
            try {
                //将当前区域放大
                GeoElement element = future.get().getElements().get(0);
                Envelope envelope = element.getGeometry().getExtent();
                mapView.setViewpointGeometryAsync(envelope, 20);
                //当前区域使用实线标记边界
//                SimpleLineSymbol lineSymbol = new SimpleLineSymbol(
//                        SimpleLineSymbol.Style.SOLID, 0xFFFF0000, 0.5F);
//                overlay.getGraphics().add(new Graphic(geometry, lineSymbol));
                //当前区域使用颜色填充
                SimpleFillSymbol fillSymbol = new SimpleFillSymbol(
                        SimpleFillSymbol.Style.SOLID, 0x88FF0000, null);
                overlay.getGraphics().add(new Graphic(geometry, fillSymbol));
            } catch (ExecutionException | InterruptedException executionException) {
                executionException.printStackTrace();
            }
        });
        return super.onSingleTapConfirmed(e);
    }
});
Geometry有多个面,获取出最大的面,然后取中心点显示名称

private Geometry maxGeometry(Geometry geometry){

        return GeometryEngine.labelPoint((Polygon) geometry);

}

直接查询元素并绘制文字边界和透明图形,和 setRenderer 绘制样式是一样的效果

overlay = new GraphicsOverlay();
mapView.getGraphicsOverlays().add(overlay);
parameters = new QueryParameters();

table = new ServiceFeatureTable("url");
layer = new FeatureLayer(table);
table.loadAsync();
table.addDoneLoadingListener(() -> {
    parameters.setGeometry(table.getExtent());
    ListenableFuture<FeatureQueryResult> future = table.queryFeaturesAsync(
            parameters, ServiceFeatureTable.QueryFeatureFields.LOAD_ALL);
    future.addDoneListener(() -> {
        try {
            for (Feature feature : future.get()) {
                Geometry element = feature.getGeometry();
                TextSymbol drapedText = new TextSymbol(10, "十字", 0xFFDDDDDD,
                        TextSymbol.HorizontalAlignment.CENTER,                         TextSymbol.VerticalAlignment.MIDDLE);
                SimpleLineSymbol lineSymbol = new SimpleLineSymbol(
                        SimpleLineSymbol.Style.SOLID, 0xFFF7FCEF, 1F);
                SimpleFillSymbol fillSymbol = new SimpleFillSymbol(
                        SimpleFillSymbol.Style.SOLID, 0x00000000, lineSymbol);
                overlay.getGraphics().add(new Graphic(element, fillSymbol));
                overlay.getGraphics().add(new Graphic(element, drapedText));
            }
        } catch (ExecutionException | InterruptedException e) {
            e.printStackTrace();
        }
    });
});

查询绘制的图层并放大区域

mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mapView) {
    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        android.graphics.Point poi = new
                android.graphics.Point(Math.round(e.getX()), Math.round(e.getY()));
        ListenableFuture<IdentifyGraphicsOverlayResult> future =
                mapView.identifyGraphicsOverlayAsync(overlay, poi, 10, false, 1);
        future.addDoneListener(() -> {
            try {
                IdentifyGraphicsOverlayResult result = future.get();
                if (result.getGraphics().size() > 0) {
                    GeoElement element = future.get().getGraphics().get(0);
                    Envelope envelope = element.getGeometry().getExtent();
                    mapView.setViewpointGeometryAsync(envelope, 20);
                }
            } catch (ExecutionException | InterruptedException executionException) {
                executionException.printStackTrace();
            }
        });
        return super.onSingleTapConfirmed(e);
    }
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值