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 应用程序中的谷歌地图获取建议的路线?