我想要一个java
函数,如果我们传递一个对象的lat,long
,那么该对象是否位于一个区域内。同样,这个区域由lat,long
例如我定义了一个有3个纬度/长度位置的区域(一个矩形),如果我通过一个纬度/长度位置,它应该返回我是否在矩形内。
答案 0 :(得分:1)
如果区域始终是矩形,最简单的方法是比较坐标。
让我们假设您的矩形由其左上角(r1x:lon和r1y:lat)和右下角(r2x和r2y)角定义。您的对象(一个点)由px:lon和py:lat。
定义因此,如果
,您的对象就在该区域内px> r1x和px< R2X
和
py< r1y和py> R2Y
以编程方式它会是这样的:
boolean isPInR(double px, double py, double r1x, double r1y, double r2x, double r2y){
if(px > r1x && px < r2x && py < r1y && py > r2y){
//It is inside
return true;
}
return false;
}
修改
如果多边形不是矩形,则可以使用Java.awt.Polygon类。在这个类中,你会发现方法包含(x,y),如果带有x和y坐标的点在Polygon内,则返回true。 此方法使用Ray-casting algorithm。为简化起见,此算法从您的点开始沿随机方向绘制线段。如果段与多边形的边界交叉奇数次,则它位于多边形内。如果它偶数次穿过,那就在外面。
要使用多边形类,您可以执行以下操作:
//This defines your polygon
int xCoord[] = {1,2,3,5,9,-5};
int yCoord[] = {18,-32,1,100,-100,0};
myPolygon = new Polygon(xCoord, yCoord, xCoord.length);
//This finds if the points defined by x and y coordinates is inside the polygon
Boolean isInside = myPolygon.contains(x,y);
不要忘记
import java.awt.Polygon;
修改
右坐标是Double!
所以你需要使用Path2D.Double!
以import java.awt.geom.Path2D;
假设您从以前开始使用类似的数组:
//This defines your polygon
Double xCoord[] = {1.00121,2,3.5464,5,9,-5};
Double yCoord[] = {18.147,-32,1,100,-100.32,0};
Path2D myPolygon = new Path2D.Double();
//Here you append all of your points to the polygon
for(int i = 0; i < xCoord.length; i++) {
myPolygon.moveTo(xCoord[i], yCoord[i]);
}
myPolygon.closePath();
//Now we want to know if the point x, y is inside the Polygon:
Double x; //The x coord
Double y; //The y coord
Boolean isInside = myPolygon.contains(x,y);
在这里,你选择Double!