Web v4 - Getting Started - Directions - MI Components - MapBox
by MapsPeople
HTML
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MapsIndoors</title>
<script src="https://unpkg.com/@mapsindoors/components@8.2.0/dist/mi-components/mi-components.js"></script>
</head>
<body>
<mi-map-mapbox
accessToken="YOUR_MAPBOX_ACCESS_TOKEN"
style="width: 600px; height: 600px;"
mi-api-key="d876ff0e60bb430b8fabb145"
floor-selector-control-position="TOP_RIGHT">
</mi-map-mapbox>
<!-- Travel mode selector -->
<label for="travel-modes">Choose a travel mode:</label>
<select name="travelModeSelector" id="travel-modes">
<option value="walking" selected>Walking</option>
<option value="bicycling">Bicycling</option>
<option value="driving">Driving</option>
<option value="transit">Transit</option>
</select>
<mi-search
style="width: 600px;"
mapsindoors="true"
placeholder="Search">
</mi-search>
<mi-list
style="width: 600px; height: 400px;"
scroll-buttons-enabled="true"
scroll-length="200">
</mi-list>
</body>
</html>
JavaScript
// main.js
const miMapElement = document.querySelector('mi-map-mapbox');
const miSearchElement = document.querySelector('mi-search');
const miListElement = document.querySelector('mi-list');
let miDirectionsServiceInstance;
let miDirectionsRendererInstance;
miMapElement.addEventListener('mapsIndoorsReady', () => {
miMapElement.getMapInstance().then((mapInstance) => {
mapInstance.setCenter({ lat: 38.8974905, lng: -77.0362723 }); // The White House
});
miMapElement.getDirectionsServiceInstance().then((directionsServiceInstance) => miDirectionsServiceInstance = directionsServiceInstance);
miMapElement.getDirectionsRendererInstance().then((directionsRendererInstance) => miDirectionsRendererInstance = directionsRendererInstance);
})
miSearchElement.addEventListener('results', (event) => {
// Reset search results list
miListElement.innerHTML = null;
// Append new search results
event.detail.forEach(location => {
const miListItemElement = document.createElement('mi-list-item-location');
miListItemElement.location = location;
// Add click event listener
miListItemElement.addEventListener("click", () => getRoute(location), false);
miListElement.appendChild(miListItemElement);
});
// Get the MapsIndoors instance
miMapElement.getMapsIndoorsInstance().then((mapsIndoorsInstance) => {
// Filter map to only display search results
mapsIndoorsInstance.filter(event.detail.map(location => location.id), false);
});
});
function getRoute(location) {
const originLocationCoordinate = { lat: 38.897389429704695, lng: -77.03740973527613, floor: 0 }; // Oval Office, The White House (Hardcoded coordinate and floor index)
const destinationCoordinate = { lat: location.properties.anchor.coordinates[1], lng: location.properties.anchor.coordinates[0], floor: location.properties.floor };
// Route parameters
const routeParameters = {
origin: originLocationCoordinate,
destination: destinationCoordinate,
...