关于指定的经纬度是否落在多边形内

原创 2015年07月09日 15:55:55

这个想法算法就是判断一个点向左的射线跟一个多边形的交叉点有几个,如果结果为奇数的话那么说明这个点落在多边形中,反之则不在。直接贴代码吧


A:


B:


C:


D:


E:


no1:


no2:


y1:


y2:


以上的ABCDE,分别是以下数组里面的数据

Point[] ps = new Point[] { new Point(120.2043 , 30.2795), new Point(120.2030 , 30.2511), new Point(120.1810 , 30.2543), new Point(120.1798 , 30.2781), new Point(120.1926,30.2752) };


实际生产环境的贴图:



package com.cmcc.monitor.test;

public class GisTest {

	public static void main(String[] args) {
		Point[] ps = new Point[] { new Point(120.2043 , 30.2795), new Point(120.2030 , 30.2511), new Point(120.1810 , 30.2543), new Point(120.1798 , 30.2781), new Point(120.1926,30.2752) };
		Point n1 = new Point(120.1936 , 30.2846);
		Point n2 = new Point(120.1823 , 30.2863);
		Point n3 = new Point(120.2189 , 30.2712);
		Point y1 = new Point(120.1902 , 30.2712);
		Point y2 = new Point(120.1866 , 30.2672);
		Point y4 = new Point(120.1869 , 30.2718);
		System.out.println( "n1:" + isPtInPoly(n1.getX() , n1.getY() , ps));
		System.out.println( "n2:" + isPtInPoly(n2.getX() , n2.getY() , ps));
		System.out.println( "n3:" + isPtInPoly(n3.getX() , n3.getY() , ps));
		System.out.println( "y1:" + isPtInPoly(y1.getX() , y1.getY() , ps));
		System.out.println( "y2:" + isPtInPoly(y2.getX() , y2.getY() , ps));
		System.out.println( "y4:" + isPtInPoly(y4.getX() , y4.getY() , ps));
	}
	public static boolean isPtInPoly (double ALon , double ALat , Point[] ps) {
		int iSum, iCount, iIndex;
		double dLon1 = 0, dLon2 = 0, dLat1 = 0, dLat2 = 0, dLon;
		if (ps.length < 3) {
			return false;
		}
		iSum = 0;
		iCount = ps.length;
		for (iIndex = 0; iIndex<iCount;iIndex++) {
			if (iIndex == iCount - 1) {
				dLon1 = ps[iIndex].getX();
				dLat1 = ps[iIndex].getY();
				dLon2 = ps[0].getX();
				dLat2 = ps[0].getY();
			} else {
				dLon1 = ps[iIndex].getX();
				dLat1 = ps[iIndex].getY();
				dLon2 = ps[iIndex + 1].getX();
				dLat2 = ps[iIndex + 1].getY();
			}
			// 以下语句判断A点是否在边的两端点的水平平行线之间,在则可能有交点,开始判断交点是否在左射线上
			if (((ALat >= dLat1) && (ALat < dLat2)) || ((ALat >= dLat2) && (ALat < dLat1))) {
				if (Math.abs(dLat1 - dLat2) > 0) {
					//得到 A点向左射线与边的交点的x坐标:
					dLon = dLon1 - ((dLon1 - dLon2) * (dLat1 - ALat) ) / (dLat1 - dLat2);
					// 如果交点在A点左侧(说明是做射线与 边的交点),则射线与边的全部交点数加一:
					if (dLon < ALon) {
						iSum++;
					}
				}
			}
		}
		if ((iSum % 2) != 0) {
			return true;
		}
		return false;
	}
}


package com.cmcc.monitor.test;

public class Point {
    private Double x;
    private Double y;
    public Point (Double x , Double y) {
    	this.x = x;
    	this.y = y;
    }
	public Double getX() {
		return x;
	}
	public void setX(Double x) {
		this.x = x;
	}
	public Double getY() {
		return y;
	}
	public void setY(Double y) {
		this.y = y;
	}
    
}



Java 判断 一个点是不是在一个多边形围起来的区域内

package com.sdunicomsi.util.map; import java.awt.geom.Point2D; import java.util.ArrayList; import j...
  • a57565587
  • a57565587
  • 2013年07月26日 21:39
  • 13030

Java类判断百度地图上某点是否在多边形区域内

功能需求:订单分类(将每笔订单按照所在区域分类),故根据订单收货地址的经纬度来判断订单所在的商业区 import java.awt.geom.Point2D; import java.util.Ar...
  • lijie18
  • lijie18
  • 2017年02月06日 14:32
  • 3238

java判断某个点是否在所画范围内(多边形)

/** * 判断点是否在多边形内 * @param point 检测点 * @param pts 多边形的顶点 * @return 点在多边形内返回true,否则返回false ...
  • superdog007
  • superdog007
  • 2016年11月30日 09:25
  • 5740

Java在一定范围随机生成日期和经纬度

1.随机生成日期,格式为yyyy-MM-dd HH:mm:ss public static String randomDate(String beginDate, String endDate) ...
  • huang369509940
  • huang369509940
  • 2015年10月04日 14:53
  • 1924

Java在一定范围随机生成经纬度

在矩形范围内随机生成经纬度:/** * @Title: randomLonLat * @Description: 在矩形内随机生成经纬度 * @param MinLon:最新经...
  • fuyifang
  • fuyifang
  • 2016年10月27日 09:46
  • 2443

判断一个指定的经纬坐标是否落在一个多边形区域内?

Python: def IsPtInPoly(aLon, aLat, pointList): ''' :param aLon: double 经度 :param aLat: d...
  • bluehawksky
  • bluehawksky
  • 2016年06月14日 11:34
  • 2487

百度地图接口绘制任意多边形并获取每个点的经纬度

实现思路: 1:添加绘制工具的监听事件 2:遍历取出坐标集合 body, html{width: 100%;height: 100%...
  • superdog007
  • superdog007
  • 2016年10月12日 11:07
  • 8200

mongodb 判断坐标是否在指定多边形区域内的方法

MongoDB是一个基于分布式文件存储的数据库,并提供创建基于地理空间的索引的能力,本文将使用MongoDB基于地理空间索引进行坐标所在区域的判断及使用。...
  • fdipzone
  • fdipzone
  • 2016年08月31日 00:24
  • 15489

java实现经纬度坐标是否在范围内的算法

需求是:一个点(经纬度)是否在一个多边形内部,多边形有多个点构成,每个点是一个实际的经纬度坐标,有多个点构成一个多边形, 算法数学上实现思路: 判断一个点是在一个多边形内部的集中情况 第一:目标点在...
  • u013239236
  • u013239236
  • 2016年08月15日 19:18
  • 6928

判断指定的经纬度坐标点是否落在指定的多边形区域内

  • 2012年07月23日 11:55
  • 1KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于指定的经纬度是否落在多边形内
举报原因:
原因补充:

(最多只允许输入30个字)