Android:如何:以Android方式确定位置是否位于位置a和位置B之间?

Android:如何:以Android方式确定位置是否位于位置a和位置B之间?,android,Android,如何确定位置X是否介于位置A和位置B之间?有没有安卓系统的方法来确定它 更新 我在这里问X是在A楼还是在B楼。我有两栋建筑的左上角和右下角坐标 更新2 假设LocationX是一个人。主要目的是确定此人是在大楼A上还是在大楼B上 更新3 假设BuildingA和BuildingB是矩形/正方形。所以我们只需要左上角和右下角的纬度和经度 更新4 让我添加@ligi响应中的代码片段。但是下面的代码失败了 Location locationA = new Location("A"); location

如何确定位置X是否介于位置A和位置B之间?有没有安卓系统的方法来确定它

更新 我在这里问X是在A楼还是在B楼。我有两栋建筑的左上角和右下角坐标

更新2 假设LocationX是一个人。主要目的是确定此人是在大楼A上还是在大楼B上

更新3 假设BuildingA和BuildingB是矩形/正方形。所以我们只需要左上角和右下角的纬度和经度

更新4 让我添加@ligi响应中的代码片段。但是下面的代码失败了

Location locationA = new Location("A");
locationA.setLatitude(35.70217034224572);
locationA.setLongitude(139.74359443782043);
Location locationB = new Location("B");
locationB.setLatitude(35.69994863045598);
locationB.setLongitude(139.74633029101562);
Location locationX = new Location("X");
// TODO result: X:169.661 Y:347.359
locationX.setLatitude(35.70066307001967);
locationX.setLongitude(139.74450102446747);

//distanceAB > (distanceXA + distanceXB - threshold)
float threshold = 0f;
float distanceAB = locationA.distanceTo(locationB);
float distanceXA = locationX.distanceTo(locationA);
float distanceXB = locationX.distanceTo(locationB);
boolean result = distanceAB > (distanceXA + distanceXB - threshold);
assertTrue(result);
计算3个距离(例如通过Location.distanceTo):distanceAB、distanceXA、distanceXB 然后检查以下内容:(distanceAB==(distanceXA+distanceXB)) 您可能会引入一些模糊性,其阈值大于0,如示例检查中所示-取决于用例-因为在现实中,事情不会是最优的

我发现问题随着更新而改变-新问题可以解决,例如使用Rect.contains-只需为每个建筑构建一个Rect,并检查您的人员是否在建筑中。

计算3个距离(例如通过Location.distanceTo):distanceAB、distanceXA、distanceXB 然后检查以下内容:(distanceAB==(distanceXA+distanceXB)) 您可能会引入一些模糊性,其阈值大于0,如示例检查中所示-取决于用例-因为在现实中,事情不会是最优的

我发现问题随着更新而改变-新问题可以解决,例如,使用Rect.contains-只需为每个建筑构建一个Rect,并使用Rect.contains检查您的人是否在建筑中。

一个点(a,b)包含在由两点(x0,y0)和(x1,y1)定义的矩形中,如果最小值(x0,x1) 如果A-y0=((y1-y0)/(x1-x0))*(b-x0),则点(A,b)在连接(x0,y0)到(x1,y1)的线上,假设x1!=x0。如果x0等于x1,则(A,b)在线上,当且仅当A也等于x0

点(a,b)和点(x0,y0)之间的距离是(a-x0)^2+(b-y0)^2的平方根。

如果最小值(x0,x1) 如果A-y0=((y1-y0)/(x1-x0))*(b-x0),则点(A,b)在连接(x0,y0)到(x1,y1)的线上,假设x1!=x0。如果x0等于x1,则(A,b)在线上,当且仅当A也等于x0



点(a,b)和点(x0,y0)之间的距离是(a-x0)^2+(b-y0)的平方根^2.

什么意思
LocationX介于LocationA和LocationB之间
?让我用坐标。coordinateX是coordinateA和coordinateB之间。还有其他术语吗?除了这个,我不知道如何解释。抱歉。这是GPS的定位对象。不知道具体的android方法,但你会有很长的时间d lat所以使用它们。(即latA>latX>latB&&longA>longX>longB并检查A位置X在位置a和位置B之间?让我用坐标。坐标系在坐标a和坐标B之间。还有其他术语吗?除了这一点,我不知道如何解释。对不起,这是一个问题来自GPS的定位对象。不知道具体的android方法,但你会有long和lat,所以使用它们。(即latA>latX>latB&&longA>longX>longB,并检查A(1)你可能会引入一些模糊性,一些阈值大于0(2),因为在现实中,事情不会是最优的(distanceAB==(distanceXA+distanceXB))仅在理论上是正确的,但可能不符合你的实际值-所以你最好这样做(distanceAB>(距离Xa+距离Xb-阈值)我尝试了你的答案,但是失败了。你会参考上面的代码片段吗?这只适用于一个正好在AB中间的点。所以,如果有一个点非常接近A,但是离B很远,但仍然位于A和B之间的路径上,这一点就不被考虑了。我会的。你能详细阐述一下这些短语吗?>(1)你可能会引入一些模糊性,一些阈值大于0(2),因为在现实中事情不会是最优的(distanceAB==(distanceXA+distanceXB))只是在理论上是正确的,但可能与你的实践值不符,所以你最好这样做(distanceAB>(distanceXA+distanceXB-threshold))@ligi我尝试了你的答案,但失败了。请参考上面的代码片段。最小值和最大值是什么意思?它是来自Android的函数吗?我是指两个数字中的最小值(最小值)和最大值(最大值)。java.lang.Math为你提供了最小值和最大值函数(请参阅)你说的最小值和最大值是什么意思?它是来自Android的函数吗?我指的是两个数字中最小的(最小值)和最大的(最大值)。java.lang.Math为你提供了最小值和最大值函数(请参阅)