@obliczeniowo/elementary
Version:
Library made in Angular version 20
1 lines • 27.4 kB
Source Map (JSON)
{"version":3,"file":"obliczeniowo-elementary-mapbox.mjs","sources":["../../../../projects/components/mapbox/services/obl-mapbox.service.ts","../../../../projects/components/mapbox/obliczeniowo-elementary-mapbox.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-argument */\nimport { Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport {\n ColorRGB,\n ColorType,\n IPoint2D,\n Point2D,\n TextTransform,\n} from '@obliczeniowo/elementary/classes';\nimport {\n DrawingContextInterface,\n DrawingSvgInterface,\n Rect,\n TextAlign,\n} from '@obliczeniowo/elementary/drawing';\nimport { OblFileService } from '@obliczeniowo/elementary/files';\n\nimport { MapboxLike } from '../interfaces/mapbox-like';\nimport { ToOverrideLayer } from '../interfaces/to-override-layer';\nimport { DrawingPdfInterface } from '@obliczeniowo/elementary/drawing-pdf';\n\n/**\n * Service that provide some extra functionality for mapbox library made to use maps in web applications\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class OblMapboxService {\n /**\n * Variable that contain table of layers id and properties that can be override from default one\n */\n toOverride: ToOverrideLayer[] = [\n {\n layerId: 'landcover_crop',\n fillOpacity: 0,\n fill: new ColorRGB(239, 233, 225),\n },\n {\n layerId: 'landcover_grass',\n fillOpacity: 0,\n },\n {\n layerId: 'water-shadow',\n fill: new ColorRGB(117, 207, 240),\n },\n {\n layerId: 'road-shields-black',\n draw: {\n after: [],\n before: [\n (feature: any, map: MapboxLike, dc: DrawingSvgInterface) => {\n const coords: any[] = feature.coords;\n let table: IPoint2D[] = [];\n\n if (feature.type === 'MultiLineString') {\n const concat = coords.reduce(\n (prev, curr) => [...prev, ...curr],\n []\n );\n table = concat.map((coord: [number, number]) =>\n map.project(coord)\n );\n } else if (feature.type === 'LineString') {\n table = coords.map((coord: [number, number]) =>\n map.project(coord)\n );\n } else if (typeof coords[0] === 'number') {\n table.push(map.project(coords as any));\n }\n\n let last = table[0];\n\n const newTable: IPoint2D[] = [];\n\n newTable.push(last);\n\n for (let i = 1; i < table.length; i++) {\n const pt = table[i];\n if (\n new Point2D(last.x, last.y)\n .subtract(new Point2D(pt.x, pt.y))\n .sickLength() > 100000\n ) {\n last = table[i];\n newTable.push(last);\n }\n }\n\n newTable.forEach((pt) => {\n dc.drawRect(\n pt.x - 12,\n pt.y - 10,\n 24,\n 14,\n 1,\n '#000000',\n '#ffee00'\n );\n this.drawText(feature, dc, map, undefined, pt);\n });\n },\n ],\n },\n },\n {\n layerId: 'motorway-junction',\n draw: {\n after: [],\n before: [\n (feature: any, map: MapboxLike, dc: DrawingSvgInterface) => {\n const coords: any[] = feature.coords;\n let table: IPoint2D[] = [];\n\n if (feature.type === 'MultiLineString') {\n const concat = coords.reduce(\n (prev, curr) => [...prev, ...curr],\n []\n );\n table = concat.map((coord: [number, number]) =>\n map.project(coord)\n );\n } else if (feature.type === 'LineString') {\n table = coords.map((coord: [number, number]) =>\n map.project(coord)\n );\n } else if (typeof coords[0] === 'number') {\n table.push(map.project(coords as any));\n }\n\n let last = table[0];\n\n const newTable: IPoint2D[] = [];\n\n newTable.push(last);\n\n for (let i = 1; i < table.length; i++) {\n const pt = table[i];\n if (\n new Point2D(last.x, last.y)\n .subtract(new Point2D(pt.x, pt.y))\n .sickLength() > 100000\n ) {\n last = table[i];\n newTable.push(last);\n }\n }\n\n newTable.forEach((pt) => {\n dc.drawRect(\n pt.x - 12,\n pt.y - 10,\n 24,\n 14,\n 0,\n '#00aa00',\n '#007700'\n );\n this.drawText(feature, dc, map, undefined, pt);\n });\n },\n ],\n },\n },\n {\n layerId: 'road-shields-white',\n draw: {\n after: [],\n before: [\n (feature: any, map: MapboxLike, dc: DrawingSvgInterface) => {\n const coords: any[] = feature.coords;\n let table: IPoint2D[] = [];\n\n if (feature.type === 'MultiLineString') {\n const concat = coords.reduce(\n (prev, curr) => [...prev, ...curr],\n []\n );\n table = concat.map((coord: [number, number]) =>\n map.project(coord)\n );\n } else if (feature.type === 'LineString') {\n table = coords.map((coord: [number, number]) =>\n map.project(coord)\n );\n } else if (typeof coords[0] === 'number') {\n table.push(map.project(coords as any));\n }\n\n let last = table[0];\n\n const newTable: IPoint2D[] = [];\n\n newTable.push(last);\n\n for (let i = 1; i < table.length; i++) {\n const pt = table[i];\n if (\n new Point2D(last.x, last.y)\n .subtract(new Point2D(pt.x, pt.y))\n .sickLength() > 100000\n ) {\n last = table[i];\n newTable.push(last);\n }\n }\n\n newTable.forEach((pt) => {\n dc.drawRect(\n pt.x - 12,\n pt.y - 10,\n 24,\n 14,\n 0,\n '#ffffff',\n '#aa0000'\n );\n this.drawText(feature, dc, map, undefined, pt);\n });\n },\n ],\n },\n },\n ];\n\n protected renderer: Renderer2;\n\n constructor(protected file: OblFileService, rendererFactory: RendererFactory2) {\n this.renderer = rendererFactory.createRenderer(null, null);\n }\n\n protected drawText(\n feature: any,\n dc: DrawingContextInterface,\n map: MapboxLike,\n override?: ToOverrideLayer,\n point?: IPoint2D\n ) {\n if (feature.layer.layout['text-field']) {\n const { x, y } = point || map.project(feature.coords);\n const {\n // 'font-field': fontField,\n 'text-field': textField,\n // 'text-letter-spacing': textLetterSpacing,\n // 'text-max-angle': textMaxAngle,\n // 'text-padding': textPadding,\n // 'text-rotation-alignment': textRotationAlignment,\n 'text-size': textSize,\n 'text-max-width': maxTextWidth,\n } = feature.layer.layout;\n const {\n 'text-color': textColor,\n 'text-halo-color': textHaloColor,\n 'text-halo-width': textHaloWidth,\n } = feature.layer.paint;\n\n const color =\n override?.textColor ||\n (textColor &&\n new ColorRGB(textColor.r * 255, textColor.g * 255, textColor.b * 255)\n .getHexColorBase) ||\n '#000000';\n const haloColor =\n override?.haloColor || (textHaloColor && textHaloWidth)\n ? new ColorRGB(\n textHaloColor.r * 255,\n textHaloColor.g * 255,\n textHaloColor.b * 255\n ).getHexColorBase\n : undefined;\n\n const coords = new Point2D(x, y);\n\n dc.setFontSize(textSize);\n dc.setTextAlign(TextAlign.CENTER);\n\n const text = TextTransform.prepare(textField, feature.properties);\n\n if (maxTextWidth) {\n this.drawSplittedText(dc, text, coords, color, haloColor, maxTextWidth);\n } else {\n if (haloColor) {\n dc.drawText(text, coords, '#ffffff', 0, {\n svgOnly: {},\n style: {\n strokeWidth: 2,\n stroke: haloColor,\n },\n });\n }\n dc.drawText(text, coords, color, 0);\n }\n }\n }\n\n /**\n * Method to export mapbox layers to SVG file\n * @param map mapbox.map object\n */\n exportToSvg(map: MapboxLike, draw?: (dc: DrawingContextInterface) => void) {\n const w3 = 'http://www.w3.org/2000/svg';\n const svg: SVGSVGElement = this.renderer.createElement(\n 'svg',\n w3\n );\n\n const { width, height } = map.getCanvas();\n\n svg.setAttribute('width', `${width}`);\n svg.setAttribute('height', `${height}`);\n svg.setAttribute('xmlns', w3);\n const dc = new DrawingSvgInterface(svg, this.renderer);\n\n this.draw(map, dc, draw);\n\n this.file.saveSvgFile(svg.outerHTML.replace(/ /g, ' '), 'map');\n }\n\n exportToPdf(map: MapboxLike, draw?: ((dc: DrawingContextInterface) => void)) {\n const { width, height } = map.getCanvas();\n const dc = new DrawingPdfInterface(\n new Rect(new Point2D(), new Point2D(width, height)),\n { orientation: 'landscape' }\n );\n\n this.draw(map, dc, draw);\n\n dc.save('map');\n }\n\n protected draw(\n map: MapboxLike,\n dc: DrawingContextInterface,\n draw?: (dc: DrawingContextInterface) => void\n ) {\n const { width, height } = map.getCanvas();\n\n const features = map\n .queryRenderedFeatures()\n .map((feature: any) => ({\n coords: feature.geometry.coordinates,\n type: feature.geometry.type,\n layer: feature.layer,\n feature,\n properties: feature.properties,\n }))\n .reverse();\n\n dc.drawRect(0, 0, width, height, 0, '#efe9e1', '#efe9e1');\n\n const drawPolygon = (coords: any, layer: any, properties: any) => {\n const polygons: any[] = [];\n coords.forEach((polygon: any) =>\n polygons.push(\n polygon\n .map((coords: [number, number]) => map.project(coords))\n .map((coord: IPoint2D) => new Point2D(coord.x, coord.y))\n )\n );\n\n const override = this.toOverride.find(\n (item) => item.layerId === layer.id\n );\n\n const { paint } = layer;\n\n const lineColor = paint?.['line-color'];\n const transformedLineColor =\n (lineColor &&\n new ColorRGB(\n lineColor.r * 255,\n lineColor.g * 255,\n lineColor.b * 255\n )) ||\n undefined;\n\n const fillOpacity =\n override?.fillOpacity ||\n (paint?.['fill-opacity'] && paint['fill-opacity']);\n\n const toWhite = (color: number, opacity: number) =>\n color +\n (255 - color) * (1 - opacity) * ((lineColor && 1 - lineColor) || 1);\n\n const fillColor = paint?.['fill-color'];\n const transformedFillColor =\n override?.fill ||\n (fillColor &&\n new ColorRGB(\n toWhite(fillColor.r * 255, fillOpacity),\n toWhite(fillColor.g * 255, fillOpacity),\n toWhite(fillColor.b * 255, fillOpacity)\n )) ||\n undefined;\n\n const lineWidth = paint?.['line-width'];\n const lineOpacity = paint?.['line-opacity'];\n\n if (lineWidth === undefined && transformedFillColor === undefined) {\n return;\n }\n\n polygons.forEach((polygon) =>\n dc.drawPolyline(\n polygon,\n lineWidth || 0,\n transformedLineColor?.getHexColorBase,\n {\n close: false,\n svgOnly: {},\n style: {\n fill: transformedFillColor?.getHexColorBase,\n strokeOpacity: lineOpacity || 1,\n },\n }\n )\n );\n };\n\n let currentLayer: string | undefined;\n\n features.forEach((feature: any) => {\n if (currentLayer !== feature.layer.id) {\n if (currentLayer) {\n dc.endGroup();\n }\n currentLayer = feature.layer.id;\n\n dc.group({\n name: currentLayer,\n });\n }\n\n const override = this.toOverride.find(\n (item) => item.layerId === feature.layer.id\n );\n\n override?.draw?.before.forEach((cb: any) => cb(feature, map, dc));\n\n if (feature.type === 'Polygon') {\n drawPolygon(feature.coords, feature.layer, feature.properties);\n } else if (feature.type === 'MultiPolygon') {\n feature.coords.forEach((coords: any) =>\n drawPolygon(coords, feature.layer, feature.properties)\n );\n } else if (feature.type === 'LineString') {\n drawPolygon([feature.coords], feature.layer, feature.properties);\n } else if (feature.type === 'MultiLineString') {\n drawPolygon(feature.coords, feature.layer, feature.properties);\n } else if (feature.layer.layout['text-field']) {\n this.drawText(feature, dc, map, override);\n }\n\n override?.draw?.after.forEach((cb: any) => cb(feature, map, dc));\n });\n\n if (currentLayer) {\n dc.endGroup();\n }\n\n if (draw) {\n draw(dc);\n }\n }\n\n protected drawSplittedText(\n dc: DrawingContextInterface,\n text: string,\n position: Point2D,\n color: ColorType,\n haloColor: ColorType | undefined,\n maxLength: number\n ): number {\n const strings: string[] = TextTransform.splitByLengthAndWords(\n text,\n maxLength\n );\n\n const fontSize = dc.getFontSize() * 1.2;\n\n strings.forEach((text, index) => {\n if (haloColor) {\n dc.drawText(\n text,\n position.add(new Point2D(0, index * fontSize)),\n color,\n 0,\n {\n svgOnly: {},\n style: {\n strokeWidth: 2,\n stroke: haloColor,\n },\n }\n );\n }\n dc.drawText(\n text,\n position.add(new Point2D(0, index * fontSize)),\n color,\n 0\n );\n });\n\n return strings.length * fontSize;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}