使用谷歌地点API如何查找距离

5
我正在使用Google Places API开发应用程序。我能够获取使用我的应用程序的用户附近咖啡馆的列表。结果列表包括场所名称、地址、纬度经度值和电话号码等详细信息。 我想知道如何请求Place API返回用户和结果列表中每个条目之间的距离。 我已经查看了一些在stackoverflow上发布的讨论类似主题的链接。我也查看了Google的文档,但它没有提到如何获取这些距离。我希望避免使用任何数学公式,比如大圆算法,因为在这种情况下,返回的距离将是直线距离,这不会是一个准确的距离估计。 所以有人可以告诉我如何请求Places API给我用户和结果中每个条目之间的距离吗?
我查看过的一些链接是: 如何使用Geolocation或Similiar API查找两个地点之间的距离而不嵌入Google地图?

使用Google Places API在Android中查找距离(公里)

如何在Android中获取公里数?

5个回答

5

我认为你想避免使用任何数学公式,那么你也可以尝试这个方法 -

你可以通过地址获取位置的距离。

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

如果您有位置的经纬度信息,可以通过以下方式获取该位置的地址:
```html

如果您有位置的经纬度信息,可以通过以下方式获取该位置的地址:

```
 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";
    }   
   }

请点赞如果有帮助。谢谢,乐于帮助并享受它。

@user1701593:你需要进一步研究这个问题,因为目前我没有在处理这个问题,但是我以前很久之前曾经处理过这个问题,所以发布了代码片段...对此我感到抱歉。如果我有帮助,请点赞...谢谢。 - Shridutt Kothari

3
以下是Haversine的实现。然而,我仍然觉得Google Places API应该提供一些服务来帮助找到两点之间的确切距离。如果有人知道,请告诉我。就目前而言,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;
    }
}

0

通过使用此处描述的方程式http://williams.best.vwh.net/avform.htm#Dist,可以找到两点之间的距离。记住,要使用弧度而不是角度!

看起来你对每次发布都需要更新地图密钥有所担忧?我在市场上有一个基于地图的应用程序,你会得到1个生产密钥和1个调试密钥(我认为这是每个开发人员,但如果不是,那就是每个应用程序)。这与您用于签署apk的密钥有关。我的意思是,如果您获得了生产api密钥,并且只开发此一个应用程序,您可以发布许多更新而无需再次触及密钥(假设您不在本地进行调试密钥测试)。如果您担心它,您可以将两者都保留在AndroidManifest.xml文件中,并根据您是部署到设备还是模拟器,注释掉不相关的内容。


-1

计算两个地理位置之间的距离并不困难,尤其是在您需要查找附近酒店的任务中。

您可以使用哈弗赛恩公式,这个公式非常适合您的任务。

但是这些地理公式只能提供空气距离,而对于道路距离,您需要一个路由服务。


-2
另一种解决方案: 你也可以这样做:
//your two locations
Location locationA;
Location locationB;

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

可能有点晚了,但希望这能帮到你 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接