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