ArcGIS.Server.9.2.DotNet自带例子分析(三、一)

目的:
1.arcgis server9.2 ADF的AddGraphics

准备工作:
1.用ArcGis Server Manager或者ArcCatalog发布一个叫world的Map Service,并且把这个Service启动起来。
2.找到DeveloperKit\SamplesNET\Server\Web_Applications目录下的Common_AddGraphicsCSharp.zip。

开始: 
1.新建名为AddGraphics的ASP.NET Web应用程序。
2.在页面上放置1个Map、1个Toc、1个MapResourceManager、1个Toolbar控件,做好相应的设置比较简单也不详细说了,也可以参考前面的几篇文章。
3.主要说一下MapResourceManager1设置了,这次与前几篇不同了用的是ArcGIS Server Internet,用编辑器添加以一个名为ServerResource的MapResourceItem,然后点击Definition属性做如下设置,Type:ArcGIS Server Internet;Data Source:http://机器名/arcgis/services;Identity:输入机器的账号和密码;Resource:(default)@world。
4.在Toolbar1添加一个Tool,Name:AddPointTool;Text:Add Graphic Point;ClientAction:Point;ServerActionAssembly:AddGraphics;ServerActionClass:AddGraphics.ElementGraphicTool。
5.新建GraphicPointTools.cs文件,然后在文件中添加ElementGraphicTool类用来实现AddPointTool的功能,代码和说明如下:

 1public class ElementGraphicTool : IMapServerToolAction
 2ExpandedBlockStart.gifContractedBlock.gif    {
 3        void IMapServerToolAction.ServerAction(ToolEventArgs toolEventArgs)
 4ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 5            //获取map控件
 6            ESRI.ArcGIS.ADF.Web.UI.WebControls.Map adfMap =(ESRI.ArcGIS.ADF.Web.UI.WebControls.Map)toolEventArgs.Control;
 7            //转成点
 8            PointEventArgs pointEventArgs = (PointEventArgs)toolEventArgs;
 9            //屏幕点
10            System.Drawing.Point screenPoint = pointEventArgs.ScreenPoint;
11
12            //屏幕坐标转成地理坐标
13            ESRI.ArcGIS.ADF.Web.Geometry.Point adfPoint =ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(screenPoint.X, screenPoint.Y, adfMap.GetTransformationParams(ESRI.ArcGIS.ADF.Web.Geometry.TransformationDirection.ToMap));
14          
15            ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality adfGraphicsMapFunctionality = null;
16            //MapFunctionality
17            foreach (ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality mapFunctionality in adfMap.GetFunctionalities())
18ExpandedSubBlockStart.gifContractedSubBlock.gif            {
19                //当Resource为ADFGraphicsResource,ADFGraphicsResource为GraphicsLayer, 保存在内存中用显示临时图层
20                if (mapFunctionality.Resource.Name == "ADFGraphicsResource")
21ExpandedSubBlockStart.gifContractedSubBlock.gif                {
22                    adfGraphicsMapFunctionality =(ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality)mapFunctionality;
23                    break;
24                }

25            }

26
27            //当为null的时候调用Utility.ProcessError方法弹出提示框
28            if (adfGraphicsMapFunctionality == null)
29ExpandedSubBlockStart.gifContractedSubBlock.gif            {
30                //把Utility.ProcessError处理的CallbackResultCollection结果赋给Map控件
31                adfMap.CallbackResults.CopyFrom(Utility.ProcessError("ADF graphics functionality not found"));
32                return;
33            }

34
35            //从adfGraphicsMapFunctionality获取名为Element Graphics的DataTable
36            ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer elementGraphicsLayer = null;
37            foreach (System.Data.DataTable dataTable in adfGraphicsMapFunctionality.GraphicsDataSet.Tables)
38ExpandedSubBlockStart.gifContractedSubBlock.gif            {
39                if (dataTable.TableName == "Element Graphics")
40ExpandedSubBlockStart.gifContractedSubBlock.gif                {
41                    elementGraphicsLayer = (ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer)dataTable;
42                    break;
43                }

44            }

45
46            //如果名为Element Graphics的DataTable为null,就新建Element Graphics DataTable添加到adfGraphicsMapFunctionality.GraphicsDataSet中,同时刷新Toc1显示
47            if (elementGraphicsLayer == null)
48ExpandedSubBlockStart.gifContractedSubBlock.gif            {
49                elementGraphicsLayer = new ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer();
50                elementGraphicsLayer.TableName = "Element Graphics";
51                adfGraphicsMapFunctionality.GraphicsDataSet.Tables.Add(elementGraphicsLayer);
52
53                //查找Toc1控件
54                Toc adfToc = (Toc)Utility.FindControl("Toc1", adfMap.Page);
55                //刷新Toc1控件
56                adfToc.Refresh();
57                //CallbackResults结果赋给Map控件
58                adfMap.CallbackResults.CopyFrom(adfToc.CallbackResults);
59            }

60
61            //定义标点样式
62            ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol simpleMarkerSymbol =new ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol();
63            simpleMarkerSymbol.Color = System.Drawing.Color.Black;
64            simpleMarkerSymbol.Width = 10;
65
66            //定义标点选中样式
67            ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol simpleSelectedMarkerSymbol =new ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol();
68            simpleSelectedMarkerSymbol.Color = System.Drawing.Color.Yellow;
69            simpleSelectedMarkerSymbol.Width = 12;
70            simpleSelectedMarkerSymbol.Type = ESRI.ArcGIS.ADF.Web.Display.Symbol.MarkerSymbolType.Star;
71
72            ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement graphicElement =new ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement(adfPoint, simpleMarkerSymbol, simpleSelectedMarkerSymbol);
73            //把标点添加到elementGraphicsLayer
74            elementGraphicsLayer.Add(graphicElement);
75            //刷新显示
76            if (adfMap.ImageBlendingMode == ImageBlendingMode.WebTier)
77ExpandedSubBlockStart.gifContractedSubBlock.gif            
78                //整个地图控件刷新
79                adfMap.Refresh(); 
80            }

81            else
82ExpandedSubBlockStart.gifContractedSubBlock.gif            {
83                //只刷新部分Resource
84                adfMap.RefreshResource(adfGraphicsMapFunctionality.Resource.Name); 
85            }

86        }

87    }
6.新建Utility.cs文件,然后添加上面的ElementGraphicTool类中用到的ProcessError和FindControl方法,具体代码和说明如下:
 1namespace AddGraphics
 2ExpandedBlockStart.gifContractedBlock.gif{
 3    public class Utility
 4ExpandedSubBlockStart.gifContractedSubBlock.gif    {
 5        //错误信息处理
 6        public static ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResultCollection ProcessError(string message)
 7ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 8            //alert错误信息
 9            string jsAlertException = "alert('" + message + "')";
10            //用CallbackResult执行js脚本
11            ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult alertCallbackResult =new ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult(nullnull"javascript", jsAlertException);
12
13            //设置鼠标的指针显示
14            string jsChangeCursor = "map.divObject.style.cursor = map.cursor";
15            //用CallbackResult执行js脚本
16            ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult cursorCallbackResult =new ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult(nullnull"javascript", jsChangeCursor);
17
18            ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResultCollection callbackResultCollection =new ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResultCollection();
19            callbackResultCollection.Add(alertCallbackResult);
20            callbackResultCollection.Add(cursorCallbackResult);
21
22            //返回CallbackResultCollection
23            return callbackResultCollection;
24        }

25
26        //查找页面控件
27        public static Control FindControl(string control, Page page)
28ExpandedSubBlockStart.gifContractedSubBlock.gif        {
29            if (page == null || control == null)
30ExpandedSubBlockStart.gifContractedSubBlock.gif            {
31                return null;
32            }
 
33            Control buddyControl = page.FindControl(control);
34            if (buddyControl == null)
35ExpandedSubBlockStart.gifContractedSubBlock.gif            {
36                string webPartControl = GetControlUniqueID(control, page.Controls);
37                if (webPartControl != null)
38ExpandedSubBlockStart.gifContractedSubBlock.gif                {
39                    buddyControl = page.FindControl(webPartControl);
40                }

41                else
42ExpandedSubBlockStart.gifContractedSubBlock.gif                {
43                    buddyControl = page.FindControl(control);
44                }

45                    
46            }

47            return buddyControl;
48        }

49
50        public static string GetControlUniqueID(string controlID, ControlCollection controls)
51ExpandedSubBlockStart.gifContractedSubBlock.gif        {
52            Control control;
53            string uniqueID = null;
54            for (int i = 0; i < controls.Count; ++i)
55ExpandedSubBlockStart.gifContractedSubBlock.gif            {
56                control = controls[i];
57                if (control.ID == controlID)
58ExpandedSubBlockStart.gifContractedSubBlock.gif                {
59                    uniqueID = control.UniqueID;
60                    break;
61                }

62                if (control.Controls.Count > 0)
63ExpandedSubBlockStart.gifContractedSubBlock.gif                {
64                    uniqueID = GetControlUniqueID(controlID, control.Controls);
65                    if (uniqueID != null)
66                        break;
67                }

68            }

69            return uniqueID;
70        }

71
72    }

73}

74
7.这样就完成了AddGraphics的功能可以运行查看一下效果。 这个例子剩下的部分下篇继续写。

转载于:https://www.cnblogs.com/hll2008/archive/2008/08/19/1270836.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 使用timedatectl 修改时区和时间

使用timedatectl可以进行如下常见操作 1.查看当前时间/日期/时区&#xff1a;timedatectl或者timedatectl status 2.查看所有可用时区&#xff1a;timedatectl list-timezones 3.设置时区&#xff1a;timedatectl set-timezone “Asia/Shanghai” 或者 timedatectl set-time…

aspose将datatable导出excel 比自己拼好的多 Bug少-。.net

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO; using System.Data; using Aspose.Cells; /// <summary> ///OutFileDao 的摘要说明 /// </summary> publicclass OutFileDao { public OutFileDa…

【MVC】AJAX+PartialView实现商城首页的楼层加载

使用AJAX实现楼层加载的例子已经非常多&#xff0c;但是html代码大都是手动拼接的&#xff0c;编写不便&#xff0c;而且难以维护。 下面就使用AJAXPartialView来实现 1.html代码 <!--楼层1开始--> <div class"floor" id"floor1"></div>…

VS2008常用快捷键

如果有一天&#xff0c;你的鼠标被猫叼走了的时候&#xff0c;你会发现这些快捷键很有意思&#xff0c;你的鼠标在的时候这些可爱的快捷键会让你更方便。 命令行&#xff1a; Devenv 启动VS Studion Isqlw 启动SQL2000查询分析器 Sqlwb 启动SQL2005企业管理器 Inet…

给控件动态添加方法

新建一个窗体,添加如下方法 public void init() { FormBuildStringControl formStringControl; FormBuildButtonControl formButtonControl; FormBuildGroupControl formGroupControl; ; // Adding a group formGroupControl this.form().addControl(FormControlType::Group, …

整理:Android apk 框架 布局 集锦

2019独角兽企业重金招聘Python工程师标准>>> 看到好的技术教程就想分享一下&#xff0c;不喜勿喷&#xff01;谢谢配合&#xff0c;仅供菜鸟学习研究(^o^)/~ 友情推荐《爱加密》Android apk加密保护视频教程剪辑&#xff1a;http://www.ijiami.cn/Video?v3 Andro…

IE8不兼容你的网页 怎么办? - 简单开启兼容模式

自从用了IE8 整个世界都变了形.   呵呵,问题没那么严重,如果你的网站还来不及修改以适合IE8访问的时候,咱们可以通过非常简单的方法,加几行代码就可以让访问的IE8自动调用IE7的渲染模式[/b],这样可以保证最大的兼容性,方法如下:   只需要在页面中加入如下HTTP meta-tag:  …

springboot打war包汇总

概述 第一次用maven工具打war包&#xff0c;出现各种各样的问题&#xff0c;做个问题记录方便下次查看 maven 一开始用的maven是springboot默认的&#xff0c;在.m2下&#xff0c;要打包时才发现没有mvn指令。索性自己就重新装个maven&#xff0c;去官网下载&#xff0c;我安装…

学习Nutch不错的系列文章

1&#xff09;Nutch1.2二次开发详细攻略 &#xff08;1&#xff09;Windows平台下Cygwin环境的搭建 地址&#xff1a;http://www.cnblogs.com/streamhope/archive/2011/07/27/2118397.html &#xff08;2&#xff09;Windows平台下Nutch1.2的搭建 地址&#xff1a;http://www.c…

[CareerCup] 9.4 Subsets 子集合

9.4 Write a method to return all subsets of a set. LeetCode上的原题&#xff0c;请参见我之前的博客Subsets 子集合和Subsets II 子集合之二。 解法一&#xff1a; class Solution { public:vector<vector<int> > getSubsets(vector<int> &S) {vecto…

新增一自增列

/// <summary> /// 为m_DataTable新增一自增列 /// </summary> private void AddAutoIncrementComunm() { DataColumn col new DataColumn(NewColumnName, typeof(System.Int32)); col.AutoIncrement t…

解决Lync2010错误:无法同步通讯簿信息

1、修改注册表&#xff1a;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa 新建DWORD值起名为DisableLoopbackCheck 数值为1&#xff1b; 2、检查一下你的iis 里面的虚拟目录abs&#xff0c;和你共享文件夹的的权限是否允许所有的域用户访问。 3、设置好以后重启i…

Java 8 stream forEach filter anyMatch

forEach的循 someObjects.forEach(obj -> { //to do something }) 如果这个循环的目标是找到匹配某个谓词的第一个元素 Optional<SomeObject> result someObjects.stream().filter(obj -> some_condition_met).findFirst(); 如果你只是想知道集合中是否有一个元素…

大数据初探——Hadoop历史

Hadoop是一个开源的分布式框架&#xff0c;是Apache下的一个开源项目。Hadoop运行可以在成千上万个普通机器节点组成的集群上&#xff0c;通过分布式的计算模型和存储模型来处理大数据集。Hadoop具有高容错性、工作在普通的机器节点上扩展性强等众多的优点&#xff0c;是企业选…

Dynamic Data Web Application编译是报GetActionPath调用模糊解决办法

新建的Dynamic Data Web Application编译时报错 Error 3 The call is ambiguous between the following methods or properties: System.Web.DynamicData.MetaTable.GetActionPath(string, System.Collections.Generic.IList<object>) and System.Web.DynamicData.MetaTa…

BMP格式图像的显示

使用多文档编程 也可以使用单文档编程 建立一个DIB图像的显示类 ImageDib 成员变量&#xff1a; 4个指针&#xff1a; LPBYTE m_lpDib; //指向DIB的指针    LPBITMAPINFOHEADER m_lpBmpInfoHead; //图像信息头指针 LPRGBQUAD m_lpColorTable; //图像颜色表指针 …

JPA多条件复杂SQL动态分页查询

概述 ORM映射为我们带来便利的同时&#xff0c;也失去了较大灵活性&#xff0c;如果SQL较复杂&#xff0c;要进行动态查询&#xff0c;那必定是一件头疼的事情&#xff08;也可能是lz还没发现好的方法&#xff09;&#xff0c;记录下自己用的三种复杂查询方式。 环境 springBoo…

上下文环境

##执行上下文环境 在一段JS真正运行之前浏览器已经做了一些准备工作&#xff1a; 1.变量&#xff1a;变量的申明&#xff0c;默认值为undefined&#xff1b; 2.this&#xff1a;赋值&#xff1b; 3.函数申明&#xff1a;赋值 变量&#xff1a; console.log(a) ---…

dbgrideh的功能

dbgrideh的功能 a.点标题排序&#xff1a; 1.eh的optionsEh 的dghAutoSortMarking True 2 eh的sortlocal true 3.列的title的toolbutton为true 4。eh的optionsEh 的dghMultiSortMarking True 多个字段一起排(按CTRLMouse) 5.uses加相应的驱动ehlibado/ehlibbde b.模糊过滤: …

深入A*算法

一、前言 在这里我将对A*算法的实际应用进行一定的探讨&#xff0c;并且举一个有关A*算法在最短路径搜索的例子。 二、A*算法的程序编写原理 A*算法是最好优先算法的一种。只是有一些约束条件而已。我们先来看看最好优先算法是如何编写的吧。 如图有如下的状态空间&#xff1a;…