您的位置:首页 > 其它

使用AE获取ArcService服务

2016-05-23 11:13 197 查看

在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();

                }

            }

        }

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐