【问题标题】:Find an object within an geographical area在地理区域内查找对象
【发布时间】:2014-02-06 09:52:22
【问题描述】:

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

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

【问题讨论】:

  • 听起来很简单,到目前为止你做了什么?
  • 看看this question,尤其是链接框架。

标签: java geolocation maps


【解决方案1】:

如果区域总是一个矩形,最简单的方法是比较坐标。

假设您的矩形由左上角(r1x:lon 和 r1y:lat)和右下角(r2x 和 r2y)定义。您的对象(一个点)由 px: lon 和 py: lat 定义。

所以,如果您的对象在该区域内

px > r1x 和 px

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 类。在此类中,您将找到方法 contains(x,y) 如果具有 x 和 y 坐标的点位于多边形内部,则该方法返回 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);

别忘了

导入 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 !

【讨论】:

  • 可以是任意区域。矩形、三角形、多边形。基本上它可以是任何形状。
  • 你知道纬度多头头寸通常是双倍的。但是这里我们必须使用 int 那么如何在地理位置中使用这个逻辑呢?
  • @user2771655 又更新了,看最后一段。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-16
  • 2013-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
  • 2014-12-12
相关资源
最近更新 更多