-
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借鉴改写,亲测可用
2018-02-02 15:43:13java-业务需求需要根据经纬度计算面积,整理了一下根据经纬度计算面积,根据openlayers借鉴改写,亲测可用! -
高德地图 根据经纬度计算面积和判断一个点是否在圈内
2018-06-12 10:49:15高德地图 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,测试)
-
java 根据经纬度计算多边形的面积_Java面向对象练习题之计算圆的面积和周长
2020-11-21 10:21:52同时为该类提供两个方法:方法一用于求圆的面积,方法二用于求圆的周长;为该类提供一个无参的构造方法,用于初始化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(); }}
运行结果:
-
根据当前坐标(经纬度)计算附近位置-java版本
2020-09-18 09:53:21根据已知点坐标计算附近位置,代码详细解释了三种计算策略。主要涉及日常需要解决问题,例如类似于滴滴打车实现查找附近车辆业务逻辑和贝壳找房根据指定位置筛选出附近房源,上述两场场景应用可借鉴代码中两种方法... -
JAVA根据经纬度坐标点集合计算面积
2021-04-27 10:50:34import 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:351、根据分号对经纬度数据拆分成一组一组的数据 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.... -
js版根据经纬度计算多边形面积(墨卡托投影)
2018-04-03 13:16:11/*球面多边形面积计算*/ 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:04function 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]... -
详解js根据百度地图提供经纬度计算两点距离
2020-11-28 21:19:46如果在不使用百度地图,但是已知百度地图的经纬度情况下也是可以计算出与上面相同的值的 三方库 此库提供计算两点距离的方法 引用此库使用 返回(米) BMapLib.GeoUtils.getDistance(point1 ,point2) 当然如果只想... -
经纬度坐标的shape面层计算面积的详细步骤
2022-03-14 23:33:22经纬度坐标的shape面层计算面积的详细步骤 -
经纬度坐标下的球面多边形面积计算公式
2011-11-16 12:05:54经纬度坐标下的球面多边形面积计算公式,这是古人的算法。 -
面积计算_面积计算_面积经纬_面积_经纬度面积_经纬度计算_
2021-09-28 19:43:14大地经纬度转换,面积计算,根据大地地块角点计算面积。 -
经纬度角度计算工具
2018-11-06 11:21:52专业性工具,小巧灵活,无需安装,打开即用。可以通过经纬度换算得出最优角度和距离。 -
根据经纬度计算多边形的面积
2019-01-23 13:28:00这里有个前提是:你的经纬度点是依次相连接的点,不是无序的,可以是顺时针,或者逆时针都可以。 附python代码: import mathdef ConvertToRadian(input): return input * math.pi / 180; def ... -
经纬度网格面积计算(python)
2022-01-11 17:49:49from 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))... -
根据经纬度计算多边形的面积(calculcate polygon's area by lon and lat)
2017-08-04 10:23:33代码如下: private static double CalculatePolygonArea(CoordinateCollection coordinates) { double area = 0; if (coordinates.Count > 2) { var coordlist = coordinates.ToList();... -
arcgis经纬度坐标的shape面层计算面积的详细步骤
2015-03-20 11:20:22经纬度坐标的shape面层计算面积的详细步骤 (1)运行ArcGis ArcToolsBox 选择Projections Define Projection Wizard shapeFiles geodatabase 定义地理坐标 -
经纬度和高德地图计算两点距离面积
2018-08-30 15:38:56关于经纬度,可以看huanhuan的博客根据两点经纬度计算距离 文章详细介绍了经纬度以及根据经纬度,计算两点直接的距离。 高德地图中,计算两点直线距离的公式如下: //根据经纬度获取两点距离 public static ... -
Java通过经纬度计算两地之间的距离
2021-03-14 13:24:01public class LocationUtils {private static double EARTH_RADIUS = 6378.137;private static double rad(double d) {return d * ...}/*** 通过经纬度获取距离(单位:米)* @param lat1* @param lng1* @param lat2* ... -
封闭的一组经纬度,计算面积公式
2018-10-26 09:15:23下面这个代码中面积公式有点不懂,其中  后面为什么要乘9101160000.085981这个数值,如果经纬度换成x,y坐标是不要乘这个... -
根据经纬度计算两点之间的距离、点到直线的距离
2022-05-06 22:26:21简单的看了其他人的博客,基本都是用半正矢公式(Haversine formula)计算距离的。 其中,a=lat1-lat2(经度差);b=lon1-lon2(纬度差); 计算函数如下,找半天不知道地球半径该取多少,但是实际算起来差距不... -
PHP根据经纬度计算两点距离与方圆范围方法
2019-09-09 10:29:24计算两个经纬度地点之间的距离 /** * 求两个已知经纬度之间的距离,单位为米 * * @param lng1 $ ,lng2 经度 * @param lat1 $ ,lat2 纬度 * @return float 距离,单位米 * @author www.Alixixi.com */ ...