2013-02-26 1 views
2

Для android в google maps api v2 его отображение всей земли, следуя всем шагам отсюда http://mobisys.in/blog/2012/12/google-rolls-out-android-maps-api-v2/, могу ли я увеличить маршрут от текущего расположение к заданной величине и долготе, и проблема в том, что мне нужно показать несколько маршрутов, как это возможно? прямо сейчас я ничего не делаю в своей деятельности, но я думаю, что мне нужно сделать некоторую кодировку для рисования маршрутов. Как я могу это сделать? Большое вам спасибо за ваши ответы, и, пожалуйста, предоставьте мне любой учебник, если вы знаете. еще раз спасибо.в Android google maps api v2 для 4.0, показать маршруты от текущего местоположения до заданного lat long

+0

Follow этот удивительный [учебник] (http://wptrafficanalyzer.in/blog/gps-and-google-map-in-android-applications-series/) – moDev

+0

Спасибо, господин, я посмотрю. Кажется, у него есть точный ответ, который я ищу. :) – UdiT

ответ

7

Наконец я решил эту проблему, используя этот код ..: попробовать этот класс:

import java.io.InputStream; 
import java.util.ArrayList; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.protocol.BasicHttpContext; 
import org.apache.http.protocol.HttpContext; 
import org.w3c.dom.Document; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 

import com.google.android.gms.maps.model.LatLng; 

import android.content.Context; 
import android.util.Log; 

public class GMapV2Direction { 
    public final static String MODE_DRIVING = "driving"; 
    public final static String MODE_WALKING = "walking"; 

    public GMapV2Direction() { } 

    public Document getDocument(LatLng start, LatLng end, String mode) { 
     String url = "http://maps.googleapis.com/maps/api/directions/xml?" 
       + "origin=" + start.latitude + "," + start.longitude 
       + "&destination=" + end.latitude + "," + end.longitude 
       + "&sensor=false&units=metric&mode=driving"; 

     try { 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpContext localContext = new BasicHttpContext(); 
      HttpPost httpPost = new HttpPost(url); 
      HttpResponse response = httpClient.execute(httpPost, localContext); 
      InputStream in = response.getEntity().getContent(); 
      DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
      Document doc = builder.parse(in); 
      return doc; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    public String getDurationText (Document doc) { 
     NodeList nl1 = doc.getElementsByTagName("duration"); 
     Node node1 = nl1.item(0); 
     NodeList nl2 = node1.getChildNodes(); 
     Node node2 = nl2.item(getNodeIndex(nl2, "text")); 
     Log.i("DurationText", node2.getTextContent()); 
     return node2.getTextContent(); 
    } 

    public int getDurationValue (Document doc) { 
     NodeList nl1 = doc.getElementsByTagName("duration"); 
     Node node1 = nl1.item(0); 
     NodeList nl2 = node1.getChildNodes(); 
     Node node2 = nl2.item(getNodeIndex(nl2, "value")); 
     Log.i("DurationValue", node2.getTextContent()); 
     return Integer.parseInt(node2.getTextContent()); 
    } 

    public String getDistanceText (Document doc) { 
     NodeList nl1 = doc.getElementsByTagName("distance"); 
     Node node1 = nl1.item(0); 
     NodeList nl2 = node1.getChildNodes(); 
     Node node2 = nl2.item(getNodeIndex(nl2, "text")); 
     Log.i("DistanceText", node2.getTextContent()); 
     return node2.getTextContent(); 
    } 

    public int getDistanceValue (Document doc) { 
     NodeList nl1 = doc.getElementsByTagName("distance"); 
     Node node1 = nl1.item(0); 
     NodeList nl2 = node1.getChildNodes(); 
     Node node2 = nl2.item(getNodeIndex(nl2, "value")); 
     Log.i("DistanceValue", node2.getTextContent()); 
     return Integer.parseInt(node2.getTextContent()); 
    } 

    public String getStartAddress (Document doc) { 
     NodeList nl1 = doc.getElementsByTagName("start_address"); 
     Node node1 = nl1.item(0); 
     Log.i("StartAddress", node1.getTextContent()); 
     return node1.getTextContent(); 
    } 

    public String getEndAddress (Document doc) { 
     NodeList nl1 = doc.getElementsByTagName("end_address"); 
     Node node1 = nl1.item(0); 
     Log.i("StartAddress", node1.getTextContent()); 
     return node1.getTextContent(); 
    } 

    public String getCopyRights (Document doc) { 
     NodeList nl1 = doc.getElementsByTagName("copyrights"); 
     Node node1 = nl1.item(0); 
     Log.i("CopyRights", node1.getTextContent()); 
     return node1.getTextContent(); 
    } 

    public ArrayList<LatLng> getDirection (Document doc) { 
     NodeList nl1, nl2, nl3; 
     ArrayList<LatLng> listGeopoints = new ArrayList<LatLng>(); 
     nl1 = doc.getElementsByTagName("step"); 
     if (nl1.getLength() > 0) { 
      for (int i = 0; i < nl1.getLength(); i++) { 
       Node node1 = nl1.item(i); 
       nl2 = node1.getChildNodes(); 

       Node locationNode = nl2.item(getNodeIndex(nl2, "start_location")); 
       nl3 = locationNode.getChildNodes(); 
       Node latNode = nl3.item(getNodeIndex(nl3, "lat")); 
       double lat = Double.parseDouble(latNode.getTextContent()); 
       Node lngNode = nl3.item(getNodeIndex(nl3, "lng")); 
       double lng = Double.parseDouble(lngNode.getTextContent()); 
       listGeopoints.add(new LatLng(lat, lng)); 

       locationNode = nl2.item(getNodeIndex(nl2, "polyline")); 
       nl3 = locationNode.getChildNodes(); 
       latNode = nl3.item(getNodeIndex(nl3, "points")); 
       ArrayList<LatLng> arr = decodePoly(latNode.getTextContent()); 
       for(int j = 0 ; j < arr.size() ; j++) { 
        listGeopoints.add(new LatLng(arr.get(j).latitude, arr.get(j).longitude)); 
       } 

       locationNode = nl2.item(getNodeIndex(nl2, "end_location")); 
       nl3 = locationNode.getChildNodes(); 
       latNode = nl3.item(getNodeIndex(nl3, "lat")); 
       lat = Double.parseDouble(latNode.getTextContent()); 
       lngNode = nl3.item(getNodeIndex(nl3, "lng")); 
       lng = Double.parseDouble(lngNode.getTextContent()); 
       listGeopoints.add(new LatLng(lat, lng)); 
      } 
     } 

     return listGeopoints; 
    } 

    private int getNodeIndex(NodeList nl, String nodename) { 
     for(int i = 0 ; i < nl.getLength() ; i++) { 
      if(nl.item(i).getNodeName().equals(nodename)) 
       return i; 
     } 
     return -1; 
    } 

    private ArrayList<LatLng> decodePoly(String 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 position = new LatLng((double) lat/1E5, (double) lng/1E5); 
      poly.add(position); 
     } 
     return poly; 
    } 
} 

вы можете получить образец кода здесь

LatLng fromPosition = new LatLng(13.687140112679154, 100.53525868803263); 
LatLng toPosition = new LatLng(13.683660045847258, 100.53900808095932); 

GoogleMap mMap = ((SupportMapFragment)getSupportFragmentManager() 
     .findFragmentById(R.id.map)).getMap(); 
GMapV2Direction md = new GMapV2Direction(); 

Document doc = md.getDocument(fromPosition, toPosition, GMapV2Direction.MODE_DRIVING); 
ArrayList<LatLng> directionPoint = md.getDirection(doc); 
PolylineOptions rectLine = new PolylineOptions().width(3).color(Color.RED); 

for(int i = 0 ; i < directionPoint.size() ; i++) {   
rectLine.add(directionPoint.get(i)); 
} 

mMap.addPolyline(rectLine); 

: - https://docs.google.com/uc?export=download&id=0B0MdROeR0jbvWVVNUV9jbk1OeEE

+0

нам нужен XML-документ для рисования маршрута .. этот код - все об этом. – UdiT

+0

Лучше добавить контент вместо ссылки .. Ссылка на данный момент не работает. – moDev

+0

ohh позвольте мне разместить содержимое тогда ... – UdiT

0

Карты Android api V2 имеют Polyline класс, чтобы нарисовать маршрут на карте.

Polyline line1 = map.addPolyline(new PolylineOptions() 
.add(new LatLng(50.5, 34.1), new LatLng(40.7, -74.0)) 
.width(5) 
.color(0xFFFF0000)); 
+0

эй Митеш, спасибо за ваш ответ, я буду использовать его позже, но я использую этот похожий учебник, по этой ссылке http://wptrafficanalyzer.in/blog/showing-current-location-in-google-maps- используя-api-v2-with-supportmapfragment /, но все же его не оказывает никакого влияния на показ только полной карты google, теперь текущее местоположение, я пытаюсь сделать это за последние полчаса, никаких ошибок не возникает, ничего особенного не происходит на трассировке стека, – UdiT

+0

вы получаете текущую кнопку местоположения на карте? – moDev

+0

В xml-макете не определены кнопки, поэтому я не получаю никаких кнопок, в этой ссылке они показывают, чтобы получить текущее местоположение напрямую, я думаю. – UdiT

Смежные вопросы