ArcGIS Server Java講座---使用圖片和TrueType字體進(jìn)行標(biāo)注 |
直奔主題吧,接上個(gè)主題的講座的內(nèi)容,講講如何用圖片進(jìn)行標(biāo)注。在前面一個(gè)講座我們已經(jīng)說明,如何對選中的物體進(jìn)行高亮顯示。而且這一部分工作是在ADF這一端完成的。那么有的時(shí)候,我們進(jìn)行高亮顯示的時(shí)候,不僅僅希望只是設(shè)置顏色,我們希望能夠用圖片或者truetype字體進(jìn)行標(biāo)注。比如在犯罪地點(diǎn)放一個(gè)壞人之類的功能。
我們來看看實(shí)現(xiàn)原理,關(guān)鍵是兩個(gè)類,WebTrueTypeMarkerSymbol和WebPictureMarkerSymbol,沒啥好說的,直接用代碼來說明吧: 先來看看普通的點(diǎn)標(biāo)注: 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的setPicture方法的參數(shù)不是圖片目錄,而是圖片的二進(jìn)制數(shù)組,所以需要用文件IO把圖片讀取進(jìn)來。當(dāng)然,如果用戶訪問量很大,線程就不安全了,大家可以在application啟動(dòng)時(shí)進(jìn)行讀取,放在context的某個(gè)attribute里面。我原來認(rèn)為是通過設(shè)置路徑方式實(shí)現(xiàn),這樣又可能可以搞定gif圖形的閃爍,但是現(xiàn)在實(shí)驗(yàn)結(jié)果是不行。設(shè)置圖片標(biāo)注的代碼如下: 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文件里面添加如下代碼,調(diào)用圖片標(biāo)注工具,進(jìn)行測試: <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"/> 圖片標(biāo)注的結(jié)果如下: ![]() 用圖片做markSymbol 我們也可以使用TrueType字體里面的矢量字體對圖形進(jìn)行符號化顯示,這也是我們經(jīng)常使用的方法,具體代碼如下:
把上面的代碼放在一個(gè)點(diǎn)擊工具里面,在jsf文件中用如下代碼進(jìn)行調(diào)試:
TrueType字體標(biāo)注的結(jié)果如下圖所示: |