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

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

看结果图:
40条边数,获取每一个点的在实际地理中的坐标(经纬度)
原点(center)是=32.02103 : 118.763435
Android_百度地图API_图形“圆形”(正多边形)和多边形是否相交算法_第1张图片
Android_百度地图API_图形“圆形”(正多边形)和多边形是否相交算法_第2张图片

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

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

/**
	 * 
	 * @param lineNum需要获取的正多边形书也可以认为是点的个数
	 * @param a需要的偏移量本项目中默认是50
	 * @param ll地理坐标的中心店
	 * @return实际地理范围的坐标店集合
	 */
public static ArrayList logPoint(int lineNum, double a, LatLng ll) {
	ArrayList lls = new ArrayList();
	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 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,高德都有的(图形相交的状态)功能了,
加油了,继续努力!!

谢谢你您的回复,根据您的回复我单独在底图上绘制出来
Android_百度地图API_图形“圆形”(正多边形)和多边形是否相交算法_第3张图片我也想明白你们为什么会是椭圆的,或者说椭圆都不算,是向个鸡蛋一样。
真的对此我还是不太了解…

你可能感兴趣的:(Android,java)