openlayers绘制圆形区域,消除误差的一种方法

我需要以某点为圆心,以某长度(单位米)为半径,在地图上绘制圆形区域。

前提:地图显示、图层和数据源的创建与设置方法这里就不详细描述了,直接上关键部分。

一开始,我使用如下代码实现圆形区域的绘制,绘制以坐标(1,1)为中心,200000米为半径的圆。

var metersPerunit=map.getView().getProjection().getMetersPerUnit();
var t0CircleRadius=20000.0/metersPerunit;
var t0RangeFeature=new ol.Feature({geometry:new ol.geom.Circle([***,**],t0CircleRadius)});
t0RangeFeature.setStyle(getDrawShapeStyle2());
drawVectorLayer.getSource().addFeature(t0RangeFeature);

效果如下,经过测量,该圆的实际半径为186135米,偏小。

后来,我采用如下代码实现圆形区域的绘制,仍然绘制以坐标(1,1)为中心,200000米为半径的圆。

var circle4326 = new ol.geom.Polygon.circular([1,1],200000,64);//参数分别为圆心、半径、多边形边数
var t1RangeFeature=new ol.Feature({geometry:circle4326});
t1RangeFeature.setStyle(getDrawShapeStyle());
drawVectorLayer.getSource().addFeature(t1RangeFeature);

效果如下,该圆为绿色的椭圆,经仔细观察,该圆实际上是一个64边形。经过测量,该圆的实际半径为199243米,误差明显变小。

 总结:为什么会出现这样的结果,我想应该需要地理测绘方面的知识和openlayers结合才能给出更好的解释。大家如有新的见解或更好的方法实现,欢迎留言。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值