arcgis for android加载wms服务,获取服务中图斑的信息

文章介绍了如何在ArcGISforAndroid中加载和使用WMS服务,包括通过GetCapabitities获取服务元数据和通过GetMap请求地图图片进行显示。同时,讲解了利用GetFeatureInfo方法读取地图图斑信息的过程,涉及坐标转换和请求参数构建。
摘要由CSDN通过智能技术生成

一、加载wms服务

        首先简单介绍WMS服务,WMS就是将地图发布成地图服务,然后客户端向地图服务器请求的时候,能根据用户的请求信息,返回对应的地图信息(比如对应的地图图片),然后客户端就能根据服务器的返回的结果,在客户端对需要的地图进行显示。

        WMS服务根据OGC的标准,可以提供以下操作:

GetCapabitities:返回服务级元数据,它是对服务信息内容和要求参数的一种描述
GetMap:返回一个地图影像,其地理空间参考和大小参数是明确定义了的
GetFeatureInfo:返回显示在地图上的某些特殊要素的信息
GetLegendGraphic:返回地图的图例信息

        在ArcGIS for Android中,主要会涉及到GetCapabititiesGetMap两种操作。其中,向地图服务器请求GetCapabitities,会获得一个XML文件,里面包含该WMS服务中包含的图层的名字,图层的坐标系等数据。向服务器请求GetMap,则会根据请求的参数获得一张图片,请求的参数中包含图片的高度,宽度,坐标系等信息。

        加载实例(基于 Android 100.6 的 ArcGIS Runtime SDK):

        ArcGIS for Android加载WMS服务时,要使用WMSLayer这个类。请求方式只能是GetCapabitities,通过GetCapabitities会获取到XML文件,ArcGIS for Android内部会自己解析,然后通过当前地图的位置,自动构造请求参数,然后通过GetMap向服务器请求,服务器根据请求参数返回图片,ArcGIS for Android会将图片展示在MapView上。

//wms服务图层名称
List<String> wmsLayersName = new ArrayList<String>();
        wmsLayersName.add("aaa");
WmsLayer wmsLayer = new WmsLayer("http://192.168.0.136:8087/geoserver/common/wms?SERVICE=WMS&REQUEST=GetCapabilities", wmsLayersName);
        wmsLayer.loadAsync();
        if (basemap != null) {
            basemap.getBaseLayers().add(wmsLayer);
        }

        wms服务就加载好了。

二、读取服务中图斑的信息

        读取图斑信息主要用GetFeatureInfo方法,该方法具体需要的参数在 这里http://ditu.mwr.gov.cn/iserver/help/html/zh/API/WMS/WMS130/GetFeatureInfo/GetFeatureInfo_request.htm 

Polygon visibleArea = getView().getMapView().getVisibleArea();
        Envelope envelope = visibleArea.getExtent();
        double xMax = envelope.getXMax();
        double xMin = envelope.getXMin();
        double yMax = envelope.getYMax();
        double yMin = envelope.getYMin();

        String x = String.valueOf(e.getX()).split("\\.")[0];
        String y = String.valueOf(e.getY()).split("\\.")[0];

//获取屏幕宽高
        Resources resources = getView().getSelfActivity().getResources();
        DisplayMetrics dm = resources.getDisplayMetrics();
        int screenWidth = dm.widthPixels;
        int screenHeight = dm.heightPixels;

String GetFeatureInfo_url = "http://192.168.0.136:8087/geoserver/common/wms?" +
                    "SERVICE=WMS" +
                    "&VERSION=1.1.1" +
                    "&REQUEST=GetFeatureInfo" +
                    "&LAYERS=common:O_0810_YSCFGDWTTB_2022" +
                    "&BBOX=" + xMin + "," + yMin + "," + xMax + "," + yMax +
                    "&FORMAT=image/png" +
                    "&TRANSPARENT=true" +
                    "&QUERY_LAYERS=common:O_0810_YSCFGDWTTB_2022" +
                    "&exceptions=application/vnd.ogc.se_xml" +
                    "&INFO_FORMAT=application/json" +
                    "&FEATURE_COUNT=1" +
                    "&X=" + x +
                    "&Y=" + y +
                    "&SRS=EPSG:4490" +
                    "&WIDTH=" + screenWidth +
                    "&HEIGHT=" + screenHeight;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老杜_d

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值