`
Virgo_S
  • 浏览: 1153655 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Server Java---自定义Tools开发 整理中。。。

阅读更多
什么是tools,tools就是工具,它跟command的区别就是tools是要跟地图进行交互后再执行某个命令,而command是直接执行某个命令。最简单的tools和command的对比是放大是一个工具,而全图显示就是一个命令。

ESRI已经包含的工具包括:放大(zoom in),缩小(zoom out),平移(Pan)。

前面我们都是先说服务器端的处理代码,现在先来看看客户端的处理。跟地图交互,就会产生怎么交互的问题。拉框放大的时候是在地图上画的是一个长方形,测距的时候在地图上画的是一条线。如何控制这些客户端的功能呢?

查看com.esri.adf.web.faces.event.MapEvent的帮助,里面详细说明了如何把客户端的操作如何和服务器端的代码建立联系。已有的客户端支持的操作包括:
EsriMapCircle 
EsriMapContinuousPan 
EsriMapLine 
EsriMapOval 
EsriMapPan 
EsriMapPoint 
EsriMapPolygon 
EsriMapPolyline 
EsriMapRectangle

如果我们要自己写一个工具,我们可以新建一个普通的类,这个类可以实现MapToolAction接口,也可以不实现任何接口。我们先来看一个实现接口的类。


public class CJZoomInTool implements MapToolAction {

    public void execute(MapEvent event)  {

        WebContext ctx = event.getWebContext();
        WebGeometry screenGeom = event.getWebGeometry();
        WebGeometry mapGeom = screen.toMapGeometry(ctx.getWebMap());
    }
}


我们可以看到,通过MapEvent的getWebGeometry方法可以得到客户端所画的多边形,此时得到的是屏幕坐标,然后再通过toMapGeometry方法转换为地图坐标。

MapEvent的getWebGeometry方法事实上是指向到ClientActionArgs的getWebGeometry方法,你可以用下面的代码得到另外一个WebGeometry进行比较:

ClientActionArgs clientarg=event.getClientActionArgs();
WebGeometry anotherGeom=clientarg.getWebGeometry();

我们还可以用ClientActionArcgs的getRequestParameter查看传送过来的参数是什么,在客户端指定长方形的情况下,得到的RequestParamerter里面有如下参数:
Map0_maxx:246
Map0_miny:147
Map0_minx:199
Map0_maxy:199

你一定想看看客户端是多边形的情况下,参数是什么情况,我们满足一下您的愿望:
Map0_coords:220:168|264:220|296:186|292:136|258:125

出现了以|分隔的参数集合,这个意思大家都明白了吧,这就是多边形的情况。

ClientActionArgs是一个基类,它的所有的子类对应于每一个客户端的操作。每个积累需要实现它的抽象方法。最重要的两个方法是init()和getWebGeometry,init从request里面得到所有的参数,getWebGeometry从根据不同的参数,构建不同的geometry返回。ADF会根据不同的客户端操作,创建不同的ClientActionArgs类。如果你一定要问我ADF是如何根据不同的客户端操作创建ClientActionArgs的,我们可以看到ClientActionArgs有一个静态方法:
getClientActionArgs(java.lang.String clientAction, java.util.Map requestParameters, java.lang.String controlId)

ADF就是用这个静态方法,根据不同的clientAction可以得到的ClientActionArgs。

这一下,把来龙去脉都讲了,既让大家看看整个客户端和服务器端操作的来龙去脉,也为大家增加自己的客户端操作热个身。

当然,自定义一个tool并不需要这么多的知识。事实上,自定义一个tools非常得简单,我们来看看帮助中的一段代码,计算选中了多少个要素。
package com.cj.ucdemo;

import java.rmi.RemoteException;

import com.esri.adf.web.ags.ADFAGSException;
import com.esri.adf.web.ags.data.AGSMapResource;
import com.esri.adf.web.data.WebContext;
import com.esri.adf.web.data.geometry.WebExtent;
import com.esri.adf.web.faces.event.MapEvent;
import com.esri.adf.web.faces.event.MapToolAction;
import com.esri.arcgisws.EnvelopeN;
import com.esri.arcgisws.EsriSearchOrder;
import com.esri.arcgisws.EsriSpatialRelEnum;
import com.esri.arcgisws.MapServerPort;
import com.esri.arcgisws.SpatialFilter;

public class CountFeatureTool implements MapToolAction {
         
         WebContext context=null;
         int countedFeatures;
         
         private void countFeatures(WebExtent extent){
                  
                    //Get the MapServerPort so we can execute methods through ArcGIS Server API
                    
                    AGSMapResource agsMap = ((AGSMapResource)context.getResources().get("ags1"));
                    MapServerPort mapServer = agsMap.getMapServer();
                    //Make a new envelope from the web extent
                    EnvelopeN env = new EnvelopeN(extent.getMinX(), extent.getMinY(), extent.getMaxX(), extent.getMaxY(),
                      null, null, null, null, null);

                    //Setup a spatial filter for an Intersection relationship
                    SpatialFilter spatialFilter = new SpatialFilter();
                    spatialFilter.setSpatialRel(EsriSpatialRelEnum.esriSpatialRelIntersects);
                    spatialFilter.setWhereClause("");
                    spatialFilter.setSearchOrder(EsriSearchOrder.esriSearchOrderSpatial);
                    spatialFilter.setSpatialRelDescription("");
                    spatialFilter.setGeometryFieldName("");
                    //Set the envelope as the geometry
                    spatialFilter.setFilterGeometry(env);

                    //MapServer::queryFeatureCount() executes on the server and can throw a RemoteException
                    try{
                      //Count features in 4th layer which intersect with the envelope
                      int layerId = 1;
                      this.countedFeatures =
                        mapServer.queryFeatureCount(mapServer.getDefaultMapName(), layerId, spatialFilter);
                      
                      System.out.println("你选择了 "+countedFeatures+" 要素");
                      
                    }catch(RemoteException rme){
                      //Rethrow this as ADFAGSException so that it can participate in the exception framework
                      throw new ADFAGSException("Could not execute MapServer::queryFeatureCount()",rme);
                    }
                  }

         

         public void execute(MapEvent arg0) throws Exception {
                  // TODO Auto-generated method stub
                  try{
                            this.context=arg0.getWebContext();
                  WebExtent ex=(WebExtent)arg0.getWebGeometry();
                  ex=(WebExtent)ex.toMapGeometry(arg0.getWebContext().getWebMap());
                  this.countFeatures(ex);
                  }catch(Exception ex){
                            ex.printStackTrace();
                  }

         }

}


大家注意这里使用了很多com.esri.arcgisws package里面的类,这个package是通过axis调用远程webservice的方式去调用服务器端的方法的。我们会在后续的讲座中说明。编译这个类后,直接在jsp页面里面用下面的代码调用即可:
<a:tool id="countFeature" defaultImage="images/selection.gif" hoverImage="images/ selectionU.gif" selectedImage="images/ selectionD.gif" clientAction="EsriMapRectangle" serverAction="com.cj.ucdemo.CountFeatureTool" clientPostBack="true"/>
分享到:
评论

相关推荐

    ArcGIS+Server+Java讲座

    18、ArcGIS Server Java讲座--自定义Tools开发 48 19、ArcGIS Server Java讲座-空间查询和高亮显示的实现 52 20、Server Java 自定义开发-Network Analysis 54 21、ArcGIS Server开发——控制图层是否可见 59 22、...

    arcgis server 自定义tools 应用简单技巧

    本文将深入探讨如何利用ArcGIS Server自定义tools来增强其功能,特别是关于"identify"操作的应用技巧。 一、自定义Tools的概述 自定义Tools是ArcGIS Server提供的一个重要特性,允许开发者根据实际需求定制功能,以...

    ArcGIS Server java开发文档翻译

    **ArcGIS Server Java 开发文档翻译** ArcGIS Server 是 Esri 公司提供的一款强大的地理信息系统(GIS)服务器产品,它允许开发者通过多种编程语言,包括 Java,来构建地图服务和地理处理工作流。这份文档翻译集合...

    D:\tools\zipkin\zipkin-server-2.12.9-exec

    在Java生态中,Zipkin Server 是一个重要的工具,因为它与Java应用的集成非常便捷。 Zipkin 的核心功能包括: 1. **追踪收集**:Zipkin 可以收集来自各个服务的追踪数据,这些数据通常由客户端库(如 Brave 或 ...

    arcgis server java讲座

    【自定义工具(Custom Tools)】和【自定义命令(Custom Commands)】是ArcGIS Server Java开发中的关键部分。自定义工具允许开发者根据特定需求创建独特的地图操作,如测量、选择或分析等。自定义命令则用于扩展...

    JDK12-java-management-extensions-guide.pdf

    《JDK12 Java Management Extensions Guide》是Oracle公司发布的一份技术文档,主要针对Java Platform, Standard Edition(Java SE)12版本中的Java Management Extensions(JMX)进行深入的介绍和指导。JMX是一种...

    [Android][frameworks][HIDL]使用HIDL新建虚拟HAL以实现system_server与native进程双向通信(三)——JAVA客户端

    接下来我们就要实现我们的终极目标了:system_server(JAVA端)与服务端相互通信; 预处理 首先先解释下一个“玄学”的情况:在前两章的操作完成后,我们不需要添加任何JAVA类,即可直接使用; 究其原因,是因为在我们...

    新版Android开发教程.rar

    程序可以采用 JAVA 开发,但是因为它的虚拟机 (Virtual Machine) Dalvik ,是将 JAVA 的 bytecode 转成 自 己的格式,回避掉需要付给 SUN 有关 JAVA 的授权费用。 对手机制造者的影响 � Android 是款开源的移动计算...

    win7正确配置java开发环境[整理].pdf

    以上就是Windows 7环境下配置Java开发环境,包括JDK安装、环境变量配置、Tomcat服务器的安装与配置,以及在MyEclipse中集成JDK和Tomcat的完整步骤。这些步骤对于任何Java开发者都是基础且必要的。

    eclipse-jee-2023-06-R-win32-x86-64.zip

    在Eclipse JEE版本中,这些功能得到了进一步增强,特别是对于Java EE应用程序的开发,如Web服务、Java服务器页面(JSP)、JavaServer Faces(JSF)以及Enterprise JavaBeans(EJB)等,提供了全面的工具集和模板。...

    基于WTP开发自定义的JSP编辑器

    Web Tools Platform(WTP)是Eclipse平台上的一个重要组件,专为Java EE和Web应用开发而设计。它不仅提供了强大的Web开发功能,如动态Web项目的支持、Web服务开发工具,还包含了用于构建自定义编辑器的核心框架。WTP...

    appengine-tools-sdk-1.9.17.zip

    标题中的"appengine-tools-sdk-1.9.17.zip"指的是Google App Engine SDK的一个特定版本,1.9.17。Google App Engine是一个由Google提供的云服务平台,它允许开发者构建、部署和运行Web应用程序。SDK(Software ...

    原创-自定义标签库制作

    自定义标签库是Java Server Pages (JSP) 技术中的一个重要组成部分,它允许开发者创建可重用的、功能丰富的HTML标签,这些标签可以像标准HTML标签一样在JSP页面中使用。本文将详细介绍如何从零开始构建一个自定义...

    java系列开发工具安装与使用

    - **JavaServer Faces Tools - Cor**:加强 JSF 的开发支持。 - **Service Policy**:用于配置 Web 服务的安全策略。 - **ATF Debug Plug-in (Incubation)**:用于调试 ATF 应用程序。 - **Auxiliary Web Module...

    java程序员开发工具安装和使用

    - JavaServer Faces Tools-Cor:JSF 工具集。 - Auxiliary Web Module Support for MeEclipse:辅助 Web 模块支持。 - JSF Editor Preview Support for MyEclipse:JSF 编辑器预览支持。 - **服务策略**:在 ...

    java学习中的所有配置----多种方法

    总的来说,Java开发中的配置工作是一项基础但重要的任务。理解并熟练掌握这些配置方法,不仅可以提升开发效率,也有助于我们更好地理解和运用Java生态系统。通过不断实践和学习,每个开发者都能找到最适合自己的配置...

    java开发环境配置.docx

    ### Java开发环境配置详解 #### 一、JDK环境配置 **1.1 下载JDK** - **步骤**: 在百度搜索“JDK”,访问官方下载页面,选择适合您操作系统的JDK版本进行下载(通常有32位和64位版本)。推荐下载JDK 1.8.x版本,因...

    cn_sql_server_2014_express_with_tools_x64_exe_3949524.rar

    “with Tools”意味着这个版本包含SQL Server Management Studio (SSMS)和其他开发工具。SSMS是数据库管理员和开发人员的重要工具,用于创建、配置、管理和维护SQL Server实例。此外,还包括数据库引擎、Reporting ...

Global site tag (gtag.js) - Google Analytics