{"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(/&nbsp;/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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"}