88 lines
2.0 KiB
JavaScript
88 lines
2.0 KiB
JavaScript
import './style.css';
|
|
import Feature from 'ol/Feature';
|
|
import GeoJSON from 'ol/format/GeoJSON';
|
|
import {Map, View} from 'ol';
|
|
import {Tile as TileLayer, Vector as VectorLayer} from 'ol/layer';
|
|
import {Icon, Stroke, Style} from 'ol/style';
|
|
import {OSM, Vector as VectorSource} from 'ol/source';
|
|
import {useGeographic} from 'ol/proj';
|
|
import geojsonRoute from './geo/route.json'
|
|
import geojsonPOI from './geo/poi.json'
|
|
|
|
useGeographic();
|
|
|
|
const styles = {
|
|
lineOrange: new Style({
|
|
stroke: new Stroke({
|
|
color: '#FF9900',
|
|
// lineDash: [8],
|
|
width: 5,
|
|
}),
|
|
}),
|
|
lineGrey: new Style({
|
|
stroke: new Stroke({
|
|
color: '#555555',
|
|
// lineDash: [8],
|
|
width: 5,
|
|
}),
|
|
}),
|
|
iconStop: new Style({
|
|
image: new Icon({
|
|
anchor: [0.5, 46],
|
|
anchorXUnits: 'fraction',
|
|
anchorYUnits: 'pixels',
|
|
src: 'data/icon.png',
|
|
}),
|
|
})
|
|
}
|
|
|
|
const lastStageFinished = 4;
|
|
const stagesCompleted = geojsonRoute.features.slice(0, lastStageFinished);
|
|
const stagesAhead = geojsonRoute.features.slice(lastStageFinished);
|
|
const vectorSourceStagesCompleted = new VectorSource();
|
|
const vectorSourceStagesAhead = new VectorSource();
|
|
|
|
for (const stage of stagesCompleted) {
|
|
vectorSourceStagesCompleted.addFeature(new GeoJSON().readFeature(stage));
|
|
}
|
|
for (const stage of stagesAhead) {
|
|
vectorSourceStagesAhead.addFeature(new GeoJSON().readFeature(stage));
|
|
}
|
|
|
|
const stagesCompletedLayer = new VectorLayer({
|
|
source: vectorSourceStagesCompleted,
|
|
style: styles.lineOrange
|
|
});
|
|
|
|
const stagesAheadLayer = new VectorLayer({
|
|
source: vectorSourceStagesAhead,
|
|
style: styles.lineGrey
|
|
});
|
|
|
|
const vectorSourcePOI = new VectorSource({
|
|
features: new GeoJSON().readFeatures(geojsonPOI),
|
|
});
|
|
|
|
const poiLayer = new VectorLayer({
|
|
source: vectorSourcePOI,
|
|
style: styles.iconStop,
|
|
});
|
|
|
|
const view = new View({
|
|
center: [10.6, 46.5],
|
|
zoom: 6
|
|
})
|
|
|
|
const map = new Map({
|
|
target: 'map',
|
|
layers: [
|
|
new TileLayer({
|
|
source: new OSM()
|
|
}),
|
|
stagesCompletedLayer,
|
|
stagesAheadLayer,
|
|
poiLayer
|
|
],
|
|
view: view
|
|
});
|