ArcGIS Engine基础(29)之加载arcgis server切片地图服务
第一种方法(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
/// <summary>
/// 加载地图服务
/// </summary>
/// <param name="serverName">服务器名称</param>
/// <param name="serviceName">地图服务名称</param>
/// <param name="pIsLAN">是否为局域网</param>
/// <returns>返回图层</returns>
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;
}
}