gpt4 book ai didi

java - 查找地理区域内的对象

转载 作者:太空宇宙 更新时间:2023-11-04 07:04:37 24 4
gpt4 key购买 nike

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

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

最佳答案

如果区域始终是矩形,最简单的方法是比较坐标。

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

因此,如果您的对象位于该区域内

px > r1x 和 px < r2x

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 。为了简化,该算法从您的点开始沿随机方向绘制一条线段。如果该线段穿过多边形边界奇数次,则它位于多边形内部。如果它穿过偶数次,那么它就在外面。

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 !

开始于导入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 了!

关于java - 查找地理区域内的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21599323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com