Android实现百度地图两点画弧线
作者:miskss 发布时间:2022-08-17 14:52:03
标签:Android,百度地图
本文实例为大家分享了Android实现百度地图两点画弧线的具体代码,供大家参考,具体内容如下
import android.support.annotation.NonNull;
import com.baidu.mapapi.map.ArcOptions;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
/**
*
* http://lbsyun.baidu.com/index.php?title=androidsdk/guide/render-map/ploygon
* 通过两点来绘制弧线
* @author peter 2018-12-24 15:09
*/
public class ArcOverlay {
private LatLng start;
private LatLng end;
/**
* {@link com.baidu.mapapi.map.ArcOptions#color(int)}
*/
private int color;//弧线的颜色
private int arcWidth = 4;//弧线宽度
public ArcOverlay(@NonNull LatLng start, @NonNull LatLng end, int color) {
this.start = start;
this.end = end;
this.color = color;
}
/**
* 获取一个弧线Overlay
* @param start 起点
* @param end 终点
* @param color 颜色
* @param arcWidth 弧线宽度
*/
public ArcOverlay(@NonNull LatLng start, @NonNull LatLng end, int color, int arcWidth) {
this.start = start;
this.end = end;
this.color = color;
this.arcWidth = arcWidth;
}
public OverlayOptions toBmapOverlayOptions() {
return new ArcOptions()
.color(color)
.width(arcWidth)
.points(start, getMidPoint(), end);
}
/**
* 参考前端百度提供的画弧线js文件中计算第三个点的方式
* <a>http://lbsyun.baidu.com/jsdemo.htm#c1_13</a>
* <a>view-source:http://api.map.baidu.com/library/CurveLine/1.5/src/CurveLine.min.js<a/>
* @return 中间点的经纬度
*/
private LatLng getMidPoint() {
double t, t2, h,h2;
double lng1 = start.longitude;
double lng2 = end.longitude;
double lat1 = start.latitude;
double lat2 = end.latitude;
if (lng2 > lng1) {
if ((lng2 - lng1) > 180) {
if (lng1 < 0) {
lng1 = (180 + 180 + lng1);
}
}
}
if (lng1 > lng2) {
if ((lng1 - lng2) > 180) {
if (lng2 < 0) {
lng2 = (180 + 180 + lng2);
}
}
}
if (lat2 == lat1) {
t = 0;
h = lng1 - lng2;
} else {
if (lng2 == lng1) {
t = Math.PI / 2;
h = lat1 - lat2;
} else {
t = Math.atan((lat2 - lat1) / (lng2 - lng1));
h = (lat2 - lat1) / Math.sin(t);
}
}
t2 = (t + (Math.PI / 5));
h2 = h / 2;
double lng3 = h2 * Math.cos(t2) + lng1;
double lat3 = h2 * Math.sin(t2) + lat1;
return new LatLng(lat3,lng3);
}
public LatLng getStart() {
return start;
}
public void setStart(LatLng start) {
this.start = start;
}
public LatLng getEnd() {
return end;
}
public void setEnd(LatLng end) {
this.end = end;
}
public int getColor() {
return color;
}
public void setColor(int color) {
this.color = color;
}
public int getArcWidth() {
return arcWidth;
}
public void setArcWidth(int arcWidth) {
this.arcWidth = arcWidth;
}
}
来源:https://blog.csdn.net/wanping321/article/details/85990561


猜你喜欢
- Thread类相对于线程池中的线程,使用者有更多的控制权。该类允许创建前台线程,设置线程优先级等。Thread类的构造函数重载为接受Thre
- 本文实例为大家分享了Android广播实现App开机自启动的具体代码,供大家参考,具体内容如下一、概括在安卓中,想要实现app开机自动启动,
- 本文实例为大家分享了Android自定义EditText实现登录界面的具体代码,供大家参考,具体内容如下先看效果图:自定义edittext
- 我们主要介绍一下:java中如何通过最简单的方式实现链式创建json对象,解决创建json代码臃肿的问题。1、假设我们要创建一个json对象
- 骑缝章是用于往来业务合同,以确保合同真实、有效的印章加盖方法,是一种防范风险的重要方式。在Java程序中,可以通过使用工具来辅助加盖这种骑缝
- 一、引入:Android提供了View来进行绘图处理,在大部分情况下,View都能满足绘图需求。大家都知道View是通过刷新来重绘视图,An
- 一、新建学生节点类Stu_Node节点包含:学号:int num;姓名:String name;性别:String gender;下一个节点
- 前言我们可能听过C语言中的传值和传指针,在其他语言中,也有传引用一说,那么他们到底有什么区别呢?如果你还不能准确地分辨,就该好好了解一下了。
- 1. pom.xml文件配置<?xml version="1.0" encoding="UTF-8&qu
- **写作原因:跨进程通信的实现和理解是Android进阶中重要的一环。下面博主分享IPC一些相关知识、操作及自己在学习IPC过程中的一些理解
- 一、讲个事故接口安全老生常谈了过年之前做了过一款飞机大战的H5小游戏,里面无限模式-需要保存用户的积分,因为使用的Body传参,参数是可见的
- 这篇文章主要介绍了SpringBoot整合Druid数据源过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- 串口通讯是一种计算机常用的数据传输方式。程序运行如下:首先,检查计算机的串口,并获取所有串口信息。private void CheckPor
- mongodb的数据插入速度是其一个亮点,同样的10000条数据,插入的速度要比Mysql和sqlserver都要快,当然这也是要看使用者怎
- 今天,写了个小代码。抓取首页中的极客头条。效果如图:分享给新手朋友。要点:1.使用ApacheHttpClient库实现GET请求。2.异步
- WPF实现窗体中的悬浮按钮,按钮可拖动,吸附停靠在窗体边缘。控件XAML代码:<Button x:Class="SunCre
- 本文实例所述为Android天气预报之解析天气数据的代码,可实现获取HttpGet对象读取天气网站天气数据,并从数据中解析出天气数据,比如温
- mybatis 3 | 参考文档MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几
- Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。它与 JSP,Velocity,FreeMaker 等模
- 安装jdk(介绍三种方法)查看java版本:java -version方法一:利用yum源来安装jdk(此方法不需要配置环境变量)查看yum