使用新的Google Maps API解码折线 [英] Decoding polyline with new Google Maps API

查看:75
本文介绍了使用新的Google Maps API解码折线的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在绘制地图中两点之间的路线。我以这种方式获得积分:

  StringBuilder urlString = new StringBuilder(); 
urlString.append(http://maps.googleapis.com/maps/api/directions/json);
urlString.append(?origin =); // from
urlString.append(Double.toString(src.latitude));
urlString.append(,);
urlString.append(Double.toString(src.longitude));
urlString.append(& destination =); // to
urlString.append(Double.toString(dest.latitude));
urlString.append(,);
urlString.append(Double.toString(dest.longitude));
urlString.append(& sensor = false& mode =);
if(tipo!= null){
urlString.append(tipo);
}
return urlString.toString;

我收到Google的回复,并获得JSON:

  resp = new JSONObject(builder.toString()); 
Log.i(Location,Contenido del kml:+ resp);
JSONArray routeObject = resp.getJSONArray(routes);
JSONObject routes = routeObject.getJSONObject(0);
JSONObject overviewPolylines = routes
.getJSONObject(overview_polyline);
字符串encodedString = overviewPolylines.getString(points);
ArrayList< LatLng> puntos = decodePoly(encodedString);

我从google获得的回复:(以JSON格式):

 回复:{status:OK,routes:[{waypoint_order:[],summary:R-3 and A -3\" , 边界:{ 西南:{ LNG: -  3.676540000000001, LAT:40.00040000000001}, 东北:{ LNG: -  2.99933, LAT:40.43357}},腿:[{duration:{value:3267,text:54 mins},distance:{value:85039,text:85.0 km},end_location {lng: -  2.99933,lat:40.00040000000001},start_address:Calle del GeneralDíazPorlier,西班牙马德里91,28006,end_address:Camino Veinticuatro,2,16400Tarancón,昆卡,西班牙,start_location:{lng: -  3.676540000000001,lat:40.43331000000001},via_waypoint:[],steps:[{html_instructions:head< b> north< \ / b> ;< b> Calle del GralDíazPorlier< \ / b>朝着< b> Calle de Maldonado< \ / b>,duration:{value:6, min},distance:{value:29,text:29 m},end_location:{lng: -  3.676520000000001,lat:40.43357 }, 折线:{ 点: ec​​xuFjamUs @ C}, TRAVEL_MODE: 驾驶, START_LOCATION:{ LNG: -  3.676540000000001, LAT:40.43331000000001}},{ html_instructions :取第一个< b>右侧< \ / b>到< b> Calle de Maldonado< \ / b>,duration:{value:62,text:1 min},distance:{value:266, :0.3 km},end_location:{lng: -  3.6734,lat:40.43345},polyline:{points:ydxuFfamUPkG @ a @ JuGGk @},travel_mode: DRIVING,start_location:{lng: -  3.676520000000001,lat:40.43357}},{html_instructions:取第二个< b>的右侧< \ / b>到< b> Calle de Fco。 Silvela,duration:{value:57,text:1 min},distance:{value:245,text:0.2 km} END_LOCATION:{ LNG: -  3.671830000000001, LAT:40.4316}, 折线:{ 点: adxuFvmlURQl | E @ zAoATSTMf @] pBeBLK}, TRAVEL_MODE: 驾驶, start_location:{lng: -  3.6734,lat:40.43345}},{html_instructions:Slight< b> right< \ / b>到Calle de Francisco Silvela/b,持续时间:{值:51,文本:1分钟},距离:{值:437,文本:0.4 km},end_location:{lng: -  3.66913,lat:40.42827},polyline:{points:oxwuF | clUJADAFCbBkAjAeA`BoA ^ [XUPMLMFEnAeALIdBuAZUPMXS travel_mode:DRIVING,start_location:{lng: -  3.671830000000001,lat:40.4316}},{html_instructions:Turn< b> right< \ / b>到< b> P1上。 de Manuel Becerra< \ / b>,duration:{value:32,text:1 min},distance:{value:154,text }, END_LOCATION :{ LNG : -  3.668380000000001, LAT :40.42827}, 折线 :{ 点 : ucwuF`skU @ @@@@@ @@@ FBD F·??? @ FAFAFADEDCFGDGDIBI @ I @沃顿KAI IAGAGAGCGCC ACEEEIGGEICI I G @ IBGD }, TRAVEL_MODE : 驾驶, START_LOCATION:{ LNG????: -  3.66913, LAT:40.42827}},{ html_instructions:右转< b>< \ / b>到'< b> Calle Alcala< \ / b>','duration':{value:61,text:1 min},distance:{value:709, :0.7 km},end_location:{lng: -  3.66107,lat:40.43126000000001},polyline:{points:ucwuFjnkUo @} A_AcCiEeLKYq @ mBYq @ [o @ u @ KAQ] aAI [EQQu @Gc @ QwAM_BEa @ AU}},travel_mode:DRIVING,start_location:{lng: -  3.668380000000001,lat:40.42827}},{html_instructions:Turn< b取代;右< \ / b个A-4,持续时间:{值:44,文本:1分钟 }distance:{value:453,text:0.5 km},end_location:{lng: -  3.660580000000001,lat:40.42720000000001}polyline : kvwuFt`jU\\CjIg @ nBKD rCOvDY}, TRAVEL_MODE: 驾驶, START_LOCATION:{ LNG: -  3.66107, LAT:40.43126000000001}},{ html_instructions: 持续直线,持续时间:{值:45,文本:1分钟},距离:{值:1009,文本:1.0公里},end_location :{ LNG: -  3.659120000000001, LAT:40.41822000000001}, 折线:{ 点: _} vuFr} iUzKgBvCe @ T @ KvGm @ hDUbAMPCZElAM | d _ @ ^恩@ EjBEd @ Df的@ DnAD} ,travel_mode:DRIVING,start_location:{lng: -  3.660580000000001,lat:40.42720000000001}},{html_instructions:取出exit< b> 7B< \ / b>合并到< b> b> M-23< \ / b>朝着< b>Vicálvaro\\ / R-3 \ / Valencia< \ / b> ;,持续时间:{值:117,文本:2分钟}, value:2552,text:2.6 km},end_location:{lng: -  3.63392,lat:40.41499},polyline:{points:{duuFntiUFHB @ ^ PDBFFFDDFDFBDDFBH @ BBJ @ Folding @·F @ H + FAH?FAF?FADAFAFCDADADEFCFEDEDEDEBEBEBGBE @ G ^ | E @ G·G·EAG?GCGAGCEEGEEEEEEGEICIEIAKCKAK·K?MDGA·G·E'KJq @ BODY @ CBODW 2 C @ I @反铁磁@ F_ @V {An @ gED [@C?EHe @ Ho @@ G?A ^ {BjA} HF [tAiGzBwIdAcEVgApAuFr @ sEF] Ju @ DW?EDUHa @ f @ qEFo @ f @ iGXmHDgFCgGG {DM 

最后,我用这种方式解码接收到的字符串,在Stackoverflow中我找到了很多答案:

  private ArrayList< LatLng> decodePoly(字符串编码){

Log.i(Location,String received:+ encoded);
ArrayList< 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 + = 5;
} while(b> = 0x20);
int dlat =((result& 1)!= 0?〜(result>> 1):( result>> 1));
lat + = dlat;

shift = 0;
结果= 0;
do {
b = encoded.charAt(index ++) - 63;
result | =(b& 0x1f)<<转移;
shift + = 5;
} while(b> = 0x20);
int dlng =((result& 1)!= 0?〜(result>> 1):(result>> 1));
lng + = dlng;

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

for(int i = 0; i< poly.size(); i ++){
Log.i(Location,Point sent:Latitude: + poly.get(i).latitude +Longitude:+ poly.get(i).longitude);
}
返回poly;
}

这是我认为错误的地方,因为我设置了一个正在解码的点,答案如下所示:

  04-10 13:33:54.578:I / Location (25065):发送点:纬度:90.0经度:-110.0 
04-10 13:33:54.578:I /地点(25065):发送点:纬度:90.0经度:-120.0
04- 10 13:33:54.578:我/地点(25065):发送点:纬度:90.0经度:100.0
04-10 13:33:54.578:I /地点(25065):发送点:纬度:90.0经度:120.0
04-10 13:33:54.578:我/地点(25065):发送点数:纬度:90.0经度:40.0

明显地,这些点被严重分析。结果是,任何地方都没有画线。



我的问题是...任何人都知道如何解析Google的答案,并将其转换为LatLng对象(不是GeoPoints对象)?

谢谢!

编辑:



  04-10 13:50:51.608:I / Location(25065):要解码的字符串:gcxuFjamUq @ CPkGLwHJ} @ hCuBdEeDf @ SrJuHnG {埃德@星期五@ q因子@ AMAM @沃顿ë@ DaIaSiEuLqAwJ〜Mw为@〜ZwDtZuC`FKbCVjA`ANdAs @ NBW @ PY @]ç@燕麦} DHC {PlBcM〜GAY | DyS`BmPRy] yBu \UsNvAqObAuEnC} KpAqIh @ GK [} NcByWXoRt @} GlDeWvFcq @ nFi` @〜绿} \ | @ aDdDoLn` @} GAFE @ upA`JyV | CIN〜@的uId @ {ZyBwVkBmOwB {^ ASNT @ IWB @ qYcCyS_DkPmAaK {@ GRN {RbCkWrFgUbHmPxLsP | JwIpPwN | G} JFE} I | C_KlCsNvAwSFaQj @ I] jCmXbHg\pIgSpGaLnN} P`JsHfVaNbQkHtZyIrOsCnTaCx\aA`i @ b @ nSRz] K`J {AxJiDfNkJjU {WbKkJpGeEpVkPpEiEzMcQjQw] nJyM〜IoJ`IoKnH {NrOaWtIeJdNgNrLcPjKqOhIuI〜 MeJxKgErR {CN] EjQkBjHqBfJeE | \yTlI_JvEqJxHsS | XUC @〜IER | EIRR @ @ KEZ} sNOoL_B路@ mCsFgKkCoGwAsG]}} N`CuO`D GjHoHtFwC | HgBhFg @ FJ} BtHaF〜D_FjLqSfGqE | FcBnGEnEv @ xK`BzNeAxQfAlJ {@jI wEjE} FvBuF | B {NtCsNrBgEdHiIdGuIxDoFpGkFhDaBrHyBbF [pHPlDg @ jEuBnCkCtFgKjEqEfIcGpC {d | GoNdAcExAkSjBgDrCsBpDa @ vHLfSAfBk @ nE_F | Im` @ tO_ZxCyEzJmKtHyElG_ClZeF |百灵@ sIlQaD | EuChGkHnK {MdIsMfPwa @ bDeJpD_RpFsz @ nA的} IrCqIrYoa @ | BeGlEiYpD} HbKoRfCyKdBwUjEmo @ zBkKzDyJvCeQdB} LJqGmAqQJ_Gx @ uFtHkO` ImMfMmXtFySpCkXRuN] aYVoT〜@} {LXB NVD {OjJaYbFsLnCcEtLoMfJyXzIiXbIiL〜D_EzQcMjDeF | AcFhA_M`BkXpC_KjCsDnDeClQcHvEgElFqJfF_Jp\mWzd @ k]的`WkWlVy` @ nOcTz` @ _s @ rP_ZbNkQ〜涂^ jJaUhCuIpHgUrPi\zd @ UQ @〜McQh\e] VTAU 〜〜KCF {KoGhG {KZF} HzGmDbDwBfDiEzB @ GbEmTrBsHpCuFxe OQ @ XB @ EL @ tDgC`ZeJnXkHrKmB〜EEB〜13 C {A`Ce @ bCUrBoAnAuGSqIn @ yEhDeOrCuQ | A} EvAwFdDgAfGSrHUJ\p @ BJ @ _A |鳌@ TCSD | C} Rj @ wAdCuW〜Ds] VCJw @ OUpEc_ @ jDKbDwB 

如果用LatLng formate,则表示LatLng对象被创建,你可以在decodePoly方法中看到。这些latLng对象被添加到PolylineOptions对象中,这样就可以通过这种方式添加到地图中:

  PolylineOption ruta = new PolylineOptions (); 
for(int i = 0; i< puntos.size(); i ++){
ruta.add(new LatLng(puntos.get(i).latitude,puntos.get(i).longitude ));
} // puntos是一个数组,其中decodePoly方法返回的数组存储为
ruta.color(Color.RED).width(7);
Polyline polygon = mapa.addPolyline(ruta);


解决方案

我改变了我用于这个的decodePoly我在谷歌长时间搜索后发现,现在路线绘制得当。



http://wptrafficanalyzer.in/blog/route-between-two-locations-with-waypoints-in-google-map-android-api-v2/



更改

  LatLng p = new LatLng((int)(((double)lat / 1E5)* 1E6),(int)(((double)lng / 1E5 * 1E6))); 

for

 <$ ((((double)lat / 1E5)),((((double)lng / 1E5))); c(c)> LatLng p = new LatLng 

现在可以使用。


I am drawing a route between two points in a map. I receive the points this way:

StringBuilder urlString = new StringBuilder();
    urlString.append("http://maps.googleapis.com/maps/api/directions/json");
    urlString.append("?origin=");// from
    urlString.append(Double.toString(src.latitude));
    urlString.append(",");
    urlString.append(Double.toString(src.longitude));
    urlString.append("&destination=");// to
    urlString.append(Double.toString(dest.latitude));
    urlString.append(",");
    urlString.append(Double.toString(dest.longitude));
    urlString.append("&sensor=false&mode=");
    if (tipo != null) {
        urlString.append(tipo);
    }
return urlString.toString;

I receive the response from Google, and get the JSON:

resp = new JSONObject(builder.toString());
                Log.i("Location", "Contenido del kml: "+resp);
                JSONArray routeObject = resp.getJSONArray("routes");
                JSONObject routes = routeObject.getJSONObject(0);
                JSONObject overviewPolylines = routes
                        .getJSONObject("overview_polyline");
                String encodedString = overviewPolylines.getString("points");
                ArrayList<LatLng> puntos=decodePoly(encodedString);

The response I get from google: (in JSON format):

Response: {"status":"OK","routes":[{"waypoint_order":[],"summary":"R-3 and A-3","bounds":{"southwest":{"lng":-3.676540000000001,"lat":40.00040000000001},"northeast":{"lng":-2.99933,"lat":40.43357}},"legs":[{"duration":{"value":3267,"text":"54 mins"},"distance":{"value":85039,"text":"85.0 km"},"end_location":{"lng":-2.99933,"lat":40.00040000000001},"start_address":"Calle del General Díaz Porlier, 91, 28006 Madrid, Spain","end_address":"Camino Veinticuatro, 2, 16400 Tarancón, Cuenca, Spain","start_location":{"lng":-3.676540000000001,"lat":40.43331000000001},"via_waypoint":[],"steps":[{"html_instructions":"Head <b>north<\/b> on <b>Calle del Gral Díaz Porlier<\/b> toward <b>Calle de Maldonado<\/b>","duration":{"value":6,"text":"1 min"},"distance":{"value":29,"text":"29 m"},"end_location":{"lng":-3.676520000000001,"lat":40.43357},"polyline":{"points":"ecxuFjamUs@C"},"travel_mode":"DRIVING","start_location":{"lng":-3.676540000000001,"lat":40.43331000000001}},{"html_instructions":"Take the 1st <b>right<\/b> onto <b>Calle de Maldonado<\/b>","duration":{"value":62,"text":"1 min"},"distance":{"value":266,"text":"0.3 km"},"end_location":{"lng":-3.6734,"lat":40.43345},"polyline":{"points":"ydxuFfamUPkG@a@JuGGk@"},"travel_mode":"DRIVING","start_location":{"lng":-3.676520000000001,"lat":40.43357}},{"html_instructions":"Take the 2nd <b>right<\/b> onto <b>Calle de Fco. Silvela<\/b>","duration":{"value":57,"text":"1 min"},"distance":{"value":245,"text":"0.2 km"},"end_location":{"lng":-3.671830000000001,"lat":40.4316},"polyline":{"points":"adxuFvmlURQl@e@zAoATSTMf@]pBeBLK"},"travel_mode":"DRIVING","start_location":{"lng":-3.6734,"lat":40.43345}},{"html_instructions":"Slight <b>right<\/b> onto <b>Calle de Francisco Silvela<\/b>","duration":{"value":51,"text":"1 min"},"distance":{"value":437,"text":"0.4 km"},"end_location":{"lng":-3.66913,"lat":40.42827},"polyline":{"points":"oxwuF|clUJADAFCbBkAjAeA`BoA^[XUPMLMFEnAeALIdBuAZUPMXS"},"travel_mode":"DRIVING","start_location":{"lng":-3.671830000000001,"lat":40.4316}},{"html_instructions":"Turn <b>right<\/b> onto <b>Pl. de Manuel Becerra<\/b>","duration":{"value":32,"text":"1 min"},"distance":{"value":154,"text":"0.2 km"},"end_location":{"lng":-3.668380000000001,"lat":40.42827},"polyline":{"points":"ucwuF`skU@?@@@@@?@@@?FBD?F@FAFAFADEDCFGDGDIBI@I@K@KAI?IAGAGAGCGCC?ACEEEIGGEICI?I?G@IBGD"},"travel_mode":"DRIVING","start_location":{"lng":-3.66913,"lat":40.42827}},{"html_instructions":"Turn <b>right<\/b> onto <b>Calle Alcala<\/b>","duration":{"value":61,"text":"1 min"},"distance":{"value":709,"text":"0.7 km"},"end_location":{"lng":-3.66107,"lat":40.43126000000001},"polyline":{"points":"ucwuFjnkUo@}A_AcCiEeLKYq@mBYq@[o@u@kB?KAQ]aAI[EQQu@Gc@QwAM_BEa@AU"},"travel_mode":"DRIVING","start_location":{"lng":-3.668380000000001,"lat":40.42827}},{"html_instructions":"Turn <b>right<\/b> onto the ramp to <b>M-30\/A-3\/A-4<\/b>","duration":{"value":44,"text":"1 min"},"distance":{"value":453,"text":"0.5 km"},"end_location":{"lng":-3.660580000000001,"lat":40.42720000000001},"polyline":{"points":"kvwuFt`jU\\CjIg@nBKD?rCOvDY"},"travel_mode":"DRIVING","start_location":{"lng":-3.66107,"lat":40.43126000000001}},{"html_instructions":"Continue straight","duration":{"value":45,"text":"1 min"},"distance":{"value":1009,"text":"1.0 km"},"end_location":{"lng":-3.659120000000001,"lat":40.41822000000001},"polyline":{"points":"_}vuFr}iUzKgBvCe@t@KvGm@hDUbAMPCZElAM|D_@^En@EjBEd@Df@DnAD"},"travel_mode":"DRIVING","start_location":{"lng":-3.660580000000001,"lat":40.42720000000001}},{"html_instructions":"Take exit <b>7B<\/b> to merge onto <b>M-23<\/b> toward <b>Vicálvaro\/R-3\/Valencia<\/b>","duration":{"value":117,"text":"2 mins"},"distance":{"value":2552,"text":"2.6 km"},"end_location":{"lng":-3.63392,"lat":40.41499},"polyline":{"points":"{duuFntiUFHB@^PDBFFFDDFDFBDDFBH@BBJ@F@H?F@H?FAH?FAF?FADAFAFCDADADEFCFEDEDEDEBEBEBGBE@G@E@G?G?EAG?GCGAGCEEGEEEEEEGEICIEIAKCKAK?K?MDgA?G?E?KJq@BODY@CBODW?C@I@AFe@F_@V{An@gED[@C?EHe@Ho@@G?A^{BjA}HF[tAiGzBwIdAcEVgApAuFr@sEF]Ju@DW?EDUHa@f@qEFo@f@iGXmHDgFCgGG{DM

And finally, i decode the received String this way, wich I found in plenty of answers here in Stackoverflow:

private ArrayList<LatLng> decodePoly(String encoded) {

    Log.i("Location", "String received: "+encoded);
    ArrayList<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((int) (((double) lat /1E5)* 1E6), (int) (((double) lng/1E5   * 1E6)));
        poly.add(p);
    }

   for(int i=0;i<poly.size();i++){
       Log.i("Location", "Point sent: Latitude: "+poly.get(i).latitude+" Longitude: "+poly.get(i).longitude);
   }
    return poly;
}

This is where I think the error is, because I set a for to see the points that are being decoded, and the answer is something like:

04-10 13:33:54.578: I/Location(25065): Point sent: Latitude: 90.0 Longitude: -110.0
04-10 13:33:54.578: I/Location(25065): Point sent: Latitude: 90.0 Longitude: -120.0
04-10 13:33:54.578: I/Location(25065): Point sent: Latitude: 90.0 Longitude: 100.0
04-10 13:33:54.578: I/Location(25065): Point sent: Latitude: 90.0 Longitude: 120.0
04-10 13:33:54.578: I/Location(25065): Point sent: Latitude: 90.0 Longitude: 40.0

Obviosly, these points are badly parsed. The result is, no line drawn anywhere.

My question is... anybody knows how to parse the answer from Google, and translate it to LatLng objects (NOT GeoPoints Objects)?

Thank you!

EDIT:

This is the String that is about to be decoded:

04-10 13:50:51.608: I/Location(25065): String to decode: gcxuFjamUq@CPkGLwHJ}@hCuBdEeDf@SrJuHnG{Ed@Fr@q@AmAm@k@e@DaIaSiEuLqAwJ~Mw@~ZwDtZuC`FKbCVjA`ANdAs@nBw@Py@]c@oAT}DhC{PlBcM~GaY|DyS`BmPRy]yBu\UsNvAqObAuEnC}KpAqIh@gK[}NcByWXoRt@}GlDeWvFcq@nFi`@~G}\|@aDdDoLn`@}gAfe@upA`JyV|CiN~@uId@{ZyBwVkBmOwB{^AsNt@iWb@qYcCyS_DkPmAaK{@gRN{RbCkWrFgUbHmPxLsP|JwIpPwN|G}JfE}I|C_KlCsNvAwSFaQj@i]jCmXbHg\pIgSpGaLnN}P`JsHfVaNbQkHtZyIrOsCnTaCx\aA`i@b@nSRz]K`J{AxJiDfNkJjU{WbKkJpGeEpVkPpEiEzMcQjQw]nJyM~IoJ`IoKnH{NrOaWtIeJdNgNrLcPjKqOhIuI~MeJxKgErR{Cn]EjQkBjHqBfJeE|\yTlI_JvEqJxHsS|Xuc@~IeR|EiRr@kEz@sNOoL_B}Lk@mCsFgKkCoGwAsG]}N`CuO`D}GjHoHtFwC|HgBhFg@fJ}BtHaF~D_FjLqSfGqE|FcBnGEnEv@xK`BzNeAxQfAlJ{@jIwEjE}FvBuF|B{NtCsNrBgEdHiIdGuIxDoFpGkFhDaBrHyBbF[pHPlDg@jEuBnCkCtFgKjEqEfIcGpC{D|GoNdAcExAkSjBgDrCsBpDa@vHLfSAfBk@nE_F|Im`@tO_ZxCyEzJmKtHyElG_ClZeF|j@sIlQaD|EuChGkHnK{MdIsMfPwa@bDeJpD_RpFsz@nA}IrCqIrYoa@|BeGlEiYpD}HbKoRfCyKdBwUjEmo@zBkKzDyJvCeQdB}LJqGmAqQJ_Gx@uFtHkO`ImMfMmXtFySpCkXRuN]aYVoT~@}LxB{NvD{OjJaYbFsLnCcEtLoMfJyXzIiXbIiL~D_EzQcMjDeF|AcFhA_M`BkXpC_KjCsDnDeClQcHvEgElFqJfF_Jp\mWzd@k]`WkWlVy`@nOcTz`@_s@rP_ZbNkQ~Tu^jJaUhCuIpHgUrPi\zd@uq@~McQh\e]vTaU~KcF~KoGhG{KzF{HzGmDbDwBfDiEzB}GbEmTrBsHpCuFxe@oq@xb@el@tDgC`ZeJnXkHrKmB~EeB~C{A`Ce@bCUrBoAnAuGSqIn@yEhDeOrCuQ|A}EvAwFdDgAfGSrHUJ\p@Bj@_A|Ao@tCsD|C}Rj@wAdCuW~Ds]VCJw@OUpEc_@jDKbDwB

If with LatLng formate you mean the way the LatLng objects are created, you can see in the decodePoly method. These latLng objects are added to the PolylineOptions objects, and the this added to the map, this way:

PolylineOption ruta=new PolylineOptions();
for(int i=0;i<puntos.size();i++){
ruta.add(new LatLng(puntos.get(i).latitude, puntos.get(i).longitude));                      
}//puntos is an array where the array returned by the decodePoly method are stored                  
ruta.color(Color.RED).width(7);                     
Polyline polygon=mapa.addPolyline(ruta);

解决方案

I changed the decodePoly that I was using for this one I found after a long search in Google, and now the route is drawn properly.

http://wptrafficanalyzer.in/blog/route-between-two-locations-with-waypoints-in-google-map-android-api-v2/

Changing

LatLng p = new LatLng((int) (((double) lat /1E5)* 1E6), (int) (((double) lng/1E5   * 1E6)));

for

LatLng p = new LatLng((((double) lat / 1E5)),(((double) lng / 1E5)));

And now works.

这篇关于使用新的Google Maps API解码折线的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆