PARSEPATH

function parsePath(info){

let { path, zoom, offset } = info;

var steps = path.steps;
var lineArr = [];
steps.forEach(function(item, index){
    var tmparr = item.polyline.split(";");
    var tmp = tmparr.map(function(val){
        return val.split(",");
    });
    lineArr = lineArr.concat(tmp);
});

var pxarr = lineArr.map(function(item){
    return project({
        lng : item[0],
        lat : item[1]
    }, 20);
});

var pas = [];
var ratio = Math.pow(2, 20 - zoom);
pxarr.forEach(function(item, index){
    if(index % 4 === 0) {
        pas.push([((item.x - offset.x) /ratio).toFixed(6),((item.y - offset.y)/ratio).toFixed(6)]);
    }
});

return pas;

}

function pathLength(pas) {

var len = 0;
var i = 1;
if(pas && pas.length) {
    for( i; i<pas.length; i++){
        var a = pas[i][0] - 0 - pas[i-1][0];
        var b = pas[i][1] - 0 - pas[i-1][1];
        len += Math.sqrt( a * a + b * b );
    }
}
return len;

}

function fetchPath(opt){

var from = opt.origin.x + "," + opt.origin.y;
var to = opt.dest.x + "," + opt.dest.y
var url = "http://restapi.amap.com/v3/direction/driving?key=ac92f92386cfe54122ae34476aafb03e&extensions=base&strategy=" + parseInt(1 + 20 * Math.random()) + "&origin=" + from + "&destination=" + to;
fetch(url)
.then( (res) => {
    return res.json();
})
.then( (json) => {
    return {
        path : json.route.paths[0],
        zoom : opt.zoom,
        offset : opt.offset
    };
})
.then( parsePath )
.then( (pas) => {

    var len = pathLength(pas);

    postMessage({
        path : pas,
        len : len,
        opt : opt
    });
});

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容