Compare commits
2 Commits
dc5245d7cd
...
81b65968c6
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
81b65968c6 | ||
|
|
61d96b30b9 |
@@ -6,8 +6,8 @@
|
|||||||
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
|
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
|
||||||
<script src="jquery-3.7.1.min.js"></script>
|
<script src="jquery-3.7.1.min.js"></script>
|
||||||
<script src="lib.js"></script>
|
<script src="lib.js"></script>
|
||||||
<script src="https://unpkg.com/maplibre-gl@3.1.0/dist/maplibre-gl.js"></script>
|
<script src="https://unpkg.com/maplibre-gl@5.5.0/dist/maplibre-gl.js"></script>
|
||||||
<link href="https://unpkg.com/maplibre-gl@3.1.0/dist/maplibre-gl.css" rel="stylesheet">
|
<link href="https://unpkg.com/maplibre-gl@5.5.0/dist/maplibre-gl.css" rel="stylesheet">
|
||||||
<style>
|
<style>
|
||||||
body {
|
body {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
@@ -19,26 +19,95 @@
|
|||||||
bottom: 0;
|
bottom: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
#features {
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
bottom: 0;
|
|
||||||
width: 20%;
|
|
||||||
overflow: auto;
|
|
||||||
background: rgba(255, 255, 255, 0.8);
|
|
||||||
}
|
|
||||||
.maplibregl-popup {
|
.maplibregl-popup {
|
||||||
max-width: 200px;
|
max-width: 200px;
|
||||||
font: 12px/20px 'Helvetica Neue', Arial, Helvetica, sans-serif;
|
font: 12px/20px 'Helvetica Neue', Arial, Helvetica, sans-serif;
|
||||||
}
|
}
|
||||||
|
.rounded-rect {
|
||||||
|
background: white;
|
||||||
|
border-radius: 10px;
|
||||||
|
box-shadow: 0 0 50px -25px black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-center {
|
||||||
|
position: absolute;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-center.left {
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-content {
|
||||||
|
position: absolute;
|
||||||
|
width: 95%;
|
||||||
|
height: 95%;
|
||||||
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
|
color: gray;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-toggle {
|
||||||
|
position: absolute;
|
||||||
|
width: 1.3em;
|
||||||
|
height: 1.3em;
|
||||||
|
overflow: visible;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-toggle.left {
|
||||||
|
right: -1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-toggle:hover {
|
||||||
|
color: #0aa1cf;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
transition: transform 1s;
|
||||||
|
z-index: 1;
|
||||||
|
width: 300px;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
#features {
|
||||||
|
max-height: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
The sidebar styling has them "expanded" by default, we use CSS transforms to push them offscreen
|
||||||
|
The toggleSidebar() function removes this class from the element in order to expand it.
|
||||||
|
*/
|
||||||
|
.left.collapsed {
|
||||||
|
transform: translateX(-295px);
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="map"></div>
|
<div id="map">
|
||||||
<pre id="features"></pre>
|
<div id="sidebarLeft" class="sidebar flex-center left">
|
||||||
|
<div class="sidebar-content rounded-rect flex-center">
|
||||||
|
<div>
|
||||||
|
<input type="radio" name="planningMode" id="classicPlanning">classic</input>
|
||||||
|
<input type="radio" name="planningMode" id="modernPlanning">modern</input>
|
||||||
|
</div>
|
||||||
|
<h2>Features</h2>
|
||||||
|
<div id="features"></div>
|
||||||
|
<div class="sidebar-toggle rounded-rect left"
|
||||||
|
onclick="toggleSidebar('left')"
|
||||||
|
>
|
||||||
|
→
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<script>
|
<script>
|
||||||
lib.init();
|
lib.init();
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
const lib = new function () {
|
const lib = new function () {
|
||||||
|
|
||||||
let ghbase = ""
|
let ghbase = ""
|
||||||
|
let planningMode = "modern";
|
||||||
|
const modeContext = {
|
||||||
|
"classic": '<button id="btn-feat">feature</button></br><button id="btn-start">start</button></br><button id="btn-via">via</button></br><button id="btn-finish">finish</button>',
|
||||||
|
"modern": '<button id="btn-feat">feature</button></br><button id="btn-waypoint">waypoint</button>'
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize Map etc
|
* Initialize Map etc
|
||||||
@@ -47,51 +52,74 @@ const lib = new function () {
|
|||||||
|
|
||||||
const contextmenu = new maplibregl.Popup()
|
const contextmenu = new maplibregl.Popup()
|
||||||
.setLngLat(coordinates)
|
.setLngLat(coordinates)
|
||||||
.setHTML('<button id="btn-feat">feature</button></br><button id="btn-start">start</button></br><button id="btn-via">via</button></br><button id="btn-finish">finish</button>')
|
.setHTML(modeContext[planningMode])
|
||||||
.addTo(map);
|
.addTo(map);
|
||||||
|
|
||||||
let featbtn = document.getElementById("btn-feat");
|
if (planningMode === 'classic') {
|
||||||
featbtn.onclick = function () {
|
let featbtn = document.getElementById("btn-feat");
|
||||||
contextmenu.remove();
|
featbtn.onclick = function () {
|
||||||
const features = map.queryRenderedFeatures(e.point);
|
contextmenu.remove();
|
||||||
const prop = features.map(function (feat) {
|
const features = map.queryRenderedFeatures(e.point);
|
||||||
return feat["properties"];
|
const prop = features.map(function (feat) {
|
||||||
});
|
return feat["properties"];
|
||||||
const featPopup = new maplibregl.Popup()
|
});
|
||||||
.setLngLat(coordinates)
|
const featPopup = new maplibregl.Popup()
|
||||||
.setHTML(JSON.stringify(prop))
|
.setLngLat(coordinates)
|
||||||
.addTo(map);
|
.setHTML(JSON.stringify(prop))
|
||||||
};
|
.addTo(map);
|
||||||
let startbtn = document.getElementById("btn-start");
|
};
|
||||||
startbtn.onclick = function () {
|
let startbtn = document.getElementById("btn-start");
|
||||||
contextmenu.remove();
|
startbtn.onclick = function () {
|
||||||
startMarker.setLngLat([coordinates.lng, coordinates.lat]).addTo(map);
|
contextmenu.remove();
|
||||||
startMarker.onMap = true;
|
startMarker.setLngLat([coordinates.lng, coordinates.lat]).addTo(map);
|
||||||
if (finishMarker.onMap) {
|
startMarker.onMap = true;
|
||||||
lib.doRouting(map, coordinates, finishMarker.getLngLat(), viaMarkers);
|
if (finishMarker.onMap) {
|
||||||
}
|
lib.doRouting(map, coordinates, finishMarker.getLngLat(), viaMarkers);
|
||||||
};
|
}
|
||||||
let finishbtn = document.getElementById("btn-finish");
|
};
|
||||||
finishbtn.onclick = function () {
|
let finishbtn = document.getElementById("btn-finish");
|
||||||
contextmenu.remove();
|
finishbtn.onclick = function () {
|
||||||
finishMarker.setLngLat([coordinates.lng, coordinates.lat]).addTo(map);
|
contextmenu.remove();
|
||||||
finishMarker.onMap = true;
|
finishMarker.setLngLat([coordinates.lng, coordinates.lat]).addTo(map);
|
||||||
if (startMarker.onMap) {
|
finishMarker.onMap = true;
|
||||||
lib.doRouting(map, startMarker.getLngLat(), coordinates, viaMarkers);
|
if (startMarker.onMap) {
|
||||||
}
|
lib.doRouting(map, startMarker.getLngLat(), coordinates, viaMarkers);
|
||||||
};
|
}
|
||||||
let viabtn = document.getElementById("btn-via");
|
};
|
||||||
viabtn.onclick = function () {
|
let viabtn = document.getElementById("btn-via");
|
||||||
contextmenu.remove();
|
viabtn.onclick = function () {
|
||||||
const marker = new maplibregl.Marker({color: "#0000FF", draggable: true}).setLngLat([coordinates.lng, coordinates.lat]);
|
contextmenu.remove();
|
||||||
marker.on("dragend", function() {lib.doRouting(map, startMarker.getLngLat(), finishMarker.getLngLat(), viaMarkers);});
|
const marker = new maplibregl.Marker({color: "#0000FF", draggable: true}).setLngLat([coordinates.lng, coordinates.lat]);
|
||||||
marker.addTo(map);
|
marker.on("dragend", function() {lib.doRouting(map, startMarker.getLngLat(), finishMarker.getLngLat(), viaMarkers);});
|
||||||
marker.onMap = true;
|
marker.addTo(map);
|
||||||
viaMarkers.push(marker);
|
marker.onMap = true;
|
||||||
if (startMarker.onMap && finishMarker.onMap) {
|
viaMarkers.push(marker);
|
||||||
lib.doRouting(map, startMarker.getLngLat(), finishMarker.getLngLat(), viaMarkers);
|
if (startMarker.onMap && finishMarker.onMap) {
|
||||||
}
|
lib.doRouting(map, startMarker.getLngLat(), finishMarker.getLngLat(), viaMarkers);
|
||||||
};
|
}
|
||||||
|
};
|
||||||
|
} else if (planningMode === 'modern') {
|
||||||
|
let waypointbtn = document.getElementById("btn-waypoint");
|
||||||
|
waypointbtn.onclick = function () {
|
||||||
|
contextmenu.remove();
|
||||||
|
if (!startMarker.onMap) {
|
||||||
|
startMarker.setLngLat([coordinates.lng, coordinates.lat]).addTo(map);
|
||||||
|
startMarker.onMap = true;
|
||||||
|
} else if (!finishMarker.onMap) {
|
||||||
|
finishMarker.setLngLat([coordinates.lng, coordinates.lat]).addTo(map);
|
||||||
|
finishMarker.onMap = true;
|
||||||
|
lib.doRouting(map, startMarker.getLngLat(), coordinates);
|
||||||
|
} else {
|
||||||
|
const oldFinishMarker = new maplibregl.Marker({color: "#0000FF", draggable: true}).setLngLat(finishMarker.getLngLat());
|
||||||
|
finishMarker.setLngLat([coordinates.lng, coordinates.lat]);
|
||||||
|
oldFinishMarker.on("dragend", function() {lib.doRouting(map, startMarker.getLngLat(), finishMarker.getLngLat(), viaMarkers);});
|
||||||
|
oldFinishMarker.addTo(map);
|
||||||
|
oldFinishMarker.onMap = true;
|
||||||
|
viaMarkers.push(oldFinishMarker);
|
||||||
|
lib.doRouting(map, startMarker.getLngLat(), finishMarker.getLngLat(), viaMarkers);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -148,4 +176,7 @@ const lib = new function () {
|
|||||||
dataType: "json"
|
dataType: "json"
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.togglePlanningMode = function () {
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user