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

2015-04-19 00:41:42 +08:00
 jarlyyn

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

写了一个简单的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)+'平方米')
                    })

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

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

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

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

估计是有什么系数我乘错了。
dingyaguang117
2015-04-19 14:24:24 +08:00
多边形面积先顶点排序,然后分割三角形算一下加起来就是了吧
jarlyyn
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;
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/184660

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX