<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <title>hello-jsmap</title> <script src="http://192.168.192.201:7024/joysuch/jsmap/jsmap.js" type="text/javascript"></script> <link type="text/css" href="http://192.168.192.201:7024/joysuch/jsmap/jsmap.css" rel="stylesheet"/> <!-- <script src="http://mapdemo.joysuch.com/lib/jsmap/jsmap.js" type="text/javascript"></script>--> <!-- <link type="text/css" href="http://mapdemo.joysuch.com/lib/jsmap/jsmap.css" rel="stylesheet"/>--> <link rel="stylesheet" href="http://192.168.192.201:7024/joysuch/LocalAssets/css/animation/pop.css"> <link rel="stylesheet" href="http://192.168.192.201:7024/joysuch/LocalAssets/css/animation/loading.css"> <link rel="stylesheet" href="http://192.168.192.201:7024/joysuch/LocalAssets/css/dom.css"> <style> .jsmap-animation-point, .jsmap-animation-point:after, .jsmap-animation-point:before, .jsmap-animation-point p, .jsmap-animation-point p:after, .jsmap-animation-point p:before { margin: 0; padding: 0; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -o-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; } .jsmap-animation-point { width: 10px; height: 10px; border-radius: 50%; border: 1px solid hsla(0, 0%, 100%, 0.5); cursor: pointer; color: #0ff; background: currentColor; z-index: 3; left: 50%; top: 50%; -webkit-transform: translate(-50%, -50%); -moz-transform: translate(-50%, -50%); -o-transform: translate(-50%, -50%); -ms-transform: translate(-50%, -50%); transform: translate(-50%, -50%); box-shadow: 0 0 2em currentColor, 0 0 0.5em currentColor; position: absolute; } .jsmap-animation-point:after, .jsmap-animation-point:before, .jsmap-animation-point p:after, .jsmap-animation-point p:before { content: ""; position: absolute; width: 100%; height: 100%; left: 50%; top: 50%; border-radius: 50%; -webkit-transform: translate(-50%, -50%); -moz-transform: translate(-50%, -50%); -o-transform: translate(-50%, -50%); -ms-transform: translate(-50%, -50%); transform: translate(-50%, -50%); } .jsmap-animation-point:after, .jsmap-animation-point:before { border: 1px solid; -webkit-animation: jsmap-mapAni 1s ease infinite; -moz-animation: jsmap-mapAni 1s ease infinite; -o-animation: jsmap-mapAni 1s ease infinite; -ms-animation: jsmap-mapAni 1s ease infinite; animation: jsmap-mapAni 1s ease infinite; } .jsmap-animation-point p:before { border: 1px solid; } .jsmap-animation-point p { position: absolute; left: 50%; top: 50%; width: 0; height: 0; border-radius: 50%; -webkit-transform: translate(-50%, -50%); -moz-transform: translate(-50%, -50%); -o-transform: translate(-50%, -50%); -ms-transform: translate(-50%, -50%); transform: translate(-50%, -50%); -webkit-animation: jsmap-mapAni 2s ease infinite; -moz-animation: jsmap-mapAni 2s ease infinite; -o-animation: jsmap-mapAni 2s ease infinite; -ms-animation: jsmap-mapAni 2s ease infinite; animation: jsmap-mapAni 2s ease infinite; } @-webkit-keyframes jsmap-mapAni { 0% { width: 0; height: 0; opacity: 1; filter: alpha(opacity=1); } 25% { width: 12px; height: 12px; opacity: 0.7; filter: alpha(opacity=70); } 50% { width: 20px; height: 20px; opacity: 0.5; filter: alpha(opacity=50); } 75% { width: 30px; height: 30px; opacity: 0.2; filter: alpha(opacity=20); } to { width: 40px; height: 40px; opacity: 0; filter: alpha(opacity=0); } } @-moz-keyframes jsmap-mapAni { 0% { width: 0; height: 0; opacity: 1; filter: alpha(opacity=1); } 25% { width: 12px; height: 12px; opacity: 0.7; filter: alpha(opacity=70); } 50% { width: 20px; height: 20px; opacity: 0.5; filter: alpha(opacity=50); } 75% { width: 30px; height: 30px; opacity: 0.2; filter: alpha(opacity=20); } to { width: 40px; height: 40px; opacity: 0; filter: alpha(opacity=0); } } @-o-keyframes jsmap-mapAni { 0% { width: 0; height: 0; opacity: 1; filter: alpha(opacity=1); } 25% { width: 12px; height: 12px; opacity: 0.7; filter: alpha(opacity=70); } 50% { width: 20px; height: 20px; opacity: 0.5; filter: alpha(opacity=50); } 75% { width: 30px; height: 30px; opacity: 0.2; filter: alpha(opacity=20); } to { width: 40px; height: 40px; opacity: 0; filter: alpha(opacity=0); } } @-ms-keyframes jsmap-mapAni { 0% { width: 0; height: 0; opacity: 1; filter: alpha(opacity=1); } 25% { width: 12px; height: 12px; opacity: 0.7; filter: alpha(opacity=70); } 50% { width: 20px; height: 20px; opacity: 0.5; filter: alpha(opacity=50); } 75% { width: 30px; height: 30px; opacity: 0.2; filter: alpha(opacity=20); } to { width: 40px; height: 40px; opacity: 0; filter: alpha(opacity=0); } } @keyframes jsmap-mapAni { 0% { width: 0; height: 0; opacity: 1; filter: alpha(opacity=1); } 25% { width: 12px; height: 12px; opacity: 0.7; filter: alpha(opacity=70); } 50% { width: 20px; height: 20px; opacity: 0.5; filter: alpha(opacity=50); } 75% { width: 30px; height: 30px; opacity: 0.2; filter: alpha(opacity=20); } to { width: 40px; height: 40px; opacity: 0; filter: alpha(opacity=0); } } </style> </head> <body> <div id='mapContainer'></div> <!--<button id="addMarker" onclick="add()">添加DOM标注</button>--> <!--<button id="removeMarker" onclick="remove()">移除DOM标注</button>--> <select name="markerArea" id="markerArea" style="display: none;" onclick="changeMarker()"></select> <div id="setProperty" style="display: none;" onclick="property()"> <form oninput="handleInput()"> <p>图标ID:<input type="text" class="ID" readonly/></p> <p>楼层:<input type="text" class="floor" readonly/></p> <p>坐标位置:<input type="text" class="position" readonly/></p> <div id="gradient">偏移: <p>x:<input type="number" id="x轴"/></p> <p>y:<input type="number" id="y轴"/></p> </div> <p>是否显示: <label for="show"> 显示:<input type="radio" id="show" name="toggle"/> </label> <label for="hide"> 隐藏:<input type="radio" id="hide" name="toggle"/> </label> </p> <p>深度检测: <label for="on"> 开:<input type="radio" id="on" name="depth"/> </label> <label for="off"> 关:<input type="radio" id="off" name="depth"/> </label> </p> <div id="close">x</div> <p><span id="changeImg">更换内容</span></p> </form> </div> <script type="text/javascript"> //定义全局map变量 var map = null; //定义地图ID变量 var mapID = '100930'; //定义循环的起始变量 var i = 0; //创建循环的终止变量 var max = 0; //创建存储标注的数组 var markerArr = []; //获取各个属性标签 var propertyInput = document.querySelectorAll('#setProperty>form input'); //记录当前所选的Marker var currentMarker = null; //创建文档碎片 var fragment = document.createDocumentFragment(); //定义点标注全局变量 var domMarker = null; window.onload = function () { //加载地图 openMap(); }; window.addEventListener('unload', function (e) { //销毁地图 map.destroy(); map = null; }); //打开地图 function openMap() { //初始化参数 var mapOptions = { //必要,地图容器 container: 'mapContainer', //必要,地图类型 mapType: jsmap.JSMapType.MAP_3D, //必要,地图路径 // mapServerURL: 'http://mapdemo.joysuch.com', mapServerURL: 'http://192.168.192.201:7024/joysuch/jsmap/data/map', openingAnimation: false, enableLighting: true, enableShadows: true, viewOptions: { center: { x: 119.65057611465456, y: 39.93527621050255, z: 0.016594102424956802 }, distance: 370.01629618875734, rotate: 0, tilt: 90 }, imageryProvider: jsmap.JSImageryProviderType.IMAGE_TDT, }; //初始化地图对象 map = new jsmap.JSMap(mapOptions); //打开map服务器的地图数据和主题 map.openMapById(mapID); //地图加载完成事件 map.on("loadComplete", e => { var compassControl = new jsmap.JSCompassControl({ position: jsmap.JSControlPosition.LEFT_TOP, offset: { x: 10, y: 20 } }); var zoomControl = new jsmap.JSZoomControl({ position: jsmap.JSControlPosition.LEFT_TOP, offset: { x: 40, y: 10 } }); if (document.documentElement.clientWidth >= 600) { map.addControl(compassControl); map.addControl(zoomControl); } }); map.on('mapClickNode', event => { addPointMarker(event); }); } //添加标注 function addPointMarker(event) { remove() setProperty.style.display = "none"; // //标注的X轴坐标取值范围 // var x = Math.random() * (105.20001908346316 - 105.19474256905414) + 105.19474256905414; // //标注的Y轴坐标取值范围 // var y = Math.random() * (37.65154533433473 - 37.649024581292366) + 37.649024581292366; console.info(event) var x = event.eventInfo.coord.x; var y = event.eventInfo.coord.y; var z = event.eventInfo.coord.z; domMarker = new jsmap.JSDomMarker({ id: i, position: { x, y, z: 1 }, //坐标 floorId: 1, //楼层id,默认为1(地面) pointerEvents: 'none', content: '<div>' + '<div class="wrapper">' + '<div class="row cf">' + '<div class="span">' + '<div class="location_indicator"></div>' + '</div>' + '</div>' + '</div>' + '</div>', offset: jsmap.JSControlPosition.LEFT_BOTTOM, marginOffset: { x: 0, y: 0 }, properties: { type: 0, },//属性设置 callback: (node) => { console.log(node); } //回调事件 }); map.addMarker(domMarker); // //创建option标签 // var option = document.createElement('option'); // option.value = i; // option.innerText = `第${i}个DOM标注`; // fragment.appendChild(option); // markerArr.push(domMarker); // markerArea.appendChild(fragment); // markerArea.style.display = 'block'; i -= 1; window.parent.postMessage({'LONGITUDE': x, 'LATITUDE': y}, '*'); } //移除全部标注 function remove() { setProperty.style.display = "none"; markerArea.style.display = 'none'; markerArea.innerHTML = ''; map.removeAllDomMarker(); markerArr = []; i = 0; max = 0; } //选择标注 function changeMarker(e) { e = e || window.event; currentMarker = markerArr.find(item => item._id === e.target.value); if (currentMarker !== undefined) { map.flyToMarker(currentMarker); setProperty.style.display = "block"; propertyInput.forEach(item => { if (item.className === 'ID') item.value = currentMarker._id; if (item.className === 'floor') item.value = currentMarker.floorId; if (item.className === 'position') item.value = 'x:' + currentMarker.position.x + ';' + 'y:' + currentMarker.position.y; if (item.id === "show" && currentMarker.show === true) item.checked = true; if (item.id === "x轴") item.value = currentMarker.marginOffset.x; if (item.id === "y轴") item.value = currentMarker.marginOffset.y; if (item.id === "on" && currentMarker.depthTest === true) item.checked = true; if (item.id === "off" && currentMarker.depthTest === false) item.checked = true; }) } } //设置属性事件 function property(e) { e = e || window.event; let {id} = e.target; //设置显隐 if (id === 'show') currentMarker.show = true; if (id === 'hide') currentMarker.show = false; //是否开启深度检测 if (id === 'on') currentMarker.depthTest = true; if (id === 'off') currentMarker.depthTest = false; if (id === "changeImg") currentMarker.content = 'DOMMarker'; ; if (id === 'close') setProperty.style.display = "none"; } //实时修改属性 function handleInput(e) { e = e || window.event; let {id, className, value} = e.target; //修改偏移 currentMarker.marginOffset = { x: id === 'x轴' ? Number(value) : currentMarker.marginOffset.x, y: id === 'y轴' ? Number(value) : currentMarker.marginOffset.y, } } </script> </body> </html>