在地理区域内查找对象

时间:2014-02-06 09:52:23

标签: java geolocation maps

我想要一个java函数,如果我们传递一个对象的lat,long,那么该对象是否位于一个区域内。同样,这个区域由lat,long

定义

例如我定义了一个有3个纬度/长度位置的区域(一个矩形),如果我通过一个纬度/长度位置,它应该返回我是否在矩形内。

1 个答案:

答案 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。为简化起见,此算法从您的点开始沿随机方向绘制线段。如果段与多边形的边界交叉奇数次,则它位于多边形内。如果它偶数次穿过,那就在外面。

The ray-casting algorithm (simple)

要使用多边形类,您可以执行以下操作:

//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!