资讯专栏INFORMATION COLUMN

百度地图根据已知坐标画轨迹

tomlingtm / 3602人阅读

摘要:原文来自百度地图根据已知坐标画点线,这两天用到的,在这里做个笔记,方便自己查阅开启鼠标滚轮缩放添加比例尺控件生成坐标点画线配置图片画图标创建标注根据经纬极值计算绽放级别。从网上复制没有坐标,显示全中国

原文来自 taoeer.top

百度地图根据已知坐标画点线,这两天用到的,在这里做个笔记,方便自己查阅!

var map = new BMap.Map("map");
    var point = new BMap.Point(116.404, 39.915);
    map.centerAndZoom(point, 15);
    map.enableScrollWheelZoom(); // 开启鼠标滚轮缩放
    map.addControl(new BMap.ScaleControl()); // 添加比例尺控件

    var pointStr = "104.038748,30.641821,104.047789,30.648128,104.063959,30.655336,104.067264,30.660307,104.067264,30.664438,104.064008,30.665316".split(",");
    var pointArr = [];
    
    for (var k = 0; k < pointStr.length; k += 2) {
        pointArr.push({
            lng: pointStr[k],
            lat: pointStr[k + 1]
        });
    }
    
    // 生成坐标点
    var trackPoint = [];
    for (var i = 0, j = pointArr.length; i < j; i++) {
        trackPoint.push(new BMap.Point(pointArr[i].lng, pointArr[i].lat));
    }

    map.centerAndZoom(trackPoint[0], 15);
    
    // 画线
    var polyline = new BMap.Polyline(trackPoint, {
        strokeColor: "#1869AD",
        strokeWeight: 3,
        strokeOpacity: 1
    });
    map.addOverlay(polyline);
       
    // 配置图片
    var size = new BMap.Size(26, 26);
    var offset = new BMap.Size(0, -13);
    var imageSize = new BMap.Size(26, 26);
    var icon = new BMap.Icon("./express-position.png", size, {
        imageSize: imageSize
    });
    
    // 画图标
    for (var i = 0, j = trackPoint.length; i < j; i++) {
        var marker = new BMap.Marker(trackPoint[i], {
            icon: icon,
            offset: offset
        }); // 创建标注    
        map.addOverlay(marker);

    }

    //根据经纬极值计算绽放级别。 (从网上复制)
    function getZoom(maxLng, minLng, maxLat, minLat) {
        var zoom = ["50", "100", "200", "500", "1000", "2000", "5000", "10000", "20000", "25000", "50000", "100000", "200000", "500000", "1000000", "2000000"]; // 级别18到3。
        var pointA = new BMap.Point(maxLng, maxLat); // 创建点坐标A
        var pointB = new BMap.Point(minLng, minLat); // 创建点坐标B
        var distance = map.getDistance(pointA, pointB).toFixed(1); //获取两点距离,保留小数点后两位
        for (var i = 0, zoomLen = zoom.length; i < zoomLen; i++) {
            if (zoom[i] - distance > 0) {
                return 18 - i + 3; //之所以会多3,是因为地图范围常常是比例尺距离的10倍以上。所以级别会增加3。
            }
        }
    }
    
    //  (从网上复制)
    function setZoom(points) {
        if (points.length > 0) {
            var maxLng = points[0].lng;
            var minLng = points[0].lng;
            var maxLat = points[0].lat;
            var minLat = points[0].lat;
            var res;
            for (var i = points.length - 1; i >= 0; i--) {
                res = points[i];
                if (res.lng > maxLng) maxLng = res.lng;
                if (res.lng < minLng) minLng = res.lng;
                if (res.lat > maxLat) maxLat = res.lat;
                if (res.lat < minLat) minLat = res.lat;
            }
            var cenLng = (parseFloat(maxLng) + parseFloat(minLng)) / 2;
            var cenLat = (parseFloat(maxLat) + parseFloat(minLat)) / 2;
            var zoom = getZoom(maxLng, minLng, maxLat, minLat);
            map.centerAndZoom(new BMap.Point(cenLng, cenLat), zoom);
        } else {
            //没有坐标,显示全中国
            map.centerAndZoom(new BMap.Point(103.388611, 35.563611), 5);
        }
    }

    setZoom(pointArr)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/91118.html

相关文章

  • 腾讯地图实现轨迹回放

    摘要:为什么使用腾讯地图百度高德地图,商业需要授权年。轨迹回放腾讯也有方法,我是参考高德的地图对比腾讯地图才知道怎么使用可能还是文档不太熟,之前提交工单问客服有没有轨迹回放功能,客服直接回答没有。 为什么使用腾讯地图? 百度、高德地图,商业需要授权5W/年。土豪可以直接使用百度、高德,文档详细方法全,腾讯免费但是方法不全。 轨迹回放 腾讯也有方法,我是参考高德的地图对比腾讯地图才知道怎么使...

    leejan97 评论0 收藏0
  • 百度地图获取规划路径信息

    摘要:本文意在解决通过制定两点坐标获取百度搜索的路径结果信息,用途是重现路径比如在上绘制轨迹显示效果图等。 本文意在解决通过制定两点坐标获取百度搜索的路径结果信息,用途是重现路径(比如在mapv上绘制轨迹显示效果图等)。实现思路: 加载百度地图所需的js引用; html布局用于显示结果; 初始化百度地图并加载到页面上,给地图对象添加点击事件的监听; 实现地图的点击监听方法,主要是获取到点击...

    qingshanli1988 评论0 收藏0

发表评论

0条评论

tomlingtm

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<