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

          減小字體 增大字體

          直奔主題吧,接上個主題的講座的內容,講講如何用圖片進行標注。在前面一個講座我們已經說明,如何對選中的物體進行高亮顯示。而且這一部分工作是在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)在實驗結果是不行。設置圖片標注的代碼如下:



          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(); //注意使用系統(tǒ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文件中用如下代碼進行調試:




            <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 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());
          第一行代碼聲明個對象沒有空格,真是佩服你們了,連錯誤都一樣.
          垃圾東西!  回復  更多評論
            
          主站蜘蛛池模板: 武陟县| 鸡西市| 台东市| 虞城县| 晋宁县| 晋城| 曲沃县| 陇南市| 诸城市| 湘西| 巴彦县| 屏山县| 泉州市| 莒南县| 海南省| 喀喇| 华坪县| 民和| 克拉玛依市| 宣汉县| 垫江县| 惠州市| 龙南县| 界首市| 龙胜| 原阳县| 鄂尔多斯市| 兴隆县| 阿图什市| 仲巴县| 高唐县| 灵台县| 寿光市| 辽阳县| 色达县| 温宿县| 如皋市| 宾阳县| 靖边县| 灵丘县| 武城县|