使用AE获取ArcService服务_陈焜浩Arain_新浪博客

在ArcGIS上有获取ArcService服务的功能,通过这个功能我们可以很方便的获取一些别人在ArcService上发布的服务而不需要对数据进行繁琐的拷贝,对于一些需要运用数据量很大的使用者来说是一个很方便的基本功能。

在实现通过AE获取ArcService服务的功能前,必须对ArcService所能发布的服务以及服务的类型有一个大致的了解,这里简单介绍几种常见的服务类型:ArcService的基本服务类型MapService、OGC订立的标准地图服务WMS和标准切片地图服务WMTS。这三种不同服务使用AE。

​1、获取ArcService服务:

​            //设置连接参数

            IPropertySet2 pPropertySet = new PropertySetClass();

            pPropertySet.SetProperty("url", serverUrl);

            pPropertySet.SetProperty("ConnectionMode", esriAGSConnectionMode.esriAGSConnectionModeConsumer);

            pPropertySet.SetProperty("user", user);

            pPropertySet.SetProperty("password", password);

            IAGSServerConnectionName3 pConnectionName = new AGSServerConnectionNameClass() as IAGSServerConnectionName3;

            pConnectionName.ConnectionProperties = pPropertySet;

            IAGSServerConnection4 pServerConnection = ((IName)pConnectionName).Open() as IAGSServerConnection4;

​            //获取ArcService的服务资源

            IAGSEnumServerObjectName pEnumServerObjectName = pServerConnection.ServerObjectNames;

            pEnumServerObjectName.Reset();

            IAGSServerObjectName pServerObjectName = pEnumServerObjectName.Next();

            while (pServerObjectName != null )

            {

                if (pServerObjectName.Type == "MapServer")

                {

                     IName pName = (IName)pServerObjectName;

                     IAGSServerObject pServerObject = (IAGSServerObject)pName.Open();

                      IMapServer pMapServer = (IMapServer)pServerObject;

                      IMapServerLayer layer = new MapServerLayerClass();

                      layer.ServerConnect(pServerObjectName, pMapServer.DefaultMapName);

                      GetServerLayer.MainForm.pMapControl.AddLayer((ILayer)layer);

                }

                pServerObjectName = pEnumServerObjectName.Next();

            }

 

​2、获取WMS服务

​​            //输入WMS服务的url加载图层资源

        private void OpenWms(string pURL)

        {

            IPropertySet pPropertyset = new PropertySetClass();

            pPropertyset.SetProperty("url", pURL);

            IWMSConnectionFactory pWmsFac = new WMSConnectionFactory();

            IWMSConnection pWmsC = pWmsFac.Open(pPropertyset, 0, null);

            IWMSConnectionName pWmsConnectionName = pWmsC.FullName as IWMSConnectionName;

            //下面的也可以

            //IWMSConnectionName pWmsConnectionName = new WMSConnectionNameClass();

            //pWmsConnectionName.ConnectionProperties = pPropertyset;

            ILayerFactory pLayerFactory = new EngineWMSMapLayerFactoryClass();

            if (pLayerFactory.get_CanCreate(pWmsConnectionName))

            {

                IEnumLayer pEnumLayer = pLayerFactory.Create(pWmsConnectionName);

                pEnumLayer.Reset();

                ILayer pLayer = pEnumLayer.Next();

                while (pLayer != null)

                {

                    if (pLayer is IWMSMapLayer)

                    {

                        IWMSMapLayer pWmsMapLayer = pLayer as IWMSMapLayer;

                        IWMSGroupLayer pWmsGroupLayer = pWmsMapLayer as IWMSGroupLayer;

                        IGroupLayer pGroupLayer = new GroupLayerClass();

                        pGroupLayer.Add(pLayer);

                        GetServerLayer.MainForm.pMapControl.AddLayer(pGroupLayer as ILayer);

                    }

                    pLayer = pEnumLayer.Next();

                }

            }

        }

​3、获取WMTS服务

​            //输入WMTS服务的url加载图层资源​

        private void OpenWMTS(string pURL)

        {

            IPropertySet pPropertyset = new PropertySetClass();

            pPropertyset.SetProperty("url", pURL);

            IWMTSConnectionFactory pWMTSFac = new WMTSConnectionFactoryClass

();

            IWMTSConnection pWMTS = pWMTSFac.Open(pPropertyset, 0, null);

            IWMTSConnectionName pWmtsConnectionName = pWMTS.FullName as IWMTSConnectionName;

            //下面的也可以

            //IWMSConnectionName pWmsConnectionName = new WMSConnectionNameClass();

            //pWmsConnectionName.ConnectionProperties = pPropertyset;

            ILayerFactory pLayerFactory = new WMTSLayerFactoryClass();

            if (pLayerFactory.get_CanCreate(pWmtsConnectionName))

            {

                IEnumLayer pEnumLayer = pLayerFactory.Create(pWmtsConnectionName);

                pEnumLayer.Reset();

                ILayer pLayer = pEnumLayer.Next();

                while (pLayer != null)

                {

                    if (pLayer is IWMTSLayer)

                    {

                        IWMTSLayer pWmsMapLayer = pLayer as IWMTSLayer;

                        GetServerLayer.MainForm.pMapControl.AddLayer(pWmsMapLayer as ILayer);

                    }

                    pLayer = pEnumLayer.Next();

                }

            }

        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值