<!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>