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

A:

B:

C:

D:

E:

no1：

no2:

y1:

y2:

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
• 2013年07月26日 21:39
• 13030

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

• lijie18
• 2017年02月06日 14:32
• 3238

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

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

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

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

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

• fuyifang
• 2016年10月27日 09:46
• 2443

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

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

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

• superdog007
• 2016年10月12日 11:07
• 8200

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

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

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

• u013239236
• 2016年08月15日 19:18
• 6928

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

• 2012年07月23日 11:55
• 1KB
• 下载

举报原因： 您举报文章：关于指定的经纬度是否落在多边形内 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)