[摘要:var earthRadiusMeters = 6371000.0; var metersPerDegree = 2.0 * Math.PI * earthRadiusMeters / 360.0; var radiansPerDegree = Math.PI / 180.0; var degr]

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);
}
 

最新文章

  1. 【三石视频教程】当FineUIPro遇到ReportViewer
  2. SQL Server 2008 允许远程连接的配置
  3. word20161220
  4. String类型传值以及对象传值
  5. BZOJ3548 : [ONTAK2010]Party
  6. 案例:TableLayout表格布局——迷你计算器
  7. unity 读取excel表 生成asset资源文件
  8. Android使用的设计模式1——观察者模式
  9. 关于javax.servlet.jsp.JspTagException: Don&#39;t know how to iterate over supplied &quot;items&quot; in &amp;lt;forEach&amp;gt;
  10. [转载]自定义ASP.NET MVC Html辅助方法 TagBuilder
  11. [OC Foundation框架 - 17] copy语法
  12. 【转载】TCP协议疑难杂症全景解析
  13. HDU 3306 - Another kind of Fibonacci
  14. 关于Nexus 7的Usb host开发问题
  15. Jenkins 配置邮件通知
  16. CSS引入
  17. Python两个栈实现一个队列
  18. 一、查看MVC4还是MVC5
  19. scipy线性模块liner(linalg)
  20. Luogu4195 【模板】exBSGS(exBSGS)

热门文章

  1. sql获取的时间不能直接在c#中tostring成我们要的格式,要转化一下
  2. Python数据类型-集合(set)
  3. shell脚本基本用法
  4. 深入理解javascript作用域系列第五篇
  5. Redis_NoSql分布式数据库CAP原理
  6. hihoCoder #1695 公平分队II
  7. hdu 3001 三进制状压
  8. 矩阵乘法快速幂 cojs 1717. 数学序列
  9. Codeforces Beta Round #5 B. Center Alignment 模拟题
  10. Codeforces Beta Round #5 A. Chat Server&#39;s Outgoing Traffic 水题