您的位置:首页 > 移动开发 > Objective-C

ArcGIS For Silverlight API 开发中利用WebService调用ArcObjects

2010-11-25 15:26 507 查看
ADF之所以强大,除了其本身的类库外,它还能在服务器端调用AO,来完成比如在线编辑或者Geoemtry的处理工作;而ESRI官方的说法,建立在REST服务基础上的程序目前都不具备在线编辑的功能(因为要与服务器端的数据库打交道),但他们把这项功能作为日程,提到了研发计划内。目前而言,要在SilverlightAPI中完成数据编辑工作,他们的劝告是,“如果你不怕把你的双手弄脏,那就去做吧”。
AO本身是COM组件,.NET是利用COMInterop技术与其打交道的,这显然是Silverlight的客户端环境办不到的。这就需要与服务器端进行通信。Silverlight与服务器端通信,最常用的是WebClient类,稍复杂的还有HttpWebRequest类,而传统的ASP.NET WebService与更强大的WCF则为远程调用AO提供了可能。
下面是我做测试的一段代码:

using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.ADF;
using ESRI.ArcGIS.SystemUI;
using ESRI.ArcGIS.Utility.COMSupport;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.DisplayUI;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.DataSourcesFile;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
// [System.Web.Script.Services.ScriptService]
public class Service : System.Web.Services.WebService
{
public Service () {

//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}

[WebMethod]
public string HelloWorld() {

IAoInitialize aoInit = new AoInitializeClass();
aoInit.Initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);

StringBuilder sb = new StringBuilder();

IFeatureClass pInFClass;
IWorkspaceFactory pWSF;
pWSF = new ShapefileWorkspaceFactoryClass();
IFeatureWorkspace pFeatWS;
pFeatWS = OpenShapfileWorkspace(@"E:/WorkSpace/map/Shp") as IFeatureWorkspace;
pInFClass = pFeatWS.OpenFeatureClass("YY_YGX");

IFeatureCursor pFeatureCursor = pInFClass.Search(null, false);
IFeature feature = pFeatureCursor.NextFeature();

while (feature != null)
{

IGeometryCollection igColl = feature.Shape as IGeometryCollection;
IPointCollection pPointCol = igColl.get_Geometry(0) as IPointCollection;

sb.Append("Point===" + pPointCol.get_Point(0).X + " | ");

feature = pFeatureCursor.NextFeature();
}

return sb.ToString();
}

/// <summary>
/// 打开表空间
/// </summary>
/// <param name="Location"></param>
/// <returns></returns>
public IWorkspace OpenShapfileWorkspace(string Location)
{
IWorkspace ws = null;
IWorkspaceFactory wsf = new ShapefileWorkspaceFactoryClass();
ws = wsf.OpenFromFile(Location, 0);
return ws;
}
}


进行程序调试,可以正确显示出点坐标信息。 通过这个功能的成功测试后,就可在Silverlight环境下开发ARCGIS的强大应用功能了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐