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,
])
)
}
Source