9

मैं एंड्रॉइड पर Google मानचित्र API V2 के साथ खेल रहा था। 2 स्थानों के बीच पथ प्राप्त करने और JSON पार्सिंग के साथ ऐसा करने का प्रयास कर रहा है।2 स्थानों के बीच एक मार्ग तैयार करना Google मानचित्र API Android V2

मुझे मार्ग मिल रहा है। और मार्ग शुरू होता है कि यह कैसे होना चाहिए। लेकिन फिर एक बिंदु पर यह गलत तरीका जाता है।

मेरा अंतिम गंतव्य गलत समाप्त होता है। और कुछ अन्य स्थानों के साथ मेरा ऐप बस समाप्त हो जाता है।

यह मैं क्या किया है

यहाँ मेरी makeURL तरीका है

public String makeUrl(){ 
    StringBuilder urlString = new StringBuilder(); 
    urlString.append("http://maps.googleapis.com/maps/api/directions/json"); 
    urlString.append("?origin="); //start positie 
    urlString.append(Double.toString(source.latitude)); 
    urlString.append(","); 
    urlString.append(Double.toString(source.longitude)); 
    urlString.append("&destination="); //eind positie 
    urlString.append(Double.toString(dest.latitude)); 
    urlString.append(","); 
    urlString.append(Double.toString(dest.longitude)); 
    urlString.append("&sensor=false&mode=driving"); 

    return urlString.toString(); 
} 

मेरी JSON पार्सर

public class JSONParser { 

static InputStream is = null; 
static JSONObject jObj = null; 
static String json = ""; 

public JSONParser() { 
    // TODO Auto-generated constructor stub 
} 

public String getJSONFromURL(String url){ 

    try { 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 

     HttpResponse httpResponse = httpClient.execute(httpPost); 
     HttpEntity httpEntity = httpResponse.getEntity(); 

     is = httpEntity.getContent(); 
    } catch(UnsupportedEncodingException e){ 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    try { 
     BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 

     while((line = reader.readLine()) != null){ 
      sb.append(line + "\n"); 
      //Log.e("test: ", sb.toString()); 
     } 

     json = sb.toString(); 
     is.close(); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     Log.e("buffer error", "Error converting result " + e.toString()); 
    } 

    return json; 
} 

मैं इस विधि

public void drawPath(String result){ 
    try{ 
     final JSONObject json = new JSONObject(result); 
     JSONArray routeArray = json.getJSONArray("routes"); 
     JSONObject routes = routeArray.getJSONObject(0); 

     JSONObject overviewPolylines = routes.getJSONObject("overview_polyline"); 
     String encodedString = overviewPolylines.getString("points"); 
     Log.d("test: ", encodedString); 
     List<LatLng> list = decodePoly(encodedString); 

     LatLng last = null; 
     for (int i = 0; i < list.size()-1; i++) { 
      LatLng src = list.get(i); 
      LatLng dest = list.get(i+1); 
      last = dest; 
      Log.d("Last latLng:", last.latitude + ", " + last.longitude); 
      Polyline line = googleMap.addPolyline(new PolylineOptions().add( 
        new LatLng(src.latitude, src.longitude), new LatLng(dest.latitude, dest.longitude)) 
        .width(2) 
        .color(Color.BLUE)); 
     } 

     Log.d("Last latLng:", last.latitude + ", " + last.longitude); 
    }catch (JSONException e){ 
     e.printStackTrace(); 
    } 
} 

के साथ अपने पथ आकर्षित और मैं डेको डी

private List<LatLng> decodePoly(String encoded){ 

    List<LatLng> poly = new ArrayList<LatLng>(); 
    int index = 0; 
    int length = encoded.length(); 
    int latitude = 0; 
    int longitude = 0; 

    while(index < length){ 
     int b; 
     int shift = 0; 
     int result = 0; 

     do { 
      b = encoded.charAt(index++) - 63; 
      result |= (b & 0x1f) << shift; 
      shift += 5; 
     } while (b >= 0x20); 

     int destLat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); 
     latitude += destLat; 

     shift = 0; 
     result = 0; 
     do { 
      b = encoded.charAt(index++) - 63; 
      result |= (b & 0x1f) << shift; 
      shift += 5; 
     } while (b > 0x20); 

     int destLong = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); 
     longitude += destLong; 

     poly.add(new LatLng((latitude/1E5),(longitude/1E5))); 
    } 
    return poly; 
} 

और फिर साथ मेरे JSON के साथ एक AsyncTask

अग्रिम धन्यवाद कोडित।

+0

धन्यवाद कोड यह मदद की साझा करने के लिए। :) – rptwsthi

उत्तर

2

लंबे इंतजार के लिए खेद है .. मैंने इसे थोड़ी देर पहले तय कर दिया है, लेकिन मैंने अभी तक अपना समाधान नहीं रखा है।

यह मूल रूप से लिखने में कोई त्रुटि थी ...

मेरी Json विकोडक में मैं 2 Do का उपयोग करते हुए एक ओर जहां बयान मैं भूल गया "="

while (b >= 0x20); 

साथ बयान दूसरा Do में। इसलिए इसे सही ढंग से प्रतिपादन किया गया था नहीं ...

धन्यवाद

1

मेरा मानना ​​है कि आप वस्तुओं को overview_polyline से बना रहे हैं। यह, Google प्रलेखन के अनुसार "एक ऑब्जेक्ट होता है जिसमें एन्कोड किए गए बिंदुओं की एक सरणी होती है जो परिणामी दिशाओं के अनुमानित (चिकनी) पथ का प्रतिनिधित्व करती है।"

मैं बहुत यकीन है कि आप एक अधिक विस्तृत मार्ग आधिकारिक दस्तावेज के रूप में कहा गया है कि एक कदम एक दिशा के मार्ग की सबसे परमाणु इकाई, एक ही चरण युक्त legs[] और steps[] डेटा के आधार पर अपने LatLng वस्तु के निर्माण प्राप्त कर सकते हैं कर रहा हूँ यात्रा पर एक विशिष्ट, एकल निर्देश का वर्णन करना।

https://developers.google.com/maps/documentation/directions/#Routes

0

Tmichel, माइकल सड़क से बाहर पंक्ति सही ढंग से लहर, क्योंकि पैर और अपने मार्ग भूखंड पर सीढ़ियों पर है:

पर एक नजर डालें। पैर और कदम, उपयोगकर्ता को सतर्क करने के लिए सूचनाओं के लिए समन्वय के आसपास सूचनाएं हैं।

पॉलिलाइन सड़क पर सही और सटीक बिंदु हैं। क्षमा करें मेरी खराब अंग्रेजी

संबंधित मुद्दे