2013-02-10 58 views
4

我正在開發一個使用谷歌pLaces api的應用程序。我能夠獲得正在使用我的應用程序的用戶附近的咖啡館列表。結果列表包括地點的詳細信息,如地點名稱,地址,緯度經度值和電話號碼。 我想知道的是我如何請求放置api來返回用戶和結果列表中每個條目之間的距離。 我已經經歷了幾條鏈接發佈在討論類似主題的stackoverflow上。我也瀏覽了Google的文檔,但沒有提到獲取這些距離的任何信息。我想避免使用任何像大圓算法這樣的數學公式,因爲在這種情況下,返回的距離將是直線距離,並且不能精確估計距離。 所以任何人都可以請告訴我請求的地方api給我的用戶和結果中的每個條目之間的距離?如何使用谷歌地點api查找距離

幾個我所經歷的環節是: How do i find distance between one place to another using Geolocation or Similiar API without embedding a Google Map?

find Distance in kilometers in Android using google places Api

How to get Distance Kilometer in android?

回答

0

兩點之間的距離可以通過使用此處描述的公式求出:http://williams.best.vwh.net/avform.htm#Dist記住,用弧度,不是度數!

看來你有關於在每個版本中更新地圖密鑰的擔憂嗎?我在市場上有一個基於地圖的應用程序,您可以獲得1個產品密鑰和1個調試密鑰(我相信這是每個​​開發人員,但如果不是,則是每個應用程序)。它與你用來簽署APK的密鑰有關。我所說的是,如果你得到你的prod API key,並且只開發這個應用程序,那麼你可以發佈許多更新,而不必再次觸摸該鍵(假設你不在本地進行調試密鑰測試) 。如果你關心它,你可以將它們都保存在你的AndroidManifext.xml文件中,並根據你是在部署到設備還是模擬器來評論不相關的文件。

-1

另一種解決方案: 你也可以只做到這一點:

//your two locations 
Location locationA; 
Location locationB; 

//distance between them 
float distanceBetweenPoints = locationA.distanceTo(locationB); 

有點晚,但希望這有助於:)

3

我覺得你說 - 你想使用

避免自己

任何數學公式,所以你可以試試這個 -

你可以從位置的地址

http://maps.googleapis.com/maps/api/distancematrix/xml?origins="+a+"&destinations="+b+"&mode=driving&language=en-EN&sensor=false with a=addressFrom, b=addressTo 

如果你有緯度,經度的位置,就可以得到該位置的地址爲:

double latiTude = 10.3929393; 
double longiTude = 150.93984884; 

Geocoder geocoder = new Geocoder(getBaseContext(), Locale.getDefault()); 
    GeoPoint p= new GeoPoint((int) (latiTude * 1E6), (int) (longiTude * 1E6)); 
    List<Address> address = geocoder.getFromLocation(
                p.getLatitudeE6()/1E6, 
                p.getLongitudeE6()/1E6, 1); 
    if (address.size() > 0) 
    { 
    String addressFroLatLong= ""; 
    for (int i = 0; i < address.get(0).getMaxAddressLineIndex(); i++) 
    { addressFroLatLong+= address.get(0).getAddressLine(i) + "\n"; 
    } 
    } 

請給予好評,如果有幫助。沒有其他的。 謝謝, 高興地幫助享受..

+1

嗨Shridutt,謝謝你的回覆!我很感激!您提供的鏈接http://maps.googleapis.com/maps/api/distancematrix/xml?origins="+a+"&destinations="+b+"&mode=driving&language=en-EN&sensor=false with a = addressFrom ,b =地址T是否接受緯度經度值?我的應用程序將有2組值。一個緯度值對應於用戶位置和對應於結果集中所有列表的其他緯度值。使用這個網址將幫助我獲得距離?也是這個服務免費使用?請回復 – user1701593 2013-02-10 17:55:29

+0

@ user1701593:您需要對此進行進一步的研發,因爲目前我不在這方面工作,但是在發佈代碼片段之前,我已經工作了很長時間... 對不起,但請注意upvote,如果我幫助...謝謝。 – 2013-02-10 18:02:03

0

兩個地理位置之間的計算並不困難,特別是對於你的任務,找到附近酒店的距離。

你可以使用haversine公式,這完全適合你的任務。

但是,這些地理公式給出了您需要路由服務的空中距離,而不是道路距離。

2

半剛體的實現如下。不過,我仍然覺得應該有一些服務提供的谷歌地方API將有助於找到兩點之間的確切距離。如果有人知道然後pl讓我知道..截至目前Haversine是一個很好的替代品..

import java.lang.*; 
import java.io.*; 
import java.math.*; 
public class DistanceCalculation { 

public static void main(String[] args) 
{ 
    double lon11 =-97.116121; 
     double lat11=32.734642; 

     double lon22=-97.111658; 
     double lat22=32.731918; 

    // calculateDistance(lat11,lon11, lat22, lon22); 
     distFrom(lat11, lon11, lat22, lon22); 

} 
public static double distFrom(double lat1, double lng1, double lat2, double lng2) { 
    double earthRadius = 3958.75; 
    double dLat = Math.toRadians(lat2-lat1); 
    double dLng = Math.toRadians(lng2-lng1); 
    double sindLat = Math.sin(dLat/2); 
    double sindLng = Math.sin(dLng/2); 
    double a = Math.pow(sindLat, 2) + Math.pow(sindLng, 2) 
      * Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)); 
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    double dist = earthRadius * c; 
    System.out.println(dist); 
    return dist; 
    } 
}