android - 如何在android中使用GPS坐标测量从当前位置到另一个位置的面积

标签 android

我正在 Android 平板电脑上开发一个应用程序,我有一个新的要求,我需要找出一个点到另一个选定点之间的距离,谁能帮我实现这个

我发现在谷歌地图中,​​我们有一个名为 Measure in Labs 菜单的选项,我需要同样的要求,任何人都可以告诉我如何在谷歌地图中调用/实现编程测量的功能。

请查看下图以便更好地理解。

等待您的宝贵意见... 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

}}

最佳答案

这个链接可能对你有帮助

Using gps get the distance a person has walked

GPS - Getting the distance,time while running and walking

请浏览链接。其详细解释

关于android - 如何在android中使用GPS坐标测量从当前位置到另一个位置的面积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10546150/

相关文章:

android - 如何将 REACT NATIVE js 文件切换到 Android Activity

android - android中的相机标题,如何在相机屏幕顶部设置标题

java - 我需要 Android 和 Java 方面的帮助

java - java中使用构造函数的问题

android - 如何使用 MediaCodec 从视频中获取位图(帧)

安卓 : Saving Files to SD Card

缺少 AndroidManifest.xml 尝试重新导入插件

java - 访问自定义 NavigationDrawer 内的项目

android - 如何在 Android 中重用 fragment 的 View ?

java - 在 RecyclerView 中仅选择一张图像