直奔主题吧,接上个主题的讲的内容,讲讲如何用图片进行标注。在前面一个讲座我们已l说明,如何寚w中的物体进行高亮显C。而且q一部分工作是在ADFq一端完成的。那么有的时候,我们q行高亮昄的时候,不仅仅希望只是设|颜Ԍ我们希望能够用图片或?/font>truetype字体q行标注。比如在犯罪地点放一个坏Zcȝ功能?/font>
我们来看看实现原理,关键是两个类Q?/font>WebTrueTypeMarkerSymbol?/font>WebPictureMarkerSymbolQ没啥好说的Q直接用代码来说明吧Q?/font>
先来看看普通的Ҏ注:
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();
注意webgraphicsymbol?/font>setPictureҎ的参C是图片目录,而是囄的二q制数组Q所以需要用文gIO把图片读取进来。当Ӟ如果用户讉K量很大,U程׃安全了,大家可以?/font>application启动时进行读取,攑֜context的某?/font>attribute里面。我原来认ؓ是通过讄路径方式实现Q这样又可能可以搞定gif囑Ş的闪烁,但是现在实验l果是不行。设|图片标注的代码如下Q?br>
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();
?/font>jsf文g里面d如下代码Q调用图片标注工Pq行试Q?/font>
<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字体里面的矢量字体对囑Şq行W号化显C,q也是我们经怋用的ҎQ具体代码如下:
webMap=arg0.getWebContext().getWebMap(); WebPointpt=(WebPoint)arg0.getWebGeometry().toMapGeometry(webMap); WebTrueTypeMarkerSymbol trueMarkerSymbol=new WebTrueTypeMarkerSymbol(); //注意使用pȝ里面已经安装的字?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();
把上面的代码攑֜一个点d具里面,在jsf文g中用如下代码q行调试Q?/font>
<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字体标注的结果如下图所C: