ArcEngine获取ArcGIS Server上的地图服务
来源:互联网 发布:java未安装成功 编辑:程序博客网 时间:2024/05/16 05:56
利用ArcMap我们可以获取Arcgis Server上的地图服务,而ArcMap和ArcEngine都是基于ArcObjects的,基本上ArcMap能实现的功能ArcEngine都可以实现,因此我们也能利用ArcEngine在程序中加载Arcgis Server上的地图服务。
利用ArcEngine获取本地空间数据库内容 ,步骤是设置PropertySet 连接属性,创建工作空间工厂,根据连接信息打开工作空间,更加数据对象名称获取名称对象(IName),从名称对象中获取目标数据。Arcgis Server作为一个异地的数据库,那么获取其地图服务,步骤与上面相似,不过工作空间要改为服务器连接,具体实现过程如下:
1、设置连接属性
IPropertySet pPropertySet = new PropertySet();
if (pIsLAN)
pPropertySet.SetProperty("machine", pHostOrUrl);//通过Lan(局域网)连接
else
pPropertySet.SetProperty("url", pHostOrUrl);//通过Internet连接
pHostOrUrl表示服务器地址
2、获取服务器连接
IAGSServerConnectionFactory pFactory = new AGSServerConnectionFactory();
//创建服务器连接工作空间
IAGSServerConnection pConnection = pFactory.Open(pPropertySet, 0);//第二个参数帮助文档里是hWnd表示句柄,不知道什么作用,直接赋值0即可
//打开获取服务器,获取服务器连接
3、获取名称对象
IAGSEnumServerObjectName pServerObjectNames = pConnection.ServerObjectNames;
//获取服务器上所有服务的标识属性,即服务标识集合
pServerObjectNames.Reset();
//使指针指向服务开头
IAGSServerObjectName ServerObjectName = pServerObjectNames.Next();
//获取服务标识
while (ServerObjectName != null)
{
if ((ServerObjectName.Name.ToLower() == pServiceName.ToLower()) &&(ServerObjectName.Type == "MapServer")) //获取的是地图服务,用MapServer表示
{//判断获取所需服务
break;
}
ServerObjectName = pServerObjectNames.Next(); //获取的名称对象,IAGSServerObjectName继承了IName
}
4.获取地图服务
ILayer lyr = null;
try
{
IName pName = (IName)ServerObjectName;//获得服务对象名称
IAGSServerObject pServerObject = (IAGSServerObject)pName.Open();//访问地图服务
IMapServer pMapServer = (IMapServer)pServerObject;
mapserver = pMapServer;//获取地图服务对象
IMapServerLayer pMapServerLayer = new MapServerLayer() as IMapServerLayer;
pMapServerLayer.ServerConnect(pServerObjectName, pMapServer.DefaultMapName);//连接地图服务,第一个参数为地图服务名称,第二个参数为数据框架名称(the name of a data frame)
lyr = pMapServerLayer as ILayer;//将地图服务图层转化为ILayer这样Map控件可以添加进去
}
catch (Exception ex)
{
MessageBox.Show("服务器配置信息错误,请到“系统管理-系统配置”设置", "连接失败");
}
完整代码如下
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.GISClient;//导入服务器包using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.Geodatabase;using ESRI.ArcGIS.Geometry;namespace MapDocOperate{ /// <summary> /// ArcGisServer地图服务的添加 /// </summary> public class MapServer { private IMapServer mapserver; /// <summary> /// 地图服务 /// </summary> public IMapServer MpServer { get { return this.mapserver; } } /// <summary> /// 获取ArcGISServer服务图层 /// </summary> /// <param name="serverUrl"></param>服务器地址 /// <param name="mapservername"></param>地图服务名称 /// <param name="isLan"></param>地图服务是局域网内还是互联网上的 /// <returns></returns> public ILayer GetServerLyr(String serverUrl, String mapservername, bool isLan) { ILayer lyr = null; //获得服务对象名称 try { IAGSServerObjectName pServerObjectName = GetMapServer(serverUrl, mapservername, isLan);//获取地图 IName pName = (IName)pServerObjectName; //访问地图服务 IAGSServerObject pServerObject = (IAGSServerObject)pName.Open(); IMapServer pMapServer = (IMapServer)pServerObject; mapserver = pMapServer;//获取地图服务对象 IMapServerLayer pMapServerLayer = new MapServerLayer() as IMapServerLayer; //连接地图服务 pMapServerLayer.ServerConnect(pServerObjectName, pMapServer.DefaultMapName); //添加数据图层 lyr = pMapServerLayer as ILayer; } catch (Exception ex) { MessageBox.Show("服务器配置信息错误,请到“系统管理-系统配置”设置", "连接失败"); } return lyr; } /// <summary> /// 获取ArcGisServer地图服务标识,连接服务器 /// </summary> /// <param name="pHostOrUrl"></param>服务器主机URL /// <param name="pServiceName"></param>服务名称 /// <param name="pIsLAN"></param>主机是否是在局域网或者是互联网 /// <returns></returns> private IAGSServerObjectName GetMapServer(string pHostOrUrl, string pServiceName, bool pIsLAN) { //设置连接属性 IPropertySet pPropertySet = new PropertySet(); if (pIsLAN) pPropertySet.SetProperty("machine", pHostOrUrl); else pPropertySet.SetProperty("url", pHostOrUrl); //打开连接 IAGSServerConnectionFactory pFactory = new AGSServerConnectionFactory(); //创建服务器连接工作空间 IAGSServerConnection pConnection = pFactory.Open(pPropertySet, 0); //打开获取服务器 IAGSEnumServerObjectName pServerObjectNames = pConnection.ServerObjectNames; //获取服务器上所有服务的标识属性,即服务标识集合 pServerObjectNames.Reset(); //使指针指向服务开头 IAGSServerObjectName ServerObjectName = pServerObjectNames.Next(); //获取服务标识 while (ServerObjectName != null) { if ((ServerObjectName.Name.ToLower() == pServiceName.ToLower()) && (ServerObjectName.Type == "MapServer")) {//判断获取所需服务 break; } ServerObjectName = pServerObjectNames.Next(); } //返回对象 return ServerObjectName;//返回服务标识 } }}
- ArcEngine获取ArcGIS Server上的地图服务
- ArcEngine连接Arcgis Server地图服务之查询
- 关于ArcEngine自动创建Arcgis Server的Mapserver服务
- ArcGis地图服务连接不上(ArcGIS Server for Java的REST接口无法访问)解决方法
- ARCGIS SERVER 地图服务空白的解决方案
- ArcGIS Server 地图服务叠加
- ArcGIS Server 发布地图服务
- ArcGIS Server发布地图服务
- C#中winform下利用ArcEngine调用ArcGIS Server发布的服务
- C#中winform下利用ArcEngine调用ArcGIS Server发布的服务(转未测试)
- ArcGis Server的集中地图服务WMS/WFS/WCS介绍
- ArcGIS Server 10:发布缓存的地图服务
- arcgis server 动态创建地图服务
- ArcGIS server安装与发布地图服务
- arcgis server 动态创建地图服务
- ArcGIS Server 地图服务无法预览问题
- ArcGIS Server 10:发布地图文档服务
- arcgis server部署服务地图无法预览
- hadoop深入研究:(十)——序列化与Writable接口
- 将WRF文件转换成其它格式
- pl/sql developer command window中出现乱码
- 百度质量部测试开发实习生面试总结(技术二面)
- 【ERP流程图】:生产制造
- ArcEngine获取ArcGIS Server上的地图服务
- 【不为人知的MAC地址与IP地址捆绑方式】
- poj2488
- k860i 4.2root成功,用root大师20130705
- HDU 4515 小Q系列故事——世界上最遥远的距离
- 【次小生成树】POJ-1679 The Unique MST
- MTD设备驱动
- 使用 JAX-RS 简化 REST 应用开发
- Python学习笔记(一)python的安装和配置