GPS area in Android

后端 未结 2 405
清酒与你
清酒与你 2020-12-16 08:28

Is there any class for GPS area calculate?

相关标签:
2条回答
  • 2020-12-16 09:14

    you can calculate area of the resulting parallelogram of two vectors by recording three points: 1) starting point A 2) point B 3) point C

    Get the two vectors AB and AC [B(x,y)-A(x,y) = AB(x,y)]

    Area is || AB X AC || !

    0 讨论(0)
  • 2020-12-16 09:22

    I use this code to calculate an area delimited by GPS points with Android:

      private static final double EARTH_RADIUS = 6371000;// meters
    
      public static double calculateAreaOfGPSPolygonOnEarthInSquareMeters(final List<Location> locations) {
        return calculateAreaOfGPSPolygonOnSphereInSquareMeters(locations, EARTH_RADIUS);
      }
    
      private static double calculateAreaOfGPSPolygonOnSphereInSquareMeters(final List<Location> locations, final double radius) {
        if (locations.size() < 3) {
          return 0;
        }
    
        final double diameter = radius * 2;
        final double circumference = diameter * Math.PI;
        final List<Double> listY = new ArrayList<Double>();
        final List<Double> listX = new ArrayList<Double>();
        final List<Double> listArea = new ArrayList<Double>();
        // calculate segment x and y in degrees for each point
        final double latitudeRef = locations.get(0).getLatitude();
        final double longitudeRef = locations.get(0).getLongitude();
        for (int i = 1; i < locations.size(); i++) {
          final double latitude = locations.get(i).getLatitude();
          final double longitude = locations.get(i).getLongitude();
          listY.add(calculateYSegment(latitudeRef, latitude, circumference));
          Log.d(LOG_TAG, String.format("Y %s: %s", listY.size() - 1, listY.get(listY.size() - 1)));
          listX.add(calculateXSegment(longitudeRef, longitude, latitude, circumference));
          Log.d(LOG_TAG, String.format("X %s: %s", listX.size() - 1, listX.get(listX.size() - 1)));
        }
    
        // calculate areas for each triangle segment
        for (int i = 1; i < listX.size(); i++) {
          final double x1 = listX.get(i - 1);
          final double y1 = listY.get(i - 1);
          final double x2 = listX.get(i);
          final double y2 = listY.get(i);
          listArea.add(calculateAreaInSquareMeters(x1, x2, y1, y2));
          Log.d(LOG_TAG, String.format("area %s: %s", listArea.size() - 1, listArea.get(listArea.size() - 1)));
        }
    
        // sum areas of all triangle segments
        double areasSum = 0;
        for (final Double area : listArea) {
          areasSum = areasSum + area;
        }
    
        // get abolute value of area, it can't be negative
        return Math.abs(areasSum);// Math.sqrt(areasSum * areasSum);
      }
    
      private static Double calculateAreaInSquareMeters(final double x1, final double x2, final double y1, final double y2) {
        return (y1 * x2 - x1 * y2) / 2;
      }
    
      private static double calculateYSegment(final double latitudeRef, final double latitude, final double circumference) {
        return (latitude - latitudeRef) * circumference / 360.0;
      }
    
      private static double calculateXSegment(final double longitudeRef, final double longitude, final double latitude,
          final double circumference) {
        return (longitude - longitudeRef) * circumference * Math.cos(Math.toRadians(latitude)) / 360.0;
      }
    

    You can easily adapt it to java not using a list of location objects but two list of latitudes and longitudes.

    This is based on this formula:

    http://mathworld.wolfram.com/PolygonArea.html

    also described here:

    http://en.wikipedia.org/wiki/Polygon

    Principle of ploygon area calculation with this formula:

    http://maruzar.blogspot.com/2011/12/irregular-and-regular-polygon-area-by.html

    Formula adapted to area on a sphere, in our case the world sphere, and excel example of the calculation very usefull to verify your algorithm in Java or other language:

    http://maruzar.blogspot.com/2012/03/calculating-land-lot-area-with-gps.html

    0 讨论(0)
提交回复
热议问题