Source

services/map-service.js

import envService from '@/services/env-service.js'
import { getClientParameter } from '@/services/auth-service.js'
import { getQueryStringValue } from '@/utils/querystring'
import { getPolylineFromLinestring } from '@/utils/map.js'
import { generateShortId } from '@/utils/crypto.js'
import L from 'leaflet'
const md5 = require('md5')

export const osmWmsUrl = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'
export const wmsOptionsDefaults = {
  attribution: '© OpenStreetMap',
  layers: '',
  format: 'image/png',
  transparent: true,
  styles: '',
  language: 'fr',
}

/**
 * Creates the projection object (crs) just before configuring leaflet tilelayer
 * @param {*} options
 * @returns
 */
export function normalizeWmsOptions(options = {}) {
  let wmsOptions = { ...options }
  console.log('normalizeWmsOptions', {
    wmsOptions,
  })

  if (wmsOptions.crs === 'L.CRS.EPSG900913') {
    wmsOptions.crs = L.CRS.EPSG900913
  }
  if (wmsOptions.crs === 'L.CRS.EPSG4326') {
    wmsOptions.crs = L.CRS.EPSG4326
  }

  return wmsOptions
}

export default {
  areOSMLayersDisabled,
  getOSMLayers,
  osmWmsUrl,
  wmsOptionsDefaults,
}

export async function areOSMLayersDisabled(
  enableServerClientParameterCheck = true
) {
  let areOSMLayersDisabledByClient = envService.isProduction()
    ? false
    : getQueryStringValue('GeoredV3OSMMap') === '0'
  let areOSMLayersDisabledByServer =
    enableServerClientParameterCheck &&
    ((await getClientParameter('GeoredV3OSMMap')) || '').toString() === '0'
  console.debug('areOSMLayersDisabled', {
    areOSMLayersDisabledByClient,
    areOSMLayersDisabledByServer,
    result: areOSMLayersDisabledByServer || areOSMLayersDisabledByClient,
  })
  return areOSMLayersDisabledByServer || areOSMLayersDisabledByClient
}

export async function getOSMLayers() {
  let osmLayers = []

  if (!(await areOSMLayersDisabled(false))) {
    let serverOSMLayersAsString = await getClientParameter(
      'GeoredV3OSMMapServers'
    )
    if (
      !envService.isProduction() &&
      getQueryStringValue('GeoredV3OSMMapServers')
    ) {
      serverOSMLayersAsString = getQueryStringValue('GeoredV3OSMMapServers')
    }

    if (serverOSMLayersAsString) {
      serverOSMLayersAsString.split(',').forEach((layerItemAsString) => {
        let parts = layerItemAsString.split('|')
        let name = parts[0]
        let url = parts[1] || osmWmsUrl
        osmLayers.push({
          id: `osm_${md5(name + url)}`,
          name,
          logo: 'osm',
          wmsUrl: url,
          wmsOptions: wmsOptionsDefaults,
        })
      })
    } else {
      osmLayers = [
        {
          id: -1,
          name: 'OSM',
          logo: 'osm',
          wmsUrl: osmWmsUrl,
          wmsOptions: wmsOptionsDefaults,
        },
      ]
    }
  }
  return osmLayers
}

/**
 * Wrapper for Leaflet polyline (Array of LatLng)
 * @unused
 * @param {*} linestring
 * @param {*} options
 * @returns
 */
export function createLeafletWrapperPolylineItem(
  linestring = '',
  options = {}
) {
  return {
    id: options.id || generateShortId('id_'),
    smoothFactor: 0.5,
    weight: parseInt(process.env.VUE_APP_LOCATION_MAP_POLYLINE_WEIGHT) || 5,
    polyline: getPolylineFromLinestring(linestring),
    color: options.color || '#0b72b5',
    ...(options.data || {}),
  }
}

export function normalizeZoneItemPolygon(polygon) {
  return (
    !!polygon &&
    polygon
      .split('(')
      .join('')
      .split(')')
      .join('')
      .split(':')
      .map((latlng) => [
        parseFloat(latlng.split(',')[1]) / 100000,
        parseFloat(latlng.split(',')[0]) / 100000,
      ])
  )
}