android百度地图:在地图上绘制点、线、多边形、圆形和文字

转载自:http://blog.csdn.net/rt77777/article/details/9186691


首先介绍一个类:GraphicsOverlay

这是一个在地图上绘制图形的overlay。GraphicsOverlay通过调用setData(Graphic g) 完成图形绘制。

Graphic 通过构造方法Graphic(Geometry g, Symbol s) 获得。Geometry 是几何图形,而Symbol是几何图形的样式, 

设置线的样式:setLineSymbol(Symbol.Color color, int width) 

设置点的样式:setPointSymbol(Symbol.Color color)

设置面的样式:setSurface(Symbol.Color color, int status, int linewidth)

Geometry 就是一个几何图形,

绘制圆:setCircle(GeoPoint geoPoint, int radius)

绘制矩形:setEnvelope(GeoPoint geoPoint1, GeoPoint geoPoint2)

绘制点:setPoint(GeoPoint geoPoint, int pixel)

绘制多边形:setPolygon(GeoPoint[] geoPoints)

绘制线:setPolyLine(GeoPoint[] geoPoints)

2.1.2还新增了Textoverlay,可以在地图上添加文字。

[java]  view plain copy
  1. TextOverlay textOverlay = new TextOverlay(mMapView);  
  2.         mMapView.getOverlays().add(textOverlay);  
  3.         textOverlay.addText(drawText()); //drawText()返回的是TextItem 类  

具体来看看代码怎么写:

绘制线:

[java]  view plain copy
  1. /** 
  2.      * 绘制折线,该折线状态随地图状态变化 
  3.      * @return 折线对象 
  4.      */  
  5.     public Graphic drawLine(){  
  6.         double mLat = 39.97923;  
  7.         double mLon = 116.357428;  
  8.           
  9.         int lat = (int) (mLat*1E6);  
  10.         int lon = (int) (mLon*1E6);       
  11.         GeoPoint pt1 = new GeoPoint(lat, lon);  
  12.          
  13.         mLat = 39.94923;  
  14.         mLon = 116.397428;  
  15.         lat = (int) (mLat*1E6);  
  16.         lon = (int) (mLon*1E6);  
  17.         GeoPoint pt2 = new GeoPoint(lat, lon);  
  18.         mLat = 39.97923;  
  19.         mLon = 116.437428;  
  20.         lat = (int) (mLat*1E6);  
  21.         lon = (int) (mLon*1E6);  
  22.         GeoPoint pt3 = new GeoPoint(lat, lon);  
  23.         
  24.         //构建线  
  25.         Geometry lineGeometry = new Geometry();  
  26.         //设定折线点坐标  
  27.         GeoPoint[] linePoints = new GeoPoint[3];  
  28.         linePoints[0] = pt1;  
  29.         linePoints[1] = pt2;  
  30.         linePoints[2] = pt3;   
  31.         lineGeometry.setPolyLine(linePoints);  
  32.         //设定样式  
  33.         Symbol lineSymbol = new Symbol();  
  34.         Symbol.Color lineColor = lineSymbol.new Color();  
  35.         lineColor.red = 255;  
  36.         lineColor.green = 0;  
  37.         lineColor.blue = 0;  
  38.         lineColor.alpha = 255;  
  39.         lineSymbol.setLineSymbol(lineColor, 10);  
  40.         //生成Graphic对象  
  41.         Graphic lineGraphic = new Graphic(lineGeometry, lineSymbol);  
  42.         return lineGraphic;  
  43.     }  

绘制多边形:

[java]  view plain copy
  1. /** 
  2.    * 绘制多边形,该多边形随地图状态变化 
  3.    * @return 多边形对象 
  4.    */  
  5.    public Graphic drawPolygon(){  
  6.     double mLat = 39.93923;  
  7.         double mLon = 116.357428;  
  8.     int lat = (int) (mLat*1E6);  
  9.     int lon = (int) (mLon*1E6);       
  10.     GeoPoint pt1 = new GeoPoint(lat, lon);  
  11.     mLat = 39.91923;  
  12.         mLon = 116.327428;  
  13.     lat = (int) (mLat*1E6);  
  14.     lon = (int) (mLon*1E6);  
  15.     GeoPoint pt2 = new GeoPoint(lat, lon);  
  16.     mLat = 39.89923;  
  17.         mLon = 116.347428;  
  18.     lat = (int) (mLat*1E6);  
  19.     lon = (int) (mLon*1E6);  
  20.     GeoPoint pt3 = new GeoPoint(lat, lon);  
  21.     mLat = 39.89923;  
  22.         mLon = 116.367428;  
  23.     lat = (int) (mLat*1E6);  
  24.     lon = (int) (mLon*1E6);  
  25.     GeoPoint pt4 = new GeoPoint(lat, lon);  
  26.     mLat = 39.91923;  
  27.         mLon = 116.387428;  
  28.     lat = (int) (mLat*1E6);  
  29.     lon = (int) (mLon*1E6);  
  30.     GeoPoint pt5 = new GeoPoint(lat, lon);  
  31.       
  32.     //构建多边形  
  33.         Geometry polygonGeometry = new Geometry();  
  34.         //设置多边形坐标  
  35.         GeoPoint[] polygonPoints = new GeoPoint[5];  
  36.         polygonPoints[0] = pt1;  
  37.         polygonPoints[1] = pt2;  
  38.         polygonPoints[2] = pt3;   
  39.         polygonPoints[3] = pt4;   
  40.         polygonPoints[4] = pt5;   
  41.         polygonGeometry.setPolygon(polygonPoints);  
  42.         //设置多边形样式  
  43.         Symbol polygonSymbol = new Symbol();  
  44.         Symbol.Color polygonColor = polygonSymbol.new Color();  
  45.         polygonColor.red = 0;  
  46.         polygonColor.green = 0;  
  47.         polygonColor.blue = 255;  
  48.         polygonColor.alpha = 126;  
  49.         polygonSymbol.setSurface(polygonColor,1,5);  
  50.         //生成Graphic对象  
  51.         Graphic polygonGraphic = new Graphic(polygonGeometry, polygonSymbol);  
  52.         return polygonGraphic;  
  53.    }  

绘制点:
[java]  view plain copy
  1. /** 
  2.     * 绘制单点,该点状态不随地图状态变化而变化 
  3.     * @return 点对象 
  4.     */  
  5.    public Graphic drawPoint(){  
  6.         double mLat = 39.98923;  
  7.         double mLon = 116.397428;  
  8.     int lat = (int) (mLat*1E6);  
  9.     int lon = (int) (mLon*1E6);       
  10.     GeoPoint pt1 = new GeoPoint(lat, lon);  
  11.       
  12.     //构建点  
  13.         Geometry pointGeometry = new Geometry();  
  14.         //设置坐标  
  15.         pointGeometry.setPoint(pt1, 10);  
  16.         //设定样式  
  17.         Symbol pointSymbol = new Symbol();  
  18.         Symbol.Color pointColor = pointSymbol.new Color();  
  19.         pointColor.red = 0;  
  20.         pointColor.green = 126;  
  21.         pointColor.blue = 255;  
  22.         pointColor.alpha = 255;  
  23.         pointSymbol.setPointSymbol(pointColor);  
  24.         //生成Graphic对象  
  25.         Graphic pointGraphic = new Graphic(pointGeometry, pointSymbol);  
  26.         return pointGraphic;  
  27.    }  
绘制圆:
[java]  view plain copy
  1. /** 
  2.     * 绘制圆,该圆随地图状态变化 
  3.     * @return 圆对象 
  4.     */  
  5.    public Graphic drawCircle() {  
  6.     double mLat = 39.90923;   
  7.         double mLon = 116.447428;   
  8.     int lat = (int) (mLat*1E6);  
  9.     int lon = (int) (mLon*1E6);       
  10.     GeoPoint pt1 = new GeoPoint(lat, lon);  
  11.       
  12.     //构建圆  
  13.         Geometry circleGeometry = new Geometry();  
  14.       
  15.         //设置圆中心点坐标和半径  
  16.         circleGeometry.setCircle(pt1, 2500);  
  17.         //设置样式  
  18.         Symbol circleSymbol = new Symbol();  
  19.         Symbol.Color circleColor = circleSymbol.new Color();  
  20.         circleColor.red = 0;  
  21.         circleColor.green = 255;  
  22.         circleColor.blue = 0;  
  23.         circleColor.alpha = 126;  
  24.         circleSymbol.setSurface(circleColor,1,3);  
  25.         //生成Graphic对象  
  26.         Graphic circleGraphic = new Graphic(circleGeometry, circleSymbol);  
  27.         return circleGraphic;  
  28.   }  
绘制文字
[java]  view plain copy
  1. /** 
  2.      * 绘制文字,该文字随地图变化有透视效果 
  3.      * @return 文字对象 
  4.      */  
  5.     public TextItem drawText(){  
  6.         double mLat = 39.86923;  
  7.         double mLon = 116.397428;  
  8.         int lat = (int) (mLat*1E6);  
  9.         int lon = (int) (mLon*1E6);       
  10.         //构建文字  
  11.         TextItem item = new TextItem();  
  12.         //设置文字位置  
  13.         item.pt = new GeoPoint(lat,lon);  
  14.         //设置文件内容  
  15.         item.text = "百度地图SDK";  
  16.         //设文字大小  
  17.         item.fontSize = 40;  
  18.         Symbol symbol = new Symbol();  
  19.         Symbol.Color bgColor = symbol.new Color();  
  20.         //设置文字背景色  
  21.         bgColor.red = 0;  
  22.         bgColor.blue = 0;  
  23.         bgColor.green = 255;  
  24.         bgColor.alpha = 50;  
  25.           
  26.         Symbol.Color fontColor = symbol.new Color();  
  27.         //设置文字着色  
  28.         fontColor.alpha = 255;  
  29.         fontColor.red = 0;  
  30.         fontColor.green = 0;  
  31.         fontColor.blue  = 255;  
  32.         //设置对齐方式  
  33.         item.align = TextItem.ALIGN_CENTER;  
  34.         //设置文字颜色和背景颜色  
  35.         item.fontColor = fontColor;  
  36.         item.bgColor  = bgColor ;   
  37.         return item;  
  38.     }  
添加到图层,显示在地图上:

[java]  view plain copy
  1. GraphicsOverlay graphicsOverlay = new GraphicsOverlay(mMapView);  
  2.         mMapView.getOverlays().add(graphicsOverlay);  
  3.         //添加点  
  4.         graphicsOverlay.setData(drawPoint());  
  5.         //添加折线  
  6.         graphicsOverlay.setData(drawLine());  
  7.         //添加多边形  
  8.         graphicsOverlay.setData(drawPolygon());  
  9.         //添加圆  
  10.         graphicsOverlay.setData(drawCircle());  
  11.         //绘制文字  
  12.         TextOverlay textOverlay = new TextOverlay(mMapView);  
  13.         mMapView.getOverlays().add(textOverlay);  
  14.         textOverlay.addText(drawText());  
  15.         //执行地图刷新使生效  
  16.         mMapView.refresh();  

清除所有图层:

[java]  view plain copy
  1. mMapView.getOverlays().clear();  

你可能感兴趣的:(android)