|
|
|
@ -17,82 +17,83 @@ |
|
|
|
import L, { PolylineDecoratorOptions } from 'leaflet'; |
|
|
|
import 'leaflet-polylinedecorator'; |
|
|
|
|
|
|
|
import { PolylineSettings } from './map-models'; |
|
|
|
import { FormattedData, PolylineSettings } from './map-models'; |
|
|
|
import { safeExecute } from '@home/components/widget/lib/maps/maps-utils'; |
|
|
|
|
|
|
|
export class Polyline { |
|
|
|
|
|
|
|
leafletPoly: L.Polyline; |
|
|
|
polylineDecorator: L.PolylineDecorator; |
|
|
|
dataSources; |
|
|
|
data; |
|
|
|
leafletPoly: L.Polyline; |
|
|
|
polylineDecorator: L.PolylineDecorator; |
|
|
|
dataSources: FormattedData[]; |
|
|
|
data: FormattedData; |
|
|
|
|
|
|
|
constructor(private map: L.Map, locations, data, dataSources, settings: PolylineSettings) { |
|
|
|
this.dataSources = dataSources; |
|
|
|
this.data = data; |
|
|
|
constructor(private map: L.Map, locations: L.LatLng[], data: FormattedData, dataSources: FormattedData[], settings: PolylineSettings) { |
|
|
|
this.dataSources = dataSources; |
|
|
|
this.data = data; |
|
|
|
|
|
|
|
this.leafletPoly = L.polyline(locations, |
|
|
|
this.getPolyStyle(settings) |
|
|
|
).addTo(this.map); |
|
|
|
this.leafletPoly = L.polyline(locations, |
|
|
|
this.getPolyStyle(settings) |
|
|
|
).addTo(this.map); |
|
|
|
|
|
|
|
if (settings.usePolylineDecorator) { |
|
|
|
this.polylineDecorator = L.polylineDecorator(this.leafletPoly, this.getDecoratorSettings(settings)).addTo(this.map); |
|
|
|
} |
|
|
|
if (settings.usePolylineDecorator) { |
|
|
|
this.polylineDecorator = L.polylineDecorator(this.leafletPoly, this.getDecoratorSettings(settings)).addTo(this.map); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
getDecoratorSettings(settings: PolylineSettings): PolylineDecoratorOptions { |
|
|
|
return { |
|
|
|
patterns: [ |
|
|
|
{ |
|
|
|
offset: settings.decoratorOffset, |
|
|
|
endOffset: settings.endDecoratorOffset, |
|
|
|
repeat: settings.decoratorRepeat, |
|
|
|
symbol: L.Symbol[settings.decoratorSymbol]({ |
|
|
|
pixelSize: settings.decoratorSymbolSize, |
|
|
|
polygon: false, |
|
|
|
pathOptions: { |
|
|
|
color: settings.useDecoratorCustomColor ? settings.decoratorCustomColor : this.getPolyStyle(settings).color, |
|
|
|
stroke: true |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
], |
|
|
|
interactive: false, |
|
|
|
} as PolylineDecoratorOptions |
|
|
|
getDecoratorSettings(settings: PolylineSettings): PolylineDecoratorOptions { |
|
|
|
return { |
|
|
|
patterns: [ |
|
|
|
{ |
|
|
|
offset: settings.decoratorOffset, |
|
|
|
endOffset: settings.endDecoratorOffset, |
|
|
|
repeat: settings.decoratorRepeat, |
|
|
|
symbol: L.Symbol[settings.decoratorSymbol]({ |
|
|
|
pixelSize: settings.decoratorSymbolSize, |
|
|
|
polygon: false, |
|
|
|
pathOptions: { |
|
|
|
color: settings.useDecoratorCustomColor ? settings.decoratorCustomColor : this.getPolyStyle(settings).color, |
|
|
|
stroke: true |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
] |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
updatePolyline(settings, data, dataSources) { |
|
|
|
this.data = data; |
|
|
|
this.dataSources = dataSources; |
|
|
|
this.leafletPoly.setStyle(this.getPolyStyle(settings)); |
|
|
|
// this.setPolylineLatLngs(data);
|
|
|
|
if (this.polylineDecorator) |
|
|
|
this.polylineDecorator.setPaths(this.leafletPoly); |
|
|
|
} |
|
|
|
updatePolyline(locations: L.LatLng[], data: FormattedData, dataSources: FormattedData[], settings: PolylineSettings) { |
|
|
|
this.data = data; |
|
|
|
this.dataSources = dataSources; |
|
|
|
this.leafletPoly.setLatLngs(locations); |
|
|
|
this.leafletPoly.setStyle(this.getPolyStyle(settings)); |
|
|
|
// this.setPolylineLatLngs(data);
|
|
|
|
if (this.polylineDecorator) |
|
|
|
this.polylineDecorator.setPaths(this.leafletPoly); |
|
|
|
} |
|
|
|
|
|
|
|
getPolyStyle(settings: PolylineSettings): L.PolylineOptions { |
|
|
|
return { |
|
|
|
color: settings.useColorFunction ? |
|
|
|
safeExecute(settings.colorFunction, |
|
|
|
[this.data, this.dataSources, this.dataSources[0]?.dsIndex]) : settings.color, |
|
|
|
opacity: settings.useStrokeOpacityFunction ? |
|
|
|
safeExecute(settings.strokeOpacityFunction, |
|
|
|
[this.data, this.dataSources, this.dataSources[0]?.dsIndex]) : settings.strokeOpacity, |
|
|
|
weight: settings.useStrokeWeightFunction ? |
|
|
|
safeExecute(settings.strokeWeightFunction, |
|
|
|
[this.data, this.dataSources, this.dataSources[0]?.dsIndex]) : settings.strokeWeight, |
|
|
|
} |
|
|
|
getPolyStyle(settings: PolylineSettings): L.PolylineOptions { |
|
|
|
return { |
|
|
|
interactive: false, |
|
|
|
color: settings.useColorFunction ? |
|
|
|
safeExecute(settings.colorFunction, |
|
|
|
[this.data, this.dataSources, this.data.dsIndex]) : settings.color, |
|
|
|
opacity: settings.useStrokeOpacityFunction ? |
|
|
|
safeExecute(settings.strokeOpacityFunction, |
|
|
|
[this.data, this.dataSources, this.data.dsIndex]) : settings.strokeOpacity, |
|
|
|
weight: settings.useStrokeWeightFunction ? |
|
|
|
safeExecute(settings.strokeWeightFunction, |
|
|
|
[this.data, this.dataSources, this.data.dsIndex]) : settings.strokeWeight, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
removePolyline() { |
|
|
|
this.map.removeLayer(this.leafletPoly); |
|
|
|
} |
|
|
|
removePolyline() { |
|
|
|
this.map.removeLayer(this.leafletPoly); |
|
|
|
} |
|
|
|
|
|
|
|
getPolylineLatLngs() { |
|
|
|
return this.leafletPoly.getLatLngs(); |
|
|
|
} |
|
|
|
getPolylineLatLngs() { |
|
|
|
return this.leafletPoly.getLatLngs(); |
|
|
|
} |
|
|
|
|
|
|
|
setPolylineLatLngs(latLngs) { |
|
|
|
this.leafletPoly.setLatLngs(latLngs); |
|
|
|
} |
|
|
|
setPolylineLatLngs(latLngs) { |
|
|
|
this.leafletPoly.setLatLngs(latLngs); |
|
|
|
} |
|
|
|
} |
|
|
|
|