我想在android中的多个地理区域之间绘制路径

时间:2011-03-09 08:37:05

标签: android

  

可能重复:
  Is there an API for Google Maps navigation in Android?

最近我把Android开发作为一种爱好,并且正在寻求开发一个可以使用Google Maps查找和跟踪用户位置的应用程序。

应用程序具有GPS锁定后,应用程序可以使用覆盖类绘制路径来跟踪其移动。

我见过像Mytracks这样的类似应用程序是开源的,但它们现在对我来说太复杂了。

他是我的代码,没有导入。

我要做的是创建一系列地理点。每次位置更改时,都会创建一个新的地理点。然后我尝试使用for循环遍历每个geopoint并在它们之间绘制路径。

理想情况下,我很乐意创建一个看起来像这张照片的应用程序

enter image description here

public class Tracking extends MapActivity implements LocationListener {

   LocationManager locman;
   LocationListener loclis;
   Location Location;
   private MapView map;

   List<GeoPoint> geoPointsArray = new ArrayList<GeoPoint>();
   private MapController controller;
   String provider = LocationManager.GPS_PROVIDER;
   double lat;
   double lon;


   @Override
      public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.map);
         initMapView();
         initMyLocation();
         locman = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
         //locman.requestLocationUpdates(provider,60000, 100,loclis);
         //Location = locman.getLastKnownLocation(provider);

      }
   /** Find and initialize the map view. */
      private void initMapView() {
         map = (MapView) findViewById(R.id.map);
         controller = map.getController();
         map.setSatellite(false);
         map.setBuiltInZoomControls(true);
      }

      /** Find Current Position on Map. */
      private void initMyLocation() {
         final MyLocationOverlay overlay = new MyLocationOverlay(this, map);
         overlay.enableMyLocation();
         overlay.enableCompass(); // does not work in emulator
         overlay.runOnFirstFix(new Runnable() {
            public void run() {
               // Zoom in to current location
               controller.setZoom(24);
               controller.animateTo(overlay.getMyLocation());
            }
         });
         map.getOverlays().add(overlay);
      }

   @Override
   public void onLocationChanged(Location location) {
      if (Location != null){
         lat = Location.getLatitude();
          lon = Location.getLongitude();
          GeoPoint New_geopoint = new GeoPoint((int)(lat*1e6),(int)(lon*1e6));
          controller.animateTo(New_geopoint);

      }

   }
   class MyOverlay extends Overlay{
       public MyOverlay(){
       }   
       public void draw(Canvas canvas, MapView mapv, boolean shadow){
       super.draw(canvas, mapv, shadow);

        Projection projection = map.getProjection();
        Path p = new Path();
        for (int i = 0; i < geoPointsArray.size(); i++) {
        if (i == geoPointsArray.size() - 1) {
            break;
        }
        Point from = new Point();
        Point to = new Point();
        projection.toPixels(geoPointsArray.get(i), from);
        projection.toPixels(geoPointsArray.get(i + 1), to);
        p.moveTo(from.x, from.y);
        p.lineTo(to.x, to.y);
        }
        Paint mPaint = new Paint();
        mPaint.setStyle(Style.STROKE);
        mPaint.setColor(0xFFFF0000);
        mPaint.setAntiAlias(true);
        canvas.drawPath(p, mPaint);
        super.draw(canvas, map, shadow);
    }   
}

   @Override
   public void onProviderDisabled(String provider) {
      // TODO Auto-generated method stub

   }
   @Override
   public void onProviderEnabled(String provider) {
      // TODO Auto-generated method stub

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

   }
   @Override
   protected boolean isRouteDisplayed() {
      // TODO Auto-generated method stub
      return false;
   }}

1 个答案:

答案 0 :(得分:0)

阅读我的回答HERE

您正在寻找的是创建一个Android服务,每次您的位置更改时都会触发该服务并记录新位置,可能是数据库。还要创建一个应用程序,它将使用数据库中的数据在地图视图上绘制路径。