1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title>
<style> body { margin: 0; padding: 0; width: 100vw; height: 100vh; }
#container { position: relative; width: 100%; height: 100%; }
#map { width: 100%; height: 100%; }
#mySvg { position: absolute; left: 0; top: 0; width: 100%; height: 100%; pointer-events: none; } </style>
<script type="text/javascript" src="https://api.map.baidu.com/api?v=3.0&ak=您的ak密钥" ></script> </head>
<body> <div id="container"> <div id="map"></div> <svg id="mySvg" xmlns="http://www.w3.org/2000/svg"></svg> </div>
<script> const points = [ { lng: 116.404, lat: 39.915 }, { lng: 116.405, lat: 39.92 }, { lng: 116.423493, lat: 39.907445 }, ];
const formatPoint = (point) => { if (point instanceof Array) { return new BMap.Point(parseFloat(point[0]), parseFloat(point[1])); } else if (point instanceof Object) { return new BMap.Point(parseFloat(point.lng), parseFloat(point.lat)); } };
const $map = document.getElementById("map"); const $mySvg = document.getElementById("mySvg");
const map = new BMap.Map($map); map.enableScrollWheelZoom(); map.disableDoubleClickZoom(); map.centerAndZoom(formatPoint(points[0]), 15);
const addCusPolyline = () => { let pixels = points.map((point) => map.pointToPixel(formatPoint(point)) );
let d = ""; for (let i = 0; i < pixels.length; i++) { let pixel = pixels[i]; if (i === 0) { d += `M ${pixel.x}, ${pixel.y} `; } else { d += `L ${pixel.x}, ${pixel.y} `; } } let pathStr = `<path d="${d}" style="fill-opacity: 0; stroke: red; stroke-width: 2;"></path> `; $mySvg.setAttribute( "viewBox", `0 0 ${$mySvg.clientWidth} ${$mySvg.clientHeight}` ); $mySvg.innerHTML = pathStr; }; addCusPolyline();
const removePolyline = () => { $mySvg.innerHTML = ""; };
map.removeEventListener("zoomstart", removePolyline); map.removeEventListener("dragstart", removePolyline); map.removeEventListener("tilesloaded", addCusPolyline); map.addEventListener("zoomstart", removePolyline); map.addEventListener("dragstart", removePolyline); map.addEventListener("tilesloaded", addCusPolyline); </script> </body> </html>
|