百度地图算面积的开源库是逗你玩的吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jarlyyn
V2EX    问与答

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

  •  
  •   jarlyyn 2015-04-19 00:41:42 +08:00 5590 次点击
    这是一个创建于 3834 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    具体可以使用

    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;
    }
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5409 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 03:40 PVG 11:40 LAX 20:40 JFK 23:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86