随笔-18  评论-20  文章-0  trackbacks-0
 
     摘要:   阅读全文
posted @ 2007-08-16 11:09 JavaPoint 阅读(2893) | 评论 (0)编辑 收藏
ArcGIS Server Java讲座---使用图片和TrueType字体进行标注

减小字体 增大字体

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

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

先来看看普通的点标注:


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

WebSimpleMarkerSymbol markers =null;

markers = new WebSimpleMarkerSymbol();

markers.setAntialiasing(true);

markers.setColor("255,0,0");

markers.setWidth(8);

markers.setOutlineColor("255,0,0");

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();



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



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

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

String picPath=FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath()+"\\images\\angle.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文件里面添加如下代码,调用图片标注工具,进行测试:


<a:tool id="pointTest"defaultImage="images/point.gif"hoverImage="images/pointU.gif"

selectedImage="images/pointD.gif"clientAction="EsriMapPoint" serverAction="com.cj.ucdemo.GifTestTool"clientPostBack="true"/>



图片标注的结果如下:
 
 


用图片做markSymbol

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



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();



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




  <a:toolid="trueMarkerTest" defaultImage="images/point.gif"hoverImage="images/pointU.gif"                               selectedImage="images/pointD.gif"clientAction="EsriMapPoint"                               serverAction="com.cj.ucdemo.TrueTypeMarkerTest"clientPostBack="true"/>


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

   

posted @ 2007-08-16 11:07 JavaPoint 阅读(1552) | 评论 (1)编辑 收藏
     摘要:   阅读全文
posted @ 2007-08-16 11:01 JavaPoint 阅读(1906) | 评论 (8)编辑 收藏
     摘要:   阅读全文
posted @ 2007-08-15 15:56 JavaPoint 阅读(2406) | 评论 (1)编辑 收藏
     摘要:   阅读全文
posted @ 2007-08-15 15:28 JavaPoint 阅读(706) | 评论 (0)编辑 收藏
一、Creat task 建立任务
       Creat New Feature  新建要素  (这个不用说了吧)如图1
 
二、Modifu tasks  修改任务
1、Reshape Feature 更新要素(如图2)对多边形进行外部削除
 
2、Cut Poly Featrue 剪切多边形要素
即对多边形要素进行内部分割,①用箭头工作选中多边形;②铅笔工具为可用,选择之;③在多边形内部进行分割。注意:分割操作只在选中多边形的蓝色框区域内有效,其它部分无效。(如图3)
 
 
 3、Mirror Features  镜像要素 (这也不用说了吧,看到图4就明白了)
 
4、Extend/Trim Features  延伸/修剪要素 主要对线要素进行操作
延伸:①用箭头工作选中线;②铅笔工具为可用,选择之;③在线外确定延长所至位置(如图5)。
 
修剪:①用箭头工作选中线;②铅笔工具为可用,选择之;③在线内侧拉出一条剪切线。注:如果按从左至右的顺序拉动剪切线,则保留原线的上部分;如果按从右至左的顺序拉动剪切线,则保留原线的下部分。(如图6)
 
body.clientHeight)this.width=body.clientHeight" border="0">
5、Modify Feature  修改要素。
注:如用铅笔工具时,则是从要素最后一个锚点开始继续画线或修改多边形形状(如图7)。
 
6、Calibrate Route Feature 校准路线(通道)要素
这条俺也没明白,大家一起研究研究呀
7、Modify Portion of a line 修改线的一部分
这条俺也没明白,大家一起研究研究呀
 
三、Topology Tasks  拓扑任务
1、Modify Edge  修改边
这条俺也没明白,大家一起研究研究呀
2、Reshape Edge  改造边
晕,这个也没看明白…..
3、Aruto-complete polygon 自动完成多边形(我的理解是:外接多边形)
(首先非常感谢5楼的MM给我的提示,书归正传body.clientHeight)this.width=body.clientHeight" border="0">)
创建一个和已有多边形共享边界的新多边形时就可以用这个工具。不过要先选中已有的多边形。如图8,操作一下大家就会明白的。
 body.clientHeight)this.width=body.clientHeight" border="0" width="316">
 
四、Other tasks 其它任务
1、Select Feature using a line  用线选择要素(如图8)
 body.clientHeight)this.width=body.clientHeight" border="0" width="316">
2、Select Feature using a Area  用面选择要素
与前一个差不多,不必多说
3、Create 2-piont Line Feature  建立两点线要素
绘制多条不连续的2点直线,不必多说。
posted @ 2007-08-15 15:20 JavaPoint 阅读(2875) | 评论 (1)编辑 收藏
仅列出标题
共2页: 上一页 1 2