2013-04-28 14 views
11

Yönlendirme uygulaması yapmak istiyorum ancak konumumdan hedefe rota çizme problemim var, konumumdan variabel boylamı ve enlemi elde etmem gerekiyor, ama bilmiyorum çizgi çiz ... Bu yere yön çizmek istiyorum = -6.984873352070259,108.48140716552734. Bana yardım edin beyler .. Ben önce quetions okudum ama .. teşekkürler .. iam üzgün önce çözüm alınamıyor .. Burada ben bana yardım edebilir umut android programlamaGoogle Haritalar'da Rota Çizmek API V2 benim konumumdan

package com.apps.visitkuningan; 

import android.app.Dialog; 
import android.location.Criteria; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.view.Menu; 
import android.widget.Toast; 


import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.GooglePlayServicesUtil; 
import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.LatLng; 

public class Arahkan extends FragmentActivity implements LocationListener { 

    GoogleMap googleMap; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     // Getting Google Play availability status 
     int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext()); 

     // Showing status 
     if(status!=ConnectionResult.SUCCESS){ // Google Play Services are not available 

      int requestCode = 10; 
      Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode); 
      dialog.show(); 

     }else { // Google Play Services are available 

      // Getting reference to the SupportMapFragment of activity_main.xml 
      SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 

      // Getting GoogleMap object from the fragment 
      googleMap = fm.getMap(); 

      // Enabling MyLocation Layer of Google Map 
      googleMap.setMyLocationEnabled(true); 

      // Getting LocationManager object from System Service LOCATION_SERVICE 
      LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 

      // Creating a criteria object to retrieve provider 
      Criteria criteria = new Criteria(); 

      // Getting the name of the best provider 
      String provider = locationManager.getBestProvider(criteria, true); 

      // Getting Current Location 
      Location location = locationManager.getLastKnownLocation(provider); 

      if(location!=null){ 
       onLocationChanged(location); 
      } 
      locationManager.requestLocationUpdates(provider, 20000, 0, this); 
     } 
    } 
    @Override 
    public void onLocationChanged(Location location) { 

     // Getting latitude of the current location 
     double latitude = location.getLatitude(); 

     // Getting longitude of the current location 
     double longitude = location.getLongitude(); 

     // Creating a LatLng object for the current location 
     LatLng latLng = new LatLng(latitude, longitude); 

     // Showing the current location in Google Map 
     googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 

     // Zoom in the Google Map 
     googleMap.animateCamera(CameraUpdateFactory.zoomTo(15)); 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 
     Toast.makeText(getApplicationContext(), "Gps Disabled", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub 
     Toast.makeText(getApplicationContext(), "Gps Enabled", Toast.LENGTH_SHORT).show(); 

    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 


} 

Iam acemi benim kodudur. teşekkürler .. :)

+0

bakın [yol çizmek] [1] [1]: http://stackoverflow.com/questions/14702621/answer-draw-path-between-two -points-using-google-haritalar-android-api-v2 –

cevap

8

İlk olarak, Google Yol API'sini kullanarak iki konum koordinatının arasındaki yol tariflerini alabilirsiniz.

public static ArrayList getDirections(double lat1, double lon1, double lat2, double lon2) { 
    String url = "http://maps.googleapis.com/maps/api/directions/xml?origin=" +lat1 + "," + lon1 + "&destination=" + lat2 + "," + lon2 + "&sensor=false&units=metric"; 
    String tag[] = { "lat", "lng" }; 
    ArrayList list_of_geopoints = new ArrayList(); 
    HttpResponse response = null; 
    try { 
     HttpClient httpClient = new DefaultHttpClient(); 
     HttpContext localContext = new BasicHttpContext(); 
     HttpPost httpPost = new HttpPost(url); 
     response = httpClient.execute(httpPost, localContext); 
     InputStream in = response.getEntity().getContent(); 
     DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
     Document doc = builder.parse(in); 
     if (doc != null) { 
      NodeList nl1, nl2; 
      nl1 = doc.getElementsByTagName(tag[0]); 
      nl2 = doc.getElementsByTagName(tag[1]); 
      if (nl1.getLength() > 0) { 
       list_of_geopoints = new ArrayList(); 
       for (int i = 0; i < nl1.getLength(); i++) { 
        Node node1 = nl1.item(i); 
        Node node2 = nl2.item(i); 
        double lat = Double.parseDouble(node1.getTextContent()); 
        double lng = Double.parseDouble(node2.getTextContent()); 
        list_of_geopoints.add(new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6))); 
       } 
      } else { 
       // No points found 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return list_of_geopoints; 
} 

bir MapView düzeni Android uygulamanız oluşturulduktan sonra

, bu özelleştirilmiş Yerleşimi sınıfını içerebilir.
public class MyOverlay extends Overlay { 

private ArrayList all_geo_points; 

public MyOverlay(ArrayList allGeoPoints) { 
    super(); 
    this.all_geo_points = allGeoPoints; 
} 

@Override 
public boolean draw(Canvas canvas, MapView mv, boolean shadow, long when) { 
    super.draw(canvas, mv, shadow); 
    drawPath(mv, canvas); 
    return true; 
} 

public void drawPath(MapView mv, Canvas canvas) { 
    int xPrev = -1, yPrev = -1, xNow = -1, yNow = -1; 
    Paint paint = new Paint(); 
    paint.setColor(Color.BLUE); 
    paint.setStyle(Paint.Style.FILL_AND_STROKE); 
    paint.setStrokeWidth(4); 
paint.setAlpha(100); 
    if (all_geo_points != null) 
     for (int i = 0; i < all_geo_points.size() - 4; i++) { 
      GeoPoint gp = all_geo_points.get(i); 
      Point point = new Point(); 
      mv.getProjection().toPixels(gp, point); 
      xNow = point.x; 
      yNow = point.y; 
      if (xPrev != -1) { 
       canvas.drawLine(xPrev, yPrev, xNow, yNow, paint); 
      } 
      xPrev = xNow; 
      yPrev = yNow; 
     } 
    } 
} 

getdirections() fonksiyonu

MapView en bindirmeleri için bu Yerleşimi eklemeden önce hemen önce çağrılabilir.

MapView mv = (MapView) findViewById(R.id.mvGoogle); 
mv.setBuiltInZoomControls(true); 
MapController mc = mv.getController(); 
ArrayList all_geo_points = getDirections(17.3849, 78.4866, 28.63491, 77.22461); 
GeoPoint moveTo = all_geo_points.get(0); 
mc.animateTo(moveTo); 
mc.setZoom(12); 
mv.getOverlays().add(new MyOverlay(all_geo_points)); 
+0

HttpClient ve HttpResponse nedir? –

+0

URL çağrılarını gerçekleştirecek nesneler. Bkz. Https://developers.google.com/maps/documentation/directions/ v –

14

en az 2 konumu bir çoklu çizgiyi çizebilir nesneleri var. Bu yöntem, konumların bir listesini verilen yarı saydam mavi bir çizgi çizer. Bu kod şu anda Android Play mağazasında (Simply Walking) bir uygulamadan alınmıştır. Takip eden bağlantıyı

private void drawPrimaryLinePath(ArrayList<Location> listLocsToDraw) 
{ 
    if (map == null) 
    { 
     return; 
    } 

    if (listLocsToDraw.size() < 2) 
    { 
     return; 
    } 

    PolylineOptions options = new PolylineOptions(); 

    options.color(Color.parseColor("#CC0000FF")); 
    options.width(5); 
    options.visible(true); 

    for (Location locRecorded : listLocsToDraw) 
    { 
     options.add(new LatLng(locRecorded.getLatitude(), 
           locRecorded.getLongitude())); 
    } 

    map.addPolyline(options); 

} 
+0

Kod çözme yoluna ihtiyacınız yok mu? https://developers.google.com/maps/documentation/utilities/polylinealgorithm –

İlgili konular