• ArcGIS Engine基础(29)之加载arcgis server切片地图服务


    第一种方法(ArcGIS 地图服务):

            直接调用arcgis server rest服务地址。

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

    1. IMapServerRESTLayer pRestLayer = new MapServerRESTLayerClass();
    2. pRestLayer.Connect("http://localhost:6080/arcgis/rest/services/JX2021Y04IMG/MapServer");
    3. ILayer pLayer = pRestLayer as ILayer;

    第二种方法(wmts服务):

            以OGC的wmts标准方式进行加载。

    格式url示例:http://localhost:6080/arcgis/rest/services/JX2021Y02IMG/MapServer/WMTS/1.0.0/WMTSCapabilities.xml

    1. private ILayer OpenWMTS(string pURL)
    2. {
    3. ILayer layer = null;
    4. ESRI.ArcGIS.esriSystem.IPropertySet pPropertyset = new ESRI.ArcGIS.esriSystem.PropertySetClass();
    5. pPropertyset.SetProperty("url", pURL);
    6. IWMTSConnectionFactory pWMTSFac = new WMTSConnectionFactoryClass();
    7. IWMTSConnection pWMTS = pWMTSFac.Open(pPropertyset, 0, null);
    8. IWMTSConnectionName pWmtsConnectionName = pWMTS.FullName as IWMTSConnectionName;
    9. //下面的也可以
    10. //IWMSConnectionName pWmsConnectionName = new WMSConnectionNameClass();
    11. //pWmsConnectionName.ConnectionProperties = pPropertyset;
    12. ILayerFactory pLayerFactory = new WMTSLayerFactoryClass();
    13. if (pLayerFactory.get_CanCreate(pWmtsConnectionName))
    14. {
    15. IEnumLayer pEnumLayer = pLayerFactory.Create(pWmtsConnectionName);
    16. pEnumLayer.Reset();
    17. ILayer pLayer = pEnumLayer.Next();
    18. while (pLayer != null)
    19. {
    20. layer = pLayer;
    21. if (pLayer is IWMTSLayer)
    22. {
    23. //IWMTSLayer pWmsMapLayer = pLayer as IWMTSLayer;
    24. layer = pLayer;
    25. break;
    26. }
    27. pLayer = pEnumLayer.Next();
    28. }
    29. }
    30. return layer;
    31. }

    第三种方法(ArcGIS 地图服务):

            使用IAGSServerConnection连接到server目录,获取所有服务,循环遍历,根据服务名称连接到指定的服务图层。

    serverBaseUrl:http://localhost:6080/arcgis/rest/services

    serviceName:JX2021Y02IMG

    1. ///
    2. /// 加载地图服务
    3. ///
    4. /// 服务器名称
    5. /// 地图服务名称
    6. /// 是否为局域网
    7. /// 返回图层
    8. public ILayer LoadMapservice(string serverBaseUrl, string serviceName,bool pIsLAN=false)
    9. {
    10. IMapServer m_mapServer = null;
    11. IMapServerLayer layer = null;
    12. ESRI.ArcGIS.esriSystem.IPropertySet propertySet = new ESRI.ArcGIS.esriSystem.PropertySet();
    13. if (pIsLAN)
    14. {
    15. propertySet.SetProperty("machine", serverBaseUrl);
    16. }
    17. else
    18. {
    19. propertySet.SetProperty("url", serverBaseUrl);
    20. }
    21. IAGSServerConnectionFactory agsServerConnectionFactory = new AGSServerConnectionFactory();
    22. IAGSServerConnection agsServerConnection = agsServerConnectionFactory.Open(propertySet, 0);
    23. IAGSEnumServerObjectName agsEnumServerObjectName = agsServerConnection.ServerObjectNames;
    24. agsEnumServerObjectName.Reset();
    25. ESRI.ArcGIS.esriSystem.IName serverObjectName;
    26. IAGSServerObject agsServerObject = null;
    27. IAGSServerObjectName agsServerObjectName = agsEnumServerObjectName.Next();
    28. while ((agsServerObjectName != null))
    29. {
    30. // Search for the MapServer Server Object
    31. if (agsServerObjectName.Type.ToUpper() == "MAPSERVER" && agsServerObjectName.Name == serviceName)
    32. {
    33. serverObjectName = agsServerObjectName as ESRI.ArcGIS.esriSystem.IName;
    34. agsServerObject = serverObjectName.Open() as IAGSServerObject;
    35. if (agsServerObject as IMapServer != null)
    36. {
    37. m_mapServer = agsServerObject as IMapServer;
    38. break;
    39. }
    40. }
    41. agsServerObjectName = agsEnumServerObjectName.Next();
    42. }
    43. // If we got both of them, exit out
    44. if (m_mapServer != null)
    45. {
    46. layer = new MapServerLayerClass();
    47. layer.ServerConnect(agsServerObjectName, m_mapServer.DefaultMapName);
    48. }
    49. if (layer != null)
    50. {
    51. return (layer as ILayer);
    52. }
    53. else
    54. {
    55. return null;
    56. }
    57. }

  • 相关阅读:
    python信用卡欺诈检(数据清洗,数据分析,数学建模, 模型预测和比较)
    基于HTML家乡旅游主题项目的设计与实现——少林寺(5页)HTML+CSSS
    你不知道的测试小技巧——postman接口测试导入导出操作详解
    接口与抽象类的相同与不同
    vscode配合gitee同步云设置
    java基础之字节输入与输出流[48]
    Spring 源码阅读 74:事务管理的原理 - BeanFactoryTransactionAttributeSourceAdvisor 分析
    Kotlin变量与控制条件的基本用法
    commitlint+husky+commitizen+lint-stage代码风格及上传规范管理
    【web-解析目标】(1.2.2)解析应用程序:确定服务器端技术
  • 原文地址:https://blog.csdn.net/wokao253615105/article/details/128054795