第一种方法(ArcGIS 地图服务):
直接调用arcgis server rest服务地址。
以IMapServerRESTLayer接口直接调用arcgis server rest服务,rest形式的切片服务一样可以加载。但如果是通过矢量范围面先进行切片后发布成地图服务,然后把影像切片缓存拷贝到该矢量地图服务的缓存下时,使用该方式无法读取到切片缓存图层,只能获取到矢量范围面图层。

- IMapServerRESTLayer pRestLayer = new MapServerRESTLayerClass();
- pRestLayer.Connect("http://localhost:6080/arcgis/rest/services/JX2021Y04IMG/MapServer");
- ILayer pLayer = pRestLayer as ILayer;
第二种方法(wmts服务):
以OGC的wmts标准方式进行加载。
格式url示例:http://localhost:6080/arcgis/rest/services/JX2021Y02IMG/MapServer/WMTS/1.0.0/WMTSCapabilities.xml
- private ILayer OpenWMTS(string pURL)
- {
- ILayer layer = null;
- ESRI.ArcGIS.esriSystem.IPropertySet pPropertyset = new ESRI.ArcGIS.esriSystem.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)
- {
- layer = pLayer;
- if (pLayer is IWMTSLayer)
- {
- //IWMTSLayer pWmsMapLayer = pLayer as IWMTSLayer;
- layer = pLayer;
- break;
- }
- pLayer = pEnumLayer.Next();
- }
- }
- return layer;
- }
第三种方法(ArcGIS 地图服务):
使用IAGSServerConnection连接到server目录,获取所有服务,循环遍历,根据服务名称连接到指定的服务图层。
serverBaseUrl:http://localhost:6080/arcgis/rest/services
serviceName:JX2021Y02IMG
- ///
- /// 加载地图服务
- ///
- /// 服务器名称
- /// 地图服务名称
- /// 是否为局域网
- ///
返回图层 - public ILayer LoadMapservice(string serverBaseUrl, string serviceName,bool pIsLAN=false)
- {
- IMapServer m_mapServer = null;
- IMapServerLayer layer = null;
-
- ESRI.ArcGIS.esriSystem.IPropertySet propertySet = new ESRI.ArcGIS.esriSystem.PropertySet();
- if (pIsLAN)
- {
- propertySet.SetProperty("machine", serverBaseUrl);
- }
- else
- {
- propertySet.SetProperty("url", serverBaseUrl);
- }
-
-
- IAGSServerConnectionFactory agsServerConnectionFactory = new AGSServerConnectionFactory();
- IAGSServerConnection agsServerConnection = agsServerConnectionFactory.Open(propertySet, 0);
-
- IAGSEnumServerObjectName agsEnumServerObjectName = agsServerConnection.ServerObjectNames;
- agsEnumServerObjectName.Reset();
-
- ESRI.ArcGIS.esriSystem.IName serverObjectName;
- IAGSServerObject agsServerObject = null;
- IAGSServerObjectName agsServerObjectName = agsEnumServerObjectName.Next();
- while ((agsServerObjectName != null))
- {
- // Search for the MapServer Server Object
- if (agsServerObjectName.Type.ToUpper() == "MAPSERVER" && agsServerObjectName.Name == serviceName)
- {
- serverObjectName = agsServerObjectName as ESRI.ArcGIS.esriSystem.IName;
- agsServerObject = serverObjectName.Open() as IAGSServerObject;
- if (agsServerObject as IMapServer != null)
- {
- m_mapServer = agsServerObject as IMapServer;
- break;
- }
- }
- agsServerObjectName = agsEnumServerObjectName.Next();
- }
-
- // If we got both of them, exit out
- if (m_mapServer != null)
- {
- layer = new MapServerLayerClass();
- layer.ServerConnect(agsServerObjectName, m_mapServer.DefaultMapName);
- }
- if (layer != null)
- {
- return (layer as ILayer);
- }
- else
- {
- return null;
- }
- }