【问题标题】:how to find distance using google places api如何使用谷歌地方 api 查找距离
【发布时间】:2013-02-10 16:43:05
【问题描述】:

我正在使用 Google pLaces api 开发应用程序。我能够获取正在使用我的应用程序的用户附近的咖啡馆列表。结果列表包括地点的详细信息,例如地点的名称、地址、纬度经度值和电话号码。 我想知道的是如何请求place api返回用户与结果列表中每个条目之间的距离。 我浏览了几个在stackoverflow上发布的讨论类似主题的链接。我也浏览了谷歌的文档,但它没有提到任何关于获得这些距离的内容。我想避免使用任何数学公式,如大圆算法,因为在这种情况下,返回的距离将是直线距离,而这不是对距离的准确估计。 那么任何人都可以告诉我如何请求位置 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?

【问题讨论】:

    标签: android


    【解决方案1】:

    我想正如你所说-你想避免使用

    任何数学公式,所以你也可以试试这个-

    您可以从位置地址获取距离

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

    如果有帮助,请点赞。没有其他的。 谢谢, 乐于助人。

    【讨论】:

    • 您好 Shridutt,感谢您的热情回复!我很感激!您提供的链接 maps.googleapis.com/maps/api/distancematrix/… 带有 a=addressFrom, b=addressT 它是否接受纬度经度值?我的应用程序将有 2 组值。一个 lat lon 值对应于用户位置,另一个 lat lon 值对应于结果集中的所有列表。使用这个网址可以帮助我拉开距离?这个服务也可以免费使用吗?请回复
    • @user1701593:您需要对此进行进一步的研发,因为目前我没有在这方面工作,但我已经在这方面工作了很长时间,所以发布了代码 sn-ps...抱歉但是,如果我有帮助,请投票...谢谢。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      您似乎担心在每个版本中更新地图键?我在市场上有一个基于地图的应用程序,你得到 1 个 prod 密钥和 1 个调试密钥(我相信它是每个开发人员的,但如果不是,它是每个应用程序的)。它与您用于签署 apk 的密钥有关。我的意思是,如果您获得了 prod api 密钥,并且只开发了这个应用程序,您可以发布许多更新,而无需再次触摸密钥(假设您不在本地进行调试密钥测试) .如果您对此感到担忧,可以将两者都保存在 AndroidManifext.xml 文件中,然后将不相关的注释掉,具体取决于您是部署到设备还是模拟器。

      【讨论】:

        【解决方案4】:

        两个地理位置之间的计算并不难,特别是对于你的任务来说,找到到附近酒店的距离。

        您可以使用完全适合您的任务的半正弦公式。

        但这些地理公式给出的是空中距离,而不是道路距离,您需要路线服务。

        【讨论】:

          【解决方案5】:

          另一种解决方案: 你也可以这样做:

          //your two locations
          Location locationA;
          Location locationB;
          
          //distance between them
          float distanceBetweenPoints = locationA.distanceTo(locationB);
          

          有点晚了,但希望这会有所帮助:)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-04-11
            • 2014-10-28
            • 1970-01-01
            相关资源
            最近更新 更多