直奔主题吧,接上个主题的讲座的内容,讲讲如何用图片进行标注。在前面一个讲座我们已经说明,如何对选中的物体进行高亮显示。而且这一部分工作是在ADF这一端完成的。那么有的时候,我们进行高亮显示的时候,不仅仅希望只是设置颜色,我们希望能够用图片或者truetype字体进行标注。比如在犯罪地点放一个坏人之类的功能。
我们来看看实现原理,关键是两个类,WebTrueTypeMarkerSymbol和WebPictureMarkerSymbol,没啥好说的,直接用代码来说明吧:
先来看看普通的点标注:
WebPoint pt=(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方法的参数不是图片目录,而是图片的二进制数组,所以需要用文件IO把图片读取进来。当然,如果用户访问量很大,线程就不安全了,大家可以在application启动时进行读取,放在context的某个attribute里面。我原来认为是通过设置路径方式实现,这样又可能可以搞定gif图形的闪烁,但是现在实验结果是不行。设置图片标注的代码如下:
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"/>
我们也可以使用TrueType字体里面的矢量字体对图形进行符号化显示,这也是我们经常使用的方法,具体代码如下:
webMap=arg0.getWebContext().getWebMap();
WebPointpt=(WebPoint)arg0.getWebGeometry().toMapGeometry(webMap); WebTrueTypeMarkerSymbol trueMarkerSymbol=new WebTrueTypeMarkerSymbol(); //注意使用系统里面已经安装的字体
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"/>
分享到:
相关推荐
5、使用图片和TrueType字体进行标注 10 6、Server Java讲座-----扩展Tasks框架 13 7、Server Java 开发实战---自定义command 19 8、 ArcGIS Server Java 讲座--ADF 体系结构 第一部分 21 9、ArcGIS Server JAVA讲座-...
- 使用图片和TrueType字体进行标注,以及如何通过Ajax获取地图比例尺等,这些都是提高用户体验的重要技术。 - 讲座还涉及了如何在客户端和服务器端处理Ajax请求,实现地图操作和用户交互的动态响应。 6. **SOA和...
- 讲座涵盖了自定义工具的开发,如使用图片和TrueType字体进行标注,以及扩展Tasks框架,这展示了如何根据项目需求定制 ArcGIS Server的功能。 4. **JSF与ADF的结合**: - 讲座介绍了如何在ArcGIS Server Java ...
在IT领域,尤其是在图形处理和GUI(图形用户界面)开发中,TrueType字体是一种广泛使用的标准,它提供了高质量的文字渲染。TrueType字体以其基于数学曲线的轮廓定义而著名,这使得它们可以在任何尺寸下保持清晰,不...
### 如何在Zebra打印机上下载和使用TrueType或External字体 #### 一、背景介绍 斑马(Zebra)打印机因其稳定性和高质量打印而在条形码打印领域内广受好评。然而,对于需要定制化标签设计的应用场景而言,内置字体的...
OpenType和TrueType是两种广泛使用的字体格式,而C#编程语言则提供了强大的工具来处理这些字体资源。本篇文章将深入探讨C#如何实现自动识别OpenType和TrueType字体,并将其编译成SWF(ShockWave Flash)文件。 首先...
通过阅读这些文件,我们可以学习如何在实际项目中有效地使用和显示TrueType字体,从而提升应用程序的用户界面质量。 总之,TrueType字体技术的使用让开发者能够创建具有高质量文本渲染的跨平台应用程序。理解...
在IT领域,尤其是在图形编程和游戏开发中,处理字体渲染是一项关键任务。stb_truetype库是由Noel Cower创建...通过研究“stb-truetype-example”,我们可以掌握如何利用这个库来优化我们的字体渲染代码,提升用户体验。
国内首篇利用freetype的跨平台truetype字体真正轮廓(非位图)获取(带完整qt工程代码).rar 国内首篇利用freetype的跨平台truetype字体真正轮廓(非位图)获取(带完整qt工程代码).rar 国内首篇利用freetype的跨平台...
在IT行业中,尤其是在Linux和Java开发环境中,遇到字体缺失的问题是常见的挑战。这不仅影响了程序的正常运行,还可能对界面展示造成困扰。本文将详细介绍如何解决在Linux和Java环境下缺少字体的问题。 首先,我们要...
在本文中,我们将深入探讨如何使用FreeType库在Qt框架下实现跨平台的TrueType字体渲染,重点关注非位图的真正轮廓处理。FreeType是一个开放源码库,专门设计用于处理各种字体格式,包括TrueType、OpenType和Post...
在Windows和Mac OS操作系统中,TrueType字体得到了广泛支持,这也使得FixedSys字体在现代计算机环境中依然可以使用。 在Visual Studio 2010中,开发者可以选择不同的字体来优化代码编辑体验。FixedSys由于其等宽...
综上所述,提取TrueType字形数据涉及到对字体文件格式的深入理解,以及使用编程语言和图形库实现轮廓的提取和绘制。通过研究提供的源代码,我们可以进一步了解这个过程的细节,并学习如何在实际项目中应用这些技术。
7. **下载和使用**:用户可以直接下载提供的宋体字体文件,并根据操作系统的指示进行安装,之后便可以在各种应用程序中使用这款字体。 总的来说,这个压缩包提供了一个免费、多平台通用且不侵犯版权的TrueType格式...
下面我们将详细探讨如何在Java中添加水印图片以及如何使用字体文件。 首先,我们要了解Java中的`java.awt`和`javax.imageio`这两个包,它们提供了处理图像的基础API。`java.awt.Graphics2D`类是核心,它允许我们在...