比较LatLng和/或位置对象

时间:2014-06-24 21:46:25

标签: android

我有一些代码首先创建一些LatLng对象,如下所示(仅作为示例):

LatLng turnOne = new LatLng(52.512657, 1.011376);

在onLocationChanged方法中,我想检查我用当前位置创建的LatLng,如果它们相等,则执行某些操作(在我的情况下触发语音)。

我尝试了很多东西,例如:

  1. 从Location对象创建LatLng。我相信这可能会有效,但两个比较LatLng对象必须准确吗?如果是这样,试图在移动中匹配它们似乎不太可能。

    LatLng a = new LatLng(location.getLatitude(), location.getLongitude());
    if(turnOne.equals(a))
    {
        ttobj.speak("stuff", 
                TextToSpeech.QUEUE_FLUSH, null);
    }
    
  2. 从LatLng创建Location对象。我不确定为什么这不起作用。我正在比较两个位置对象并允许10米或更低的阈值(在路上)但它似乎不起作用(我听不到语音)。

     Location loc1 = new Location("");
     loc1.setLatitude(turnOne.latitude);
     loc1.setLongitude(turnOne.longitude);
     if(location.distanceTo(loc1) <= 10)
     {
         ttobj.speak("stuff", 
                TextToSpeech.QUEUE_FLUSH, null);
     }
    
  3. 因此,我的问题是如何比较两个LatLng并允许跟踪(5米)的微小阈值或比较两个位置。

    我唯一能找到这个问题的是Comparing two LatLng objects in google map v2 android,但它并没有完全帮助我。

2 个答案:

答案 0 :(得分:4)

只是为此提供答案。

比较全局LatLng对象,例如:

LatLng aLatLng = new LatLng(51.116492, -0.541767);

到以下提供的位置参数:

public void onLocationChanged(Location location)

使用正常工作:

Location locationOne = new Location("");
locationOne.setLatitude(aLatLng.latitude);
locationOne.setLongitudeaLatLng.longitude);
float distanceInMetersOne = locationOne.distanceTo(location);

答案 1 :(得分:1)

使用.equals是一个坏主意,因为lat和long不太可能完全相同。直接比较浮点数永远不是一个好主意。如果您还没有2个位置对象,我会使用:

Location.distanceBetween(double startLatitude,double startLongitude,double endLatitude,double endLongitude,float [] results)

这可能是你最好的选择。顺便说一句,如果您想在设备接近某个位置时触发,请考虑Geofencing或LocationManager接近警报。