2012-05-11 24 views
1

我正在開發Android平板電腦中的應用程序,我得到了一個新的要求,我需要找出一點到其他選定點之間的距離可以是任何一個請幫助我如何實現此目的如何使用GPS座標測量從當前位置到另一個位置的區域android

我發現在谷歌地圖中我們有一個選項叫做Measure in Labs菜單我需要相同類型的需求任何人都可以告訴我如何在Google地圖中調用/實現以編程方式測量的特徵。

請檢查以下圖片以獲得更好的理解。

等待您的寶貴意見...... enter image description here

我使用下面的代碼用於顯示當前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 

}} 
+0

你知道兩點的GPS座標嗎? – Kousalik

+0

你想用公里嗎? – Goofy

+0

我想找到英畝面積 –

回答