精华内容
下载资源
问答
  • 经纬度算面积
    万次阅读 热门讨论
    2018-05-27 12:35:15

    根据经纬度计算的面积,需要一个转化,才能和高德地图显示的面积是一致的。原理就是简单多边形求面积公式:

    data = "115.989099,39.646023;115.987394,39.645988;115.987371,39.647407;115.986684,39.647423;115.986602,39.648088;115.989095,39.648151;115.989188,39.646021;115.989099,39.646023"

    这里有个前提是你的经纬度点是依次相连接的点,不是无序的,可以是顺时针,或者逆时针都可以。

    具体的计算规则可以参考:多边形求面积公式

    下面是Python实现的代码

    import math
    def ComputeArea(data):
        arr = data.split(';')
        arr_len = len(arr)
        if arr_len < 3:
            return 0.0
        temp = []
        for i in range(0,arr_len):
            temp.append([float(x) for x in arr[i].split(',')])
        s = temp[0][1] * (temp[arr_len -1][0]-temp[1][0])
        print s
        for i in range(1,arr_len):
            s += temp[i][1] * (temp[i-1][0] - temp[(i+1)%arr_len][0])
        return round(math.fabs(s/2)*9101160000.085981,6)
        

    最后求的面积是:

    38602.365364

    更多相关内容
  • java-业务需求需要根据经纬度计算面积,整理了一下根据经纬度计算面积,根据openlayers借鉴改写,亲测可用!
  • 经纬度计算软件

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

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

    2022-05-26 17:25:52
    import js2py import pandas as pd import numpy as np from shapely.geometry import Polygon,Point data_js = open(r'polygon_go.js', 'r', encoding='utf8').read() ... 计算poly的面积(单位:平方.
    import js2py
    import pandas as pd
    import numpy as np
    from shapely.geometry import Polygon,Point
    
    
    data_js = open(r'polygon_go.js', 'r', encoding='utf8').read()
    data_js = js2py.eval_js(data_js)
    
    def def_get_area_js(poly,data_js):
        '''
        计算poly的面积(单位:平方公里)
        :param :poly是一个polygon或者是一个字符串(wkt)
        :return :返回polygon的面积,若无polygon,默认为0
        '''
        try:
            shape = str(poly).replace(', ',',')
            shape = shape.replace('POLYGON ((','').replace('))','').replace(', ',',')
            k2 = shape.split(',')
            k3 = []
            for i in k2:
                print(i)
                i = i.replace(")","").replace("(","")
                lng_1 = float(i.split(' ')[0])
                lat_1 = float(i.split(' ')[1])
                k3.append([lng_1,lat_1])
    
            final = data_js(k3)
            poly_area = float(final)*0.000001
            return poly_area
        except:
    #        print()
            return 0
       
    data = pd.read_excel(')
    
    id_area = []
    for index,row in data.iterrows():
        # wkt = '108.3886230000002 22.73205900000006, 108.3749951436175 22.73057592190073...'
        wkt = row['轮廓坐标串']
        wkt = str(wkt).replace('POLYGON ((','').replace('))','').replace(', ',',').replace('\n',',')## 一般不需要用到
        shape = wkt.split(',')
        shape = np.array([i.split(' ') for i in shape])
        shape = shape.astype(np.float)
        poly = Polygon(shape)
        if poly.is_valid == True:
            pass
        else:
            poly = poly.buffer(0)
    
        area = def_get_area_js(poly,data_js)

    用到的 js 文件代码

        function getArea(ring) {
            var sJ = 6378137;
            var Hq = 0.017453292519943295;
    
            var arr = [];
            for (var i = 0;i< ring.length; i++){
                var poi = {
                    lng:ring[i][0],
                    lat:ring[i][1]
                };
                arr[i] = poi;
            }
    
            ring = arr;
    
            var c = sJ *Hq , d = 0 , e = ring.length;
    
            if (3 > e) {
                return 0;
            }
    
            for (var g = 0; g < e - 1; g += 1){
                var h = ring[g], k = ring[g + 1];
                var u = h.lng * c * Math.cos(h.lat * Hq);
                var h = h.lat * c;
                var v = k.lng * c * Math.cos(k.lat *Hq);
                var d = d + (u * k.lat * c - v * h);
            }
    
            g = ring[g];
            ring = ring[0];
            e = g.lng * c * Math.cos(g.lat * Hq);
            g = g.lat * c;
            k = ring.lng * c * Math.cos(ring.lat * Hq);
            d += e * ring.lat * c - k * g;
            return 0.5*Math.abs(d)
        }

    展开全文
  • 根据经纬度计算多边形面积

    千次阅读 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,测试)

    在这里插入图片描述

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

    万次阅读 2019-04-18 17:22:35
    经纬度点组成一个区域,要求数据是顺序排列,顺时针或逆时针都可以。 步骤拆分: 1、根据分号对经纬度数据拆分成一组一组的数据 2、计算点数 3、将每个点的经纬度组合形成列表形式 4、计算 第一点的纬度*(最后...

    经纬度点组成一个区域,要求数据是顺序排列,顺时针或逆时针都可以。
    在这里插入图片描述步骤拆分:
    1、根据分号对经纬度数据拆分成一组一组的数据
    在这里插入图片描述
    2、计算点数
    在这里插入图片描述
    3、将每个点的经纬度组合形成列表形式
    在这里插入图片描述
    4、计算
    在这里插入图片描述
    第一点的纬度*(最后一个点的经度-第一个点的经度)
    在这里插入图片描述
    在这里插入图片描述
    注:round函数,最后一个6是小数点后保留的位数
    temp[0][1]表示temp列表中第一个列表中的第1个位置,即第一个点的纬度
    temp[data1_len -1][0]是temp列表中最后一个点的第0个位置,切片由于有第0个位置,故要用len-1即为最后一个列表

    参考文章:
    https://blog.csdn.net/tongjinrui/article/details/80468461

    展开全文
  • 一、两个经纬度点之间的距离 $\phi_1$,$\phi_2$是纬度,$\lambda_1$,$\lambda_2$是经度。均是弧度制数值ArcGISPython 实现2 * 6372 * math.asin(math.sqrt(math.sin((math.radians( !CENTROID_Y! )-math.radians( ...
  • 同时为该类提供两个方法:方法一用于求圆的面积,方法二用于求圆的周长;为该类提供一个无参的构造方法,用于初始化r的值为4。在main方法中测试。package hello.circle;/** * 2.创建一个圆Circle类。 * 为该类提供一...
  • js根据经纬度计算多边形面积

    千次阅读 2017-06-20 10:46:03
    js经纬点计算面积;简单准确
  • 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))...
  • 大地经纬度转换,面积计算,根据大地地块角点计算面积
  • 高德地图 1,根据经纬度计算面积 2,判断一个点是否在圈内
  • I'm looking for a Java library that is capable of performing spatial calculations on sets of lat/lon data. Here are some of the functions that I'm looking for:Calculate the Great Circle distance betwe...
  • alert("面积为" + areaMeters2 + "平方米"); } } } /*球面多边形面积计算*/ function SphericalPolygonAreaMeters2(points) { var totalAngle = 0; for (var i = 0; i ; i++) { var j = (i + 1) % points...
  • java 根据经纬度获取区域面积
  • 经纬度坐标下求多边形的面积

    千次阅读 2015-05-18 14:54:08
    经纬度坐标下求多边形的面积,mapinfo的值作为参考,试了几种投影都不行,原来应该计算球面坐标的面积。 最后采用了boost库的方法求面积。 对boost不熟悉的可以参考一下: #include #include #include ...
  • GeoTools计算经纬度图形面积

    千次阅读 2021-05-15 10:41:49
    文章目录前言一、pom.xml二、经纬度坐标转Mactor三、解析GeoJson,计算面积总结 前言 项目中需要对经纬度的矢量图形数据计算面积,由于项目开发中主体部分使用的是Java语言,因此这里采用开源的Geotools工具包实现 ...
  • 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 * ...
  • 经纬度坐标的shape面层计算面积的详细步骤 (1)运行ArcGis ArcToolsBox 选择Projections Define Projection Wizard shapeFiles geodatabase 定义地理坐标
  • 面积测量精灵手机版下载

    万次阅读 2021-02-05 09:20:53
    面积测量精灵语音版是一款可以在手机上测量各种土地面积的软件,软件的使用方法十分简单,在手机界面上框选出范围,软件就可以根据定位来出准确的土地面积,超多功能可以体验,快来试试吧!面积测量精灵软件介绍...
  • 给定经纬度和投影方式计算区域面积。读取Landsat8tiff文件格点信息。
  • 已知四点经纬度位置计算球面面积

    千次阅读 2014-08-25 11:16:23
    1 先把四点坐标的经纬度都转换为角度,楼主的数据“东经121/42/115”我不太明白后面的115代表什么,我把它理解为东经121度42分吧,其他依此类推,得到四点坐标为:  A(121.7 31.65)  B(121.783 31.63)  C(121....
  • 经纬度坐标的shape面层计算面积的详细步骤
  • 输入多个经纬度,计算面积

    千次阅读 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]...
  • 之前网上找的一些例子计算出来的不准确自己写了一个,C#计算两个经纬度之间的方向角的DEMO,以正北为0-359 范围内的角度。
  • Cesium测量距离和面积、位置坐标

    千次阅读 2020-12-30 17:39:12
    /**根据经纬度计算出距离**/ var geodesic = new Cesium.EllipsoidGeodesic(); geodesic.setEndPoints(point1cartographic, point2cartographic); var s = geodesic.surfaceDistance; //返回两点之间的距离 s = ...

空空如也

空空如也

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

经纬度算面积