android-maps-v2 - Android Maps v2 API...如何计算两个位置之间的距离(经纬度)

标签 android-maps-v2

在我的“原生”Android 应用程序中,我试图计算 map 上两个位置之间以英尺和/或米(如乌鸦飞翔)为单位的距离。理想情况下,会有一种方法将两个 LatLng 值(因为这是我随时可用的)作为输入并返回以米和/或码为单位的距离。如上所述,我使用的是 Android Maps v2 API。

我查看了许多关于计算距离的帖子(20-30),但没有找到任何可以帮助我解决问题的帖子。同样,这是一个原生 Android 应用程序,我使用的是 Maps v2 API。

不确定这是否是最好的方法,但我目前正在尝试使用 Location方法:

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

但不幸的是,应用程序每次都会崩溃,因为我得到的结果值为空。我已经通过调试器验证了我传递的纬度和经度虚拟值是有效的,并且 results 的值是有效的。为空(因此是问题)。这是 LogCat:
04-04 23:48:04.770: D/onMapClick(17970): lat/lng: (32.90843038503306,-117.22537234425546)
04-04 23:48:08.710: D/dalvikvm(17970): threadid=1: still suspended after undo (sc=1 dc=1 s=Y)
04-04 23:48:08.710: D/dalvikvm(17970): GC_FOR_MALLOC freed 7010 objects / 641712 bytes in 121ms
04-04 23:48:24.980: D/AndroidRuntime(17970): Shutting down VM
04-04 23:48:24.980: W/dalvikvm(17970): threadid=1: thread exiting with uncaught exception (group=0x40020950)
04-04 23:48:25.100: E/AndroidRuntime(17970): FATAL EXCEPTION: main
04-04 23:48:25.100: E/AndroidRuntime(17970): java.lang.IllegalArgumentException: results is null or has length < 1
04-04 23:48:25.100: E/AndroidRuntime(17970):    at android.location.Location.distanceBetween(Location.java:394)
04-04 23:48:25.100: E/AndroidRuntime(17970):    at com.example.googleplacesandmaps.PlacesMapActivity$1.onMapClick(PlacesMapActivity.java:259)
04-04 23:48:25.100: E/AndroidRuntime(17970):    at com.google.android.gms.maps.GoogleMap$6.onMapClick(Unknown Source)
04-04 23:48:25.100: E/AndroidRuntime(17970):    at com.google.android.gms.internal.t$a.onTransact(Unknown Source)
04-04 23:48:25.100: E/AndroidRuntime(17970):    at android.os.Binder.transact(Binder.java:249)
04-04 23:48:25.100: E/AndroidRuntime(17970):    at com.google.android.gms.maps.internal.IOnMapClickListener$Stub$Proxy.onMapClick(IOnMapClickListener.java:93)
04-04 23:48:25.100: E/AndroidRuntime(17970):    at maps.i.s.b(Unknown Source)
04-04 23:48:25.100: E/AndroidRuntime(17970):    at maps.y.v.c(Unknown Source)
04-04 23:48:25.100: E/AndroidRuntime(17970):    at maps.y.bf.onSingleTapConfirmed(Unknown Source)
04-04 23:48:25.100: E/AndroidRuntime(17970):    at maps.d.v.onSingleTapConfirmed(Unknown Source)
04-04 23:48:25.100: E/AndroidRuntime(17970):    at maps.d.j.handleMessage(Unknown Source)
04-04 23:48:25.100: E/AndroidRuntime(17970):    at android.os.Handler.dispatchMessage(Handler.java:99)
04-04 23:48:25.100: E/AndroidRuntime(17970):    at android.os.Looper.loop(Looper.java:123)
04-04 23:48:25.100: E/AndroidRuntime(17970):    at android.app.ActivityThread.main(ActivityThread.java:4627)
04-04 23:48:25.100: E/AndroidRuntime(17970):    at java.lang.reflect.Method.invokeNative(Native Method)
04-04 23:48:25.100: E/AndroidRuntime(17970):    at java.lang.reflect.Method.invoke(Method.java:521)
04-04 23:48:25.100: E/AndroidRuntime(17970):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893)
04-04 23:48:25.100: E/AndroidRuntime(17970):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:651)
04-04 23:48:25.100: E/AndroidRuntime(17970):    at dalvik.system.NativeStart.main(Native Method)

这是我目前用来尝试计算距离的方法:
            Location.distanceBetween(Double.parseDouble(user_latitude), Double.parseDouble(user_longitude),
                fxdLatitude, fxdLongitude, results);
results被定义为类变量:private float[] results = null;
不知道我在这里做错了什么。

再次,我宁愿有一种方法,将两个 LatLng 作为输入参数,因为它们都很容易获得……但也许更重要的是,我只有一个位置可用作单独的经度、纬度值……第二个位置是仅作为 LatLng 值可用,因为我是通过 onMapClick(当用户点击屏幕时)获取它的。所以要使用方法distanceBetween我需要某种方式将此 LatLng 值转换为纬度/经度对才能使用它。有人知道怎么做吗?

希望有一种计算距离的简单方法和一种从 LatLng 值“提取”纬度/经度的简单方法。

最佳答案

从两者制作 Location 对象怎么样?

private float distanceBetween(LatLng latLng1, LatLng latLng2) {

        Location loc1 = new Location(LocationManager.GPS_PROVIDER);
        Location loc2 = new Location(LocationManager.GPS_PROVIDER);

        loc1.setLatitude(latLng1.latitude);
        loc1.setLongitude(latLng1.longitude);

        loc2.setLatitude(latLng2.latitude);
        loc2.setLongitude(latLng2.longitude);


        return loc1.distanceTo(loc2);
    }

关于android-maps-v2 - Android Maps v2 API...如何计算两个位置之间的距离(经纬度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15828315/

相关文章:

Android 使用方位映射 V2 newLatLngBounds

android - 谷歌地图 V2 android 应用程序中的空数组错误

android - 有 Android Google map v2 标记管理器吗?

android - 尝试在 FrameLayout 中使用 MapFragment 时出现错误/异常

android - 谷歌地图 API v2 : How to make markers non-clickable?

android - 基于谷歌地图 API v2 的 Android 应用程序启动时的模糊 map 图 block

没有clear()的Android map 更改瓦片覆盖

Android map 禁用 3D 模式

android - 如何制定从我的位置到任何标记的行车路线

android - Maps V2 myLocation 蓝点回调