精华内容
下载资源
问答
  • 2017-06-20 10:46:03

    项目因使用百度地图,但百度地图的面积计算太过low,经常为出现面积为负的情况;

    调用computeSignedArea(path)
    
    function computeSignedArea(path) {
    //传入path:{
        [{lat:,lng:}],[{lat:,lng:}],[{lat:,lng:}]
    }
        let radius= 6371009
        let len = path.length;
        if (len < 3) return 0; 
        let total = 0;
        let  prev = path[len - 1];
        let prevTanLat = Math.tan(((Math.PI / 2 - prev.lat/180*Math.PI) / 2));
        let prevLng = (prev.lng)/180*Math.PI;
        for (let i in path) {
            let tanLat = Math.tan((Math.PI / 2 -
                (path[i].lat)/180*Math.PI) / 2);
            let lng = (path[i].lng)/180*Math.PI;
            total += polarTriangleArea(tanLat, lng, prevTanLat, prevLng);
            prevTanLat = tanLat;
            prevLng = lng;
        }
        return Math.abs(total * (radius * radius));
    }
    function polarTriangleArea(tan1,lng1,tan2,lng2) {
            let deltaLng = lng1 - lng2;
            let t = tan1 * tan2;
            return 2 * Math.atan2(t * Math.sin(deltaLng), 1 + t * Math.cos(deltaLng));
    }

    最简单粗暴的经纬点面积计算方法;

    更多相关内容
  • java-业务需求需要根据经纬度计算面积,整理了一下根据经纬度计算面积,根据openlayers借鉴改写,亲测可用!
  • 高德地图 1,根据经纬度计算面积 2,判断一个点是否在圈内
  • 经纬度计算面积的程序

    热门讨论 2013-03-01 15:42:26
    自己写的通过一个方形地区的左上角与右下角经纬度计算出实际面积的程序 里面的计算公式是从网上找的 内附代码 分享给有需要的朋友
  • 经纬度计算软件

    2018-11-14 18:50:06
    已知两点经纬度,可以计算两点之间的距离,免安装版。
  • 根据经纬度计算多边形面积

    千次阅读 2020-06-30 18:21:30
    <!doctype html> <html lang="en"> <head> ...meta charset="UTF-8">... content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">...
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <script src="data.js"></script>
        <title>Document</title>
    </head>
    <body>
    
    </body>
    <script>
      var s = "112.523197631836,37.868892669677734;112.5170669555664,37.8605842590332;112.52099609375,37.849857330322266;112.54137420654297,37.8512732521875;112.5351180302734,37.858699798583984";
      console.log(computeSignedArea(cvpath(s)))
      function cvpath(s) {
        let path = s.split(';').map(item => {
          return {
            lng: item.split(',')[0]/1,
            lat: item.split(',')[1]/1
          }
        })
        return path
      }
      function computeSignedArea(path) {
        let radius = 6371009
        let len = path.length
        if (len < 3) return 0
        let total = 0
        let prev = path[len - 1]
        let prevTanLat = Math.tan(((Math.PI / 2 - prev.lat / 180 * Math.PI) / 2))
        let prevLng = (prev.lng) / 180 * Math.PI
        for (let i in path) {
          let tanLat = Math.tan((Math.PI / 2 -
            (path[i].lat) / 180 * Math.PI) / 2)
          let lng = (path[i].lng) / 180 * Math.PI
          total += polarTriangleArea(tanLat, lng, prevTanLat, prevLng)
          prevTanLat = tanLat
          prevLng = lng
        }
        return Math.abs(total * (radius * radius))
      }
    
      function polarTriangleArea(tan1, lng1, tan2, lng2) {
        let deltaLng = lng1 - lng2
        let t = tan1 * tan2
        return 2 * Math.atan2(t * Math.sin(deltaLng), 1 + t * Math.cos(deltaLng))
      }
    </script>
    </html>
    <script>
      var earthRadiusMeters = 6371000.0;
      var metersPerDegree = 2.0 * Math.PI * earthRadiusMeters / 360.0;
      var radiansPerDegree = Math.PI / 180.0;
      var degreesPerRadian = 180.0 / Math.PI;
      var pointArr=[]
    let d=data
      console.log(d)
      b(data)
      function calculateArea(points) {
        if (points.length > 2) {
          var areaMeters2 = PlanarPolygonAreaMeters2(points);
          // if (areaMeters2 > 1000000.0) {
            areaMeters2 = SphericalPolygonAreaMeters2(points);
            alert("面积为" + areaMeters2 + "平方米");
          // }
        }
      }
      function b() {
         var s = "112.523197631836,37.868892669677734;112.5170669555664,37.8605842590332;112.52099609375,37.849857330322266;112.54137420654297,37.8512732521875;112.5351180302734,37.858699798583984";
        //  let s=data
        var s1 = new Array()
        s1 = s.split(";");
        for (var i = 0; i < s1.length; i++) {
          var ss = s1[i];
          var temp = ss.split(",");
          var point = new Array();
          point.push(Number(temp[0]), Number(temp[1]));
          pointArr.push(point);
        }
        calculateArea(pointArr);
      }
      /*球面多边形面积计算*/
      function SphericalPolygonAreaMeters2(points) {
        var totalAngle = 0;
        for (var i = 0; i < points.length; i++) {
          var j = (i + 1) % points.length;
          var k = (i + 2) % points.length;
          totalAngle += Angle(points[i], points[j], points[k]);
        }
        var planarTotalAngle = (points.length - 2) * 180.0;
        var sphericalExcess = totalAngle - planarTotalAngle;
        if (sphericalExcess > 420.0) {
          totalAngle = points.length * 360.0 - totalAngle;
          sphericalExcess = totalAngle - planarTotalAngle;
        } else if (sphericalExcess > 300.0 && sphericalExcess < 420.0) {
          sphericalExcess = Math.abs(360.0 - sphericalExcess);
        }
        return sphericalExcess * radiansPerDegree * earthRadiusMeters * earthRadiusMeters;
      }
    
      /*角度*/
      function Angle(p1, p2, p3) {
        var bearing21 = Bearing(p2, p1);
        var bearing23 = Bearing(p2, p3);
        var angle = bearing21 - bearing23;
        if (angle < 0) {
          angle += 360;
        }
        return angle;
      }
    
    
      /*方向*/
      function Bearing(from, to) {
        var lat1 = from[1] * radiansPerDegree;
        var lon1 = from[0] * radiansPerDegree;
        var lat2 = to[1] * radiansPerDegree;
        var lon2 = to[0] * radiansPerDegree;
        var angle = -Math.atan2(Math.sin(lon1 - lon2) * Math.cos(lat2), Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon1 - lon2));
        if (angle < 0) {
          angle += Math.PI * 2.0;
        }
        angle = angle * degreesPerRadian;
        return angle;
      }
    
      /*平面多边形面积*/
      function PlanarPolygonAreaMeters2(points) {
        var a = 0;
        for (var i = 0; i < points.length; ++i) {
          var j = (i + 1) % points.length;
          var xi = points[i][0] * metersPerDegree * Math.cos(points[i][1] * radiansPerDegree);
          var yi = points[i][1] * metersPerDegree;
          var xj = points[j][0] * metersPerDegree * Math.cos(points[j][1] * radiansPerDegree);
          var yj = points[j][1] * metersPerDegree;
          a += xi * yj - xj * yi;
        }
        return Math.abs(a / 2);
      }
    
    
    
    </script>
    
    

    有想换工作的同学可以找我内推哦不低于15k(前端,java,测试)

    在这里插入图片描述

    展开全文
  • 同时为该类提供两个方法:方法一用于求圆的面积,方法二用于求圆的周长;为该类提供一个无参的构造方法,用于初始化r的值为4。在main方法中测试。package hello.circle;/** * 2.创建一个圆Circle类。 * 为该类提供一...

    创建一个圆Circle类。为该类提供一个变量r表示半径,一个常量PI表示圆周率;

    同时为该类提供两个方法:方法一用于求圆的面积,方法二用于求圆的周长;

    为该类提供一个无参的构造方法,用于初始化r的值为4。

    在main方法中测试。

    package hello.circle;/** * 2.创建一个圆Circle类。 * 为该类提供一个变量r表示半径,一个常量PI表示圆周率; * 同时为该类提供两个方法:方法一用于求圆的面积,方法二用于求圆的周长; * 为该类提供一个无参的构造方法,用于初始化r的值为4。 * 在main方法中测试。 *///创建一个圆Circle类public class Circle {    //为该类提供一个变量r表示半径,一个常量PI表示圆周率    public double r;    public final double PI = 3.14;    //为该类提供一个无参的构造方法,用于初始化r的值为4。    public Circle() {        System.out.println("无参数的构造函数:为R赋值为 4 ---");        r = 4;    }    //方法一用于求圆的面积    public void area() {        System.out.println(r);        System.out.println("圆的面积为:" + PI * r * r);    }    //方法二用于求圆的周长    public void girth() {        System.out.println(r);        System.out.println("圆的周长为:" + 2 * PI * r);    }    // main方法    public static void main(String[] args) {        System.out.println("-----");        Circle c = new Circle();        System.out.println("-----");        c.area();        c.girth();    }}

    运行结果:

    f229aba4fb4c34bac82535b2a3a6474d.png
    展开全文
  • 根据已知点坐标计算附近位置,代码详细解释了三种计算策略。主要涉及日常需要解决问题,例如类似于滴滴打车实现查找附近车辆业务逻辑和贝壳找房根据指定位置筛选出附近房源,上述两场场景应用可借鉴代码中两种方法...
  • JAVA根据经纬度坐标点集合计算面积

    千次阅读 2021-04-27 10:50:34
    import com.wh.whcloud.common.Location... import java.util.List; public class PolygonAreaUtil { /** * public class Location { ... * private BigDecimal lon;... * 球面积计算公式 * @param locationList * ...
    
    
    import com.wh.whcloud.common.Location;
    import java.util.List;
    
    public class PolygonAreaUtil {
    
       
    /**
     * public class Location {
     *
     *   private BigDecimal lon;
     *
     *   private BigDecimal lat;
     * }
     */
    
      /**
       * 球面积计算公式
       * @param locationList
       * @return
       */
      public static double calculatePolygonArea(List<Location> locationList) {
        double area = 0;
        int size = locationList.size();
        if (size > 2) {
          double LowX = 0.0;
          double LowY = 0.0;
          double MiddleX = 0.0;
          double MiddleY = 0.0;
          double HighX = 0.0;
          double HighY = 0.0;
    
          double AM = 0.0;
          double BM = 0.0;
          double CM = 0.0;
    
          double AL = 0.0;
          double BL = 0.0;
          double CL = 0.0;
    
          double AH = 0.0;
          double BH = 0.0;
          double CH = 0.0;
    
          double CoefficientL = 0.0;
          double CoefficientH = 0.0;
    
          double ALtangent = 0.0;
          double BLtangent = 0.0;
          double CLtangent = 0.0;
    
          double AHtangent = 0.0;
          double BHtangent = 0.0;
          double CHtangent = 0.0;
    
          double ANormalLine = 0.0;
          double BNormalLine = 0.0;
          double CNormalLine = 0.0;
    
          double OrientationValue = 0.0;
    
          double AngleCos = 0.0;
    
          double Sum1 = 0.0;
          double Sum2 = 0.0;
          double Count2 = 0;
          double Count1 = 0;
    
          double Sum = 0.0;
          double Radius = 6378000;
    
          for (int i = 0; i < size; i++) {
            if (i == 0) {
              LowX = locationList.get(size-1).getLon().doubleValue() * Math.PI / 180;
              LowY = locationList.get(size-1).getLat().doubleValue() * Math.PI / 180;
              MiddleX =locationList.get(0).getLon().doubleValue() * Math.PI / 180;
              MiddleY = locationList.get(0).getLat().doubleValue() * Math.PI / 180;
              HighX = locationList.get(1).getLon().doubleValue() * Math.PI / 180;
              HighY = locationList.get(1).getLat().doubleValue() * Math.PI / 180;
            } else if (i == size - 1) {
              LowX = locationList.get(size-2).getLon().doubleValue() * Math.PI / 180;
              LowY = locationList.get(size-2).getLat().doubleValue() * Math.PI / 180;
              MiddleX =locationList.get(size-1).getLon().doubleValue() * Math.PI / 180;
              MiddleY = locationList.get(size-1).getLat().doubleValue() * Math.PI / 180;
              HighX = locationList.get(0).getLon().doubleValue() * Math.PI / 180;
              HighY = locationList.get(0).getLat().doubleValue() * Math.PI / 180;
            } else {
              LowX = locationList.get(i-1).getLon().doubleValue() * Math.PI / 180;
              LowY = locationList.get(i-1).getLat().doubleValue() * Math.PI / 180;
              MiddleX = locationList.get(i).getLon().doubleValue() * Math.PI / 180;
              MiddleY = locationList.get(i).getLat().doubleValue() * Math.PI / 180;
              HighX = locationList.get(i+1).getLon().doubleValue() * Math.PI / 180;
              HighY = locationList.get(i+1).getLat().doubleValue() * Math.PI / 180;
            }
    
            AM = Math.cos(MiddleY) * Math.cos(MiddleX);
            BM = Math.cos(MiddleY) * Math.sin(MiddleX);
            CM = Math.sin(MiddleY);
            AL = Math.cos(LowY) * Math.cos(LowX);
            BL = Math.cos(LowY) * Math.sin(LowX);
            CL = Math.sin(LowY);
            AH = Math.cos(HighY) * Math.cos(HighX);
            BH = Math.cos(HighY) * Math.sin(HighX);
            CH = Math.sin(HighY);
    
            CoefficientL = (AM * AM + BM * BM + CM * CM) / (AM * AL + BM * BL + CM * CL);
            CoefficientH = (AM * AM + BM * BM + CM * CM) / (AM * AH + BM * BH + CM * CH);
    
            ALtangent = CoefficientL * AL - AM;
            BLtangent = CoefficientL * BL - BM;
            CLtangent = CoefficientL * CL - CM;
            AHtangent = CoefficientH * AH - AM;
            BHtangent = CoefficientH * BH - BM;
            CHtangent = CoefficientH * CH - CM;
    
            AngleCos = (AHtangent * ALtangent + BHtangent * BLtangent + CHtangent * CLtangent) / (
                    Math.sqrt(AHtangent * AHtangent + BHtangent * BHtangent + CHtangent * CHtangent)
                            * Math.sqrt(ALtangent * ALtangent + BLtangent * BLtangent
                            + CLtangent * CLtangent));
    
            AngleCos = Math.acos(AngleCos);
    
            ANormalLine = BHtangent * CLtangent - CHtangent * BLtangent;
            BNormalLine = 0 - (AHtangent * CLtangent - CHtangent * ALtangent);
            CNormalLine = AHtangent * BLtangent - BHtangent * ALtangent;
    
            if (AM != 0) {
              OrientationValue = ANormalLine / AM;
            } else if (BM != 0) {
              OrientationValue = BNormalLine / BM;
            } else {
              OrientationValue = CNormalLine / CM;
            }
    
            if (OrientationValue > 0) {
              Sum1 += AngleCos;
              Count1++;
    
            } else {
              Sum2 += AngleCos;
              Count2++;
              //Sum +=2*Math.PI-AngleCos;
            }
          }
          if (Sum1 > Sum2) {
            Sum = Sum1 + (2 * Math.PI * Count2 - Sum2);
          } else {
            Sum = (2 * Math.PI * Count1 - Sum1) + Sum2;
          }
          //平方米
          area = (Sum - (size - 2) * Math.PI) * Radius * Radius;
        }
        return Math.abs(area);
      }
    
    }
    

     

    展开全文
  • 根据经纬度计算区域面积

    万次阅读 2019-04-18 17:22:35
    1、根据分号对经纬度数据拆分成一组一组的数据 2、计算点数 3、将每个点的经纬度组合形成列表形式 4、计算 第一点的纬度*(最后一个点的经度-第一个点的经度) 注:round函数,最后一个6是小数点后保留的位数 ...
  • 根据经纬度点求面积

    万次阅读 热门讨论 2018-05-27 12:35:15
    根据经纬度计算面积,需要一个转化,才能和高德地图显示的面积是一致的。原理就是简单多边形求面积公式: data = "115.989099,39.646023;115.987394,39.645988;115.987371,39.647407;115.986684,39.647423;115....
  • /*球面多边形面积计算*/ function SphericalPolygonAreaMeters2(points) { var totalAngle = 0; for (var i = 0; i ; i++) { var j = (i + 1) % points.length; var k = (i + 2) % points.length; ...
  • 输入多个经纬度计算面积

    千次阅读 2020-04-20 11:39:04
    function computeSignedArea(path) { //传入path:{ [{lat:,lng:}],[{lat:,lng:}],[{lat:,lng:}] } let radius= 6371009 let len = path.length; if (len < 3) return 0; let total = 0;...let prev = path[len - 1]...
  • 如果在不使用百度地图,但是已知百度地图的经纬度情况下也是可以计算出与上面相同的值的 三方库 此库提供计算两点距离的方法 引用此库使用 返回(米) BMapLib.GeoUtils.getDistance(point1 ,point2) 当然如果只想...
  • 经纬度坐标的shape面层计算面积的详细步骤
  • 经纬度坐标下的球面多边形面积计算公式,这是古人的算法。
  • 大地经纬度转换,面积计算,根据大地地块角点计算面积
  • 经纬度角度计算工具

    2018-11-06 11:21:52
    专业性工具,小巧灵活,无需安装,打开即用。可以通过经纬度换算得出最优角度和距离。
  • 根据经纬度计算多边形的面积

    千次阅读 2019-01-23 13:28:00
    这里有个前提是:你的经纬度点是依次相连接的点,不是无序的,可以是顺时针,或者逆时针都可以。 附python代码: import mathdef ConvertToRadian(input): return input * math.pi / 180; def ...
  • from math import radians, sin def area(lon1, lat1, lon2, lat2): lon1, lat1, lon2, l[at2 = map(radians, \[lon1, lat1, lon2, lat2\]) r = 6372 return abs(r**2 * (lon2 - lon1) * (sin(lat2) - sin(lat1))...
  • 代码如下: private static double CalculatePolygonArea(CoordinateCollection coordinates) { double area = 0; if (coordinates.Count > 2) { var coordlist = coordinates.ToList();...
  • 经纬度坐标的shape面层计算面积的详细步骤 (1)运行ArcGis ArcToolsBox 选择Projections Define Projection Wizard shapeFiles geodatabase 定义地理坐标
  • 关于经纬度,可以看huanhuan的博客根据两点经纬度计算距离 文章详细介绍了经纬度以及根据经纬度,计算两点直接的距离。 高德地图中,计算两点直线距离的公式如下: //根据经纬度获取两点距离 public static ...
  • public class LocationUtils {private static double EARTH_RADIUS = 6378.137;private static double rad(double d) {return d * ...}/*** 通过经纬度获取距离(单位:米)* @param lat1* @param lng1* @param lat2* ...
  • 下面这个代码中面积公式有点不懂,其中 ![图片说明](https://img-ask.csdn.net/upload/201810/26/1540545189_745908.png) 后面为什么要乘9101160000.085981这个数值,如果经纬度换成x,y坐标是不要乘这个...
  • 简单的看了其他人的博客,基本都是用半正矢公式(Haversine formula)计算距离的。 其中,a=lat1-lat2(经度差);b=lon1-lon2(纬度差); 计算函数如下,找半天不知道地球半径该取多少,但是实际算起来差距不...
  • 计算两个经纬度地点之间的距离 /** * 求两个已知经纬度之间的距离,单位为米 * * @param lng1 $ ,lng2 经度 * @param lat1 $ ,lat2 纬度 * @return float 距离,单位米 * @author www.Alixixi.com */ ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,016
精华内容 1,206
关键字:

根据经纬度计算面积