隨筆-18  評論-20  文章-0  trackbacks-0
          ArcGIS Server Java講座---使用圖片和TrueType字體進行標注

          減小字體 增大字體

          直奔主題吧,接上個主題的講座的內(nèi)容,講講如何用圖片進行標注。在前面一個講座我們已經(jīng)說明,如何對選中的物體進行高亮顯示。而且這一部分工作是在ADF這一端完成的。那么有的時候,我們進行高亮顯示的時候,不僅僅希望只是設置顏色,我們希望能夠用圖片或者truetype字體進行標注。比如在犯罪地點放一個壞人之類的功能。

          我們來看看實現(xiàn)原理,關鍵是兩個類,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方法的參數(shù)不是圖片目錄,而是圖片的二進制數(shù)組,所以需要用文件IO把圖片讀取進來。當然,如果用戶訪問量很大,線程就不安全了,大家可以在application啟動時進行讀取,放在context的某個attribute里面。我原來認為是通過設置路徑方式實現(xiàn),這樣又可能可以搞定gif圖形的閃爍,但是現(xiàn)在實驗結(jié)果是不行。設置圖片標注的代碼如下:



          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)用圖片標注工具,進行測試:


          <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"/>



          圖片標注的結(jié)果如下:
           
           


          用圖片做markSymbol

          我們也可以使用TrueType字體里面的矢量字體對圖形進行符號化顯示,這也是我們經(jīng)常使用的方法,具體代碼如下:



          webMap=arg0.getWebContext().getWebMap(); WebPointpt=(WebPoint)arg0.getWebGeometry().toMapGeometry(webMap); WebTrueTypeMarkerSymbol trueMarkerSymbol=new WebTrueTypeMarkerSymbol(); //注意使用系統(tǒng)里面已經(jīng)安裝的字體 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文件中用如下代碼進行調(diào)試:




            <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字體標注的結(jié)果如下圖所示:

             

          posted on 2007-08-16 11:07 JavaPoint 閱讀(1569) 評論(1)  編輯  收藏 所屬分類: ArcGis

          評論:
          # re: ArcGIS Server Java講座---使用圖片和TrueType字體進行標注 2008-09-04 14:18 | 你是垃圾
          在網(wǎng)上看到很多很這一模一樣的文章,你們有點原創(chuàng)好不好!
          WebPointpt=(WebPoint)arg0.getWebGeometry().toMapGeometry(arg0.getWebContext().getWebMap());
          第一行代碼聲明個對象沒有空格,真是佩服你們了,連錯誤都一樣.
          垃圾東西!  回復  更多評論
            
          主站蜘蛛池模板: 铜山县| 湖口县| 承德市| 凤山县| 章丘市| 尚志市| 普洱| 青州市| 平陆县| 江都市| 大埔区| 射阳县| 上杭县| 太和县| 大渡口区| 额尔古纳市| 西和县| 怀安县| 贡嘎县| 崇州市| 兖州市| 乌海市| 富蕴县| 习水县| 乳山市| 霍林郭勒市| 公主岭市| 祁连县| 福清市| 河池市| 安徽省| 思南县| 张家口市| 文化| 当阳市| 湖南省| 黄平县| 那曲县| 景东| 同仁县| 青铜峡市|