Android_百度地图API_图形“圆形”(正多边形)和多边形是否相交算法

真的很讨厌,数学不是太好,但是几何还好,纵使是这样,该忘了的还是忘了!满意以为随便搜搜都是一大堆,但是我真的想错了!

看结果图:
40条边数,获取每一个点的在实际地理中的坐标(经纬度)
原点(center)是=32.02103 : 118.763435
这里写图片描述
这里写图片描述

为了解决在百度API中缺少图形是否相交的判断,所以必须,要判断两个图形边缘的点,这下问题就来了,
网上搜一大片,全是绘制View的,找了很久,算了自己算吧!!

上代码:
1.获取圆形上的多个点集合

/**
	 * 
	 * @param lineNum需要获取的正多边形书也可以认为是点的个数
	 * @param a需要的偏移量本项目中默认是50
	 * @param ll地理坐标的中心店
	 * @return实际地理范围的坐标店集合
	 */
public static ArrayList<LatLng> logPoint(int lineNum, double a, LatLng ll) {
	ArrayList<LatLng> lls = new ArrayList<LatLng>();
	float angle = 360 / lineNum;
		// 已知多边形的半径为50
	double b, c;// 边长,a是圆半径固定是50,b是高(Y轴),C是长(X轴)
	float A = 90, B, C;// 角度,设定B是向量-变化
	for (int i = 0; i < lineNum; i++) {
		float angleCenter = angle * i;
		Log.i("zjs","当前角度   = "+angleCenter);
			
			if(angleCenter <=180){
				B = angleCenter;
				C = 90 - B;
				b=a * Math.sin(Math.toRadians(B));
				c = a * Math.sin(Math.toRadians(C));		
			}else{
				B = angleCenter-360;
				C = 90 - B;
				b=a * Math.sin(Math.toRadians(B));
				c = a * Math.sin(Math.toRadians(C));
			}
			// 1.同一纬线上经度差一度,实际距离差多少
			// 111km*cosφ (φ为当地纬度)
			// 2.同一经线上纬度差一度,实际距离差多少
			// 111km
//			Log.d("zjs","b= "+b+"  :  c="+c);
			b = b / (111000*Math.cos(ll.longitude)) + ll.longitude;
			c = c / 111000 + ll.latitude;
		Log.d("zjs","以地理坐标点为中心——第"+(i+1)+"个坐标点的位置是      =   "+b+"  :  "+c);
			lls.add(new LatLng(c, b));

		}

		return lls;
	}

2.通过百度API判断是否相交

// TODO 获取正多边形(40边)的角点,(后面可以加入方位角,根据需求减少判断的方向)
	ArrayList<LatLng> lls = logPoint(40, minlen, gps);
		boolean inDistance = false;
		 for (int i = 0; i < lls.size(); i++) {
if (SpatialRelationUtil.isPolygonContainsPoint(list,
				lls.get(i))) {
						inDistance=true;
						break;
					}
				}

铛铛铛:(需要注意的坑)
1.Java的Math.sin等调用的参数是弧度,我一度直接调用,到时结果莫名其妙,所以一定要转换成角度,不会再被坑了,
2.实际地理地图中的坐标和长度之间的转换,//能复制就复制,别敲错了
3.在角度和方向的问题,判断减少了,以180度为中心对半开。前面写的绕了

然后就可以妥妥来实现,google,高德都有的(图形相交的状态)功能了,
加油了,继续努力!!

谢谢你您的回复,根据您的回复我单独在底图上绘制出来
在这里插入图片描述我也想明白你们为什么会是椭圆的,或者说椭圆都不算,是向个鸡蛋一样。
真的对此我还是不太了解…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WindFutrue

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值