openlayer5 半径不准 画圆_openlayers5实战--踩坑总结

在OpenLayers5中,当接口返回圆心坐标和半径时,直接用Circle创建Feature会导致圆形显示不准确。解决方案是利用'ol/geom/Polygon.js'中的fromCircle方法将Circle转化为Polygon。此外,接口返回坐标点画圆则使用circular方法。对于测距不准问题,可以使用'ol/sphere.js'的getLength()方法进行精确计算。

1.接口返回圆心坐标和半径,直接通过new Circle(center,radius)添加圆形feature变小问题。

解决办法:

new  Feature()的geometry参数不能直接赋值new  Circel()得到的geometry,

要通过‘ol/geom/Polygon.js’中的fromCircle方法将new  Circel()得到的geometry转化一遍然后赋值给new  Feature()的geometry。

另:如果接口直接返回的坐标点画圆,则使用‘ol/geom/Polygon.js’中的circular方法。

import {circular as circularPolygon, fromCircle as fromCirclePolygon} from CC;

eg1:

let lng = parseFloat(d[0].lng);

let lat = parseFloat(d[0].lat);

let radius = parseFloat(d[0].radius);

let circle = new Circle(transform([lng, lat], 'EPSG:4326', 'EPSG:3857'), radius);

feature = new Feature({

position: transform([lng, lat], 'EPSG:4326', 'EPSG:3857'),

radius: radius,

type: 'circle',

id: 'N',

geometry: fromCirclePolygon(circle)

})

eg2:

let lng = item.coordinateList[0].lng;

let lat = item.coordinateList[0].lat;

let radius = item.coordinateList[0].radius;

let circle4326 = circularPolygon([lng, lat],radius,64);

let circle3857 = circle4326.clone().transform('EPSG:4326', 'EPSG:3857');

feature = new Feature(circle3857);

2.测距不准问题。

解决办法:

使用'ol/sphere.js'中的getLength()方法计算。

/*格式化测量长度

*@params line: type geometry

*/

formatLength (line) {

//定义长度变量

let length = getLength(line);

let output;

if (length > 100) {

output = `${(Math.round(length / 1000 * 100) / 100)} 公里`;

} else {

output = `${(Math.round(length * 100) / 100)} 米`;

}

return output;

},

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值