|
10楼#
发布于:2007-11-04 20:09
Server Java讲座----利用Ajax得到当前地图的比例尺(服务器端)<BR><BR>
<DIV><FONT size=3><FONT color=black><FONT face=宋体>现在我们进入实战阶段,看看我们怎么可以在服务器端得到当前地图的范围,这个代码中你将学到如何从</FONT></FONT><FONT color=black><FONT face=Arial>faces Context</FONT></FONT><FONT color=black><FONT face=宋体>里面得到当前</FONT></FONT><FONT color=black><FONT face=Arial>form</FONT></FONT><FONT color=black><FONT face=宋体>中的控件,以及如何利用</FONT></FONT><FONT color=black><FONT face=Arial>ESRI</FONT></FONT><FONT color=black><FONT face=宋体>提高的工具,简化我们响应</FONT></FONT><FONT color=black><FONT face=Arial>AJAX</FONT></FONT><FONT color=black><FONT face=宋体>请求的过程:</FONT></FONT><FONT color=black><FONT face=Arial></FONT></FONT><BR></FONT><FONT size=3><FONT color=black><FONT face=Arial><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=3957;extra=page%3D6###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=3957;extra=page%3D6###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>UIComponent form = facesContext.getViewRoot().findComponent((String) paramMap.get(FORMID));<BR>首先我们得到页面上的form,form是一个container,通过它我们可以得到form中的其它组件,比如我们的地图控件:</DIV></DIV><BR></FONT></FONT><BR><FONT color=black><FONT face=Arial></FONT></FONT><BR></FONT><FONT size=3><FONT color=black><FONT face=Arial><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=3957;extra=page%3D6###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=3957;extra=page%3D6###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV><a:map id="Map0" value="#{mapContext.webMap}" width="600" height="600" /> </DIV></DIV><BR></FONT></FONT><BR><FONT color=black><FONT face=宋体>我们可以用下面的方法得到这个</FONT></FONT><FONT color=black><FONT face=Arial>Mapcontrol</FONT></FONT><FONT color=black><FONT face=宋体>和</FONT></FONT><FONT color=black><FONT face=Arial>WebMap</FONT></FONT><FONT color=black><FONT face=宋体>:</FONT></FONT><FONT color=black><FONT face=Arial></FONT></FONT><BR></FONT><FONT size=3><FONT color=black><FONT face=Arial><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=3957;extra=page%3D6###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=3957;extra=page%3D6###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV> MapControl mc = (MapControl) form.findComponent((String) paramMap.get(MAPID));<BR> WebMap wm = mc.getWebMap();</DIV></DIV><BR></FONT></FONT><BR><FONT color=black><FONT face=Arial></FONT></FONT><BR><FONT color=black><FONT face=宋体>得到了这个</FONT></FONT><FONT color=black><FONT face=Arial>WebMap</FONT></FONT><FONT color=black><FONT face=宋体>,哈哈,可以得到</FONT></FONT><FONT color=black><FONT face=Arial>Everything</FONT></FONT><FONT color=black><FONT face=宋体>了,因为你可以从</FONT></FONT><FONT color=black><FONT face=Arial>WebMap</FONT></FONT><FONT color=black><FONT face=宋体>中得到</FONT></FONT><FONT color=black><FONT face=Arial>WebContext</FONT></FONT><FONT color=black><FONT face=宋体>。这个时候,想得到那个比例尺,是再简单也不过的事情了,用下面的代码即可:</FONT></FONT><BR></FONT><FONT size=3><FONT face=Arial><FONT color=black><FONT face=宋体><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=3957;extra=page%3D6###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=3957;extra=page%3D6###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>wm.getMapScale();</DIV></DIV><BR></FONT></FONT></FONT><BR><FONT color=black><FONT face=宋体>得到了比例尺了,接下去怎么办呢?把它返回到客户端,我们的</FONT></FONT><FONT color=black><FONT face=Arial>Ajax</FONT></FONT><FONT color=black><FONT face=宋体>客户端认的是</FONT></FONT><FONT color=black><FONT face=Arial>XML</FONT></FONT><FONT color=black><FONT face=宋体>的流,咋办呢?最笨的办法当然是是一个一个</FONT></FONT><FONT color=black><FONT face=Arial>String</FONT></FONT><FONT color=black><FONT face=宋体>的组装成</FONT></FONT><FONT color=black><FONT face=Arial>XML</FONT></FONT><FONT color=black><FONT face=宋体>,然后调用</FONT></FONT><FONT color=black><FONT face=Arial>Response</FONT></FONT><FONT color=black><FONT face=宋体>的</FONT></FONT><FONT color=black><FONT face=Arial>Write</FONT></FONT><FONT color=black><FONT face=宋体>写回到客户端,比如下面的代码:</FONT></FONT><FONT color=black><FONT face=Arial></FONT></FONT><BR></FONT><FONT size=3><FONT color=black><FONT face=Arial><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=3957;extra=page%3D6###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=3957;extra=page%3D6###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>public String toXml() {<BR> StringBuffer xml = new StringBuffer();<BR> xml.append("<?xml version=\"1.0\"?>\n");<BR> xml.append(“<scale>”);<BR> xml.append(“<value>100</value>”);<BR> xml.append("</scale>\n");<BR> return xml.toString();<BR> }</DIV></DIV><BR></FONT></FONT><BR><FONT color=black><FONT face=宋体>生成了</FONT></FONT><FONT color=black><FONT face=Arial>XML</FONT></FONT><FONT color=black><FONT face=宋体>代码,然后用下面的代码把结果返回给客户端:</FONT></FONT><FONT color=black><FONT face=Arial></FONT></FONT><BR></FONT><FONT size=3><FONT color=black><FONT face=Arial><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=3957;extra=page%3D6###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=3957;extra=page%3D6###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>Response res=(Response)externalContext.getResponse();<BR>res.setContentType("application/xml");<BR>res.getWriter().write(scaleXml);</DIV></DIV><BR></FONT></FONT><BR><FONT color=black><FONT face=宋体>当然,各位看官想来都是</FONT></FONT><FONT color=black><FONT face=Arial>JAVA</FONT></FONT><FONT color=black><FONT face=宋体>高手,对于这样的写法实在感觉不舒服,正待想办法用标准的</FONT></FONT><FONT color=black><FONT face=Arial>XML</FONT></FONT><FONT color=black><FONT face=宋体>工具来写时,你会发现,</FONT></FONT><FONT color=black><FONT face=Arial>ESRI</FONT></FONT><FONT color=black><FONT face=宋体>已经为您想到了,写好了几个工具类来供你调用了。我们来看看怎么用这些工具:</FONT></FONT><FONT color=black><FONT face=Arial></FONT></FONT><BR><FONT color=black><FONT face=宋体>用下面的代码创建一个标准的</FONT></FONT><FONT color=black><FONT face=Arial>XML</FONT></FONT><FONT color=black><FONT face=宋体>文档:</FONT></FONT><BR></FONT><FONT size=3><FONT face=Arial><FONT color=black><FONT face=宋体><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=3957;extra=page%3D6###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=3957;extra=page%3D6###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>Document doc = XMLUtil.newDocument();</DIV></DIV><BR></FONT></FONT></FONT><BR><FONT color=black><FONT face=宋体>用下面的代码新建一个</FONT></FONT><FONT color=black><FONT face=Arial>element</FONT></FONT><FONT color=black><FONT face=宋体>:</FONT></FONT><BR></FONT><FONT size=3><FONT face=Arial><FONT color=black><FONT face=宋体><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=3957;extra=page%3D6###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=3957;extra=page%3D6###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>Element responseElement = XMLUtil.createElement(doc, "response", null, null);</DIV></DIV><BR></FONT></FONT></FONT><BR><FONT color=black><FONT face=宋体>用下面的代码将我们的比例尺数据写到刚才新建的</FONT></FONT><FONT color=black><FONT face=Arial>Element</FONT></FONT><FONT color=black><FONT face=宋体>里面:</FONT></FONT><BR></FONT><FONT size=3><FONT face=Arial><FONT color=black><FONT face=宋体><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=3957;extra=page%3D6###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=3957;extra=page%3D6###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>XMLUtil.createElement("scale", String.valueOf(wm.getMapScale()), responseElement);</DIV></DIV><BR></FONT></FONT></FONT><BR><FONT color=black><FONT face=宋体>然后用下面的语句将</FONT></FONT><FONT color=black><FONT face=Arial>XML</FONT></FONT><FONT color=black><FONT face=宋体>文档写入到客户端:</FONT></FONT><FONT color=black><FONT face=Arial></FONT></FONT><BR></FONT><FONT size=3><FONT color=black><FONT face=Arial><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=3957;extra=page%3D6###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=3957;extra=page%3D6###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>AJAXUtil.writeResponse(facesContext, doc);</DIV></DIV><BR></FONT></FONT><BR><FONT color=black><FONT face=宋体>很可惜的是,</FONT></FONT><FONT color=black><FONT face=Arial>ESRI</FONT></FONT><FONT color=black><FONT face=宋体>这些类的代码是不公开的,不过你可以猜一猜,这些方法里面到底发生了什么事情。</FONT></FONT><FONT color=black><FONT face=Arial></FONT></FONT><BR><FONT color=black><FONT face=Arial></FONT></FONT><FONT face=Arial>OK</FONT><FONT face=宋体>,皮球又被提到了客户端了,我们下一个讲座来看看,如何解析服务器端返回的</FONT><FONT face=Arial>XML</FONT><FONT face=宋体>文档,并且更新页面上的输入框。</FONT></FONT><BR><BR></DIV> |
|
|
|
11楼#
发布于:2007-11-04 20:09
<DIV right" align=right></DIV>Server Java讲座-----扩展Tasks框架(一)<BR><BR>
<DIV><FONT size=3><FONT color=black><FONT face=Arial> </FONT></FONT></FONT><BR><FONT size=3><FONT color=black><FONT face=Arial> Due to popular demands</FONT></FONT><FONT color=black><FONT face=宋体>,今天讲一讲</FONT></FONT><FONT color=black><FONT face=Arial>Tasks</FONT></FONT><FONT color=black><FONT face=宋体>框架的扩展。这是</FONT></FONT><FONT color=black><FONT face=Arial>tasks</FONT></FONT><FONT color=black><FONT face=宋体>系列讲座</FONT></FONT><FONT color=black><FONT face=Arial>1</FONT></FONT><FONT color=black><FONT face=宋体>。</FONT></FONT><FONT color=black><FONT face=Arial></FONT></FONT><BR><FONT color=black><FONT face=Arial></FONT></FONT><BR><FONT color=black><FONT face=Arial>Tasks</FONT></FONT><FONT color=black><FONT face=宋体>框架是一个很有意思的东西。如果你对</FONT></FONT><FONT color=black><FONT face=Arial>Tasks</FONT></FONT><FONT color=black><FONT face=宋体>框架还没有概念,你可以参考一下</FONT></FONT><FONT color=black><FONT face=Arial>web map application</FONT></FONT><FONT color=black><FONT face=宋体>那个</FONT></FONT><FONT color=black><FONT face=Arial>Sample</FONT></FONT><FONT color=black><FONT face=宋体>,左边浮动的放大工具,查询工具都是用</FONT></FONT><FONT color=black><FONT face=Arial>Tasks</FONT></FONT><FONT color=black><FONT face=宋体>框架构成。有人会问,既然已经有了</FONT></FONT><FONT color=black><FONT face=Arial>command</FONT></FONT><FONT color=black><FONT face=宋体>和</FONT></FONT><FONT color=black><FONT face=Arial>tools</FONT></FONT><FONT color=black><FONT face=宋体>,为什么还需要</FONT></FONT><FONT color=black><FONT face=Arial>tasks</FONT></FONT><FONT color=black><FONT face=宋体>呢?事实上</FONT></FONT><FONT color=black><FONT face=Arial>tasks</FONT></FONT><FONT color=black><FONT face=宋体>的目的是不同的;我们可以看一下</FONT></FONT><FONT color=black><FONT face=Arial>web map application</FONT></FONT><FONT color=black><FONT face=宋体>,可以看到,相同类型的</FONT></FONT><FONT color=black><FONT face=Arial>button</FONT></FONT><FONT color=black><FONT face=宋体>和</FONT></FONT><FONT color=black><FONT face=Arial>toos</FONT></FONT><FONT color=black><FONT face=宋体>组合在一起,组成一个逻辑单元,这就是</FONT></FONT><FONT color=black><FONT face=Arial>tasks</FONT></FONT><FONT color=black><FONT face=宋体>的选择条件。</FONT></FONT><FONT color=black><FONT face=Arial></FONT></FONT><BR><FONT color=black><FONT face=Arial></FONT></FONT><BR><FONT color=black><FONT face=宋体>我们来看看如何编写</FONT></FONT><FONT color=black><FONT face=Arial>Tasks</FONT></FONT><FONT color=black><FONT face=宋体>,编写</FONT></FONT><FONT color=black><FONT face=Arial>Tasks</FONT></FONT><FONT color=black><FONT face=宋体>是非常有意思的事情。</FONT></FONT><FONT color=black><FONT face=Arial>Tasks</FONT></FONT><FONT color=black><FONT face=宋体>跟</FONT></FONT><FONT color=black><FONT face=Arial>tools</FONT></FONT><FONT color=black><FONT face=宋体>一样,也是一个普通的</FONT></FONT><FONT color=black><FONT face=Arial>Java</FONT></FONT><FONT color=black><FONT face=宋体>类即可,这个</FONT></FONT><FONT color=black><FONT face=Arial>Java</FONT></FONT><FONT color=black><FONT face=宋体>类可以从</FONT></FONT><FONT color=black><FONT face=Arial>Object</FONT></FONT><FONT color=black><FONT face=宋体>直接继承。请看下面的</FONT></FONT><FONT color=black><FONT face=Arial>Task</FONT></FONT><FONT color=black><FONT face=宋体>的例子:</FONT></FONT><BR></FONT><FONT size=3><FONT color=black><FONT face=Arial><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4396;extra=page%3D5###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4396;extra=page%3D5###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>public class JSTasks {<BR>public void doSomething(){<BR>System.out.println("Task button clicked.");<BR> <BR>}<BR>}</DIV></DIV><BR></FONT></FONT><BR><FONT color=black><FONT face=Arial></FONT></FONT><BR><FONT color=black><FONT face=宋体>这个</FONT></FONT><FONT color=black><FONT face=Arial>tasks</FONT></FONT><FONT color=black><FONT face=宋体>实在是简单吧,看看怎么部署上去,我们在</FONT></FONT><FONT color=black><FONT face=Arial>xml</FONT></FONT><FONT color=black><FONT face=宋体>文件中做如下定义:</FONT></FONT><FONT color=black><FONT face=Arial></FONT></FONT><BR><FONT color=black><FONT face=Arial></FONT></FONT><BR></FONT><FONT size=3><FONT color=black><FONT face=Arial><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4396;extra=page%3D5###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4396;extra=page%3D5###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV> <managed-bean><BR> <managed-bean-name>jsTask</managed-bean-name><BR> <managed-bean-class>com.cj.ucdemo.JSTasks</managed-bean-class><BR> <managed-bean-scope>session</managed-bean-scope><BR> </managed-bean></DIV></DIV><BR></FONT></FONT><BR><FONT color=black><FONT face=Arial></FONT></FONT><BR><FONT color=black><FONT face=宋体>这个配置文件也非常简单,那么看来所有的诀窍在与如何在</FONT></FONT><FONT color=black><FONT face=Arial>JSP</FONT></FONT><FONT color=black><FONT face=宋体>页面里面使用它。我们来看看:</FONT></FONT><FONT color=black><FONT face=Arial></FONT></FONT><BR><FONT color=black><FONT face=Arial></FONT></FONT><BR></FONT><FONT size=3><FONT color=black><FONT face=Arial><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4396;extra=page%3D5###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4396;extra=page%3D5###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV><a:task mapId="Map0" value="#{jsTask}" rendered="true" /></DIV></DIV><BR></FONT></FONT><BR><FONT color=black><FONT face=Arial></FONT></FONT><BR><FONT color=black><FONT face=宋体>添加一个</FONT></FONT><FONT color=black><FONT face=Arial>task</FONT></FONT><FONT color=black><FONT face=宋体>标签,把这个标签的</FONT></FONT><FONT color=black><FONT face=Arial>mapId</FONT></FONT><FONT color=black><FONT face=宋体>值指向地图控件</FONT></FONT><FONT color=black><FONT face=Arial>”Map0”</FONT></FONT><FONT color=black><FONT face=宋体>,讲它的值指向我们刚才定义的</FONT></FONT><FONT color=black><FONT face=Arial>Managed Bean</FONT></FONT><FONT color=black><FONT face=宋体>。访问一下,大家看看下面的浮动窗口结果:</FONT></FONT><FONT color=black><FONT face=Arial></FONT></FONT><BR><BR><FONT color=black><FONT face=Arial></FONT></FONT><FONT size=2></FONT></FONT><FONT size=3><FONT size=2></FONT></FONT><BR><FONT size=3><FONT size=2><IMG src="http://bbs.esrichina-bj.cn/ESRI/attachments/forumid_14/simpletasks_JwRZSS99d57Q.jpg" border=0><FONT face="宋体, MS Song"> </FONT> <DIV><FONT face="宋体, MS Song"><IMG src="http://bbs.esrichina-bj.cn/ESRI/images/default/attachimg.gif" border=0></FONT></DIV> <DIV><FONT face="宋体, MS Song"><IMG src="http://bbs.esrichina-bj.cn/ESRI/images/attachicons/image.gif" border=0></FONT> <a href="http://bbs.esrichina-bj.cn/ESRI/attachment.php?aid=538;nothumb=yes" target="_blank" >simpletasks.jpg</A> (16.81 KB)<BR> <DIV class="right smalltxt">2006-12-30 16:20</DIV></DIV></FONT><BR></FONT><BR><FONT size=3><BR><FONT color=black><FONT face=宋体>是不是很令人惊奇啊?事实上我们这个</FONT></FONT><FONT color=black><FONT face=Arial>Bean</FONT></FONT><FONT color=black><FONT face=宋体>中只有一个方法,但是</FONT></FONT><FONT color=black><FONT face=Arial>Tasks</FONT></FONT><FONT color=black><FONT face=宋体>框架聪明地把这个方法名给提取出来,作为</FONT></FONT><FONT color=black><FONT face=Arial>button</FONT></FONT><FONT color=black><FONT face=宋体>的名字。你点击一下这个按钮,在后台就可以看到执行了这个方法,打印出了一条信息。简单的说:方法就是按钮!!</FONT></FONT><FONT color=black><FONT face=Arial></FONT></FONT><BR><FONT color=black><FONT face=Arial></FONT></FONT><BR><FONT face=宋体>是不是准备马上试试呢?</FONT></FONT></DIV> |
|
|
|
12楼#
发布于:2007-11-04 20:10
Server Java讲座----Task框架扩展之Taskinfo<BR><BR>
<DIV>有了上个Task的基础, 我们来看其它的Task就驾轻就熟了。事实上,整个Task就是一个类,Task的Caption就是这个类的类名。里面的每一个Public方法都是Task浮动条上的一个按钮。那么参数怎么办呢?我们来加一个参数,并且加上一个它的get方法和set方法:<BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4555;extra=page%3D2###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4555;extra=page%3D2###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>String parameter;<BR><BR>public String getParameter() {<BR><BR>return parameter;<BR><BR>}<BR><BR>public void setParameter(String parameter) {<BR><BR>this.parameter = parameter;<BR><BR>}</DIV></DIV><BR>看看我们的task工具条发生了什么变化,Task工具条如下图所示:<BR><IMG src="http://bbs.esrichina-bj.cn/ESRI/attachments/forumid_14/Snap1_Ihb8zYaPb3Jt.jpg" border=0> <DIV><IMG src="http://bbs.esrichina-bj.cn/ESRI/images/default/attachimg.gif" border=0></DIV> <DIV><IMG src="http://bbs.esrichina-bj.cn/ESRI/images/attachicons/image.gif" border=0> <a href="http://bbs.esrichina-bj.cn/ESRI/attachment.php?aid=617;nothumb=yes" target="_blank" >Snap1.jpg</A> (15.99 KB)<BR> <DIV class="right smalltxt">2007-1-8 15:30</DIV></DIV><BR><BR>可以看到,多了一个Parameter的输入框,前面还有一个Label,很有意思吧。那个DoAnything是我加的另外一个方法。Task框架的扩展已经很明显了吧:把相同的功能集合在一个类里面,这个类可以接受参数。例如我们可以利用这个task进行buffer操作,这个输入框就可以用来输入buffer的距离。<BR><BR>看到这里,大家肯定想到了另外的几个问题,比如:怎么把这些参数,按钮的名字修改成中文,上次给人培训,有人说:用中文的变量名?也是一个办法,但是考虑的JDK对中文变量的处理,似乎有问题。还有其它的问题包括怎么跟地图进行交互?怎么样设置客户端的动作(画多边形还是画Polyline)。我们当然有另外的方法。<BR><BR>使用Taksinfo建立对Task的描述,所有的Taskinfo都需要继承自SimpleTaskInfo类。大家可以打开doc看看SimpleTaskInfo的子类有那些。事实上,那些子类都是已经存在的task的taskinfo,如果你需要做汉化,继承这些类并且改写其中的几个方法即可。<BR><BR>我们来看看我们自己的类需要改写SimpleTaskInfo的哪几个方法:<BR>TaskActionDescriptorModel[]getActionDescriptors();<BR><BR>此方法用来修改command按钮的描述;command的意思是不需要和地图进行交互而是直接在服务器端执行一个命令。<BR><BR>TaskParamDescriptorModel[]getParamDescriptors()<BR><BR>此方法修改参数的描述;<BR><BR>TaskToolDescriptorModel[]getToolDescriptors();<BR><BR>此方法修改工具的描述,工具的意思是需要和地图进行交互;<BR><BR>那么我们来写一个类,直接说明如何使用这几个方法,修改task的表现:<BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4555;extra=page%3D2###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4555;extra=page%3D2###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>public TaskDescriptor getTaskDescriptor() {<BR><BR>TaskDescriptor td=new TaskDescriptor(JSTasks.class);<BR><BR>td.setDisplayName("我的任务");<BR><BR>return td;<BR><BR>}</DIV></DIV><BR>此方法修改了task的标题,将此类作为一个Managed-bean添加到faces-config.xml文件中,并且在.jsp页面中修改task的使用如下:<BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4555;extra=page%3D2###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4555;extra=page%3D2###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV><a:task mapId="Map0" value="#{jsTask}" rendered="true" taskInfo="#{jsTaskInfo}"/></DIV></DIV><BR>修改后的Task如下所示:<BR><BR><IMG src="http://bbs.esrichina-bj.cn/ESRI/attachments/forumid_14/Snap2_5v3ZUIITmUhh.jpg" border=0> <DIV><IMG src="http://bbs.esrichina-bj.cn/ESRI/images/default/attachimg.gif" border=0></DIV> <DIV><IMG src="http://bbs.esrichina-bj.cn/ESRI/images/attachicons/image.gif" border=0> <a href="http://bbs.esrichina-bj.cn/ESRI/attachment.php?aid=618;nothumb=yes" target="_blank" >Snap2.jpg</A> (18.71 KB)<BR> <DIV class="right smalltxt">2007-1-8 15:33</DIV></DIV><BR><FONT face=宋体><BR>可以看到</FONT><FONT face=Arial>task</FONT><FONT face=宋体>的标题已经改变。下面我们来看修改</FONT><FONT face=Arial>Action</FONT><FONT face=宋体>的标题,代码如下:</FONT><FONT face=Arial></FONT><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4555;extra=page%3D2###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4555;extra=page%3D2###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV><BR><BR>public TaskActionDescriptorModel[]<BR><BR>getActionDescriptors() {<BR><BR>TaskActionDescriptorModel[] td=new TaskActionDescriptorModel[1];<BR><BR>TaskActionDescriptorModel actionDesc=new TaskActionDescriptor(JSTasks.class,"doSomething","查询");<BR><BR>td[0]=actionDesc;<BR><BR>return td;<BR><BR>}</DIV></DIV><BR><FONT face=宋体>需要说明的是</FONT><FONT face=Arial>TaskActionDescriptor(JSTasks.class,"doSomething","</FONT><FONT face=宋体>查询</FONT><FONT face=Arial>")</FONT><FONT face=宋体>构造函数的三个参数,第一个是</FONT><FONT face=Arial>task</FONT><FONT face=宋体>类,第二个是方法名,第三个是修改后的方法名;构造后放到数组中返回即可,如果有多个方法,可以如法炮制,都放到数组中。修改后的</FONT><FONT face=Arial>task</FONT><FONT face=宋体>有如下表现:</FONT><BR><BR><IMG src="http://bbs.esrichina-bj.cn/ESRI/attachments/forumid_14/Snap3_sHhMMr8Dv2zr.jpg" border=0> <DIV><IMG src="http://bbs.esrichina-bj.cn/ESRI/images/default/attachimg.gif" border=0></DIV> <DIV><IMG src="http://bbs.esrichina-bj.cn/ESRI/images/attachicons/image.gif" border=0> <a href="http://bbs.esrichina-bj.cn/ESRI/attachment.php?aid=619;nothumb=yes" target="_blank" >Snap3.jpg</A> (10.14 KB)<BR> <DIV class="right smalltxt">2007-1-8 15:39</DIV></DIV><BR><BR><FONT face=宋体>你会发现另外一个</FONT><FONT face=Arial>action</FONT><FONT face=宋体>没有了,别着急,因为我们还没有把它放到数组中,而原来默认的显示方式已经被我们修改了。</FONT><FONT face=Arial></FONT><BR><FONT face=Arial></FONT><BR><FONT face=宋体>我们来修改</FONT><FONT face=Arial>doAnything</FONT><FONT face=宋体>工具,</FONT><FONT face=Arial>doAnything</FONT><FONT face=宋体>工具需要和地图交互,注意它的参数是</FONT><FONT face=Arial>MapEvent</FONT><FONT face=宋体>而不是</FONT><FONT face=Arial>TaskEvent</FONT><FONT face=宋体>,它完整的代码如下所示:</FONT><FONT face=Arial></FONT><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4555;extra=page%3D2###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4555;extra=page%3D2###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>public void doAnything(MapEvent te){<BR><BR>//通过和地图交互进行放大<BR><BR>WebContext ctx=te.getWebContext();<BR><BR>WebGeometry geom=te.getWebGeometry().toMapGeometry(ctx.getWebMap());<BR><BR>WebExtent ext = (WebExtent)geom;<BR><BR>ctx.getWebMap().setCurrentExtent(ext);<BR><BR>ctx.refresh();<BR><BR>}</DIV></DIV><BR><FONT face=Arial></FONT><BR><FONT face=宋体>如果跟地图交互,就要涉及到客户端执行的操作,我们这里没有任何地方指定客户端的操作,这是在</FONT><FONT face=Arial>taskinfo</FONT><FONT face=宋体>里面指定的,我们来看下面的代码:</FONT><FONT face=Arial></FONT><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4555;extra=page%3D2###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4555;extra=page%3D2###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>public TaskToolDescriptorModel[]<BR><BR>getToolDescriptors() {<BR><BR>TaskToolDescriptor [] toolDesAry=new<BR><BR>TaskToolDescriptor[1];<BR><BR>TaskToolDescriptor toolDesc=new<BR><BR>TaskToolDescriptor(JSTasks.class, "doAnything", "交互放大",ClientActions.MAP_RECTANGLE);<BR><BR>toolDesAry[0]=toolDesc;<BR><BR>return toolDesAry;<BR><BR>}</DIV></DIV><BR><FONT face=宋体>注意</FONT><FONT face=Arial>TaskToolDescriptor</FONT><FONT face=宋体>构造函数的</FONT><FONT face=Arial>4</FONT><FONT face=宋体>个参数,第一个是</FONT><FONT face=Arial>task</FONT><FONT face=宋体>类,第二个是原方法名,第三个是替换后的方法名,第四个是客户端的动作。构造完成后放到数组中,如果有多个</FONT><FONT face=Arial>tools</FONT><FONT face=宋体>,如法炮制即可。修改后的</FONT><FONT face=Arial>task</FONT><FONT face=宋体>如下所示:</FONT><FONT face=Arial></FONT><BR><IMG src="http://bbs.esrichina-bj.cn/ESRI/attachments/forumid_14/Snap4_DHq2Si3XY5Fa.jpg" border=0> <DIV><IMG src="http://bbs.esrichina-bj.cn/ESRI/images/default/attachimg.gif" border=0></DIV> <DIV><IMG src="http://bbs.esrichina-bj.cn/ESRI/images/attachicons/image.gif" border=0> <a href="http://bbs.esrichina-bj.cn/ESRI/attachment.php?aid=620;nothumb=yes" target="_blank" >Snap4.jpg</A> (12.38 KB)<BR> <DIV class="right smalltxt">2007-1-8 15:39</DIV></DIV><BR><BR><FONT face=宋体>有了上面的解释,我们来看参数的</FONT><FONT face=Arial>taskinfo</FONT><FONT face=宋体>代码,就非常容易了:</FONT><FONT face=Arial></FONT><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4555;extra=page%3D2###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4555;extra=page%3D2###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>public TaskParamDescriptorModel[] getParamDescriptors() {<BR><BR>// TODO Auto-generated method stub<BR><BR>TaskParamDescriptorModel[] td=new TaskParamDescriptorModel[1];<BR><BR>TaskParamDescriptorModel paraDesc=new TaskParamDescriptor(SearchTask.class,"searchText","查询文本");<BR><BR>td[0]=paraDesc;<BR><BR>return td;<BR><BR>}</DIV></DIV><BR><FONT face=宋体>修改后的</FONT><FONT face=Arial>task</FONT><FONT face=宋体>如下所示:</FONT><BR><IMG src="http://bbs.esrichina-bj.cn/ESRI/attachments/forumid_14/Snap5_oyqhcDCKClqn.jpg" border=0> <DIV><IMG src="http://bbs.esrichina-bj.cn/ESRI/images/default/attachimg.gif" border=0></DIV> <DIV><IMG src="http://bbs.esrichina-bj.cn/ESRI/images/attachicons/image.gif" border=0> <a href="http://bbs.esrichina-bj.cn/ESRI/attachment.php?aid=621;nothumb=yes" target="_blank" >Snap5.jpg</A> (16.32 KB)<BR> <DIV class="right smalltxt">2007-1-8 15:39</DIV></DIV><FONT face=Arial><BR><BR>Task</FONT><FONT face=宋体>框架的基本构成就是这样了,祝大家使用愉快。下节将介绍</FONT><FONT face=Arial>TaskResult</FONT><FONT face=宋体>的使用。</FONT><BR></DIV> |
|
|
|
13楼#
发布于:2007-11-04 20:10
<DIV right" align=right></DIV>Server JAVA 讲座 自定义Functionality<BR><BR>
<DIV><FONT size=3><FONT color=black><FONT face=宋体>今天我们来讲讲如何自定义</FONT></FONT><FONT color=black><FONT face=Arial>Functionality</FONT></FONT><FONT color=black><FONT face=宋体>,自定义</FONT></FONT><FONT color=black><FONT face=Arial>Functionality</FONT></FONT><FONT color=black><FONT face=宋体>有很多用处。它最大的用处是可以访问数据源。我们来看看已经存在的</FONT></FONT><FONT color=black><FONT face=Arial>Functionality</FONT></FONT><FONT color=black><FONT face=宋体>:</FONT></FONT><FONT color=black><FONT face=Arial></FONT></FONT><BR><FONT color=black><FONT face=Arial>AGSMapFunctionality, AIMSMapFunctionality, AWSMapFunctionality, EJBMapFunctionality, WMSMapFunctionality</FONT></FONT><FONT color=black><FONT face=宋体>等等等等,查看</FONT></FONT><FONT color=black><FONT face=Arial>GISFunctionality</FONT></FONT><FONT color=black><FONT face=宋体>接口的子类你可以看到</FONT></FONT><FONT color=black><FONT face=Arial>ADF</FONT></FONT><FONT color=black><FONT face=宋体>中更多的</FONT></FONT><FONT color=black><FONT face=Arial>Functionality</FONT></FONT><FONT color=black><FONT face=宋体>。</FONT></FONT><FONT color=black><FONT face=Arial></FONT></FONT><BR><FONT face=宋体>这些</FONT><FONT face=Arial>Functionality</FONT><FONT face=宋体>无一不跟后台的资源有关。我们来看看</FONT><FONT face=Arial>Functionality</FONT><FONT face=宋体>接口的定义:</FONT><BR><FONT face=宋体> </FONT><BR></FONT><FONT size=3><FONT face=宋体><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4135;extra=page%3D5###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4135;extra=page%3D5###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV> <BR>public void initFunctionality(GISResource arg0) {<BR> }<BR>public void destroyFunctionality() {<BR>}<BR>public GISResource getResource() {<BR>return null;<BR>}<BR><BR> <BR> <BR> </DIV></DIV><BR></FONT><BR><BR></FONT><FONT face=宋体><FONT size=3><FONT color=black><FONT face=宋体>每个</FONT></FONT><FONT color=black><FONT face=Arial>functionality</FONT></FONT><FONT color=black><FONT face=宋体>都需要实现</FONT></FONT><FONT color=black><FONT face=Arial>Functionality</FONT></FONT><FONT color=black><FONT face=宋体>这个接口,这个接口里面有三个方法,初始化方法,</FONT></FONT><FONT color=black><FONT face=Arial>destroy</FONT></FONT><FONT color=black><FONT face=宋体>方法和得到资源的方法。</FONT></FONT><FONT color=black><FONT face=Arial>GISResource</FONT></FONT><FONT color=black><FONT face=宋体>对应于一个特定的资源,比如我们最常用的资源就是</FONT></FONT><B><FONT face="Times New Roman">AGSLocalMapResource</FONT></B><B><FONT face=宋体>,</FONT></B><FONT face=宋体>当然也可以是</FONT><B><FONT face="Times New Roman">ArcIMS</FONT></B><FONT face=宋体>的</FONT><B><FONT face="Times New Roman">Resource</FONT></B><FONT face=宋体>,取决于你把这个</FONT><B><FONT face="Times New Roman">functionality</FONT></B><FONT face=宋体>注册到哪个</FONT><B><FONT face="Times New Roman">Resource</FONT></B><FONT face=宋体>中。我们来看一个例子,虽然</FONT><B><FONT face="Times New Roman">Functionality</FONT></B><FONT face=宋体>一般跟资源有关,但是也可以做其它的事情,比如我们这里举一个非常简单的例子,</FONT><B><FONT face="Times New Roman">FixedZoomin</FONT></B><FONT face=宋体>:</FONT><BR></FONT><FONT size=3><FONT face=宋体><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4135;extra=page%3D5###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4135;extra=page%3D5###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>public class DemoFunction implements GISFunctionality {<BR><BR>WebContext ctx;<BR><BR>public void zoomInFunction(){<BR> WebMap wmap = ctx.getWebMap();<BR>WebExtent ext = wmap.getCurrentExtent();<BR> ext.expand(0.5);<BR>wmap.setCurrentExtent(ext);<BR>ctx.refresh();<BR>}<BR><BR>public void initFunctionality(GISResource arg0) {<BR>ctx=arg0.getWebContext();<BR>System.out.print("Demo Function inited");<BR>}<BR><BR>public void destroyFunctionality() {<BR>System.out.print("Demo Function destroyed");<BR>}<BR><BR>public GISResource getResource() {<BR>return null;<BR>}<BR><BR>}</DIV></DIV><BR></FONT><BR></FONT><FONT face=宋体><FONT size=3><FONT color=black><FONT face=宋体>非常简单的一个例子,从</FONT></FONT><FONT color=black><FONT face=Arial>GISResource</FONT></FONT><FONT color=black><FONT face=宋体>里面得到</FONT></FONT><FONT color=black><FONT face=Arial>WebContext</FONT></FONT><FONT color=black><FONT face=宋体>,然后得到</FONT></FONT><FONT color=black><FONT face=Arial>WebMap</FONT></FONT><FONT color=black><FONT face=宋体>,修改</FONT></FONT><FONT color=black><FONT face=Arial>WebMap</FONT></FONT><FONT color=black><FONT face=宋体>的</FONT></FONT><FONT color=black><FONT face=Arial>Extent</FONT></FONT><FONT color=black><FONT face=宋体>,放大功能就实现了。你说非得跟资源有关系,那么确实也有点关系,因为我们还是使用了后台的数据来进行操作。需要说明的是,我们这个代码对于所有的</FONT></FONT><FONT color=black><FONT face=Arial>Resource</FONT></FONT><FONT color=black><FONT face=宋体>都是适用的,不管你后台使用了</FONT></FONT><FONT color=black><FONT face=Arial>ArcIMS</FONT></FONT><FONT color=black><FONT face=宋体>,还是其它的</FONT></FONT><FONT color=black><FONT face=Arial>Resource</FONT></FONT><FONT color=black><FONT face=宋体>。</FONT></FONT><FONT color=black><FONT face=Arial>ADF</FONT></FONT><FONT color=black><FONT face=宋体>的妙处也在这里。</FONT></FONT><FONT color=black><FONT face=Arial></FONT></FONT><BR><FONT face=宋体>写好了这个</FONT><FONT face=Arial>Funcionality</FONT><FONT face=宋体>,那么我们来看看如何部署的,每一个</FONT><FONT face=Arial>Functionality</FONT><FONT face=宋体>都需要部署到某个</FONT><FONT face=Arial>Resource</FONT><FONT face=宋体>中,那么我来看一下,这个</FONT><FONT face=Arial>functionality</FONT><FONT face=宋体>如何来部署:</FONT><BR><BR></FONT><FONT size=3><FONT face=宋体><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4135;extra=page%3D5###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4135;extra=page%3D5###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV><managed-bean><BR> <BR><managed-bean-name>ags1</managed-bean-name><BR> <managed-bean-class>com.esri.adf.web.ags.data.AGSLocalMapResource</managed-bean-class><BR><managed-bean-scope>none</managed-bean-scope><BR><BR><managed-property><BR><BR><property-name>functionalities</property-name><BR><map-entries><BR> <!--……略去其它的functionality-><BR><BR><map-entry><BR> <key>demoFunction</key><BR><value>#{demoFunction}</value><BR> </map-entry><BR></map-entries><BR></managed-property><BR></managed-bean></DIV></DIV><BR></FONT><BR></FONT><FONT face=宋体><FONT size=3><FONT color=black><FONT face=宋体>部署完成了,如何使用呢?随便在你的一个</FONT></FONT><FONT color=black><FONT face=Arial>tools</FONT></FONT><FONT color=black><FONT face=宋体>里面,或者</FONT></FONT><FONT color=black><FONT face=Arial>task</FONT></FONT><FONT color=black><FONT face=宋体>的运行代码里面,添加下面的代码:</FONT></FONT><BR></FONT><FONT color=black><FONT face=Arial><FONT size=3><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4135;extra=page%3D5###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=4135;extra=page%3D5###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>GISResource rec=(GISResource)evt.getWebContext().getResources().get("ags1");<BR>DemoFunction df=(DemoFunction)rec.getFunctionality("demoFunction");<BR>df.zoomInFunction();</DIV></DIV><BR></FONT><BR><FONT color=black><FONT face=Arial><FONT size=10><FONT size=3></FONT></FONT></FONT></FONT><BR></FONT></FONT></FONT></FONT></FONT><BR><FONT face=宋体><FONT face=宋体><FONT face=宋体><FONT color=black><FONT face=Arial><FONT size=3>就可以了。这只是一个简单的例子,而且是绕了一个远的例子。大家可以发掘一下Functionlity的使用方法。在下一次讲座中,我们将详细解释一个对Resource进行操作的例子。</FONT></FONT></FONT></FONT><BR></FONT><BR></FONT></DIV> |
|
|
|
14楼#
发布于:2007-11-04 20:11
Server Java讲座---使用图片和TrueType字体进行标注<BR><BR>
<DIV><FONT face=宋体>直奔主题吧,接上个主题的讲座的内容,讲讲如何用图片进行标注。在前面一个讲座我们已经说明,如何对选中的物体进行高亮显示。而且这一部分工作是在</FONT><FONT face=Arial>ADF</FONT><FONT face=宋体>这一端完成的。那么有的时候,我们进行高亮显示的时候,不仅仅希望只是设置颜色,我们希望能够用图片或者</FONT><FONT face=Arial>truetype</FONT><FONT face=宋体>字体进行标注。比如在犯罪地点放一个坏人之类的功能。</FONT><FONT face=Arial></FONT><BR><FONT face=Arial></FONT><BR><FONT face=宋体>我们来看看实现原理,关键是两个类,</FONT><FONT face=Arial>WebTrueTypeMarkerSymbol</FONT><FONT face=宋体>和</FONT><FONT face=Arial>WebPictureMarkerSymbol</FONT><FONT face=宋体>,没啥好说的,直接用代码来说明吧:</FONT><FONT face=Arial></FONT><BR><FONT face=Arial></FONT><BR><FONT face=宋体>先来看看普通的点标注:</FONT><FONT face=Arial> </FONT><BR><FONT face=Arial><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=5610;extra=page%3D3###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=5610;extra=page%3D3###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>WebPointpt=(WebPoint)arg0.getWebGeometry().toMapGeometry(arg0.getWebContext().getWebMap());<BR><BR>WebSimpleMarkerSymbol markers =null;<BR><BR>markers = new WebSimpleMarkerSymbol();<BR><BR>markers.setAntialiasing(true);<BR><BR>markers.setColor("255,0,0");<BR><BR>markers.setWidth(8);<BR><BR>markers.setOutlineColor("255,0,0");<BR><BR>markers.setMarkerType(WebSimpleMarkerSymbol.CIRCLE); <BR><BR>markers.setPicture(bytInput);<BR><BR>GraphicElement ge=new GraphicElement();<BR><BR>ge.setGeometry(pt);<BR><BR>ge.setSymbol(markers);<BR><BR>WebGraphicsgraphics=arg0.getWebContext().getWebGraphics();<BR><BR>graphics.addGraphics(ge);<BR><BR>arg0.getWebContext().refresh();</DIV></DIV><BR></FONT><BR><FONT face=Arial></FONT><BR><FONT face=宋体>注意</FONT><FONT face=Arial>webgraphicsymbol</FONT><FONT face=宋体>的</FONT><FONT face=Arial>setPicture</FONT><FONT face=宋体>方法的参数不是图片目录,而是图片的二进制数组,所以需要用文件</FONT><FONT face=Arial>IO</FONT><FONT face=宋体>把图片读取进来。当然,如果用户访问量很大,线程就不安全了,大家可以在</FONT><FONT face=Arial>application</FONT><FONT face=宋体>启动时进行读取,放在</FONT><FONT face=Arial>context</FONT><FONT face=宋体>的某个</FONT><FONT face=Arial>attribute</FONT><FONT face=宋体>里面。我原来认为是通过设置路径方式实现,这样又可能可以搞定</FONT><FONT face=Arial>gif</FONT><FONT face=宋体>图形的闪烁,但是现在实验结果是不行。设置图片标注的代码如下:<BR><BR></FONT><FONT face=Arial><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=5610;extra=page%3D3###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=5610;extra=page%3D3###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>WebPointpt=(WebPoint)arg0.getWebGeometry().toMapGeometry(arg0.getWebContext().getWebMap());<BR><BR>//图片在servelet容器里面目录 <BR><BR>String picPath=FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath()+"\\images\\angle.gif";<BR><BR>File myFile = new File(picPath); <BR><BR>FileInputStream myStream= newFileInputStream(myFile); <BR><BR>BufferedInputStream buf = newBufferedInputStream(myStream);<BR><BR>byte[] bytInput = newbyte[(int)myFile.length()];<BR><BR>buf.read(bytInput, 0, (int) myFile.length());<BR><BR>buf.close();<BR><BR>myStream.close();<BR><BR>WebPictureMarkerSymbol markers=newWebPictureMarkerSymbol(); <BR><BR>markers.setPicture(bytInput);<BR><BR>GraphicElement ge=new GraphicElement();<BR><BR>ge.setGeometry(pt);<BR><BR>ge.setSymbol(markers);<BR><BR>WebGraphics graphics=arg0.getWebContext().getWebGraphics();<BR><BR>graphics.addGraphics(ge);<BR><BR>arg0.getWebContext().refresh();</DIV></DIV><BR></FONT><BR><FONT face=Arial></FONT><BR><FONT face=Arial></FONT><BR><FONT face=宋体>在</FONT><FONT face=Arial>jsf</FONT><FONT face=宋体>文件里面添加如下代码,调用图片标注工具,进行测试:</FONT><FONT face=Arial></FONT><BR><FONT face=Arial></FONT><FONT face=Arial><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=5610;extra=page%3D3###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=5610;extra=page%3D3###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV><a:tool id="pointTest"defaultImage="images/point.gif"hoverImage="images/pointU.gif"<BR><BR>selectedImage="images/pointD.gif"clientAction="EsriMapPoint" serverAction="com.cj.ucdemo.GifTestTool"clientPostBack="true"/></DIV></DIV><BR></FONT><BR><FONT face=Arial></FONT><BR><FONT face=宋体>图片标注的结果如下:<BR></FONT><IMG src="http://bbs.esrichina-bj.cn/ESRI/attachments/forumid_14/Snap3_jVfYVtNHV4He.jpg" border=0><FONT face="宋体, MS Song"> </FONT> <DIV><FONT face="宋体, MS Song"><IMG src="http://bbs.esrichina-bj.cn/ESRI/images/default/attachimg.gif" border=0></FONT></DIV> <DIV><FONT face="宋体, MS Song"><IMG src="http://bbs.esrichina-bj.cn/ESRI/images/attachicons/image.gif" border=0></FONT> <a href="http://bbs.esrichina-bj.cn/ESRI/attachment.php?aid=1546;nothumb=yes" target="_blank" >Snap3.jpg</A> (70.05 KB)<BR> <DIV class="right smalltxt">2007-1-31 15:49</DIV></DIV><BR> <P align=center><FONT face=Arial><BR></FONT></P> <P align=center><FONT face=宋体>用图片做</FONT><FONT face=Arial>markSymbol</FONT></P> <P align=left><FONT face=宋体></FONT></P> <P align=left><FONT face=宋体>我们也可以使用TrueType字体里面的矢量字体对图形进行符号化显示,这也是我们经常使用的方法,具体代码如下:</FONT></P> <P align=left><FONT face=Arial><BR><BR></P> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=5610;extra=page%3D3###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=5610;extra=page%3D3###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>webMap=arg0.getWebContext().getWebMap(); WebPointpt=(WebPoint)arg0.getWebGeometry().toMapGeometry(webMap); WebTrueTypeMarkerSymbol trueMarkerSymbol=new WebTrueTypeMarkerSymbol(); //注意使用系统里面已经安装的字体 trueMarkerSymbol.setFontName("ESRITransportation ; Civic");//设置索引 trueMarkerSymbol.setCharacterIndex(8); trueMarkerSymbol.setFontColor("255,0,0"); trueMarkerSymbol.setFontSize(20); trueMarkerSymbol.setFontStyle(WebTrueTypeMarkerSymbol.BOLD);GraphicElement ge=new GraphicElement(); ge.setGeometry(pt); ge.setSymbol(trueMarkerSymbol);WebGraphicsgraphics=arg0.getWebContext().getWebGraphics(); graphics.addGraphics(ge);arg0.getWebContext().refresh();</DIV></DIV><BR></FONT> <br> <P align=left><FONT face=Arial><BR></FONT></P> <P align=left><FONT face=宋体></FONT></P> <P align=left><FONT face=宋体></FONT></P> <P align=left><FONT face=宋体>把上面的代码放在一个点击工具里面,在jsf文件中用如下代码进行调试:</FONT></P> <P align=left><FONT face=宋体></FONT></P> <P align=left><FONT face=Arial><BR></FONT></P> <P align=left><FONT face=Arial><BR><BR></P> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=5610;extra=page%3D3###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=5610;extra=page%3D3###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV> <a:toolid="trueMarkerTest" defaultImage="images/point.gif"hoverImage="images/pointU.gif" selectedImage="images/pointD.gif"clientAction="EsriMapPoint" serverAction="com.cj.ucdemo.TrueTypeMarkerTest"clientPostBack="true"/></DIV></DIV><BR></FONT> <p> <P align=left><FONT face=宋体><BR></FONT></P> <P align=left><FONT face=宋体></FONT></P> <P align=left><FONT face=宋体></FONT></P> <P align=left><FONT face=宋体>TrueType</FONT><FONT face=宋体>字体标注的结果如下图所示:</FONT></P> <P align=left><FONT face=宋体> </FONT> <IMG src="http://bbs.esrichina-bj.cn/ESRI/attachments/forumid_14/Snap2_Q9ZpwL08SAXV.jpg" border=0></P> <DIV><IMG src="http://bbs.esrichina-bj.cn/ESRI/images/default/attachimg.gif" border=0></DIV> <DIV><IMG src="http://bbs.esrichina-bj.cn/ESRI/images/attachicons/image.gif" border=0> <a href="http://bbs.esrichina-bj.cn/ESRI/attachment.php?aid=1545;nothumb=yes" target="_blank" >Snap2.jpg</A> (146.63 KB)<BR> <DIV class="right smalltxt">2007-1-31 15:49</DIV></DIV></DIV> |
|
|
|
15楼#
发布于:2007-11-04 20:11
Server Java讲座-空间查询和高亮显示的实现<BR><BR>
<DIV><FONT face=Arial>ESRI</FONT><FONT face=宋体>在</FONT><FONT face=Arial>JAVA ADF</FONT><FONT face=宋体>中做了很多的工作,其中很重要的一个部分是</FONT><FONT face=Arial>WebQuery</FONT><FONT face=宋体>。</FONT><FONT face=Arial>WebQuery</FONT><FONT face=宋体>用来对</FONT><FONT face=Arial>ArcGISServer</FONT><FONT face=宋体>和</FONT><FONT face=Arial>ArcIMS</FONT><FONT face=宋体>进行查询,然后在</FONT><FONT face=Arial>ADF</FONT><FONT face=宋体>这一端对地图进行渲染。比如说高亮显示,用图片进行渲染等等。</FONT><FONT face=Arial></FONT><BR><FONT face=宋体>我们来看一个简单的选中,并把选中结果进行高亮显示的开发过程。</FONT><FONT face=Arial></FONT><BR><FONT face=Arial></FONT><BR><FONT face=宋体>事实上选中可以用两种方法,第一种是空间选择,第二种是文本查询,这两种选中都可以。</FONT><FONT face=Arial>ESRI</FONT><FONT face=宋体>也提供了进行这两种查询的两个类,这两个类都继承自同一个接口,我们来看一下:</FONT><FONT face=Arial></FONT><BR><FONT face=宋体>这个类是</FONT><FONT face=Arial>IdentifyCriteria, TextCriteria</FONT><FONT face=宋体>,接口是</FONT><FONT face=Arial>QueryCriteria</FONT><FONT face=宋体>,</FONT><FONT face=Arial>QueryCriteria</FONT><FONT face=宋体>可以设置一些比如最大返回记录,是否返回记录的详细信息等设置。如名所示,</FONT><FONT face=Arial>IdentifyCriteria</FONT><FONT face=宋体>用来对数据进行空间查询,我们来看一下,如何使用这个类:</FONT><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=5218;extra=page%3D2###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=5218;extra=page%3D2###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV> <BR><BR>IdentifyCriteria ic = new IdentifyCriteria(geom);</DIV></DIV><BR><FONT face=Arial> geom</FONT><FONT face=宋体>是一个</FONT><FONT face=Arial>WebGeometry</FONT><FONT face=宋体>类的实例,它可以从客户端触发的</FONT><FONT face=Arial>MapEvent</FONT><FONT face=宋体>类中得到。</FONT><FONT face=Arial></FONT><BR><FONT face=Arial></FONT><BR><FONT face=Arial> </FONT><FONT face=宋体>创建了这个</FONT><FONT face=Arial>IdentifyCriteria</FONT><FONT face=宋体>之后,就可以进行查询了,查询是由</FONT><FONT face=Arial>WebQuery</FONT><FONT face=宋体>来完成的,所以先要得到</FONT><FONT face=Arial>WebQuery</FONT><FONT face=宋体>:</FONT><FONT face=Arial></FONT><BR><FONT face=Arial></FONT><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=5218;extra=page%3D2###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=5218;extra=page%3D2###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>WebQuery query = (WebQuery) context.getAttribute("query");</DIV></DIV><BR><FONT face=Arial> </FONT><FONT face=宋体>大家打开</FONT><FONT face=Arial>faces-config.xml</FONT><FONT face=宋体>,</FONT><FONT face=Arial>mapContext</FONT><FONT face=宋体>里面由没有</FONT><FONT face=Arial>query</FONT><FONT face=宋体>,如果有,用上面的代码就可以得到</FONT><FONT face=Arial>WebQuery</FONT><FONT face=宋体>。</FONT><FONT face=Arial></FONT><BR><FONT face=Arial></FONT><BR><FONT face=Arial> </FONT><FONT face=宋体>得到了</FONT><FONT face=Arial>WebQuery</FONT><FONT face=宋体>,就可以大干一场了,可以用下面的办法进行空间查询:</FONT><FONT face=Arial></FONT><BR><FONT face=Arial></FONT><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=5218;extra=page%3D2###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=5218;extra=page%3D2###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV> List<BR><BR>results=query.query(ic,lyrList);</DIV></DIV><BR><FONT face=Arial>ic</FONT><FONT face=宋体>就是</FONT><FONT face=Arial>IdentifyCriteria</FONT><FONT face=宋体>,</FONT><FONT face=Arial>lyrList</FONT><FONT face=宋体>是一个查询目标层的列表,目标层可以是一个,也可以是多个,比如可以用下面的方法得到所有可以查到的图层:</FONT><FONT face=Arial></FONT><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=5218;extra=page%3D2###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=5218;extra=page%3D2###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV><BR><BR>public ArrayList getQueryLayers(){<BR><BR>if(layers != null) return layers;<BR><BR>layers= new ArrayList();<BR><BR>WebQuery wQuery = this.context.getWebQuery();<BR><BR>WebLayerInfo layerInfo = null;<BR><BR>if(wQuery != null){<BR><BR>List layerList = wQuery.getQueryLayers();<BR><BR>for(Iterator iter = layerList.iterator(); iter.hasNext(); ) {<BR> <BR>Object item = (Object) iter.next();<BR> if(item instanceof WebLayerInfo){<BR> layerInfo = (WebLayerInfo)item;<BR> layers.add(new SelectItem(layerInfo, layerInfo.getName()));<BR><BR>}<BR><BR><BR><BR> }<BR><BR><BR><BR> }<BR><BR>return layers;<BR><BR><BR><BR> }</DIV></DIV><BR><FONT face=Arial> </FONT><FONT face=宋体>当然,如果你不想查所有的图层,也可以让用户进行选择,选择哪个需要查询的图层。</FONT><FONT face=Arial></FONT><BR><FONT face=Arial></FONT><BR><FONT face=Arial> </FONT><FONT face=宋体>现在来说说查询返回的结果,我们可以看到结果是一个</FONT><FONT face=Arial>List</FONT><FONT face=宋体>,</FONT><FONT face=Arial>List</FONT><FONT face=宋体>里面是什么?</FONT><FONT face=Arial>List</FONT><FONT face=宋体>里面的对象是</FONT><FONT face=Arial>QueryResult.</FONT><BR><FONT face=Arial></FONT><BR><FONT face=Arial> </FONT><FONT face=宋体>你可以循环得到里面的每一个</FONT><FONT face=Arial>QueryResult</FONT><FONT face=宋体>,并把它们高亮显示:</FONT><FONT face=Arial></FONT><BR><FONT face=Arial></FONT><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=5218;extra=page%3D2###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=5218;extra=page%3D2###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV> <BR><BR>for(int ii=0;ii<results.size();ii++){<BR> <BR>result = (QueryResult) results.get(ii);<BR> <BR>result.highlight();<BR><BR>}</DIV></DIV><BR><FONT face=Arial>Highlight</FONT><FONT face=宋体>采用什么颜色,什么标志进行高亮显示,也是我们可以自己控制的,我个人的喜好是用红色,跟张艺谋一个水准,我们可以把显示符合加到</FONT><FONT face=Arial>query</FONT><FONT face=宋体>里面:</FONT><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=5218;extra=page%3D2###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=5218;extra=page%3D2###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV> <BR><BR>WebSimpleMarkerSymbol markers = query.getPointGraphicSymbol();<BR><BR>if (markers == null ) {<BR> <BR>markers = new WebSimpleMarkerSymbol();<BR> <BR>query.setPointGraphicSymbol(markers);<BR><BR>} <BR><BR><BR><BR>markers.setAntialiasing(true);<BR><BR>markers.setColor("255,0,0");<BR><BR>markers.setOutlineColor("255,0,0");<BR><BR><BR><BR>markers.setMarkerType(WebSimpleMarkerSymbol.CIRCLE);</DIV></DIV><BR><FONT face=Arial></FONT><BR><FONT face=Arial></FONT><BR><FONT face=宋体>同样,你可以设置线的颜色和多边形的颜色。这样就可以按照你需要的颜色进行高亮显示了。</FONT><FONT face=Arial></FONT><BR><FONT face=Arial></FONT><BR><FONT face=Arial> </FONT><FONT face=宋体><FONT size=2>当然</FONT></FONT><FONT face=Arial><FONT size=2>QueryResult</FONT></FONT><FONT face=宋体><FONT size=2>的功能不止能高亮显示,你还可以得到查询结果集的每一个字段的值,用</FONT></FONT><FONT face=Arial><FONT size=2>result.getDetails()</FONT></FONT><FONT face=宋体><FONT size=2>方法即可得到一个</FONT></FONT><FONT face=Arial><FONT size=2>Map</FONT></FONT><FONT face=宋体><FONT size=2>,里面有所有结果的字段名和字段值。</FONT></FONT><FONT size=2><BR></FONT><FONT face=Arial><FONT size=2></FONT></FONT><FONT size=2><BR></FONT><FONT face=Arial><FONT size=2> </FONT></FONT><FONT face=宋体><FONT size=2>最后有说明的是,以上所有的代码对于</FONT></FONT><FONT face=Arial><FONT size=2>ArcGIS Server</FONT></FONT><FONT face=宋体><FONT size=2>和</FONT></FONT><FONT face=Arial><FONT size=2>ArcIMS</FONT></FONT><FONT face=宋体><FONT size=2>都同样适用,</FONT></FONT><FONT face=Arial><FONT size=2>Enjoy</FONT></FONT><FONT face=宋体><FONT size=2>。</FONT></FONT><BR></DIV> |
|
|
|
16楼#
发布于:2007-11-04 20:12
Server Java讲座--动态添加图层数据<BR><BR>
<DIV><FONT face=宋体>有的时候,特别是在做分析时,需要经常添加新的图层到当前的地图中。在这个时候,我们一般采用非池化的</FONT>Server Object<FONT face=宋体>,以保证当前用户的修改不会影响到其他用户。添加图层的代码如下:</FONT><BR><FONT face=宋体>首选,得到</FONT>Resource<FONT face=宋体>和</FONT>mapFunctionality<FONT face=宋体>和</FONT>MapServerInfo<FONT face=宋体>,以备后面使用:</FONT><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=14150;extra=page%3D6###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=14150;extra=page%3D6###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV><BR>AGSLocalMapResource gisrec=(AGSLocalMapResource)webContext.getResources().get("ags1");<BR>AGSMapFunctionalitymapfunction=(AGSMapFunctionality)gisrec.getFunctionalities().get("map");<BR>MapServerPortmapServer=gisrec.getMapServer();<BR>MapServerInfoserverInfo=mapServer.getServerInfo(mapServer.getDefaultMapName());</DIV></DIV><BR><FONT face=宋体>得到</FONT>MapServer<FONT face=宋体>的</FONT>IMap<FONT face=宋体>接口</FONT><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=14150;extra=page%3D6###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=14150;extra=page%3D6###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>IMaptargetMap=gisrec.getLocalMapServer().getMap(gisrec.getLocalMapServer().getDefaultMapName());</DIV></DIV><BR>IMap<FONT face=宋体>接口可以用来添加数据到</FONT>ServerObject<FONT face=宋体>。下面的代码可以用来从文件数据库中读取数据并把它添加到</FONT>IMap<FONT face=宋体>中:</FONT><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=14150;extra=page%3D6###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=14150;extra=page%3D6###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>IWorkspacewk=this.connectToFileDB("D:\\data\\sapdata.gdb",gisrec.getServerContext());<BR>IFeatureClassfc=this.getFeatureclass(wk,"MSA_Intersect");<BR>FeatureLayerflayer=(FeatureLayer)gisrec.getServerContext().createObject(FeatureLayer.getClsid());<BR>flayer.setFeatureClassByRef(fc);<BR>targetMap.addLayer(flayer);</DIV></DIV><BR><FONT face=宋体>里面用到的两个</FONT>function<FONT face=宋体>的代码如下:</FONT><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=14150;extra=page%3D6###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=14150;extra=page%3D6###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>public IWorkspace connectToFileDB(StringfileGDB,IServerContext sc) throws java.net.UnknownHostException,java.io.IOException{<BR>com.esri.arcgis.datasourcesGDB.FileGDBWorkspaceFactoryfactory = (FileGDBWorkspaceFactory)sc.createObject(FileGDBWorkspaceFactory.getClsid());<BR>com.esri.arcgis.geodatabase.IWorkspaceworkspace = factory.openFromFile(fileGDB,0);<BR>return workspace;<BR><BR>}<BR><BR>publicIFeatureClass getFeatureclass(IWorkspace workspace,String fName) throwsjava.net.UnknownHostException, java.io.IOException{<BR>com.esri.arcgis.geodatabase.IEnumDatasetenumDataset =workspace.getDatasets(com.esri.arcgis.geodatabase.esriDatasetType.esriDTFeatureClass);<BR>com.esri.arcgis.geodatabase.IDatasetds = null;<BR>ds= enumDataset.next();<BR>while(ds!= null){<BR>if(ds.getName().endsWith(fName)){<BR>return<BR>new IFeatureClassProxy(ds);<BR>}<BR>ds= enumDataset.next();<BR><BR>}<BR><BR>retur nnull;<BR><BR>}<BR><BR></DIV></DIV><BR><FONT face=宋体>添加图层到</FONT>ServerObject<FONT face=宋体>后,调用下面的代码,让修改生效。调用下面的代码后,将会使</FONT>ServerObject<FONT face=宋体>的状态发生改变。</FONT><BR><BR>gisrec.getLocalMapServer().refreshServerObjects();<BR><BR>Server Object<FONT face=宋体>状态改变后,需要重新得到</FONT>serverInfo<FONT face=宋体>,并且设置</FONT>MapFunctionality<FONT face=宋体>里面的</FONT>LayerDescription<FONT face=宋体>,把新的</FONT>layer<FONT face=宋体>加入进去。这里我们就不手工添加,而是直接把整个</FONT>MapDescription<FONT face=宋体>设置一遍,如下面的代码所示:</FONT><BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=14150;extra=page%3D6###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=14150;extra=page%3D6###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>serverInfo=mapServer.getServerInfo(mapServer.getDefaultMapName());<BR>mapfunction.getMapServerInfo().setDefaultMapDescription(serverInfo.getDefaultMapDescription());<BR>mapfunction.setMapDescription(serverInfo.getDefaultMapDescription());<BR></DIV></DIV><BR><FONT face=宋体>最后,当然要加上一句</FONT>refresh context<FONT face=宋体>的代码</FONT>:<BR><BR> <DIV class=msgbody> <DIV class=msgheader> <DIV class=right><a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=14150;extra=page%3D6###" target="_blank" >[Copy to clipboard]</A> <a href="http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=14150;extra=page%3D6###" target="_blank" >[ - ]</A></DIV>CODE:</DIV> <DIV>webContext.refresh();</DIV></DIV><BR><FONT face=宋体>把此代码放在一个</FONT>tool<FONT face=宋体>或者</FONT>command<FONT face=宋体>中运行即可。这应该是最简洁明了的添加一个图层的代码了。</FONT></DIV> |
|
|
|
17楼#
发布于:2007-11-05 16:56
<P>虽然对java不懂,但觉得这应该是个很好的东西!</P>
<P>一定要顶起来</P> <img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em02.gif" /> |
|
|
上一页
下一页