基于java的arcgis server开发(3)

2019-08-30 22:53

2. JSP的Tag中clientAction写入客户端鼠标选择的方式: EsriMapPoint 点选 EsriMapLine 线 EsriMapRectangle 四边形 EsriMapCircle 圆 EsriMapOval 椭圆 EsriMapPolyline 多线 EsriMapPolygon 多边形 EsriMapPan 移动 对应Server端的几何形状(附图)

3. MapEvent代表客户端进行操作产生的事件,一般会用到MapEvent的 public WebGeometry getWebGeometry()函数来得到客户端输入的几何形状 //Returns the WebGeometry in screen coordinates corresponding to //the client action performed by the user.

来获得客户端产生的形状,这些Geomentry一般都是screen坐标,需要用toMapGeometry(WebMap)转换为 地图坐标 。

一般操作如下:

public void myToolMethod(MapEvent event) { WebContext ctx = event.getWebContext();

WebGeometry screenGeom = event.getWebGeometry();

WebGeometry mapGeom = screen.toMapGeometry(ctx.getWebMap()); ... }

4. JSP的Tag中clientPostBack

l 设置为false,刷新地图,并且刷新页面; l 设置为true,只刷新地图,不刷新页面;

5、使用图片和TrueType字体进行标注

直奔主题吧,接上个主题的讲座的内容,讲讲如何用图片进行标注。在前面一个讲座我们已经

9

说明,如何对选中的物体进行高亮显示。而且这一部分工作是在ADF这一端完成的。那么有的时候,我们进行高亮显示的时候,不仅仅希望只是设置颜色,我们希望能够用图片或者truetype字体进行标注。比如在犯罪地点放一个坏人之类的功能。

我们来看看实现原理,关键是两个类,WebTrueTypeMarkerSymbol和WebPictureMarkerSymbol,没啥好说的,直接用代码来说明吧:

先来看看普通的点标注:

WebPointpt=(WebPoint)arg0.getWebGeometry().toMapGeometry(arg0.getWebContext().getWebMap());

WebSimpleMarkerSymbol markers =null;

markers = new WebSimpleMarkerSymbol();

markers.setAntialiasing(true);

markers.setColor(\

markers.setWidth(8);

markers.setOutlineColor(\

markers.setMarkerType(WebSimpleMarkerSymbol.CIRCLE);

markers.setPicture(bytInput);

GraphicElement ge=new GraphicElement();

ge.setGeometry(pt);

ge.setSymbol(markers);

WebGraphicsgraphics=arg0.getWebContext().getWebGraphics();

graphics.addGraphics(ge);

arg0.getWebContext().refresh();

注意webgraphicsymbol的setPicture方法的参数不是图片目录,而是图片的二进制数组,所以需要用文件IO把图片读取进来。当然,如果用户访问量很大,线程就不安全了,大家可以在application启动时进行读取,放在context的某个attribute里面。我原来认为是通过设置路径方式实现,这样

10

又可能可以搞定gif图形的闪烁,但是现在实验结果是不行。设置图片标注的代码如下:

WebPointpt=(WebPoint)arg0.getWebGeometry().toMapGeometry(arg0.getWebContext().getWebMap());

//图片在servelet容器里面目录

String

picPath=FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath()+\e.gif\

File myFile = new File(picPath);

FileInputStream myStream= newFileInputStream(myFile);

BufferedInputStream buf = newBufferedInputStream(myStream);

byte[] bytInput = newbyte[(int)myFile.length()];

buf.read(bytInput, 0, (int) myFile.length());

buf.close();

myStream.close();

WebPictureMarkerSymbol markers=newWebPictureMarkerSymbol();

markers.setPicture(bytInput);

GraphicElement ge=new GraphicElement();

ge.setGeometry(pt);

ge.setSymbol(markers);

WebGraphics graphics=arg0.getWebContext().getWebGraphics();

graphics.addGraphics(ge);

arg0.getWebContext().refresh();

在jsf文件里面添加如下代码,调用图片标注工具,进行测试:

11

selectedImage=\serverAction=\

图片标注的结果如下:

用图片做markSymbol

我们也可以使用TrueType字体里面的矢量字体对图形进行符号化显示,这也是我们经常使用的方法,具体代码如下:

webMap=arg0.getWebContext().getWebMap();

WebPointpt=(WebPoint)arg0.getWebGeometry().toMapGeometry(webMap); WebTrueTypeMarkerSymbol trueMarkerSymbol=new WebTrueTypeMarkerSymbol(); //注意使用系统里面已经安装的字体 trueMarkerSymbol.setFontName(\设置索引

trueMarkerSymbol.setCharacterIndex(8); trueMarkerSymbol.setFontColor(\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();

把上面的代码放在一个点击工具里面,在jsf文件中用如下代码进行调试:

12

defaultImage=\ selectedImage=\ serverAction=\o.TrueTypeMarkerTest\

TrueType字体标注的结果如下图所示:

6、Server Java讲座-----扩展Tasks框架

Tasks框架是一个很有意思的东西。如果你对Tasks框架还没有概念,你可以参考一下web map application那个Sample,左边浮动的放大工具,查询工具都是用Tasks框架构成。有人会问,既然已经有了command和tools,为什么还需要tasks呢?事实上tasks的目的是不同的;我们可以看一下web map application,可以看到,相同类型的button和toos组合在一起,组成一个逻辑单元,这就是tasks的选择条件。

我们来看看如何编写Tasks,编写Tasks是非常有意思的事情。Tasks跟tools一样,也是一个普通的Java类即可,这个Java类可以从Object直接继承。请看下面的Task的例子:

1public class JSTasks { public void doSomething(){

13

2


基于java的arcgis server开发(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:混凝土收缩徐变预测

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: