android获取和解析谷歌路线

Posted

技术标签:

【中文标题】android获取和解析谷歌路线【英文标题】:android get and parse Google Directions 【发布时间】:2010-06-03 10:17:25 【问题描述】:

google Directions API

我现在阅读了本指南,我可以构建一个正确的请求来接收包含从地址 A 到地址 B 的方向的 xml 文件。我需要一些说明和示例,说明如何阅读此 xml 以在安卓地图视图。我还想知道 xml 中这个标签的代表是什么:

<overview_polyline>
<points>
a~l~Fjk~uOnzh@vlbBtc~@tsE`vnApwA`dw@~w\|tNtqf@lYd_Fblh@rxo@b
@xxSfytAblk@xxaBeJxlcBb~t@zbh@jc|BxC`rv@rw|@rlhA~dVzeo@vrSncAxf]fjz@
xfFbw~@dzA~dA|zOxbrBbdUvpo@`cFp~xBc`Hk@nurDznmFfwMbwz@bbl@lq~@lo
Ppxq@bw_@v|CbtY~jGqeMbiF|n\~mbDzeVh_Wr|Efc\x`IjkEmAb~uFcNdxBjp]
fulBiwJpgg@|kHntyArpb@bijCk_Kv~eGyqTj_|@`uV`k|DcsNdwxAott@rq@_gc@nu`CnvH
x`k@dse@j|p@zpiAp|gEicy@`omFvaErfo@igQxnlApqGze~AsyRzrjAb__@ftyBpIlo_B
flmA~yQftNboWzoAlzp@mz`@|_@fda@jakEitAnfB_a]lexClshBtmqAdmY_hLxiZd~XtaBndgC
</points>
<levels>BBBAAAAABAABAAAAAABBAAABBAAAABBAAABABAAABABBAABAABAAAABABABABBABAABB</levels> 
</overview_polyline> 

谢谢

【问题讨论】:

你可能想要使用这个为你解析所有内容的小型灯光库:github.com/perezdidac/google-directions-api 【参考方案1】:

我在网上找到了这个例子,我会尝试使用它。 polyline decoding example

private List<GeoPoint> decodePoly(String encoded) 

  List<GeoPoint> poly = new ArrayList<GeoPoint>();
  int index = 0, len = encoded.length();
  int lat = 0, lng = 0;

  while (index < len) 
      int b, shift = 0, result = 0;
      do 
          b = encoded.charAt(index++) - 63;
          result |= (b & 0x1f) << shift;
          shift += 5;
       while (b >= 0x20);
      int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
      lat += dlat;

      shift = 0;
      result = 0;
      do 
          b = encoded.charAt(index++) - 63;
          result |= (b & 0x1f) << shift;
          shift += 5;
       while (b >= 0x20);
      int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
      lng += dlng;

      GeoPoint p = new GeoPoint((int) (((double) lat / 1E5) * 1E6),
           (int) (((double) lng / 1E5) * 1E6));
      poly.add(p);
  

  return poly;

【讨论】:

【参考方案2】:

我还尝试在 android 中使用 Google 的 Direction Api。 所以我做了一个开源项目来帮助做到这一点。 你可以在这里找到它:https://github.com/MathiasSeguy-Android2EE/GDirectionsApiUtils

它是如何工作的,绝对简单:

public class MainActivity extends ActionBarActivity implements DCACallBack
/**
 * Get the Google Direction between mDevice location and the touched location using the     Walk
 * @param point
 */
private void getDirections(LatLng point) 
     GDirectionsApiUtils.getDirection(this, startPoint, endPoint, GDirectionsApiUtils.MODE_WALKING);


/*
 * The callback
 * When the directions is built from the google server and parsed, this method is called and give you the expected direction
 */
@Override
public void onDirectionLoaded(List<GDirection> directions)         
    // Display the direction or use the DirectionsApiUtils
    for(GDirection direction:directions) 
        Log.e("MainActivity", "onDirectionLoaded : Draw GDirections Called with path " + directions);
        GDirectionsApiUtils.drawGDirection(direction, mMap);
    

【讨论】:

【参考方案3】:

我已经(非常轻微地)调整了上面 urobo 的答案,以便为您提供适用于 Android V2 版 Google 地图的 LatLngs:

private List<LatLng> decodePoly(String encoded) 

    List<LatLng> poly = new ArrayList<LatLng>();
    int index = 0, len = encoded.length();
    int lat = 0, lng = 0;

    while (index < len) 
        int b, shift = 0, result = 0;
        do 
            b = encoded.charAt(index++) - 63;
            result |= (b & 0x1f) << shift;
            shift += 5;
         while (b >= 0x20);
        int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
        lat += dlat;

        shift = 0;
        result = 0;
        do 
            b = encoded.charAt(index++) - 63;
            result |= (b & 0x1f) << shift;
            shift += 5;
         while (b >= 0x20);
        int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
        lng += dlng;

        LatLng p = new LatLng((double) lat / 1E5, (double) lng / 1E5);
        poly.add(p);
    
    return poly;

【讨论】:

【参考方案4】:

您可能希望快速查看将由 waypoint_polyline 和坐标列表直接创建的路线。对于这个谷歌已经发布了解码api“交互式折线编码器实用程序”

您可以将 waypoint_polyline 值粘贴到地址的编码折线文本字段 Interactive Polyline Encoder Utility

【讨论】:

以上是关于android获取和解析谷歌路线的主要内容,如果未能解决你的问题,请参考以下文章

是否可以从 android2.2 应用程序中的谷歌地图获取建议的路线?

Android,在谷歌地图上绘制路线

谷歌地图上两个位置之间的Android路线

Android 谷歌地图 行车路线

有没有办法使用谷歌为 mkmapview 获取路线(只是路线)?

谷歌地图跨平台网址在“应用内导航”后无法在 Android 上加载路线