1

私は Android タブレットでアプリケーションを開発しています。ある点から他の選択した点までの距離を調べる必要があるという新しい要件がありました。これを達成する方法を教えてください。

Googleマップには、LabsメニューのMeasureというオプションが1つあることがわかりました.Googleマップでプログラムで測定された機能を呼び出す/実装する方法を教えてくれるのと同じ種類の要件が必要です。

理解を深めるために、下の画像を確認してください。

貴重なご意見をお待ちしております...ここに画像の説明を入力

現在のGPS位置を表示するために以下のコードを使用しています。他の位置を指して線を引き、面積を測定する方法を知る必要があります。コードを確認して提案してください

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.main);
         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.mapView);
         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);
          geoPointsArray.add(New_geopoint);


      }

   }
   public double getDistance(double lat1, double lon1, double lat2, double lon2) {
        double latA = Math.toRadians(lat1);
        double lonA = Math.toRadians(lon1);
        double latB = Math.toRadians(lat2);
        double lonB = Math.toRadians(lon2);
        double cosAng = (Math.cos(latA) * Math.cos(latB) * Math.cos(lonB-lonA)) +
                        (Math.sin(latA) * Math.sin(latB));
        double ang = Math.acos(cosAng);
        double dist = ang *6371;
        return dist;
    }

   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.drawLine(0, 4,5,50, mPaint);
        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
   protected boolean isRouteDisplayed() {
      // TODO Auto-generated method stub
      return false;
   }

@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
    // TODO Auto-generated method stub

}}
4

2 に答える 2

1

2つの場所の間にパスを描画する場合は、以下のリンクを参照できます

J2ME / Android / BlackBerry-運転ルート、2つの場所間のルート

また、ここからソースコードを入手できます。

于 2012-05-12T09:10:25.227 に答える
1

このリンクはあなたを助けるかもしれません

GPS を使用して、人が歩いた距離を取得する

GPS - 走ったり歩いたりしながら距離や時間を取得

リンクをたどってください。詳細に説明されています

于 2012-05-11T06:10:10.987 に答える