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