Testing a transportation vector tile

This commit is contained in:
Eric van der Vlist 2023-01-13 14:02:58 +01:00
parent 6969b53618
commit aa5dcbac3e
2 changed files with 32 additions and 7 deletions

View File

@ -119,7 +119,7 @@ const rteStrokeSel = new Stroke({
const routeStroke = new Stroke({ const routeStroke = new Stroke({
color: '#d221db', color: '#d221db',
width: 4, width: 5,
}); });
const routeStrokeSel = new Stroke({ const routeStrokeSel = new Stroke({
@ -262,26 +262,39 @@ const styles = {
getParameters: (feature: Feature) => { getParameters: (feature: Feature) => {
return { return {
isSelected: feature.get('isSelected') ?? false, isSelected: feature.get('isSelected') ?? false,
name: feature.get('name'),
}; };
}, },
getStyle: memoize((params: any) => { getStyle: memoize((params: any) => {
console.log({ caller: 'getStyle', params }); console.log({ caller: 'getStyle', params });
const { isSelected } = params; const { isSelected, name } = params;
return new Style({ stroke: isSelected ? routeStrokeSel : routeStroke }); return new Style({
stroke: isSelected ? routeStrokeSel : routeStroke,
text: new Text({
text: name,
font: 'bold 14px "Open Sans", "Arial Unicode MS", "sans-serif"',
placement: 'line',
padding: [2, 2, 2, 2],
fill: new Fill({
color: 'black',
}),
}),
});
}, memoizeOptions), }, memoizeOptions),
}, },
}; };
export const style = (feature: Feature) => { export const style = (feature: Feature) => {
const type = feature.get('type') as keyof typeof styles; const type = feature.get('type') as keyof typeof styles;
console.log({ caller: 'style', type });
const styleForType = styles[type]; const styleForType = styles[type];
if (!styleForType) { if (!styleForType) {
return null; return null;
} }
const params = styles[type].getParameters(feature); const params = styles[type].getParameters(feature);
const getStyle = styles[type].getStyle; const getStyle = styles[type].getStyle;
return getStyle(params); const style = getStyle(params);
console.log({ caller: 'style', type, params, style });
return style;
}; };
export default style; export default style;

View File

@ -15,7 +15,7 @@ import DragRotate from 'ol/interaction/DragRotate';
import 'ol/ol.css'; import 'ol/ol.css';
import './Map.css'; import './Map.css';
import { Collection } from 'ol'; import { Collection, VectorTile } from 'ol';
import { Point } from 'ol/geom'; import { Point } from 'ol/geom';
import { Style, Icon } from 'ol/style'; import { Style, Icon } from 'ol/style';
import GetLocation, { getCurrentLocation } from '../get-location'; import GetLocation, { getCurrentLocation } from '../get-location';
@ -42,6 +42,9 @@ import { debounce } from 'lodash';
import { AndroidFullScreen } from '@awesome-cordova-plugins/android-full-screen'; import { AndroidFullScreen } from '@awesome-cordova-plugins/android-full-screen';
import Account from '../account'; import Account from '../account';
import OsmFetch from '../osm-fetch'; import OsmFetch from '../osm-fetch';
import VectorTileLayer from 'ol/layer/VectorTile';
import VectorTileSource from 'ol/source/VectorTile.js';
import MVT from 'ol/format/MVT.js';
const [getState, setState] = createSignal({ const [getState, setState] = createSignal({
lon: 0, lon: 0,
@ -231,13 +234,22 @@ const Map: Component = () => {
zIndex: Infinity, zIndex: Infinity,
}); });
const vectorTileSource = new VectorTileSource({
format: new MVT(),
url: 'http://localhost:8080/geoserver/gwc/service/tms/1.0.0/test%3Atransportation@EPSG%3A900913@pbf/{z}/{x}/{-y}.pbf',
});
const vectorTileLayer = new VectorTileLayer({
source: vectorTileSource,
});
const olMap = new OlMap({ const olMap = new OlMap({
view: new View({ view: new View({
center: [+getState().lon, +getState().lat], center: [+getState().lon, +getState().lat],
zoom: +getState().zoom, zoom: +getState().zoom,
rotation: +getState().rotation, rotation: +getState().rotation,
}), }),
layers: [tileLayer, vectorLayer], layers: [tileLayer, vectorTileLayer, vectorLayer],
target: target, target: target,
controls: new Collection<Control>([ controls: new Collection<Control>([
new Attribution({ collapsible: true }), new Attribution({ collapsible: true }),