GIS面积距离计算

来源:互联网 发布:自瞄程序源码 编辑:程序博客网 时间:2024/06/11 17:01

  1. 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;    $(document).ready(function() {      pointArr = new Array();      b();  });      function calculateArea(points) {      if (points.length > 2) {          var areaMeters2 = PlanarPolygonAreaMeters2(points);          if (areaMeters2 > 1000000.0) {              areaMeters2 = SphericalPolygonAreaMeters2(points);              alert("面积为" + areaMeters2 + "平方米");          }      }  }    /*球面多边形面积计算*/  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);  }    function b() {      var s = "112.523197631836,37.868892669677734;112.5170669555664,37.8605842590332;112.52099609375,37.849857330322266;112.54137420654297,37.8512732521875;112.5351180302734,37.858699798583984";      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);  }  

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 股票乖离率指标 乖离率参数 什么是乖离率指标 同花顺乖离率 乖离率背离选股公式 乖离率大好还是小好 伦常乖舛 伦常乖舛立见消亡是什么意思 乗怎么读 乘以 0乘以无穷大 乘和乘以 乘以的英文 4万乘以8万等于多少 0乘以任何数都得0对吗 四万乘以八万等于多少 无穷大乘以无穷小 零乘以任何数都得零对吗 整数乘以分数怎么算 任何数乘以0等于多少 乘数乘以乘数等于积 负数乘以负数等于正数吗 无穷小乘以无穷大 4万乘以8万标准答案等于多少 0乘以5等于多少 乘和乘以有什么区别 四分之五乘以五分之四 电压乘以电流等于什么 整数乘以分数 无穷大乘以有界函数 长乘以宽等于面积还是平方 密度乘以体积 分数乘以整数怎么算 分数乘以分数怎么算 电流乘以电压 5乘以0等于多少 4乘以0等于多少 40000乘以80000等于多少 3乘以5表示什么 质量等于密度乘以体积