最近整理了一下symbol的使用方法,今天匆匆的来写一下这些东西
symbol是对Graphic对象进行符号样式设置的接口,所有的符号样式类都实现了symbol接口。关系如下图:
一、PictureMarkerSymbol
PictureMarkerSymbol是图片要素,和百度地图的那个定位标识较为相似。可以把你的图片放到GraphicLayer图层中。并且可以设置旋转角度和位置偏移使用代码如下:
这里有四个参数,layer指你的GraphicLayer图层,这个图层需要在你初始化的时候就要添加到mapview上去。第二个是point对象,也就是你的位置,你需要在那个地方加入这个要素。第三个是int类型的参数,你可以从drawable文件里面获取。第四个主要是用于图片加载的,传递的上下文,一般是activity对象,可以使用getApplicationContext();
public static void doPicture(GraphicsLayer layer,Point point,int ImageResource,Context context){ PictureMarkerSymbol symbol=new PictureMarkerSymbol(context.getResources().getDrawable(ImageResource)); Graphic grp=new Graphic(point, symbol); layer.addGraphic(grp); }二、SimpleMarkerSymbol SimpleMarkerSymbol是一个比较常用的要素,它和PictureMarkerSymbol使用方式基本一样,唯一不同的是PictureMarkerSymbol使用图片来代替要素,SimpleMarkerSymbol渲染成矢量点来代替要素,它可以设置点的样式、大小、颜色和类型。用法如下 这里的三个参数很明显,我就不说了,跟上面的基本一样,最后一个是颜色。这里我们说一下SimleMarkerSymbol的三个参数。第一个参数我们都能看的出来是颜色,第二个参数这里表示的是大小,就是这个点的大小。第三个是样式,我们之前在上一篇的查询Geodatabase时见到过这个代码,我们具体来说一下吧。 public static void doPoint(GraphicsLayer layer,Point point,int color){ SimpleMarkerSymbol smsMarkerSymbol=new SimpleMarkerSymbol(color, 10, STYLE.CIRCLE); Graphic grp=new Graphic(point,smsMarkerSymbol); layer.addGraphic(grp); } 我们这里来提一下如何改变样式 我们看下面的代码: public static void doPoint(GraphicsLayer layer,Point point,int[] color,STYLE style){ if(color.length<2){ Log.e("Color Array Error", "Color array length less than two"); return; } SimpleMarkerSymbol smsMarkerSymbol=new SimpleMarkerSymbol(color[0], 10, style); smsMarkerSymbol.setOutline(new SimpleLineSymbol(color[1], 1)); Graphic grp=new Graphic(point,smsMarkerSymbol); layer.addGraphic(grp); } 这里我们看到,与上面不同的是我们这次的color是个数组了,不过这没什么,最主要的还是要看一下这个style,这是要素的一些样式有五个样式如下图: 我想大家可以根据样式的名字就能知道是什么意思了。分别是圆形、十字、菱形、方形、三角。这里smsMarkerSymbol.setOutline(newSimpleLineSymbol(color[1], 1));是指外边框的颜色,所以我们为什么要选择两种颜色也就是因为这个,当然这个也是非必须的,大家使用的时候可以不必选择。 三、SimpleLineSymbol
SimpleLineSymbol 是针对线状要素的 Graphic 对象进行样式设置的类,通过它可以设置线状要素的样式, 包括线型、线颜色、线宽和线的透明度等
具体用法如下: 我们画线段时需要添加的是ployLine对象,我们ployLine对象有两种方式添加线段,第一种方式就是我们下面的方式去做,新new一个Line对象,并添加两个点,然后将Line对象添加到polyLine里面。还有一种方式是通过startPath和lineto方法去直接添加要素。同时我们也可以设置透明度(setAlpha方法)。这里代码就不做演示,大家可以去试试。这里的color数组如果是1 的话默认两端的点是红色,如果有两种颜色就是会设置数组的第二个颜色。 public static void doLine(GraphicsLayer layer,Point[] point,int color[]){ if(point.length>=2&&color.length>=1){ Polyline ployLine=new Polyline(); switch(color.length){ case 1: doPoint(layer,point,Color.RED); break; case 2: doPoint(layer,point,color[1]); break; } Line line=new Line(); line.setStart(point[0]); line.setEnd(point[1]); ployLine.addSegment(line, true); SimpleLineSymbol lineSymbol=new SimpleLineSymbol(color[0], 7,SimpleLineSymbol.STYLE.SOLID); Graphic gra=new Graphic(ployLine, lineSymbol); layer.addGraphic(gra); }else{ Log.e("point array or color array error", "point array less than three or color array less than one"); } } 四、SimpleFillSymbolSimpleFillSymbol 是对于面状要素的 Graphic 对象进行样式设置的类,通过它设置面状要素的填充颜色和透明度,另外也可以为面状要素添加边界的样式设置,SimpleFillSymbol 用法非常简单,如下:
这里我们使用的是Polygon对象来创建一个面型要素,我们通过多个点来得到一个面,使用上述画面的第二种方式去做,但是最后lineTo必须要形成闭合的路径。这里也可以设置外边框的颜色和粗细,以及内部的透明度。
public static void doPolygon(GraphicsLayer layer,Point[] point,int[] color){ if(point!=null&&point.length>=3){ Polygon poly=new Polygon(); doPoint(layer, point, color[0]); poly.startPath(point[0]); for(int j=1;j<point.length;j++){ poly.lineTo(point[j]); } poly.lineTo(point[0]); SimpleFillSymbol fillSymbol=new SimpleFillSymbol(color[0]); fillSymbol.setAlpha(50); fillSymbol.setOutline(new SimpleLineSymbol(color[1],1)); Graphic gra=new Graphic(poly, fillSymbol); layer.addGraphic(gra); }else{ Log.e("doPolygon error", "point length less than three"); } }
五、TextSymbol
最后我们来看一下画文本要素,如果大家其他的看过之后这里的文本要素应该不会很难,和画单点(点状要素)一样。代码如下:
这些代码非常简单,我就不做介绍了,TextSymbol里面三个参数是文字的大小、文字内容、颜色。
public static void doText(GraphicsLayer layer,Point point,int color,String text){ TextSymbol symbol=new TextSymbol(12, text, color); Graphic grp=new Graphic(point, symbol); layer.addGraphic(grp); } 总结:说了这么多相信大家一定能了解symbol,symbol在arcgis里面是不可缺少的,我们平时添加一个点,或者是在地图上画上线段都会用到他,这里我们明确的说一下,想要在地图上画一个要素我们最少需要这个要素的位置、layer、symbol。这三个里面最难的就是symbol了,因为里面需要你去设置画点、线、面、颜色,可能还要涉及到类型、透明度这些属性,不过这些并不是很难。如果要画多个要素这里也是可以的,arcgis基本上都提供了同时画多个要素的方法,这里大家就自己去试试,我不去啰嗦,今天symbol先介绍到这里,下一篇介绍一下在线和离线地图的加载,以及mapview的Linener