//主要用到turf的根据距离裁剪线段的接口
function getArrow(arrowPoints) {
if (arrowPoints.length > 0) {
var format = new ol.format.GeoJSON();
var geometry = new ol.geom.LineString(arrowPoints);
var line = turf.lineString(arrowPoints);
var _g = geometry.clone().transform("EPSG:4326", map.spatialReference)
var length = ol.sphere.getLength(_g, {
projection: map.spatialReference,
radius: 6378137
});
//中心点一半加减1m的线段
var start = length / 1000 / 2- 0.001;
var stop = start + 0.002;
var sliced = turf.lineSliceAlong(line, start, stop, { units: 'kilometers' });
var poyFeat = format.readFeature(sliced);
var firstPoint = poyFeat.getGeometry().getFirstCoordinate();
var lastPoint = poyFeat.getGeometry().getLastCoordinate();
var arrowLonLat = [(firstPoint[0] + lastPoint[0]) / 2, (firstPoint[1] + lastPoint[1]) / 2];
var dx = lastPoint[0] - firstPoint[0];
var dy = lastPoint[1] - firstPoint[1];
var rotation = Math.atan2(dy, dx);
return { arrowLonLat: arrowLonLat, rotation: rotation };
}
}
Openlayer + turf 计算多点线段的中心点及其角度
最新推荐文章于 2023-06-15 18:01:15 发布