jarlyyn
V2EX  ›  问与答

百度地图算面积的开源库是逗你玩的吗?

  •  
  •   jarlyyn · Apr 19, 2015 · 6347 views
    This topic created in 4224 days ago, the information mentioned may be changed or developed.

    应为业务需要,需要紧急做一个计算面积的功能。

    写了一个简单的demo,然后一测试,崩溃了。

    计算多边形大量负数/天文数字面积我也忍了。毕竟多边形难计算。

    可是我画个直角三角形,再多个点补充为矩形面积会变小是什么意思?

    好吧,我忍,可我画个三角形,面积会是负数,我无语了啊。我哭了啊。

    相关的测试代码大概是这样的

    map.centerAndZoom(point, 22);
                        map.addEventListener('click',function(e){
                          var point=new BMap.Point(e.point.lng,e.point.lat);
                          points.push(point);
                          polygon.setPath(points);
                          area=BMapLib.GeoUtils.getPolygonArea(points);
                          $('#area').html(area.toFixed(0)+'平方米')
                        })
    

    好吧,继续找有没有算面积的代码,谁叫我算法差呢。

    7 replies  •  2015-04-24 19:07:47 +08:00
    Septembers
    Septembers
    Apr 19, 2015 via Android
    1
    百度已经有很多API和文档对不上了
    sumhat
    sumhat
    Apr 19, 2015
    2
    从算法来说,算出来负数应该是向量方向搞错了,你在添加顶点的时候按顺序来,可能可以避免这类问题。不过多边形面积是向量类的基础算法了,能写错也真是丢脸。
    xiaofami
    xiaofami
    Apr 19, 2015 via Android
    3
    QGIS是开源的,可以参考一下面积算法。
    laoyuan
    laoyuan
    Apr 19, 2015
    4
    关键就是按顺序来,按逆时针顺序应该就可以了
    jarlyyn
    jarlyyn
    OP
    Apr 19, 2015
    5
    找了个 算法。

    http://bbs.csdn.net/topics/330043103

    试了下基本还算靠谱,不过的大了大概1.4左右

    估计是有什么系数我乘错了。
    dingyaguang117
    dingyaguang117
    Apr 19, 2015
    6
    多边形面积先顶点排序,然后分割三角形算一下加起来就是了吧
    jarlyyn
    jarlyyn
    OP
    Apr 24, 2015
    7
    精度问题是因为纬度和米的换算的误差造成的。

    具体可以使用

    http://tech.meituan.com/lucene-distance.html

    中4.2的方法。

    以地一个点为原点,把每个点换算一下,再计算面积。

    大概是这样的js

    var convertPoint=function(point,point0)
    {
    var result={}
    var dx=point.lng-point0.lng;
    var dy=point.lat-point0.lat;
    b=(point.lat+point0.lat)/2;
    result.lat=degreeToRad(dy);
    result.lng=degreeToRad(dx)*Math.cos(degreeToRad(b));
    return result;
    }
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2352 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 11:35 · PVG 19:35 · LAX 03:35 · JFK 06:35
    ♥ Do have faith in what you're doing.