Java 使用distanceTo方法

Java 使用distanceTo方法,java,android,Java,Android,我的代码应该接受精度低于100的位置,如果新的位置精度小于20,则使用新的位置精度。 此外,如果从新位置到旧位置的距离大于200,则使用它 我不知道为什么,但在测试代码后,我在数据库中得到了以下位置: 最后3条记录之间的距离不到200米,我怎么会使用它们?? 代码如下: int Aloc = (int) loc.getAccuracy(); int AnewLoc = (int) newLoc.getAccuracy(); if(Aloc > AnewLoc +20) sendT

我的代码应该接受精度低于100的位置,如果新的位置精度小于20,则使用新的位置精度。 此外,如果从新位置到旧位置的距离大于200,则使用它

我不知道为什么,但在测试代码后,我在数据库中得到了以下位置:

最后3条记录之间的距离不到200米,我怎么会使用它们?? 代码如下:

int Aloc = (int) loc.getAccuracy();
int AnewLoc = (int) newLoc.getAccuracy();
if(Aloc > AnewLoc +20)
    sendTask();
else
{
    float distance = loc.distanceTo(newLoc);
    if(distance > 200)
        sendTask();
}
此代码在其精度低于100的位置执行

编辑 将条件更改为

if((AnewLoc+20) < Aloc)
if((AnewLoc+20)
我收到了以下记录:


新记录的精确度比旧记录高,距离小于200公里(0.01407公里,即14米)。我不明白为什么它会经过代码并发送到数据库。

像这样更改您的检查逻辑

int Aloc = (int) loc.getAccuracy();
int AnewLoc = (int) newLoc.getAccuracy();
if(AnewLoc < ( Aloc+20))
    sendTask();
else
{
    float distance = loc.distanceTo(newLoc);
    if(distance > 200)
        sendTask();
}
intaloc=(int)loc.getAccurance();
int AnewLoc=(int)newLoc.getAccurance();
如果(AnewLoc<(Aloc+20))
sendTask();
其他的
{
浮动距离=定位距离到(新定位);
如果(距离>200)
sendTask();
}

这应该可以

像这样更改您的检查逻辑

int Aloc = (int) loc.getAccuracy();
int AnewLoc = (int) newLoc.getAccuracy();
if(AnewLoc < ( Aloc+20))
    sendTask();
else
{
    float distance = loc.distanceTo(newLoc);
    if(distance > 200)
        sendTask();
}
intaloc=(int)loc.getAccurance();
int AnewLoc=(int)newLoc.getAccurance();
如果(AnewLoc<(Aloc+20))
sendTask();
其他的
{
浮动距离=定位距离到(新定位);
如果(距离>200)
sendTask();
}


这应该会起作用

您可能在治疗后保存位置,同时收到其他位置扫描您添加到输出中的位置,也可以是距离的结果,或者是跟踪日志,以查看正在执行哪个sendTask调用?另外,您确定要使用更高的精度吗?这意味着位置不太精确。通常情况下,如果精度返回的值较小,您会想做一些事情,因为这意味着新位置更精确。精度越小,为什么更大?更小下面是一个Aloc=70 AnewLoc=30的示例。如果(70>30+20)=真,则执行任务。编辑:很抱歉,我编辑了我的文章。好的,删除其他位置,只有如果位置,看看你是否仍然在数据库中得到错误的条目。或者那些不小心被插入的旧条目。如果您的第一个条件正常,那么我们将转到其他条件。您可能在治疗后保存位置,同时接收其他位置扫描您添加到输出中的其他位置扫描距离结果或跟踪日志,以查看正在执行的sendTask调用中的哪一个?另外,您确定要使用更高的精度吗?这意味着位置不太精确。通常情况下,如果精度返回的值较小,您会想做一些事情,因为这意味着新位置更精确。精度越小,为什么更大?更小下面是一个Aloc=70 AnewLoc=30的示例。如果(70>30+20)=真,则执行任务。编辑:很抱歉,我编辑了我的文章。好的,删除其他位置,只有如果位置,看看你是否仍然在数据库中得到错误的条目。或者那些不小心被插入的旧条目。如果您的第一个条件工作正常,那么我们将转到其他条件。我将测试它,并让您知道它是否工作,但正如您所看到的,问题出在“距离到”案例上,您没有更改任何内容。也许我错了,我将测试并更新您。@Real我认为唯一的区别是您在总和周围添加了()。这不会有任何影响,因为加法运算符的优先级高于关系运算符()。此外,由于关系运算符返回布尔值,位置的错误放置应该会导致编译器错误。我也更改了顺序。很抱歉,忽略了这一点。你是对的,64-64的情况让我很困惑,但这可能是由于第二个sendTask造成的是错误的,因为我只想在AnewLoc小于Aloc+20时执行任务。我会测试它并让您知道它是否工作,但正如您所看到的,问题是在距离案例上,您没有更改任何内容。也许我错了,我将测试并更新您。@Real我认为唯一的区别是您在总和周围添加了()。这不会有任何影响,因为加法运算符的优先级高于关系运算符()。此外,由于关系运算符返回布尔值,位置的错误放置应该会导致编译器错误。我也更改了顺序。很抱歉,忽略了这一点。您是对的,64-64的情况让我很困惑,但这可能是由于第二个sendTask造成的。但是这个条件:AnewLoc>(Aloc+20)是错误的,因为我只希望在AnewLoc小于Aloc+20时执行任务。