在地理区域内查找对象
Posted
技术标签:
【中文标题】在地理区域内查找对象【英文标题】:Find an object within an geographical area 【发布时间】:2014-02-06 09:52:22 【问题描述】:我想要一个java
函数,如果我们传递一个对象的lat,long
,该对象是否位于一个区域内。同样,该区域由 lat,long 定义
例如,我定义了一个具有 3 个纬度/经度位置的区域。(一个矩形)如果我传递了一个纬度/经度位置,它应该返回我是否在矩形内。
【问题讨论】:
听起来很简单,到目前为止你做了什么? 看看this question,尤其是链接框架。 【参考方案1】:如果区域总是一个矩形,最简单的方法是比较坐标。
假设您的矩形由左上角(r1x:lon 和 r1y:lat)和右下角(r2x 和 r2y)定义。您的对象(一个点)由 px: lon 和 py: lat 定义。
所以,如果您的对象在该区域内
px > r1x 和 px 和 py r2y 以编程方式,它会是这样的: 编辑 如果您的多边形不是矩形,您可以使用 Java.awt.Polygon 类。在此类中,您将找到方法 contains(x,y) 如果具有 x 和 y 坐标的点位于多边形内部,则该方法返回 true。
此方法使用Ray-casting algorithm。为简化起见,此算法从您的点沿随机方向绘制一条线段。如果线段穿过多边形边界奇数次,则它在多边形内部。如果它穿过它偶数次,那么它就在外面。 要使用多边形类,您可以执行以下操作: 别忘了 导入 java.awt.Polygon; 编辑 右坐标在 Double 中! 所以你需要使用Path2D.Double! 以 假设您从与以前类似的数组开始: 你可以选择 Double !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;
//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.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);
【讨论】:
可以是任意区域。矩形、三角形、多边形。基本上它可以是任何形状。 你知道纬度多头头寸通常是双倍的。但是这里我们必须使用 int 那么如何在地理位置中使用这个逻辑呢? @user2771655 又更新了,看最后一段。以上是关于在地理区域内查找对象的主要内容,如果未能解决你的问题,请参考以下文章
地理围栏:使用 oracle 空间查找多边形内的要素数量(点/线/多边形)
查找地理点的聚类(距离聚类中心 y 距离内的最小 x 点)的算法