Newer
Older
task-bldg / src / main / resources / templates / cities.html
@haya4 haya4 on 28 Nov 2023 5 KB v0.1.17 進捗状況の表示
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
  xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
  layout:decorate="~{layout/layout}">
<head>
  <meta charset="UTF-8" th:remove="tag">
	<script th:inline="javascript">
		const cities = /*[[${cities}]]*/"cities";
		console.log(cities);
var __map;
var __markerLayer = null;
var __overlay = null;		// ポップアップを表示するためのレイヤー

function loadMap() {

	// マップの作成
	__map = new ol.Map({
		target: 'map',
		layers: [
			new ol.layer.Tile({
				source: new ol.source.OSM()
			})
		],
		view: new ol.View({
			center: ol.proj.fromLonLat([139.745433,35.658581]),
			zoom: 8
		})
	});

    // マーカーの見た目の作成
    var style = new ol.style.Style({
        image: new ol.style.Icon({
            src: '/task-bldg/img/osm_200x200.png',
            anchor: [0.5, 0.5],
            scale: 0.2
        })
    });
	
    // 表示するためのレイヤーを作成する
    __markerLayer = new ol.layer.Vector({
        source: new ol.source.Vector()
    });
    __map.addLayer(__markerLayer);

    // ポップアップを表示するためのオーバーレイを作成する
    __overlay = new ol.Overlay({
        element: document.getElementById('popup'),
        positioning: 'bottom-center'
    });

	{
		style = new ol.style.Style({
		    image: new ol.style.Icon({
		        src: '/task-bldg/img/osm_200x200.png',
		        anchor: [0.5, 0.5],
		        scale: 0.2
		    }),
		    stroke: new ol.style.Stroke({color: '#ff33ff', width: 10})
		});

	    $(cities).each(function() {
		    var feature = new ol.Feature({
		        geometry: new ol.geom.Point(ol.proj.fromLonLat([Number(this.lng),Number(this.lat)])),
		        code: this.citycode,
		        name: this.cityname
		    });
		    feature.information = this;
		    feature.setStyle(style);
		    __markerLayer.getSource().addFeature(feature);
	    });
	    
	    // 地図のクリックイベントを設定
	    __map.on('click', function (evt) {
	        var feature = __map.forEachFeatureAtPixel(
				evt.pixel,
	            function (feature) {
	                return feature;
	            }
	        );
	        if (feature) {
	            var coordinates = feature.getGeometry().getCoordinates();
	            var info = feature.information;
	            var element = __overlay.getElement();
	            var descriptionHTML =
	                "<div>" + info.citycode + "</div>" +
	                "<div>" + info.cityname + "</div>" +
	                "<div><a href='/task-bldg/mesh/"+ info.citycode +"'>" + info.folder + "</a></div>";
	            element.innerHTML = descriptionHTML;
	            __overlay.setPosition(coordinates);
	            __map.addOverlay(__overlay);
	        } else {
	            __map.removeOverlay(__overlay);
	        }
	    });
	};
}
	</script>
</head>
<body onload='loadMap()'>

  <!-- サイドバーの表示 -->
  <div layout:fragment="sidebar" th:replace="~{fragments/sidebar :: sidebar}">
  </div>


  <!-- コンテンツの表示 -->
  <div layout:fragment="content">
    <main class="offcanvas-outside bg-light">
      <div class="container-fluid">
        <!-- トグルボタン -->
        <div th:replace="~{fragments/sidebar :: toggler}">
        </div>

        <div class="row">
          <div class="col">

            <div class="card shadow">
              <div class="card-header">
                <h6 class="text-navy my-2">Plateau 3D都市データ</h6>
              </div>
              <div class="card-body">

                <!-- マップ -->
                <div id="wrap">
                  <div class="header">
                    <div id='map'></div>
                  </div>
                    
                  <!-- ポップアップ -->
                  <div id='popup' class='ol-popup'>
                    <a href='#' id='popup-closer' class='ol-popup-closer'></a>
                    <div id='popup-content'></div>
                  </div>
                </div>
            
                <table class="table table-bordered">
                  <thead>
                    <tr>
                      <td colspan="5">
                        <img th:src="@{/img/NG.png}"></img>:エラーあり <img th:src="@{/img/OK.png}"></img>:完了 <img th:src="@{/img/EDITING.png}"></img>:あとちょっと <img th:src="@{/img/RESERVED.png}"></img>:編集中 <img th:src="@{/img/ACCEPTING.png}"></img>:着手 <img th:src="@{/img/PREPARATION.png}"></img>:未着手
                      </td>
                    </tr>
                    <tr>
                      <th th:text="#{status}"></th>
                      <th th:text="#{citycode}"></th>
                      <th th:text="#{cityname}"></th>
                      <th th:text="#{folder}"></th>
                      <th></th>
                    </tr>
                  </thead>
                  <tbody>
                    <tr th:each="city : ${cities}" th:object="${city}">
                      <td><img th:alt="*{status}" th:src="@{/img/{status}.png(status=*{status})}"></img></td>
                      <td th:text="*{citycode}"></td>
                      <td th:text="*{cityname}"></td>
                      <td th:text="*{folder}"></td>
                      <td>
                        <a th:href="@{/mesh/{citycode}(citycode=*{citycode})}" class="btn btn-navy">
                          <i class="bi bi-pencil-square" th:text="#{operation}"></i>
                        </a>
                      </td>
                    </tr>
                  </tbody>
                </table>
              </div>
            </div>

          </div>
        </div>
      </div>
    </main>
  </div>

</body>
</html>