隨筆-18  評論-20  文章-0  trackbacks-0
          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è)類,WebTrueTypeMarkerSymbolWebPictureMarkerSymbol,沒啥好說的,直接用代碼來說明吧:

          先來看看普通的點(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();



          注意webgraphicsymbolsetPicture方法的參數(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)常使用的方法,具體代碼如下:



          webMap=arg0.getWebContext().getWebMap(); WebPointpt=(WebPoint)arg0.getWebGeometry().toMapGeometry(webMap); WebTrueTypeMarkerSymbol trueMarkerSymbol=new WebTrueTypeMarkerSymbol(); //注意使用系統(tǒng)里面已經(jīng)安裝的字體 trueMarkerSymbol.setFontName("ESRITransportation & Civic");//設(shè)置索引 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();



          把上面的代碼放在一個(gè)點(diǎn)擊工具里面,在jsf文件中用如下代碼進(jìn)行調(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字體標(biāo)注的結(jié)果如下圖所示:

             

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

          評論:
          # re: ArcGIS Server Java講座---使用圖片和TrueType字體進(jìn)行標(biāo)注 2008-09-04 14:18 | 你是垃圾
          在網(wǎng)上看到很多很這一模一樣的文章,你們有點(diǎn)原創(chuàng)好不好!
          WebPointpt=(WebPoint)arg0.getWebGeometry().toMapGeometry(arg0.getWebContext().getWebMap());
          第一行代碼聲明個(gè)對象沒有空格,真是佩服你們了,連錯(cuò)誤都一樣.
          垃圾東西!  回復(fù)  更多評論
            
          主站蜘蛛池模板: 新乡县| 锡林浩特市| 铁岭市| 商水县| 德江县| 舟山市| 侯马市| 桑日县| 龙海市| 咸丰县| 绥江县| 河间市| 富阳市| 莆田市| 武夷山市| 威海市| 江门市| 南丹县| 商洛市| 砚山县| 原阳县| 泰顺县| 吉林省| 罗山县| 固阳县| 孟连| 白玉县| 托克逊县| 静乐县| 商丘市| 阜新| 筠连县| 天门市| 莲花县| 城口县| 陈巴尔虎旗| 工布江达县| 吉林市| 新余市| 夏津县| 阿勒泰市|