Höhe von Berggipfeln
Dieses Beispiel demonstriert die Integration von SmartMaps GL mit der Elevation Service API. Es erstellt eine interaktive Karte mit der Höhe berühmter Berge der Welt.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script src="https://cdn.smartmaps.cloud/packages/smartmaps/smartmaps-gl/v2/umd/smartmaps-gl.min.js"></script>
<style>
body {
margin: 0;
padding: 0;
}
html,
body,
#map {
height: 100%;
}
#loading {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: rgba(255, 255, 255, 0.8);
padding: 10px;
border-radius: 5px;
display: none;
z-index: 999;
}
.mountain-label {
width: 120px;
height: 60px;
background: rgba(255, 255, 255, 0.9);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.16), 0 2px 4px rgba(0, 0, 0, 0.23);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
font-family: 'Noto Sans', sans-serif;
font-weight: bold;
font-size: 12px;
padding: 5px;
pointer-events: none;
}
.mountain-info {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
}
</style>
</head>
<body>
<div id="map"></div>
<div id="loading">Loading...</div>
<script>
const apiKey = '[INSERT API-KEY]';
const map = new smartmapsgl.Map({
apiKey,
container: "map",
center: { lat: 30.0, lng: 0.0 },
zoom: 1.5,
style: smartmapsgl.MapStyle.AUTO
});
const mountains = [
{ name: "Mount Everest", lat: 27.988056, lng: 86.925204 },
{ name: "K2", lat: 35.8825, lng: 76.5133 },
{ name: "Aconcagua", lat: -32.6532, lng: -70.0110 },
{ name: "Mount Logan", lat: 60.5670, lng: -140.4050 },
{ name: "Kilimanjaro", lat: -3.0674, lng: 37.3556 },
{ name: "Mont Blanc", lat: 45.8326, lng: 6.8652 },
{ name: "Mount Elbrus", lat: 43.3552, lng: 42.4392 },
{ name: "Puncak Jaya", lat: -4.0785, lng: 137.1580 },
{ name: "Mount Cook", lat: -43.5950, lng: 170.1417 },
{ name: "Mount Fuji", lat: 35.3606, lng: 138.7274 },
{ name: "Mount Whitney", lat: 36.5785, lng: -118.2923 }
];
function getElevationData(lat, lng) {
const url = `https://elevation.smartmaps.cloud/api/v2/Elevation/point?apiKey=${smartmapsgl.encodeString(apiKey)}&latitude=${lat}&longitude=${lng}`;
return fetch(url)
.then(response => response.json())
.then(data => {
if (data.features && data.features.length > 0) {
return {
elevation: data.features[0].properties.elevation
};
}
throw new Error('No elevation data available');
});
}
function addMountains() {
document.getElementById('loading').style.display = 'block';
Promise.all(mountains.map(mountain =>
getElevationData(mountain.lat, mountain.lng)
.then(elevationData => ({ ...mountain, ...elevationData }))
))
.then(mountainsWithElevation => {
mountainsWithElevation.forEach((mountain, index) => {
const el = document.createElement('div');
el.className = 'mountain-label';
el.innerHTML = `
<div class="mountain-info">
<span>${mountain.name}</span>
<span>${mountain.elevation}m</span>
</div>
`;
new smartmapsgl.Marker({
element: el,
anchor: 'center'
})
.setLngLat([mountain.lng, mountain.lat])
.addTo(map);
});
})
.catch(error => {
console.error('Error loading elevation data:', error);
alert('Error loading elevation data. Please try again later.');
})
.finally(() => {
document.getElementById('loading').style.display = 'none';
});
}
map.on('load', addMountains);
</script>
</body>
</html>