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米,偏小。

openlayers绘制圆形区域,消除误差的一种方法_第1张图片

后来,我采用如下代码实现圆形区域的绘制,仍然绘制以坐标(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绘制圆形区域,消除误差的一种方法_第2张图片

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

 

你可能感兴趣的:(openlayers,js,web)