我从这个例子开始,在用户之间绘制2个地址之间的路由.这是工作.http://blog.rolandl.fr/1357-android-des-itineraires-dans-vos-applications-grace-a-lapi-google-direction
但是现在我想画一条从当前位置到另一个目的地的路线,由用户输入.我的问题是我不知道如何检索当前位置,在这种情况下.我试过这样做:
LocationManager locationmanager=(LocationManager)this.getSystemService(LOCATION_SERVICE); final double longitude=locationmanager.getLongitude(); final double latitude=locationmanager.getLatitude();
但它不起作用......我想我正在混合我发现的每一个例子,而且它根本不好.
你能帮我么 ?
这是我的MapActivity:在我的MainActivity公共类中由用户键入的接收2地址MapActivity扩展Activity实现LocationListener {private GoogleMap googlemap;
protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_map); // Recuperation des composants graphiques googlemap = ((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap(); //Recuperations des adresses depart-arrivee // RETRIEVE DEPARTURE AND DESTINATION ADDRESS /* * For editDepart, I would like to replace it by my Current location */ final String editDepart = getIntent().getStringExtra("DEPART"); final String editArrivee = getIntent().getStringExtra("ARRIVEE"); /* Appel de la méthode asynchrone // ASYNCHRONOUS METHOD * ATTENTION : Il faut que ItineraireTask soit extends AsyncTask* Sinon, on ne pourra pas utilise la methode execute() */ new ItineraireTask(this, googlemap, editDepart, editArrivee).execute(); } }
这是我的ItineraireTask:
public class ItineraireTask extends AsyncTask{ private static final String TOAST_MSG = "Calcul de l'itinéraire en cours"; private static final String TOAST_ERR_MAJ = "Impossible de trouver un itinéraire"; private Context context; private GoogleMap gMap; private String editDepart; private String editArrivee; private final ArrayList lstLatLng = new ArrayList (); /** CONSTRUCTEUR **/ public ItineraireTask(final Context context, final GoogleMap gMap, final String editDepart, final String editArrivee) { this.context = context; this.gMap= gMap; this.editDepart = editDepart; this.editArrivee = editArrivee; } protected void onPreExecute() { Toast.makeText(context, TOAST_MSG, Toast.LENGTH_LONG).show(); } protected Boolean doInBackground(Void... params) { try { //Construction de l'url à appeler final StringBuilder url = new StringBuilder("http://maps.googleapis.com/maps/api/directions/xml?sensor=false&language=fr"); url.append("&origin="); url.append(editDepart.replace(' ', '+')); url.append("&destination="); url.append(editArrivee.replace(' ', '+')); //Appel du web service final InputStream stream = new URL(url.toString()).openStream(); //Traitement des données final DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); documentBuilderFactory.setIgnoringComments(true); final DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); final Document document = documentBuilder.parse(stream); document.getDocumentElement().normalize(); //On récupère d'abord le status de la requête final String status = document.getElementsByTagName("status").item(0).getTextContent(); if(!"OK".equals(status)) { return false; } //On récupère les steps final Element elementLeg = (Element) document.getElementsByTagName("leg").item(0); final NodeList nodeListStep = elementLeg.getElementsByTagName("step"); final int length = nodeListStep.getLength(); for(int i=0; i = 0x20); int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); lat += dlat; shift = 0; result = 0; do { b = encodedPoints.charAt(index++) - 63; result |= (b & 0x1f) << shift; shift += 5; } while (b >= 0x20); int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); lng += dlng; lstLatLng.add(new LatLng((double)lat/1E5, (double)lng/1E5)); } } protected void onPostExecute(final Boolean result) { if(!result) { Toast.makeText(context, TOAST_ERR_MAJ, Toast.LENGTH_SHORT).show(); } else { //On déclare le polyline, c'est-à-dire le trait (ici bleu) que l'on ajoute sur la carte pour tracer l'itinéraire final PolylineOptions polylines = new PolylineOptions(); polylines.color(Color.BLUE); //On construit le polyline for(final LatLng latLng : lstLatLng) { polylines.add(latLng); } //On déclare un marker vert que l'on placera sur le départ final MarkerOptions markerA = new MarkerOptions(); markerA.position(lstLatLng.get(0)); markerA.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); //On déclare un marker rouge que l'on mettra sur l'arrivée final MarkerOptions markerB = new MarkerOptions(); markerB.position(lstLatLng.get(lstLatLng.size()-1)); markerB.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)); //On met à jour la carte gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(lstLatLng.get(0), 10)); gMap.addMarker(markerA); gMap.addPolyline(polylines); gMap.addMarker(markerB); } } }
提前谢谢你!
最好的祝福,
Tofuw
这是我在这个主题上写的一篇博文,可以帮助你解决这个问题:
Google Maps API V2绘制路线
您可以下载和使用一个示例项目.