天下博客  版本:1.1 build 20080322
ArcGIS Server .Net Web ADF之几何类型的相互转换
| |

数据类型之间的转换来源于Web ADF支持多元数据。支持多种数据源表示web应用可能会在同一个应用中和不同的数据源打交道。总的来说,每一中数据源都可以脱离Web ADF而独立进行工作,只需要维护自己的Specific APIs。但是由于Web ADF把他们结合在了一起,因此不同数据类型之间的转换就会频繁的在开发中遇到。
Web ADF中提供了各种转换类,在不同的命名空间中以静态方法的方式提供。

ESRI.ArcGIS.ADF.ArcGISServer.Converter 提供从Com对象到Value对象之间的转换。
ESRI.ArcGIS.ADF.Converter
ESRI.ArcGIS.ADF.Web.Converter
ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Converter
ESRI.ArcGIS.ADF.Web.DataSources.IMS.Converter
ESRI.ArcGIS.ADF.Web.UI.WebControls.Converter

因为GIS应用和服务的功能都是和空间数据相关的,都是处理和分析空间数据为主的。比如获得鼠标点击的点,或者是获得空间的要素等,那在实现这些功能的过程中,经常会和geometry打交道,而且geometry也将会是在应用的各个层中互相转换。本文中就主要来介绍web adf中Common APIs和各个specific APIs之间的几何类型的转换。
1  这里有好几种转换,参与的三方有:
.net的几何类型,
web adf的几何类型:这里的web adf的几何类型是指的adf中的common api中的几何类型。
specific api的几何类型。
对于ArcGIS Server来说,对应的Specific api中的对象有两种:一种是是指的ESRI.ArcGIS.ADF.ArcGISServer中的value objects,另一种是arcobjects中的对象。

各种类型之间的转换下面都有详细的例子,先来看看点:
点:
.net drawingweb adf
System.Drawing.Point DotNet_point;。。。。。。。。。

ESRI.ArcGIS.ADF.Web.Geometry.Point adf_point = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(DotNet _point.X,     DotNet _point.Y, adf_map.Extent, (int)adf_map.Width.Value, (int)adf_map.Height.Value);

.net drawingArcGIS Server SOAP
ESRI.ArcGIS.ADF.ArcGISServer.ImageDisplay imgDisp = new ESRI.ArcGIS.ADF.ArcGISServer.ImageDisplay();

imgDisp.ImageHeight = (int)adf_map.Height.Value;
imgDisp.ImageWidth = (int)adf_map.Width.Value;
int[] xvalues = new int[1];
xvalues[0] = DotNet _point.X;
int[] yvalues = new int[1];
yvalues[0] = DotNet _point.Y;
//获得mapfuntionality
ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapFunctionality ags_mapfunctionality =    (ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapFunctionality)adf_map.GetFunctionality(0);
//获得Resource
ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapResourceBase ags_mapresource =(ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapResourceBase)ags_mapfunctionality.Resource;
//获得MapProxy
ESRI.ArcGIS.ADF.ArcGISServer.MapServerProxy ags_mapserverproxy = ags_mapresource.MapServerProxy;

//进行转换
ESRI.ArcGIS.ADF.ArcGISServer.MultipointN value_multipoint = (ESRI.ArcGIS.ADF.ArcGISServer.MultipointN)ags_mapserverproxy.ToMapPoints(ags_mapfunctionality.MapDescription,imgDisp, xvalues, yvalues);
ESRI.ArcGIS.ADF.ArcGISServer.PointN value_point = (ESRI.ArcGIS.ADF.ArcGISServer.PointN)value_multipoint.PointArray[0];

.net drawingArcIMS
//获得MapFunctionality

ESRI.ArcGIS.ADF.Web.DataSources.IMS.MapFunctionality ims_mapfunctionality =(ESRI.ArcGIS.ADF.Web.DataSources.IMS.MapFunctionality)adf_map.GetFunctionality(0);
ESRI.ArcGIS.ADF.IMS.Carto.MapView mapview = ims_mapfunctionality.MapView;
ESRI.ArcGIS.ADF.IMS.Geometry.Envelope ims_extent = mapview.Extent;

//进行转换
ESRI.ArcGIS.ADF.IMS.Geometry.Point ims_point = ESRI.ArcGIS.ADF.IMS.Geometry.Point.ToMapPoint(DotNet _point, ims_extent,     mapview.ImageDescriptor.Width, mapview.ImageDescriptor.Height);

Web ADFArcGIS Server SOAP
ESRI.ArcGIS.ADF.ArcGISServer.PointN value_point = ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Converter.FromAdfPoint(adf_point);

Web ADFArcGIS Server ArcObjects

//获得MapFunctionality

ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapFunctionality ags_mapfunctionality =(ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapFunctionality)adf_map.GetFunctionality(ags_local_resource_index);

//获得Resouce

ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapResourceLocal ags_mapresourcelocal =(ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapResourceLocal)ags_mapfunctionality.Resource;

//进行转换

ESRI.ArcGIS.Geometry.IPoint com_point = (ESRI.ArcGIS.Geometry.IPoint)  ESRI.ArcGIS.ADF.WebDataSources.ArcGISServer.Converter.ToIGeometry(adf_point,ags_mapresourcelocal.ServerContextInfo.ServerContext);


Web ADFArcIMS
//直接进行转换

ESRI.ArcGIS.ADF.IMS.Geometry.Point ims_point = (ESRI.ArcGIS.ADF.IMS.Geometry.Point)ESRI.ArcGIS.ADF.Web.DataSources.IMS.Converter.ToIMSGeometry(adf_point);

ArcGIS Server SOAPWeb ADF
//直接进行转换
ESRI.ArcGIS.ADF.Web.Geometry.Point new_adf_point = ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Converter.ToAdfPoint(value_point);

ArcGIS Server ArcObjectsWeb ADF
//直接进行转换
ESRI.ArcGIS.ADF.Web.Geometry.Point new_adf_point =  ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Converter.FromIPoint(com_point);

ArcIMSWeb ADF
//直接进行转换
ESRI.ArcGIS.ADF.Web.Geometry.Point new_adf_point = (ESRI.ArcGIS.ADF.Web.Geometry.Point)ESRI.ArcGIS.ADF.Web.DataSources.IMS.Converter.ToADFGeometry(ims_point);

待续线和面

备注:本文引用自http://blog.csdn.net/oscar_king/archive/2007/09/07/1776495.aspx

阅读 (359) | 回复 (1)
ArcGIS狂人近来可好??
楼层:1楼
发布者: morning1230
发布时间:2007-11-9 0:03:04
    首页 上页 下页 尾页 页次:1/1页 每页记录数100 转到
发表评论
用户名称
密码 (游客无须输入密码)
标题
内容
臭美OK傲慢汗奇怪瞌睡眦牙傻笑晕
哭眦牙害羞哭泣眨眼瞎想郁闷88
好色鬼脸酷可爱微笑惊讶流口水
  • 粗体
  • 斜体
  • 下划线
  • 居左
  • 居中
  • 居右
  • 插入两个全角空格
  • 超链接
  • 电子邮件
  • 插入图像
  • 项目符号和编号
  • 插入引用
  • 表情符号
  • 插入Flash动画
  • 插入音频
  • 插入视频
  • 插入Real媒体
  看不清楚,换一张