在我的「原生」Android應用程序中,我試圖計算以英尺和/或米爲單位的距離(如烏鴉)地圖上的兩個位置。理想情況下,將會有一個方法需要兩個LatLng值(因爲這是我已經可用的)作爲輸入,並以米和/或碼返回距離。如上所述,我正在使用Android Maps v2 API。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值使用,因爲我通過MapClick獲取它(當用戶點擊屏幕時)。因此,要使用方法distanceBetween
,我需要將此LatLng值轉換爲緯度/經度對以便能夠使用它。任何人都知道如何做到這一點?
希望有一個簡單的方法來計算距離和一個簡單的方法來從LatLng值「提取」經度/緯度。
如何獲得與中心在谷歌地圖V2經緯度半徑? – 2013-07-18 11:32:57
@KetanMehta如果您指的是可見區域的半徑,則可以通過LatLngBounds bbox = GoogleMap.getProjection()。getVisibleRegion()。latLngBounds獲取視口。之後只需使用Sharj距離計算方法來獲得bbox.southwest和bbox.northeast之間的距離(視口的直徑是多少)。 – Marco 2014-08-29 10:41:04