我有一些代码首先创建一些LatLng对象,如下所示(仅作为示例):
LatLng turnOne = new LatLng(52.512657, 1.011376);
在onLocationChanged方法中,我想检查我用当前位置创建的LatLng,如果它们相等,则执行某些操作(在我的情况下触发语音)。
我尝试了很多东西,例如:
从Location对象创建LatLng。我相信这可能会有效,但两个比较LatLng对象必须准确吗?如果是这样,试图在移动中匹配它们似乎不太可能。
LatLng a = new LatLng(location.getLatitude(), location.getLongitude());
if(turnOne.equals(a))
{
ttobj.speak("stuff",
TextToSpeech.QUEUE_FLUSH, null);
}
从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);
}
因此,我的问题是如何比较两个LatLng并允许跟踪(5米)的微小阈值或比较两个位置。
我唯一能找到这个问题的是Comparing two LatLng objects in google map v2 android,但它并没有完全帮助我。
答案 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接近警报。