随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

我们可以在地图上绘制各种自定义的图形,包括点、折线、圆、多边形等等,尤其绘制点和折线非常实用,点可以用来标识所处的位置,折线可以用来描述走过的轨迹,结合前面GPS定位功能可以做出一些非常有意思的应用,下面应用百度Demo实现绘制的基本功能,代码如下:

Activity:

package com.home;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;import com.baidu.mapapi.map.Geometry;
import com.baidu.mapapi.map.Graphic;
import com.baidu.mapapi.map.GraphicsOverlay;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Symbol;
import com.baidu.mapapi.map.TextItem;
import com.baidu.mapapi.map.TextOverlay;
import com.baidu.platform.comapi.basestruct.GeoPoint;/*** 此demo用来展示如何在地图上用GraphicsOverlay添加点、线、多边形、圆 同时展示如何在地图上用TextOverlay添加文字* */
public class GeometryActivity extends Activity implements OnClickListener {// 地图相关private MapView mMapView = null;private Button resetBtn = null;private Button clearBtn = null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_geometry);CharSequence titleLable = "自定义绘制功能";setTitle(titleLable);// 初始化地图mMapView = (MapView) findViewById(R.id.bmapView);mMapView.getController().setZoom(12.5f);mMapView.getController().enableClick(true);// UI初始化clearBtn = (Button) findViewById(R.id.btn_clear);resetBtn = (Button) findViewById(R.id.btn_reset);clearBtn.setOnClickListener(this);resetBtn.setOnClickListener(this);resetBtn.setEnabled(false);// 界面加载时添加绘制图层addCustomElementsDemo();}@Overridepublic void onClick(View v) {if (v == clearBtn) {clearClick();clearBtn.setEnabled(false);resetBtn.setEnabled(true);}if (v == resetBtn) {resetClick();clearBtn.setEnabled(true);resetBtn.setEnabled(false);}}/*** 清除所有图层*/public void clearClick() {mMapView.getOverlays().clear();}/*** 添加绘制元素*/public void resetClick() {addCustomElementsDemo();}/*** 添加点、线、多边形、圆、文字*/public void addCustomElementsDemo() {GraphicsOverlay graphicsOverlay = new GraphicsOverlay(mMapView);mMapView.getOverlays().add(graphicsOverlay);// 添加点graphicsOverlay.setData(drawPoint());// 添加折线graphicsOverlay.setData(drawLine());// 添加多边形graphicsOverlay.setData(drawPolygon());// 添加圆graphicsOverlay.setData(drawCircle());// 绘制文字TextOverlay textOverlay = new TextOverlay(mMapView);mMapView.getOverlays().add(textOverlay);textOverlay.addText(drawText());// 执行地图刷新使生效mMapView.refresh();}/*** 绘制折线,该折线状态随地图状态变化* * @return 折线对象*/public Graphic drawLine() {double mLat = 39.97923;double mLon = 116.357428;int lat = (int) (mLat * 1E6);int lon = (int) (mLon * 1E6);GeoPoint pt1 = new GeoPoint(lat, lon);mLat = 39.94923;mLon = 116.397428;lat = (int) (mLat * 1E6);lon = (int) (mLon * 1E6);GeoPoint pt2 = new GeoPoint(lat, lon);mLat = 39.97923;mLon = 116.437428;lat = (int) (mLat * 1E6);lon = (int) (mLon * 1E6);GeoPoint pt3 = new GeoPoint(lat, lon);// 构建线Geometry lineGeometry = new Geometry();// 设定折线点坐标GeoPoint[] linePoints = new GeoPoint[3];linePoints[0] = pt1;linePoints[1] = pt2;linePoints[2] = pt3;lineGeometry.setPolyLine(linePoints);// 设定样式Symbol lineSymbol = new Symbol();Symbol.Color lineColor = lineSymbol.new Color();lineColor.red = 255;lineColor.green = 0;lineColor.blue = 0;lineColor.alpha = 255;lineSymbol.setLineSymbol(lineColor, 10);// 生成Graphic对象Graphic lineGraphic = new Graphic(lineGeometry, lineSymbol);return lineGraphic;}/*** 绘制多边形,该多边形随地图状态变化* * @return 多边形对象*/public Graphic drawPolygon() {double mLat = 39.93923;double mLon = 116.357428;int lat = (int) (mLat * 1E6);int lon = (int) (mLon * 1E6);GeoPoint pt1 = new GeoPoint(lat, lon);mLat = 39.91923;mLon = 116.327428;lat = (int) (mLat * 1E6);lon = (int) (mLon * 1E6);GeoPoint pt2 = new GeoPoint(lat, lon);mLat = 39.89923;mLon = 116.347428;lat = (int) (mLat * 1E6);lon = (int) (mLon * 1E6);GeoPoint pt3 = new GeoPoint(lat, lon);mLat = 39.89923;mLon = 116.367428;lat = (int) (mLat * 1E6);lon = (int) (mLon * 1E6);GeoPoint pt4 = new GeoPoint(lat, lon);mLat = 39.91923;mLon = 116.387428;lat = (int) (mLat * 1E6);lon = (int) (mLon * 1E6);GeoPoint pt5 = new GeoPoint(lat, lon);// 构建多边形Geometry polygonGeometry = new Geometry();// 设置多边形坐标GeoPoint[] polygonPoints = new GeoPoint[5];polygonPoints[0] = pt1;polygonPoints[1] = pt2;polygonPoints[2] = pt3;polygonPoints[3] = pt4;polygonPoints[4] = pt5;polygonGeometry.setPolygon(polygonPoints);// 设置多边形样式Symbol polygonSymbol = new Symbol();Symbol.Color polygonColor = polygonSymbol.new Color();polygonColor.red = 0;polygonColor.green = 0;polygonColor.blue = 255;polygonColor.alpha = 126;polygonSymbol.setSurface(polygonColor, 1, 5);// 生成Graphic对象Graphic polygonGraphic = new Graphic(polygonGeometry, polygonSymbol);return polygonGraphic;}/*** 绘制单点,该点状态不随地图状态变化而变化* * @return 点对象*/public Graphic drawPoint() {double mLat = 39.98923;double mLon = 116.397428;int lat = (int) (mLat * 1E6);int lon = (int) (mLon * 1E6);GeoPoint pt1 = new GeoPoint(lat, lon);// 构建点Geometry pointGeometry = new Geometry();// 设置坐标pointGeometry.setPoint(pt1, 10);// 设定样式Symbol pointSymbol = new Symbol();Symbol.Color pointColor = pointSymbol.new Color();pointColor.red = 0;pointColor.green = 126;pointColor.blue = 255;pointColor.alpha = 255;pointSymbol.setPointSymbol(pointColor);// 生成Graphic对象Graphic pointGraphic = new Graphic(pointGeometry, pointSymbol);return pointGraphic;}/*** 绘制圆,该圆随地图状态变化* * @return 圆对象*/public Graphic drawCircle() {double mLat = 39.90923;double mLon = 116.447428;int lat = (int) (mLat * 1E6);int lon = (int) (mLon * 1E6);GeoPoint pt1 = new GeoPoint(lat, lon);// 构建圆Geometry circleGeometry = new Geometry();// 设置圆中心点坐标和半径circleGeometry.setCircle(pt1, 2500);// 设置样式Symbol circleSymbol = new Symbol();Symbol.Color circleColor = circleSymbol.new Color();circleColor.red = 0;circleColor.green = 255;circleColor.blue = 0;circleColor.alpha = 126;circleSymbol.setSurface(circleColor, 1, 3);// 生成Graphic对象Graphic circleGraphic = new Graphic(circleGeometry, circleSymbol);return circleGraphic;}/*** 绘制文字,该文字随地图变化有透视效果* * @return 文字对象*/public TextItem drawText() {double mLat = 39.86923;double mLon = 116.397428;int lat = (int) (mLat * 1E6);int lon = (int) (mLon * 1E6);// 构建文字TextItem item = new TextItem();// 设置文字位置item.pt = new GeoPoint(lat, lon);// 设置文件内容item.text = "百度地图SDK";// 设文字大小item.fontSize = 40;Symbol symbol = new Symbol();Symbol.Color bgColor = symbol.new Color();// 设置文字背景色bgColor.red = 0;bgColor.blue = 0;bgColor.green = 255;bgColor.alpha = 50;Symbol.Color fontColor = symbol.new Color();// 设置文字着色fontColor.alpha = 255;fontColor.red = 0;fontColor.green = 0;fontColor.blue = 255;// 设置对齐方式item.align = TextItem.ALIGN_CENTER;// 设置文字颜色和背景颜色item.fontColor = fontColor;item.bgColor = bgColor;return item;}@Overrideprotected void onPause() {mMapView.onPause();super.onPause();}@Overrideprotected void onResume() {mMapView.onResume();super.onResume();}@Overrideprotected void onDestroy() {mMapView.destroy();super.onDestroy();}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);mMapView.onSaveInstanceState(outState);}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);mMapView.onRestoreInstanceState(savedInstanceState);}
}

布局XMl:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><Buttonandroid:id="@+id/btn_clear"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_margin="10dp"android:layout_weight="1.0"android:background="@drawable/button_style"android:text="清除(clear)" /><Buttonandroid:id="@+id/btn_reset"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_margin="10dp"android:layout_weight="1.0"android:background="@drawable/button_style"android:text="重置(reset)" /></LinearLayout><com.baidu.mapapi.map.MapViewandroid:id="@+id/bmapView"android:layout_width="match_parent"android:layout_height="match_parent"android:clickable="true" /></LinearLayout>

Manifest配置跟前面一样。

附上图片效果:

百度地图之自定义绘制功能相关推荐

  1. 百度地图之鼠标绘制工具条库(开源库)

    百度地图开发常用网站 1.百度地图开放平台 http://lbsyun.baidu.com/ 2.百度地图 Javascript API JavaScript API v3.0 http://lbsy ...

  2. 基于百度地图实现Android定位功能实现(详解+教程)

    基于百度地图实现Android定位功能实现(详解+教程) 1.初始化 (一)获取到SHA1 (1)找到View中的Tool Windows并打开Terminal (2)找到你的jdk的bin目录,小编 ...

  3. 用html制作百度地图,canvas实现百度地图个性化底图绘制

    精华 node-canvas实现百度地图个性化底图绘制 发布于 3 年前 作者 lzxue 11783 次浏览 来自 技术 原文转自 #node-canvas实现百度地图个性化底图绘制 随着nodej ...

  4. 用echarts在百度地图bmap自定义形状

    用echarts在百度地图bmap自定义形状 创建html文件 引入百度地图API.Echarts.以及echarts的百度地图插件BMap echarts和bmap可以到官网去下载, 这里的路径是本 ...

  5. 如何在网中使用百度地图API自定义个性化地图

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  6. 查找窗口隐藏了怎么办_百度地图这些不为人知的隐藏功能

    百度地图这些不为人知的"隐藏功能",我们都知道任何一款软件都有一些我们不仔细去找就发现不了的功能,通常来说这些功能还是非常实用的,这里就来跟大家说一下百度地图里这几个总是被错过的& ...

  7. 每日新闻丨​百度地图发布语音定制功能​;Windows 10高CPU使用率问题已解

    更多精彩,请点击上方蓝字关注我们! 每日新闻播报 第09-23期  1 趋势洞察 杨元庆:制造大国变为制造强国 需重视三个转变 近日,联想集团董事长兼CEO杨元庆在2019世界制造业大会上表示,要实现 ...

  8. 百度地图api周边搜索功能

    利用百度地图api周边搜索功能,实现点击切换周边类型显示 <!DOCTYPE html> <html lang="zh-CN"> <head>& ...

  9. php网页地图上自定义,网页嵌入百度地图和使用百度地图api自定义地图的详细步骤...

    在网页中插入百度地图 如果想在自己的网页上面加入百度地图的话,可以用百度地图的api.具体使用方法如下: 第二步:设置地图,大家可以对网站显示地图的宽高进行设置,其余选项不动. 第三步:添加标注.点击 ...

最新文章

  1. Facebook和Google,做不了恋人做仇人
  2. tornado学习笔记18 _RequestDispatcher 请求分发器
  3. python里面对文件的读写操作
  4. scrapy 伪装代理和 fake_userAgent 的使用
  5. Python中的枚举(enumerate)
  6. 计算(数字)的观点看世界
  7. 看看你的密码有多安全?
  8. Axure工具概述以及Axure RP9的安装汉化和授权
  9. 测试人员必会用例设计方法 —— 正交表
  10. 关于码元、波特率和比特率
  11. mobi 电子书格式详解
  12. Android 获取文件后缀名
  13. java 文字串叠字检查_Java 正则表达式详细实例解析
  14. Hugo 建站经验之谈
  15. Node 的 cross-env 模块
  16. 7-2 输出数组元素分数 20
  17. STM32进入Standby模式并唤醒
  18. linux将多个文件打包成一个文件,将多个文件打包成一个shell
  19. Vert.x实战 异步数据和事件流
  20. AGV调式之软件开发—API调用

热门文章

  1. 一起来看流星雨剧情简介/剧情介绍/剧情分集介绍第二十一集
  2. 内核程序临界区和普通临界区
  3. 网络安全实验6 认识XSS 盗取cookie
  4. 【Python机器学习】01_机器学习概述
  5. 为什么阿里巴巴天天招人,但又很难进,真的缺人吗?
  6. 3D打印机的原理是什么
  7. iphone 微信打开H5自动播放音乐问题
  8. signaturenonce php,php微信公众平台开发--接入微信API
  9. chrome64新增的Performance Monitor
  10. $http请求之options