Show zoomed section in Elevation profile control
In this example, we will showcase a scenario where we focus on a particular portion of the elevation profile and emphasize that specific section on the map. By utilizing the onChangeView event of the elevation profile control for MapTiler SDK, we are able to retrieve a GeoJSON LineString that corresponds to the zoomed-in segment. Consequently, we can exhibit the selected section on the map alongside the entire route.
Zoom in on a profile section to highlight that section on the map.
- Install the npm package.
npm install --save @maptiler/sdk @maptiler/elevation-profile-control
- Create the map style. Add the map style to your stylesheet. The div must have non-zero height.
body {
margin: 0;
padding: 0;
}
#map {
position: absolute;
top: 0;
bottom: 0;
width: 100%;
}
-
Create a
<div>element with a certain id where you want your map to be.Add
<div>tag into your page. This div will be the container where the map will be loaded.
<div id="map"></div>
-
Include the CSS file.
If you have a bundler that can handle CSS, you can import the CSS from @maptiler/sdk/dist/maptiler-sdk.css.
import '@maptiler/sdk/dist/maptiler-sdk.css';
<div class="markdown-alert markdown-alert-note" markdown="1">
<p class="markdown-alert-title">Note</p>
Including the CSS file using a `<link>` in the head of the document via the CDN is the easiest way.
<pre class="language-html" style="position: relative;" markdown="0"><code class="language-html">
<link href='https://cdn.maptiler.com/maptiler-sdk-js/v4.1.0/maptiler-sdk.css' rel='stylesheet' /> </code></pre>
</div>
- Load the map with the style. Include the following code in your JavaScript.
import { config, Map, helpers, MapStyle } from '@maptiler/sdk';
config.apiKey = 'YOUR_MAPTILER_API_KEY_HERE';
const map = new Map({
container: 'map', // container's id or the HTML element in which SDK will render the map
style: MapStyle.OUTDOOR,
center: [1.71593, 42.2216], // starting position [lng, lat]
zoom: 12.51 // starting zoom
});
-
Replace
YOUR_MAPTILER_API_KEY_HEREwith your own API key. Make sure to secure the key before you publish it. -
Add a GeoJSON trace to the map. Check out the How to Upload GeoJSON to MapTiler tutorial. Download the Pedraforca hiking sample data
map.on('load', async () => {
helpers.addPolyline(map, {
data: './loop_track.geojson', //from a URL or a MapTiler Data UUID
lineColor: "#008",
outline: true,
outlineWidth: 1.5
});
//Layer to display the zoomed section of the route
const layerInfo2 = await helpers.addPolyline(map, {
data: './loop_track.geojson', //from a URL or a MapTiler Data UUID
lineColor: "#f00",
outline: true,
outlineWidth: 1.5
});
});
- Import the MapTiler elevation profile control
import { ElevationProfileControl } from "@maptiler/elevation-profile-control";
- Instantiate the control and add it to a
Mapinstance, most likely inside a map"load"event callback
map.on('load', () => {
helpers.addPolyline(map, {
data: './loop_track.geojson', //from a URL or a MapTiler Data UUID
lineColor: "#008",
outline: true,
outlineWidth: 1.5
});
//Layer to display the zoomed section of the route
const layerInfo2 = await helpers.addPolyline(map, {
data: './loop_track.geojson', //from a URL or a MapTiler Data UUID
lineColor: "#f00",
outline: true,
outlineWidth: 1.5
});
// Create an instance (with the onChangeView event listener)
const epc = new ElevationProfileControl({
onChangeView: (route) => {
map.getSource(layerInfo2.polylineSourceId).setData(route);
}
});
// Add it to your map
map.addControl(epc);
// Add some data (from a URL or a MapTiler Data UUID)
epc.setData('./loop_track.geojson');
});
import '@maptiler/sdk/dist/maptiler-sdk.css';
import { config, Map, helpers, MapStyle } from '@maptiler/sdk';
import { ElevationProfileControl } from "@maptiler/elevation-profile-control";
config.apiKey = 'YOUR_MAPTILER_API_KEY_HERE';
const map = new Map({
container: 'map', // container's id or the HTML element in which SDK will render the map
center: [1.71593, 42.2216],
zoom: 12.51,
style: MapStyle.OUTDOOR
});
map.on('load', async () => {
helpers.addPolyline(map, {
data: './loop_track.geojson', //from a URL or a MapTiler Data UUID
lineColor: "#008",
outline: true,
outlineWidth: 1.5
});
//Layer to display the zoomed section of the route
const layerInfo2 = await helpers.addPolyline(map, {
data: './loop_track.geojson', //from a URL or a MapTiler Data UUID
lineColor: "#f00",
outline: true,
outlineWidth: 1.5
});
// Create an instance (with the onChangeView event listener)
const epc = new ElevationProfileControl({
visible: true,
onChangeView: (route) => {
map.getSource(layerInfo2.polylineSourceId).setData(route);
}
});
// Add it to your map
map.addControl(epc);
// Add some data (from a URL or a MapTiler Data UUID)
epc.setData('./loop_track.geojson');
});
Learn more
You can also use elevation control via CDN. See the Elevation profile control example to use it as a CDN instead of an NPM module.
Related examples
Show trace position Elevation profile control
ExamplesSynchronize a moving map marker with elevation profile cursor.
Customize Elevation profile control
ExamplesCustomize the MapTiler SDK elevation profile control interface.