protomaps-leaflet
Version:
Vector tile rendering and labeling for [Leaflet](https://github.com/Leaflet/Leaflet).
62 lines (61 loc) • 1.98 kB
JavaScript
import { CircleSymbolizer, LineSymbolizer, PolygonSymbolizer, } from "./symbolizer";
import { GeomType } from "./tilecache";
const xray_symbolizers = (dataSource, dataLayer, color) => {
return [
{
dataSource: dataSource,
dataLayer: dataLayer,
symbolizer: new CircleSymbolizer({
opacity: 0.2,
fill: color,
radius: 4,
}),
filter: (z, f) => {
return f.geomType === GeomType.Point;
},
},
{
dataSource: dataSource,
dataLayer: dataLayer,
symbolizer: new LineSymbolizer({
opacity: 0.2,
color: color,
width: 2,
}),
filter: (z, f) => {
return f.geomType === GeomType.Line;
},
},
{
dataSource: dataSource,
dataLayer: dataLayer,
symbolizer: new PolygonSymbolizer({
opacity: 0.2,
fill: color,
stroke: color,
width: 1,
}),
filter: (z, f) => {
return f.geomType === GeomType.Polygon;
},
},
];
};
export const xray_rules = (prepared_tilemap, xray) => {
let rules = [];
for (const [dataSource, tiles] of prepared_tilemap) {
for (const tile of tiles) {
for (const dataLayer of tile.data.keys()) {
if (dataSource === xray.dataSource && dataLayer === xray.dataLayer) {
// do nothing since the highlighted layer should go last
}
else {
rules = rules.concat(xray_symbolizers(dataSource, dataLayer, "steelblue"));
}
}
}
}
// the highlighted layer
rules = rules.concat(xray_symbolizers(xray.dataSource || "", xray.dataLayer, "red"));
return rules;
};