緯度経度を表示するボックスを表示する

実行結果

次の例では、地図の中心点の緯度経度を表示するボックスを表示します。

ソースコードと解説

地図の中心点の緯度経度を表示するボックスを表示するには、ZDC.MapクラスのgetCenter()を利用します。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- ローダーのURLをscriptでロードする -->
<script src="https://{DOMAIN}/zma_loader.js?key=[APIキー]&auth=[認証方式]"></script>
<style type="text/css">
  div#centerInfoBox {
    /* 角丸の設定 */
    border-radius: 10px;
    border: 2px #CCCCCC solid;
    background-color: #FFFFFF;

    /* 半透明の設定 */
    filter: alpha(opacity=75);
    opacity: 0.75;

    /* 配置場所の設定 */
    position: absolute;
    top: 10px;
    right: 10px;
    z-index: 10;
    font-size: 78%;

    /* 選択禁止 */
    user-select: none;
  }

  div#wrpper {
    padding: 5px;
  }
</style>
<script type="text/javascript">
  // オブジェクト
  var map;

  // 中心点の緯度経度(東京駅)
  const lat = 35.681406, lng = 139.767132;

  // ZMALoader
  ZMALoader.setOnLoad(function (mapOptions, error) {
    if (error) {
      console.error(error)
      return
    }

    // マップオプションをデフォルト値から変更する
    mapOptions.center = new ZDC.LatLng(lat, lng); // 中心点の緯度経度を設定

    // 地図を生成
    map = new ZDC.Map(
      document.getElementById('ZMap'),
      mapOptions,
      function() {
        // Success callback
        /* センターマーカーの表示 */
        map.addControl(new ZDC.CenterMarker());

        /* 初期表示 */
        centerInfoBox(map.getCenter());
        /* ★表示している地図の中心位置が移動した時 */
        map.addEventListener('center_changed', callback);
        /* ★表示している地図の拡大縮小が変化した時 */
        map.addEventListener('zoom_changed', callback);
      },
      function() {
        // Failure callback
      }
    );
  });

  /* callback */
  function callback(){
    centerInfoBox(map.getCenter());
  };

  /* ★度分秒形式に変換して表示 */
  function centerInfoBox(ll) {
    /* 十進法形式から度分秒形式に計算 */
    var lat = degToDms(ll.lat);
    var lng = degToDms(ll.lng);

    var lng_txt = 'E '+lng.deg+'°'+lng.min+'′'+lng.sec+'″',
        lat_txt = 'N '+lat.deg+'°'+lat.min+'′'+lat.sec+'″';

    document.getElementById('lng-area').innerHTML = lng_txt;
    document.getElementById('lat-area').innerHTML = lat_txt;
  };

  /* 十進法形式から度分秒形式に計算 */
  function degToDms(ll_deg) {
    var cal_min = decimalPart(String(ll_deg)) * 60;
    var cal_sec = decimalPart(String(cal_min)) * 60;
    return {
      deg : parseInt(ll_deg),
      min : parseInt(cal_min),
      sec : cal_sec
    }
  };

  /* 小数点以下を取り出だして数値で返す */
  function decimalPart(num){
    numStr = num+'';
    dotIdx  = numStr.indexOf("."),
    result  = "0." + (dotIdx > -1 ? numStr.substring(dotIdx + 1) : "0");
    return  parseFloat( ((num>0)?'+':'-') + result );
  }
</script>
</head>
<body>
  <div id="ZMap" style="position: relative; max-width: calc(510px * 16 / 9); height:510px; border:1px solid #777777;">
    <div id='centerInfoBox'>
      <div id=wrpper>
        <div id='lng-area' style="white-space: nowrap;"></div>
        <div id='lat-area' style="white-space: nowrap;"></div>
      </div>
    </div>
  </div>
</body>
</html>