android-根据百度地图提供的一组经纬度画带有箭头的线,如何操作啊?

问题描述

根据百度地图提供的一组经纬度画带有箭头的线,如何操作啊?

根据百度地图提供的一组经纬度画带有箭头的线,如何操作啊?现在想到的方法是继承Overlay重写draw
根据android提供的画布自定义画线和箭头,但是mBaiduMap.addOverlay();中间要填写的类型是OverlayOptions 可是继承的Overlay这么转换啊?mBaiduMap.addOverlay(new MyOverlay());?

这个时我的自定义类
/**

  • 自定义Overlay
    */
    class MyOverlay extends Overlay {
    private Paint paint;

public void draw(Canvas canvas, MapView mapView, boolean shadow) {
// super.draw(canvas, mapView, shadow);
if (shadow == false) {
paint = new Paint();
paint.setStyle(Style.STROKE);// 设置非填充
paint.setStrokeWidth(8);// 笔宽5像素
// paint.setColor(Color.rgb(22, 22, 22));// 设置为红笔
paint.setColor(Color.RED);
paint.setAntiAlias(true);// 锯齿不显示

int size = listInfo.size() - 1;
for (int i = 0; i < size; i++) {
// paint.setColor(Color.rgb(120 + i * 3, 120 + i * 3,
// 50 + i * 3));// 设置为红笔
// Point point = mMapView.getProjection().toPixels(
// listpoint.get(i).pt, null);
// Point point2 = mMapView.getProjection().toPixels(
// listpoint.get(i + 1).pt, null);

Point point = mBaiduMap.getProjection().toScreenLocation(
listInfo.get(i));
Point point2 = mBaiduMap.getProjection().toScreenLocation(
listInfo.get(i + 1));

JudgeDrawArrow(canvas, point.x, point.y, point2.x, point2.y);// 画箭头
canvas.drawLine(point.x, point.y, point2.x, point2.y, paint);// 画线
}
// canvas.drawLine(listpoint.size().x, point.y, point2.x,
// point2.y, paint);// 画线
// Point point3 = mMapView.getProjection().toPixels(
// listpoint.get(size - 1).pt, null);
// paint.setColor(Color.BLUE);// 设置为红笔
// paint.setStyle(Style.STROKE);// 设置非填充
// paint.setStrokeWidth(5);// 笔宽5像素
// canvas.drawCircle(point3.x, point3.y, 25.5f, paint);

}
if (shadow == false) {
paint.setStrokeWidth(5);// 笔宽5像素
// Point point4 = mMapView.getProjection().toPixels(
// listpoint.get(listpoint.size() - 2).pt, null);
Point point4 = mBaiduMap.getProjection().toScreenLocation(
listInfo.get(listInfo.size() - 2));
canvas.drawText("--》倒数第二站", point4.x, point4.y, paint);
}
}

/**

  • 画箭头
  • @param canvas
  • @param x1
  • @param y1
  • @param x2
  • @param y2
    */
    public void JudgeDrawArrow(Canvas canvas, int x1, int y1, int x2, int y2) {
    double arrow_height = 25; // 箭头高度
    double arrow_btomline = 12; // 底边的一半
    int x3 = 0;
    int y3 = 0;
    int x4 = 0;
    int y4 = 0;
    double arctangent = Math.atan(arrow_btomline / arrow_height); // 箭头角度
    double arrow_len = Math.sqrt(arrow_btomline * arrow_btomline

    • arrow_height * arrow_height); // 箭头的长度
      double[] endPoint_1 = rotateVec(x2 - x1, y2 - y1, arctangent, true,
      arrow_len);
      double[] endPoint_2 = rotateVec(x2 - x1, y2 - y1, -arctangent,
      true, arrow_len);
      double x_3 = x2 - endPoint_1[0]; // (x_3,y_3)是第一端点
      double y_3 = y2 - endPoint_1[1];
      double x_4 = x2 - endPoint_2[0]; // (x_4,y_4)是第二端点
      double y_4 = y2 - endPoint_2[1];
      Double X3 = new Double(x_3);
      x3 = X3.intValue();
      Double Y3 = new Double(y_3);
      y3 = Y3.intValue();
      Double X4 = new Double(x_4);
      x4 = X4.intValue();
      Double Y4 = new Double(y_4);
      y4 = Y4.intValue();
      // 画线
      canvas.drawLine(x1, y1, x2, y2, paint);
      // 画箭头的一半
      canvas.drawLine(x2, y2, x3, y3, paint);
      // 画箭头的另一半
      canvas.drawLine(x2, y2, x4, y4, paint);
      }

public double[] rotateVec(int px, int py, double ang, boolean isChlen,
double newLen) {

double rotateResult[] = new double[2];
// 矢量旋转函数,参数含义分别是x分量、y分量、旋转角、是否改变长度、新长度
double vx = px * Math.cos(ang) - py * Math.sin(ang);
double vy = px * Math.sin(ang) + py * Math.cos(ang);
if (isChlen) {
double d = Math.sqrt(vx * vx + vy * vy);
vx = vx / d * newLen;
vy = vy / d * newLen;
rotateResult[0] = vx;
rotateResult[1] = vy;
}
return rotateResult;
}

}


解决方案

先画一个线段,然后画箭头

解决方案二:

http://blog.csdn.net/column/details/android-jacksen-map.html

时间: 2024-09-23 02:47:06

android-根据百度地图提供的一组经纬度画带有箭头的线,如何操作啊?的相关文章

Android SDK 百度地图通过poi城市内检索简介接口的使用_Android

百度地图 SDK 不仅为广大开发者提供了炫酷的地图展示效果.丰富的覆盖物图层,更为广大开发者提供了多种 LBS 检索的能力.通过这些接口,开发者可以轻松的访问百度的 LBS 数据,丰富自己的移动端地图应用. 目前百度地图 SDK 为开发者提供的检索服务有: POI 检索:可以检索百度 POI 数据信息: 线路规划:利用百度的引擎帮助开发者规划线路: 在线建议检索.短链接分享.地理编码等等.... 本文将以一个很简单的 POI 城市内检索为例,像广大开发者介绍接口的使用. 第一步,选择并下载 SD

百度地图提供的安卓API怎样提高最大放大级别?

问题描述 百度地图提供的安卓API怎样提高最大放大级别? 现在百度提供的API最大放大级别只有20m一格 可不可以更精细一点? 解决方案 不行,你只能通过它的接口操作 解决方案二: 去官网看看,也许有答案可以适合你 解决方案三: http://blog.csdn.net/column/details/android-jacksen-map.html

百度地图根据地理坐标转换经纬度

百度地图根据地理坐标转换经纬度 这几天比较空闲,就接触了下百度地图的API(开发者中心链接地址:http://developer.baidu.com),发现调用还是挺方便的.只要简单几步注册下,就可以获得一个Key,就能直接调用(PS:好像1.3版本前的无需注册获取key,就能直接调用api). 想着能结合到自己的项目中去,那也挺不错的.看了园子中的几篇文章,感觉甚好,想自己也动手试试.在调用百度地图API的时候,经纬度的获取必然是关键,那么怎么样获取到经纬度的值呢?这是一个最首要解决的问题.通

android开发百度地图定位遇到的问题

问题描述 android开发百度地图定位遇到的问题 解决方案 你把红字复制粘贴上来,不要发截图

利用百度地图提供的API,做到下面的目的;表示小白

问题描述 利用百度地图提供的API,做到下面的目的:表示小白 如图百度地图中,假如在我画的这个框的区域内我用鼠标点击一个位置,然后出现一个提示框,提示框内内容为我自定义的内容:能告诉我这个用百度API怎么做吗

xamarin studio-mono for android 开发百度地图遇到的问题求解

问题描述 mono for android 开发百度地图遇到的问题求解 我准备用Xamarin Studio 做一个关于地图定位的demo但是下载的BaiduMap_AndroidSDK是一个jar文件,后面用java bingding Library生成了一个dll文件,然后引用..虽然可以在手机可以显示出地图,但是在做定位时,却发现该dll文件没有MyLocationOverlay等类定义.我就没有办法了 .有没有人遇到这类的问题.求解释.. 解决方案 https://git.oschina

android 导航-求一份android百度地图gps导航开发代码(带有详细代码)

问题描述 求一份android百度地图gps导航开发代码(带有详细代码) 各位大神,给一份android百度地图gps导航开发代码,带有详细讲解,如果有视频就更好了,.有没有?有没有?有没有?跪求-- 解决方案 以前回答过类似的问题,姐姐毫无保留地给了代码,题主拿到代码就高高兴兴蹦蹦跳跳地跑啦.所以除非lz有诚意先采纳了,否则姐姐一般不会先给出代码了. 解决方案二: 百度API里面不是有Demo么

android调用百度地图 报如下的错

问题描述 android调用百度地图 报如下的错 java.lang.NoClassDefFoundError: com.baidu.mapapi.BMapManager 解决方案 这种问题一般都与Android的Context有关系,例如你在Service中调用了对话框,因为你贴的代码信息比较少,也看不出具体内容,大概是初始化BMapManager传的Comtext有问题 解决方案二: 文件找不到,看包有没有导全? 解决方案三: 有导入百度sdk jar包吗 解决方案四: 如果确定已经导入了s

android 使用百度地图 缩放比例会自己变化,why?

问题描述 android 使用百度地图 缩放比例会自己变化,why? 当我在android程序上集成百度地图是,设置好了缩放比例,然后打开程序的时候,有时候它自己会改变缩放比例,变得很小(比如说我设置的是15,结果有时候可以看到整个中国的缩影),而且定位到当前位置,是从很远的地方移动过来的,指的是其他的洲,欧洲或者其他地方,这是为什么呢 解决方案 你初始化好地图之后就设置缩放比例啊! 参考:http://blog.csdn.net/column/details/android-jacksen-m