soopat专利收缩:ArcGIS Server 开发系列(四)--ArcGIS Server data sources 开发
来源:百度文库 编辑:中财网 时间:2024/05/11 23:11:33
ArcGIS Server开发系列前几篇文章搭建了一个基本的webgis开发框架,包括模板应用程序搭建、属性查询、查询结果高亮显示,在arcims中,不论是使用9.2之前的javaconnector、.net_link、htmlviewer、还是9.2里的adf,这些功能都可以轻松实现,从软件成本上来看,ArcGIS Server企业版要比ArcIMS高出不少,如何体现ArcGIS Server价值呢?我们就从这一篇开始挖掘ArcGIS Server的价值,从ArcGIS Server data sources启航……
目标:
对点要素进行缓冲区分析
准备工作:
1.了解ArcGIS Server中的ValueObject和ComOjbect。
2.AO接口中缓冲区分析的编程方法。
3.重新回顾第一篇中ArcGIS Server开发的四种方法。
4.利用vs2005创建一个模板server应用--Web Mapping Application,并更改MapResourceManager属性。
注意这里使用的map resource类型是ArcGIS Server Internet,在界面上增加一个新的panel,里面包括两个textbox和一个comand,textbox对应的分别是缓冲区中心点的x、y坐标,以该点为中心,一定半径做圆形缓冲区。
思路:
缓冲区分析需要在AO接口中实现,输入的点应该是一个COM对象,而在页面中输入xy坐标点是一个SOAP API valueojbect,valueobject可以用于adf web controls,但不能用于AO接口,因此需要进行valueobject到comojbect的转换,在调用ITopologicalOperator接口的Buffer方法后会得到缓冲区分析的结果,即一个polygon,同理,该polygon是一个comobject,需要逆转换为valueobject才能显示到网页上。
代码实现:
新建一个类XYBuffer,缓冲功能的在其buffer方法中实现。首先设置textbox中输入点的渲染方式,该作为一个ESRI.ArcGIS.ADF.ArcGISServer.PointN对象,渲染方法如下:
ESRI.ArcGIS.ADF.ArcGISServer.PointN pt =
new ESRI.ArcGIS.ADF.ArcGISServer.PointN();
pt.X = x;
pt.Y = y;
// 设置点的颜色
ESRI.ArcGIS.ADF.ArcGISServer.RgbColor rgb =
new ESRI.ArcGIS.ADF.ArcGISServer.RgbColor();
rgb.Red =
0;
rgb.Blue =
0;
rgb.Green =
20;
// 设置点的符号
ESRI.ArcGIS.ADF.ArcGISServer.SimpleMarkerSymbol sms =
new ESRI.ArcGIS.ADF.ArcGISServer.SimpleMarkerSymbol();
sms.Style = ESRI.ArcGIS.ADF.ArcGISServer.esriSimpleMarkerStyle.esriSMSCircle;
sms.Color = rgb;
sms.Size =
20;
ESRI.ArcGIS.ADF.ArcGISServer.MarkerElement marker =
new ESRI.ArcGIS.ADF.ArcGISServer.MarkerElement();
marker.Symbol = sms;
marker.Point = pt;
然后用arcgis server local方式建立到datasource的连接,这点非常重要,主要是为了在这种连接状态下进行valueobject和comobject之间的转换。建立连接的用户应属于ArcGIS Server管理组。
ESRI.ArcGIS.ADF.Identity identity =
new ESRI.ArcGIS.ADF.Identity("user", "password", "localhost");
ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection agsconnection;
agsconnection =
new ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection("localhost", identity);
agsconnection.Connect();
ESRI.ArcGIS.Server.IServerObjectManager som = agsconnection.ServerObjectManager;
ESRI.ArcGIS.Server.IServerContext serverContext = som.CreateServerContext("Redlands", "MapServer");
这样我们就可以在arcgis server local连接方式下进行对象转换:
// 定义COM对象的点
ESRI.ArcGIS.Geometry.IPoint ipnt;
// 进行valueobject到comobject之间的转换
ipnt = (ESRI.ArcGIS.Geometry.IPoint)ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Converter.ValueObjectToComObject(pt, serverContext);
下面是AO中缓冲区分析的代码,熟悉AO编程的对下面代码应该很了解了:
ESRI.ArcGIS.Geometry.ITopologicalOperator topop = (ESRI.ArcGIS.Geometry.ITopologicalOperator)ipnt;
double bufferDistance = map.Extent.Width /
6;
ESRI.ArcGIS.Geometry.IPolygon bufferPolygon;
bufferPolygon = (ESRI.ArcGIS.Geometry.IPolygon)topop.Buffer(bufferDistance);
bufferPolygon就是缓冲区分析的结果,但它还不是我们最后想要的,因为ESRI.ArcGIS.Geometry.IPolygon无法在adf web control中显示,还需要做一次转换:
// 定义valueobject的点
ESRI.ArcGIS.ADF.ArcGISServer.PolygonN buffer_polyn;
// 进行comobject到valueobject之间的转换
buffer_polyn = (ESRI.ArcGIS.ADF.ArcGISServer.PolygonN)ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Converter.ComObjectToValueObject(bufferPolygon, serverContext, typeof(ESRI.ArcGIS.ADF.ArcGISServer.PolygonN));
buffer_polyn就是我们最后想要的结果,定义一种渲染方式:
ESRI.ArcGIS.ADF.ArcGISServer.RgbColor rgb1 =
new ESRI.ArcGIS.ADF.ArcGISServer.RgbColor();
rgb1.Red =
200;
rgb1.Green =
200;
rgb1.Blue =
20;
// 设置区的填充色
ESRI.ArcGIS.ADF.ArcGISServer.SimpleFillSymbol sfs1 =
new ESRI.ArcGIS.ADF.ArcGISServer.SimpleFillSymbol();
sfs1.Style = ESRI.ArcGIS.ADF.ArcGISServer.esriSimpleFillStyle.esriSFSHorizontal;
sfs1.Color = rgb1;
ESRI.ArcGIS.ADF.ArcGISServer.PolygonElement polyelement1 =
new ESRI.ArcGIS.ADF.ArcGISServer.PolygonElement();
polyelement1.Symbol = sfs1;
polyelement1.Polygon = buffer_polyn;
最后将marker和polyelement1添加到ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement对象数组中,传给当前MapFunctionality的CustomGraphics属性,刷新map控件,看看显示的效果图,缓冲区显示的样式为一系列水平的平行线:
以上在ArcGIS Server中实现了缓冲区分析功能,虽然arcims也能实现(arcims分析功能也仅限于此),但是两者的本质有天然的差别,前者是基于AO,因此类推可以将AO中的分析功能全部引入server中,实现更多更复杂的分析功能。
最后,我们还有哪些需要考虑的呢?
1.ESRI.ArcGIS.ADF.ArcGISServer命名空间中我们用到了PointN类,但同样可以找到PointB类,对于其他几何类型也是如此,如PolylineN和PolylineB,它们之间有什么差别呢?
2.整个开发过程我们用到了Data Source Specific API,重新回想一下第一篇中提到的途径三和途径四两种开发方式。
3.例子中我们仅仅是将缓冲区显示出来,如果需要用缓冲区做进一步的分析,如一条街道向两侧拓展3米,有哪些房屋或建筑需要拆除或改建呢?这时需要做进一步的相交分析,同样可以调用AO接口实现,最后将结果转换为valueobject显示出来,这样可以在server中实现决策分析的功能模块。当然我们可以通过这个例子做更多更深入的延伸。
4.如何将显示的结果清除掉?
博客园链接:http://www.cnblogs.com/flyingis/archive/2007/08/27/870679.html
目标:
对点要素进行缓冲区分析
准备工作:
1.了解ArcGIS Server中的ValueObject和ComOjbect。
2.AO接口中缓冲区分析的编程方法。
3.重新回顾第一篇中ArcGIS Server开发的四种方法。
4.利用vs2005创建一个模板server应用--Web Mapping Application,并更改MapResourceManager属性。
注意这里使用的map resource类型是ArcGIS Server Internet,在界面上增加一个新的panel,里面包括两个textbox和一个comand,textbox对应的分别是缓冲区中心点的x、y坐标,以该点为中心,一定半径做圆形缓冲区。
思路:
缓冲区分析需要在AO接口中实现,输入的点应该是一个COM对象,而在页面中输入xy坐标点是一个SOAP API valueojbect,valueobject可以用于adf web controls,但不能用于AO接口,因此需要进行valueobject到comojbect的转换,在调用ITopologicalOperator接口的Buffer方法后会得到缓冲区分析的结果,即一个polygon,同理,该polygon是一个comobject,需要逆转换为valueobject才能显示到网页上。
代码实现:
新建一个类XYBuffer,缓冲功能的在其buffer方法中实现。首先设置textbox中输入点的渲染方式,该作为一个ESRI.ArcGIS.ADF.ArcGISServer.PointN对象,渲染方法如下:
new ESRI.ArcGIS.ADF.ArcGISServer.PointN();
new ESRI.ArcGIS.ADF.ArcGISServer.RgbColor();
0;
0;
20;
new ESRI.ArcGIS.ADF.ArcGISServer.SimpleMarkerSymbol();
20;
new ESRI.ArcGIS.ADF.ArcGISServer.MarkerElement();
然后用arcgis server local方式建立到datasource的连接,这点非常重要,主要是为了在这种连接状态下进行valueobject和comobject之间的转换。建立连接的用户应属于ArcGIS Server管理组。
new ESRI.ArcGIS.ADF.Identity("user", "password", "localhost");
new ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection("localhost", identity);
这样我们就可以在arcgis server local连接方式下进行对象转换:
下面是AO中缓冲区分析的代码,熟悉AO编程的对下面代码应该很了解了:
6;
bufferPolygon就是缓冲区分析的结果,但它还不是我们最后想要的,因为ESRI.ArcGIS.Geometry.IPolygon无法在adf web control中显示,还需要做一次转换:
buffer_polyn就是我们最后想要的结果,定义一种渲染方式:
new ESRI.ArcGIS.ADF.ArcGISServer.RgbColor();
200;
200;
20;
new ESRI.ArcGIS.ADF.ArcGISServer.SimpleFillSymbol();
new ESRI.ArcGIS.ADF.ArcGISServer.PolygonElement();
最后将marker和polyelement1添加到ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement对象数组中,传给当前MapFunctionality的CustomGraphics属性,刷新map控件,看看显示的效果图,缓冲区显示的样式为一系列水平的平行线:
以上在ArcGIS Server中实现了缓冲区分析功能,虽然arcims也能实现(arcims分析功能也仅限于此),但是两者的本质有天然的差别,前者是基于AO,因此类推可以将AO中的分析功能全部引入server中,实现更多更复杂的分析功能。
最后,我们还有哪些需要考虑的呢?
1.ESRI.ArcGIS.ADF.ArcGISServer命名空间中我们用到了PointN类,但同样可以找到PointB类,对于其他几何类型也是如此,如PolylineN和PolylineB,它们之间有什么差别呢?
2.整个开发过程我们用到了Data Source Specific API,重新回想一下第一篇中提到的途径三和途径四两种开发方式。
3.例子中我们仅仅是将缓冲区显示出来,如果需要用缓冲区做进一步的分析,如一条街道向两侧拓展3米,有哪些房屋或建筑需要拆除或改建呢?这时需要做进一步的相交分析,同样可以调用AO接口实现,最后将结果转换为valueobject显示出来,这样可以在server中实现决策分析的功能模块。当然我们可以通过这个例子做更多更深入的延伸。
4.如何将显示的结果清除掉?
博客园链接:http://www.cnblogs.com/flyingis/archive/2007/08/27/870679.html
谁有ArcGIS Server 3D 开发浏览器端简单浏览影像叠加DEM的java sample?
ArcGIS Server Java ADF哪里有下载?
哪位大虾安装过ARCGIS SERVER ,以及如何配置?
跪求ArcGIS Server的安装、配置方法以及破解安装时相关的授权文件
【杀人案件】系列之四
SQL Server 四合一下载
SQL SERVER开发版 下载地址
熟悉SQL SERVER开发环境 实验
SQL SERVER 2000开发版安装出错!!
求ARC server 9.0系列序列号
系列翻译及回答四
用ArcGIS Server 3d 扩展模块 如何迅速搭建能在浏览器浏览影像数据和DEM数据叠加的三维效果?
SQL server 2000四合一下载地址
ASP.net网站开发四酷全书
arcgis的破解
Arcgis的几个问题
哪儿可以下载arcgis
arcgis 导出jpg
求arcgis教程电子版
Arcgis教程下载
哪里下载sql server 2000 开发版?谢谢~~
哪有免费下载SOL server开发版
Microsoft.SQL.Server.2005.简体中文开发版 如何安装
哪有下载 sql server 2000开发版的网站!