UNPKG

@fleetbase/leaflet-routing-machine

Version:
1 lines 52.8 kB
import t from"@mapbox/corslite";import e from"@mapbox/polyline";import i from"osrm-text-instructions";const n={directions:{N:"norte",NE:"noreste",E:"este",SE:"sureste",S:"sur",SW:"suroeste",W:"oeste",NW:"noroeste",SlightRight:"leve giro a la derecha",Right:"derecha",SharpRight:"giro pronunciado a la derecha",SlightLeft:"leve giro a la izquierda",Left:"izquierda",SharpLeft:"giro pronunciado a la izquierda",Uturn:"media vuelta"},instructions:{Head:["Derecho {dir}"," sobre {road}"],Continue:["Continuar {dir}"," en {road}"],TurnAround:["Dar vuelta"],WaypointReached:["Llegó a un punto del camino"],Roundabout:["Tomar {exitStr} salida en la rotonda"," en {road}"],DestinationReached:["Llegada a destino"],Fork:["En el cruce gira a {modifier}"," hacia {road}"],Merge:["Incorpórate {modifier}"," hacia {road}"],OnRamp:["Gira {modifier} en la salida"," hacia {road}"],OffRamp:["Toma la salida {modifier}"," hacia {road}"],EndOfRoad:["Gira {modifier} al final de la carretera"," hacia {road}"],Onto:"hacia {road}"},formatOrder:function(t){return t+"º"},ui:{startPlaceholder:"Inicio",viaPlaceholder:"Via {viaNumber}",endPlaceholder:"Destino"},units:{meters:"m",kilometers:"km",yards:"yd",miles:"mi",hours:"h",minutes:"min",seconds:"s"}},o=L.Class.extend({initialize:function(t){this._langs=L.Util.isArray(t)?t.slice():[t,"en"];for(var e=0,i=this._langs.length;e<i;e++){var n=/([A-Za-z]+)/.exec(this._langs[e])[1];if(!o[this._langs[e]]){if(!o[n])throw new Error('No localization for language "'+this._langs[e]+'".');this._langs[e]=n}}},localize:function(t){var e,i;t=L.Util.isArray(t)?t:[t];for(var n=0,r=this._langs.length;n<r;n++){e=o[this._langs[n]];for(var a=0,s=t.length;e&&a<s;a++)e=i=e[t[a]];if(i)return i}}});var r=L.extend(o,{en:{directions:{N:"north",NE:"northeast",E:"east",SE:"southeast",S:"south",SW:"southwest",W:"west",NW:"northwest",SlightRight:"slight right",Right:"right",SharpRight:"sharp right",SlightLeft:"slight left",Left:"left",SharpLeft:"sharp left",Uturn:"Turn around"},instructions:{Head:["Head {dir}"," on {road}"],Continue:["Continue {dir}"],TurnAround:["Turn around"],WaypointReached:["Waypoint reached"],Roundabout:["Take the {exitStr} exit in the roundabout"," onto {road}"],DestinationReached:["Destination reached"],Fork:["At the fork, turn {modifier}"," onto {road}"],Merge:["Merge {modifier}"," onto {road}"],OnRamp:["Turn {modifier} on the ramp"," onto {road}"],OffRamp:["Take the ramp on the {modifier}"," onto {road}"],EndOfRoad:["Turn {modifier} at the end of the road"," onto {road}"],Onto:"onto {road}"},formatOrder:function(t){var e=t%10-1,i=["st","nd","rd"];return i[e]?t+i[e]:t+"th"},ui:{startPlaceholder:"Start",viaPlaceholder:"Via {viaNumber}",endPlaceholder:"End"},units:{meters:"m",kilometers:"km",yards:"yd",miles:"mi",hours:"h",minutes:"min",seconds:"s"}},de:{directions:{N:"Norden",NE:"Nordosten",E:"Osten",SE:"Südosten",S:"Süden",SW:"Südwesten",W:"Westen",NW:"Nordwesten",SlightRight:"leicht rechts",Right:"rechts",SharpRight:"scharf rechts",SlightLeft:"leicht links",Left:"links",SharpLeft:"scharf links",Uturn:"Wenden"},instructions:{Head:["Richtung {dir}"," auf {road}"],Continue:["Geradeaus Richtung {dir}"," auf {road}"],SlightRight:["Leicht rechts abbiegen"," auf {road}"],Right:["Rechts abbiegen"," auf {road}"],SharpRight:["Scharf rechts abbiegen"," auf {road}"],TurnAround:["Wenden"],SharpLeft:["Scharf links abbiegen"," auf {road}"],Left:["Links abbiegen"," auf {road}"],SlightLeft:["Leicht links abbiegen"," auf {road}"],WaypointReached:["Zwischenhalt erreicht"],Roundabout:["Nehmen Sie die {exitStr} Ausfahrt im Kreisverkehr"," auf {road}"],DestinationReached:["Sie haben ihr Ziel erreicht"],Fork:["An der Kreuzung {modifier}"," auf {road}"],Merge:["Fahren Sie {modifier} weiter"," auf {road}"],OnRamp:["Fahren Sie {modifier} auf die Auffahrt"," auf {road}"],OffRamp:["Nehmen Sie die Ausfahrt {modifier}"," auf {road}"],EndOfRoad:["Fahren Sie {modifier} am Ende der Straße"," auf {road}"],Onto:"auf {road}"},formatOrder:function(t){return t+"."},ui:{startPlaceholder:"Start",viaPlaceholder:"Via {viaNumber}",endPlaceholder:"Ziel"}},sv:{directions:{N:"norr",NE:"nordost",E:"öst",SE:"sydost",S:"syd",SW:"sydväst",W:"väst",NW:"nordväst",SlightRight:"svagt höger",Right:"höger",SharpRight:"skarpt höger",SlightLeft:"svagt vänster",Left:"vänster",SharpLeft:"skarpt vänster",Uturn:"Vänd"},instructions:{Head:["Åk åt {dir}"," till {road}"],Continue:["Fortsätt {dir}"],SlightRight:["Svagt höger"," till {road}"],Right:["Sväng höger"," till {road}"],SharpRight:["Skarpt höger"," till {road}"],TurnAround:["Vänd"],SharpLeft:["Skarpt vänster"," till {road}"],Left:["Sväng vänster"," till {road}"],SlightLeft:["Svagt vänster"," till {road}"],WaypointReached:["Viapunkt nådd"],Roundabout:["Tag {exitStr} avfarten i rondellen"," till {road}"],DestinationReached:["Framme vid resans mål"],Fork:["Tag av {modifier}"," till {road}"],Merge:["Anslut {modifier} "," till {road}"],OnRamp:["Tag påfarten {modifier}"," till {road}"],OffRamp:["Tag avfarten {modifier}"," till {road}"],EndOfRoad:["Sväng {modifier} vid vägens slut"," till {road}"],Onto:"till {road}"},formatOrder:function(t){return["första","andra","tredje","fjärde","femte","sjätte","sjunde","åttonde","nionde","tionde"][t-1]},ui:{startPlaceholder:"Från",viaPlaceholder:"Via {viaNumber}",endPlaceholder:"Till"}},es:n,sp:n,nl:{directions:{N:"noordelijke",NE:"noordoostelijke",E:"oostelijke",SE:"zuidoostelijke",S:"zuidelijke",SW:"zuidewestelijke",W:"westelijke",NW:"noordwestelijke"},instructions:{Head:["Vertrek in {dir} richting"," de {road} op"],Continue:["Ga in {dir} richting"," de {road} op"],SlightRight:["Volg de weg naar rechts"," de {road} op"],Right:["Ga rechtsaf"," de {road} op"],SharpRight:["Ga scherpe bocht naar rechts"," de {road} op"],TurnAround:["Keer om"],SharpLeft:["Ga scherpe bocht naar links"," de {road} op"],Left:["Ga linksaf"," de {road} op"],SlightLeft:["Volg de weg naar links"," de {road} op"],WaypointReached:["Aangekomen bij tussenpunt"],Roundabout:["Neem de {exitStr} afslag op de rotonde"," de {road} op"],DestinationReached:["Aangekomen op eindpunt"]},formatOrder:function(t){return 1===t||t>=20?t+"ste":t+"de"},ui:{startPlaceholder:"Vertrekpunt",viaPlaceholder:"Via {viaNumber}",endPlaceholder:"Bestemming"}},fr:{directions:{N:"nord",NE:"nord-est",E:"est",SE:"sud-est",S:"sud",SW:"sud-ouest",W:"ouest",NW:"nord-ouest"},instructions:{Head:["Tout droit au {dir}"," sur {road}"],Continue:["Continuer au {dir}"," sur {road}"],SlightRight:["Légèrement à droite"," sur {road}"],Right:["A droite"," sur {road}"],SharpRight:["Complètement à droite"," sur {road}"],TurnAround:["Faire demi-tour"],SharpLeft:["Complètement à gauche"," sur {road}"],Left:["A gauche"," sur {road}"],SlightLeft:["Légèrement à gauche"," sur {road}"],WaypointReached:["Point d'étape atteint"],Roundabout:["Au rond-point, prenez la {exitStr} sortie"," sur {road}"],DestinationReached:["Destination atteinte"]},formatOrder:function(t){return t+"º"},ui:{startPlaceholder:"Départ",viaPlaceholder:"Intermédiaire {viaNumber}",endPlaceholder:"Arrivée"}},it:{directions:{N:"nord",NE:"nord-est",E:"est",SE:"sud-est",S:"sud",SW:"sud-ovest",W:"ovest",NW:"nord-ovest"},instructions:{Head:["Dritto verso {dir}"," su {road}"],Continue:["Continuare verso {dir}"," su {road}"],SlightRight:["Mantenere la destra"," su {road}"],Right:["A destra"," su {road}"],SharpRight:["Strettamente a destra"," su {road}"],TurnAround:["Fare inversione di marcia"],SharpLeft:["Strettamente a sinistra"," su {road}"],Left:["A sinistra"," sur {road}"],SlightLeft:["Mantenere la sinistra"," su {road}"],WaypointReached:["Punto di passaggio raggiunto"],Roundabout:["Alla rotonda, prendere la {exitStr} uscita"],DestinationReached:["Destinazione raggiunta"]},formatOrder:function(t){return t+"º"},ui:{startPlaceholder:"Partenza",viaPlaceholder:"Intermedia {viaNumber}",endPlaceholder:"Destinazione"}},pt:{directions:{N:"norte",NE:"nordeste",E:"leste",SE:"sudeste",S:"sul",SW:"sudoeste",W:"oeste",NW:"noroeste",SlightRight:"curva ligeira a direita",Right:"direita",SharpRight:"curva fechada a direita",SlightLeft:"ligeira a esquerda",Left:"esquerda",SharpLeft:"curva fechada a esquerda",Uturn:"Meia volta"},instructions:{Head:["Siga {dir}"," na {road}"],Continue:["Continue {dir}"," na {road}"],SlightRight:["Curva ligeira a direita"," na {road}"],Right:["Curva a direita"," na {road}"],SharpRight:["Curva fechada a direita"," na {road}"],TurnAround:["Retorne"],SharpLeft:["Curva fechada a esquerda"," na {road}"],Left:["Curva a esquerda"," na {road}"],SlightLeft:["Curva ligueira a esquerda"," na {road}"],WaypointReached:["Ponto de interesse atingido"],Roundabout:["Pegue a {exitStr} saída na rotatória"," na {road}"],DestinationReached:["Destino atingido"],Fork:["Na encruzilhada, vire a {modifier}"," na {road}"],Merge:["Entre à {modifier}"," na {road}"],OnRamp:["Vire {modifier} na rampa"," na {road}"],OffRamp:["Entre na rampa na {modifier}"," na {road}"],EndOfRoad:["Vire {modifier} no fim da rua"," na {road}"],Onto:"na {road}"},formatOrder:function(t){return t+"º"},ui:{startPlaceholder:"Origem",viaPlaceholder:"Intermédio {viaNumber}",endPlaceholder:"Destino"}},sk:{directions:{N:"sever",NE:"serverovýchod",E:"východ",SE:"juhovýchod",S:"juh",SW:"juhozápad",W:"západ",NW:"serverozápad"},instructions:{Head:["Mierte na {dir}"," na {road}"],Continue:["Pokračujte na {dir}"," na {road}"],SlightRight:["Mierne doprava"," na {road}"],Right:["Doprava"," na {road}"],SharpRight:["Prudko doprava"," na {road}"],TurnAround:["Otočte sa"],SharpLeft:["Prudko doľava"," na {road}"],Left:["Doľava"," na {road}"],SlightLeft:["Mierne doľava"," na {road}"],WaypointReached:["Ste v prejazdovom bode."],Roundabout:["Odbočte na {exitStr} výjazde"," na {road}"],DestinationReached:["Prišli ste do cieľa."]},formatOrder:function(t){var e=t%10-1,i=[".",".","."];return i[e]?t+i[e]:t+"."},ui:{startPlaceholder:"Začiatok",viaPlaceholder:"Cez {viaNumber}",endPlaceholder:"Koniec"}},el:{directions:{N:"βόρεια",NE:"βορειοανατολικά",E:"ανατολικά",SE:"νοτιοανατολικά",S:"νότια",SW:"νοτιοδυτικά",W:"δυτικά",NW:"βορειοδυτικά"},instructions:{Head:["Κατευθυνθείτε {dir}"," στην {road}"],Continue:["Συνεχίστε {dir}"," στην {road}"],SlightRight:["Ελαφρώς δεξιά"," στην {road}"],Right:["Δεξιά"," στην {road}"],SharpRight:["Απότομη δεξιά στροφή"," στην {road}"],TurnAround:["Κάντε αναστροφή"],SharpLeft:["Απότομη αριστερή στροφή"," στην {road}"],Left:["Αριστερά"," στην {road}"],SlightLeft:["Ελαφρώς αριστερά"," στην {road}"],WaypointReached:["Φτάσατε στο σημείο αναφοράς"],Roundabout:["Ακολουθήστε την {exitStr} έξοδο στο κυκλικό κόμβο"," στην {road}"],DestinationReached:["Φτάσατε στον προορισμό σας"]},formatOrder:function(t){return t+"º"},ui:{startPlaceholder:"Αφετηρία",viaPlaceholder:"μέσω {viaNumber}",endPlaceholder:"Προορισμός"}},ca:{directions:{N:"nord",NE:"nord-est",E:"est",SE:"sud-est",S:"sud",SW:"sud-oest",W:"oest",NW:"nord-oest",SlightRight:"lleu gir a la dreta",Right:"dreta",SharpRight:"gir pronunciat a la dreta",SlightLeft:"gir pronunciat a l'esquerra",Left:"esquerra",SharpLeft:"lleu gir a l'esquerra",Uturn:"mitja volta"},instructions:{Head:["Recte {dir}"," sobre {road}"],Continue:["Continuar {dir}"],TurnAround:["Donar la volta"],WaypointReached:["Ha arribat a un punt del camí"],Roundabout:["Agafar {exitStr} sortida a la rotonda"," a {road}"],DestinationReached:["Arribada al destí"],Fork:["A la cruïlla gira a la {modifier}"," cap a {road}"],Merge:["Incorpora't {modifier}"," a {road}"],OnRamp:["Gira {modifier} a la sortida"," cap a {road}"],OffRamp:["Pren la sortida {modifier}"," cap a {road}"],EndOfRoad:["Gira {modifier} al final de la carretera"," cap a {road}"],Onto:"cap a {road}"},formatOrder:function(t){return t+"º"},ui:{startPlaceholder:"Origen",viaPlaceholder:"Via {viaNumber}",endPlaceholder:"Destí"},units:{meters:"m",kilometers:"km",yards:"yd",miles:"mi",hours:"h",minutes:"min",seconds:"s"}},ru:{directions:{N:"север",NE:"северовосток",E:"восток",SE:"юговосток",S:"юг",SW:"югозапад",W:"запад",NW:"северозапад",SlightRight:"плавно направо",Right:"направо",SharpRight:"резко направо",SlightLeft:"плавно налево",Left:"налево",SharpLeft:"резко налево",Uturn:"развернуться"},instructions:{Head:["Начать движение на {dir}"," по {road}"],Continue:["Продолжать движение на {dir}"," по {road}"],SlightRight:["Плавный поворот направо"," на {road}"],Right:["Направо"," на {road}"],SharpRight:["Резкий поворот направо"," на {road}"],TurnAround:["Развернуться"],SharpLeft:["Резкий поворот налево"," на {road}"],Left:["Поворот налево"," на {road}"],SlightLeft:["Плавный поворот налево"," на {road}"],WaypointReached:["Точка достигнута"],Roundabout:["{exitStr} съезд с кольца"," на {road}"],DestinationReached:["Окончание маршрута"],Fork:["На развилке поверните {modifier}"," на {road}"],Merge:["Перестройтесь {modifier}"," на {road}"],OnRamp:["Поверните {modifier} на съезд"," на {road}"],OffRamp:["Съезжайте на {modifier}"," на {road}"],EndOfRoad:["Поверните {modifier} в конце дороги"," на {road}"],Onto:"на {road}"},formatOrder:function(t){return t+"-й"},ui:{startPlaceholder:"Начало",viaPlaceholder:"Через {viaNumber}",endPlaceholder:"Конец"},units:{meters:"м",kilometers:"км",yards:"ярд",miles:"ми",hours:"ч",minutes:"м",seconds:"с"}},pl:{directions:{N:"północ",NE:"północny wschód",E:"wschód",SE:"południowy wschód",S:"południe",SW:"południowy zachód",W:"zachód",NW:"północny zachód",SlightRight:"lekko w prawo",Right:"w prawo",SharpRight:"ostro w prawo",SlightLeft:"lekko w lewo",Left:"w lewo",SharpLeft:"ostro w lewo",Uturn:"zawróć"},instructions:{Head:["Kieruj się na {dir}"," na {road}"],Continue:["Jedź dalej przez {dir}"],TurnAround:["Zawróć"],WaypointReached:["Punkt pośredni"],Roundabout:["Wyjedź {exitStr} zjazdem na rondzie"," na {road}"],DestinationReached:["Dojechano do miejsca docelowego"],Fork:["Na rozwidleniu {modifier}"," na {road}"],Merge:["Zjedź {modifier}"," na {road}"],OnRamp:["Wjazd {modifier}"," na {road}"],OffRamp:["Zjazd {modifier}"," na {road}"],EndOfRoad:["Skręć {modifier} na końcu drogi"," na {road}"],Onto:"na {road}"},formatOrder:function(t){return t+"."},ui:{startPlaceholder:"Początek",viaPlaceholder:"Przez {viaNumber}",endPlaceholder:"Koniec"},units:{meters:"m",kilometers:"km",yards:"yd",miles:"mi",hours:"godz",minutes:"min",seconds:"s"}},uk:{directions:{N:"північ",NE:"північний схід",E:"схід",SE:"південний схід",S:"південь",SW:"південний захід",W:"захід",NW:"північний захід",SlightRight:"плавно направо",Right:"направо",SharpRight:"різко направо",SlightLeft:"плавно наліво",Left:"наліво",SharpLeft:"різко наліво",Uturn:"розвернутися"},instructions:{Head:["Почати рух на {dir}","по {road}"],Continue:["Продовжувати рух на {dir}","по {road}"],SlightRight:["Плавний поворот направо","на {road}"],Right:["Направо","на {road}"],SharpRight:["Різкий поворот направо","на {road}"],TurnAround:["Розгорнутися"],SharpLeft:["Різкий поворот наліво","на {road}"],Left:["Поворот наліво","на {road}"],SlightLeft:["Плавний поворот наліво","на {road}"],WaypointReached:["Точка досягнута"],Roundabout:["{ExitStr} з'їзд з кільця","на {road}"],DestinationReached:["Закінчення маршруту"],Fork:["На розвилці поверніть {modifier}","на {road}"],Merge:["Візьміть {modifier}","на {road}"],OnRamp:["Поверніть {modifier} на з'їзд","на {road}"],OffRamp:["З'їжджайте на {modifier}","на {road}"],EndOfRoad:["Поверніть {modifier} в кінці дороги","на {road}"],Onto:"на {road}"},formatOrder:function(t){return t+"-й"},ui:{startPlaceholder:"Початок",viaPlaceholder:"Через {viaNumber}",endPlaceholder:"Кінець"},units:{meters:"м",kilometers:"км",yards:"ярд",miles:"ми",hours:"г",minutes:"хв",seconds:"сек"}}}),a=L.Class.extend({options:{units:"metric",unitNames:null,language:"en",roundingSensitivity:1,distanceTemplate:"{value} {unit}"},initialize:function(t){L.setOptions(this,t);var e=L.Util.isArray(this.options.language)?this.options.language:[this.options.language,"en"];this._localization=new r(e)},formatDistance:function(t,e){var i,n,o,r=this.options.unitNames||this._localization.localize("units"),a=e<=0,s=a?function(t){return t}:L.bind(this._round,this);return o="imperial"===this.options.units?(n=t/.9144)>=1e3?{value:s(t/1609.344,e),unit:r.miles}:{value:s(n,e),unit:r.yards}:{value:(i=s(t,e))>=1e3?i/1e3:i,unit:i>=1e3?r.kilometers:r.meters},a&&(o.value=o.value.toFixed(-e)),L.Util.template(this.options.distanceTemplate,o)},_round:function(t,e){var i=e||this.options.roundingSensitivity,n=Math.pow(10,(Math.floor(t/i)+"").length-1),o=Math.floor(t/n)>5?n:n/2;return Math.round(t/o)*o},formatTime:function(t){var e=this.options.unitNames||this._localization.localize("units");return(t=30*Math.round(t/30))>86400?Math.round(t/3600)+" "+e.hours:t>3600?Math.floor(t/3600)+" "+e.hours+" "+Math.round(t%3600/60)+" "+e.minutes:t>300?Math.round(t/60)+" "+e.minutes:t>60?Math.floor(t/60)+" "+e.minutes+(t%60!=0?" "+t%60+" "+e.seconds:""):t+" "+e.seconds},formatInstruction:function(t,e){return void 0===t.text?this.capitalize(L.Util.template(this._getInstructionTemplate(t,e),L.extend({},t,{exitStr:t.exit?this._localization.localize("formatOrder")(t.exit):"",dir:this._localization.localize(["directions",t.direction]),modifier:this._localization.localize(["directions",t.modifier])}))):t.text},getIconName:function(t,e){switch(t.type){case"Head":if(0===e)return"depart";break;case"WaypointReached":return"via";case"Roundabout":return"enter-roundabout";case"DestinationReached":return"arrive"}switch(t.modifier){case"Straight":return"continue";case"SlightRight":return"bear-right";case"Right":return"turn-right";case"SharpRight":return"sharp-right";case"TurnAround":case"Uturn":return"u-turn";case"SharpLeft":return"sharp-left";case"Left":return"turn-left";case"SlightLeft":return"bear-left"}},capitalize:function(t){return t.charAt(0).toUpperCase()+t.substring(1)},_getInstructionTemplate:function(t,e){var i="Straight"===t.type?0===e?"Head":"Continue":t.type,n=this._localization.localize(["instructions",i]);return n||(n=[this._localization.localize(["directions",i])," "+this._localization.localize(["instructions","Onto"])]),n[0]+(n.length>1&&t.road?n[1]:"")}}),s=L.Class.extend({options:{containerClassName:""},initialize:function(t){L.setOptions(this,t)},createContainer:function(t){var e=L.DomUtil.create("table",(t||"")+" "+this.options.containerClassName),i=L.DomUtil.create("colgroup","",e);return L.DomUtil.create("col","leaflet-routing-instruction-icon",i),L.DomUtil.create("col","leaflet-routing-instruction-text",i),L.DomUtil.create("col","leaflet-routing-instruction-distance",i),e},createStepsContainer:function(){return L.DomUtil.create("tbody","")},createStep:function(t,e,i,n){var o,r,a=L.DomUtil.create("tr","",n);return r=L.DomUtil.create("td","",a),o=L.DomUtil.create("span","leaflet-routing-icon leaflet-routing-icon-"+i,r),r.appendChild(o),(r=L.DomUtil.create("td","",a)).appendChild(document.createTextNode(t)),(r=L.DomUtil.create("td","",a)).appendChild(document.createTextNode(e)),a}}),l=L.Control.extend({includes:void 0!==L.Evented&&L.Evented.prototype||L.Mixin.Events,options:{pointMarkerStyle:{radius:5,color:"#03f",fillColor:"white",opacity:1,fillOpacity:.7},summaryTemplate:"<h2>{name}</h2><h3>{distance}, {time}</h3>",timeTemplate:"{time}",containerClassName:"",alternativeClassName:"",minimizedClassName:"",itineraryClassName:"",totalDistanceRoundingSensitivity:-1,show:!0,collapsible:void 0,collapseBtn:function(t){var e=L.DomUtil.create("span",t.options.collapseBtnClass);L.DomEvent.on(e,"click",t._toggle,t),t._container.insertBefore(e,t._container.firstChild)},collapseBtnClass:"leaflet-routing-collapse-btn"},initialize:function(t){L.setOptions(this,t),this._formatter=this.options.formatter||new a(this.options),this._itineraryBuilder=this.options.itineraryBuilder||new s({containerClassName:this.options.itineraryClassName})},onAdd:function(t){var e=this.options.collapsible;return e=e||void 0===e&&t.getSize().x<=640,this._container=L.DomUtil.create("div","leaflet-routing-container leaflet-bar "+(this.options.show?"":"leaflet-routing-container-hide ")+(e?"leaflet-routing-collapsible ":"")+this.options.containerClassName),this._altContainer=this.createAlternativesContainer(),this._container.appendChild(this._altContainer),L.DomEvent.disableClickPropagation(this._container),L.DomEvent.addListener(this._container,"mousewheel",(function(t){L.DomEvent.stopPropagation(t)})),e&&this.options.collapseBtn(this),this._container},onRemove:function(){},createAlternativesContainer:function(){return L.DomUtil.create("div","leaflet-routing-alternatives-container")},setAlternatives:function(t){var e,i,n;for(this._clearAlts(),this._routes=t,e=0;e<this._routes.length;e++)i=this._routes[e],n=this._createAlternative(i,e),this._altContainer.appendChild(n),this._altElements.push(n);return this._selectRoute({route:this._routes[0],alternatives:this._routes.slice(1)}),this},show:function(){L.DomUtil.removeClass(this._container,"leaflet-routing-container-hide")},hide:function(){L.DomUtil.addClass(this._container,"leaflet-routing-container-hide")},_toggle:function(){this[L.DomUtil.hasClass(this._container,"leaflet-routing-container-hide")?"show":"hide"]()},_createAlternative:function(t,e){var i=L.DomUtil.create("div","leaflet-routing-alt "+this.options.alternativeClassName+(e>0?" leaflet-routing-alt-minimized "+this.options.minimizedClassName:"")),n=this.options.summaryTemplate,o=L.extend({name:t.name,distance:this._formatter.formatDistance(t.summary.totalDistance,this.options.totalDistanceRoundingSensitivity),time:this._formatter.formatTime(t.summary.totalTime)},t);return i.innerHTML="function"==typeof n?n(o):L.Util.template(n,o),L.DomEvent.addListener(i,"click",this._onAltClicked,this),this.on("routeselected",this._selectAlt,this),i.appendChild(this._createItineraryContainer(t)),i},_clearAlts:function(){for(var t=this._altContainer;t&&t.firstChild;)t.removeChild(t.firstChild);this._altElements=[]},_createItineraryContainer:function(t){var e,i,n,o,r,a,s=this._itineraryBuilder.createContainer(),l=this._itineraryBuilder.createStepsContainer();for(s.appendChild(l),e=0;e<t.instructions.length;e++)i=t.instructions[e],r=this._formatter.formatInstruction(i,e),o=this._formatter.formatDistance(i.distance),a=this._formatter.getIconName(i,e),n=this._itineraryBuilder.createStep(r,o,a,l),i.index&&this._addRowListeners(n,t.coordinates[i.index]);return s},_addRowListeners:function(t,e){L.DomEvent.addListener(t,"mouseover",(function(){this._marker=L.circleMarker(e,this.options.pointMarkerStyle).addTo(this._map)}),this),L.DomEvent.addListener(t,"mouseout",(function(){this._marker&&(this._map.removeLayer(this._marker),delete this._marker)}),this),L.DomEvent.addListener(t,"click",(function(t){this._map.panTo(e),L.DomEvent.stopPropagation(t)}),this)},_onAltClicked:function(t){for(var e=t.target||window.event.srcElement;!L.DomUtil.hasClass(e,"leaflet-routing-alt");)e=e.parentElement;var i=this._altElements.indexOf(e),n=this._routes.slice(),o=n.splice(i,1)[0];this.fire("routeselected",{route:o,alternatives:n})},_selectAlt:function(t){var e,i,n,o;if(e=this._altElements[t.route.routesIndex],L.DomUtil.hasClass(e,"leaflet-routing-alt-minimized"))for(i=0;i<this._altElements.length;i++)n=this._altElements[i],o=i===t.route.routesIndex?"removeClass":"addClass",L.DomUtil[o](n,"leaflet-routing-alt-minimized"),this.options.minimizedClassName&&L.DomUtil[o](n,this.options.minimizedClassName),i!==t.route.routesIndex&&(n.scrollTop=0);L.DomEvent.stop(t)},_selectRoute:function(t){this._marker&&(this._map.removeLayer(this._marker),delete this._marker),this.fire("routeselected",t)}}),d=L.LayerGroup.extend({includes:void 0!==L.Evented&&L.Evented.prototype||L.Mixin.Events,options:{styles:[{color:"black",opacity:.15,weight:9},{color:"white",opacity:.8,weight:6},{color:"red",opacity:1,weight:2}],missingRouteStyles:[{color:"black",opacity:.15,weight:7},{color:"white",opacity:.6,weight:4},{color:"gray",opacity:.8,weight:2,dashArray:"7,12"}],addWaypoints:!0,extendToWaypoints:!0,missingRouteTolerance:10},initialize:function(t,e){L.setOptions(this,e),L.LayerGroup.prototype.initialize.call(this,e),this._route=t,this.options.extendToWaypoints&&this._extendToWaypoints(),this._addSegment(t.coordinates,this.options.styles,this.options.addWaypoints)},getBounds:function(){return L.latLngBounds(this._route.coordinates)},_findWaypointIndices:function(){var t,e=this._route.inputWaypoints,i=[];for(t=0;t<e.length;t++)i.push(this._findClosestRoutePoint(e[t].latLng));return i},_findClosestRoutePoint:function(t){var e,i,n,o=Number.MAX_VALUE;for(i=this._route.coordinates.length-1;i>=0;i--)(n=t.distanceTo(this._route.coordinates[i]))<o&&(e=i,o=n);return e},_extendToWaypoints:function(){var t,e,i,n=this._route.inputWaypoints,o=this._getWaypointIndices();for(t=0;t<n.length;t++)e=n[t].latLng,i=L.latLng(this._route.coordinates[o[t]]),e.distanceTo(i)>this.options.missingRouteTolerance&&this._addSegment([e,i],this.options.missingRouteStyles)},_addSegment:function(t,e,i){var n,o;for(n=0;n<e.length;n++)o=L.polyline(t,e[n]),this.addLayer(o),i&&o.on("mousedown",this._onLineTouched,this)},_findNearestWpBefore:function(t){for(var e=this._getWaypointIndices(),i=e.length-1;i>=0&&e[i]>t;)i--;return i},_onLineTouched:function(t){var e=this._findNearestWpBefore(this._findClosestRoutePoint(t.latlng));this.fire("linetouched",{afterIndex:e,latlng:t.latlng}),L.DomEvent.stop(t)},_getWaypointIndices:function(){return this._wpIndices||(this._wpIndices=this._route.waypointIndices||this._findWaypointIndices()),this._wpIndices}}),h=L.Class.extend({options:{timeout:500,blurTimeout:100,noResultsMessage:"No results found."},initialize:function(t,e,i,n){L.setOptions(this,n),this._elem=t,this._resultFn=n.resultFn?L.Util.bind(n.resultFn,n.resultContext):null,this._autocomplete=n.autocompleteFn?L.Util.bind(n.autocompleteFn,n.autocompleteContext):null,this._selectFn=L.Util.bind(e,i),this._container=L.DomUtil.create("div","leaflet-routing-geocoder-result"),this._resultTable=L.DomUtil.create("table","",this._container),L.DomEvent.addListener(this._elem,"input",this._keyPressed,this),L.DomEvent.addListener(this._elem,"keypress",this._keyPressed,this),L.DomEvent.addListener(this._elem,"keydown",this._keyDown,this),L.DomEvent.addListener(this._elem,"blur",(function(){this._isOpen&&this.close()}),this)},close:function(){L.DomUtil.removeClass(this._container,"leaflet-routing-geocoder-result-open"),this._isOpen=!1},_open:function(){var t=this._elem.getBoundingClientRect();if(!this._container.parentElement){var e=void 0!==window.pageXOffset?window.pageXOffset:(document.documentElement||document.body.parentNode||document.body).scrollLeft,i=void 0!==window.pageYOffset?window.pageYOffset:(document.documentElement||document.body.parentNode||document.body).scrollTop;this._container.style.left=t.left+e+"px",this._container.style.top=t.bottom+i+"px",this._container.style.width=t.right-t.left+"px",document.body.appendChild(this._container)}L.DomUtil.addClass(this._container,"leaflet-routing-geocoder-result-open"),this._isOpen=!0},_setResults:function(t){var e,i,n,o;for(delete this._selection,this._results=t;this._resultTable.firstChild;)this._resultTable.removeChild(this._resultTable.firstChild);for(e=0;e<t.length;e++)(i=L.DomUtil.create("tr","",this._resultTable)).setAttribute("data-result-index",e),n=L.DomUtil.create("td","",i),o=this.options.formatGeocoderResult?this.options.formatGeocoderResult(t[e]):document.createTextNode(t[e].name),n.appendChild(o),L.DomEvent.addListener(n,"mousedown",L.DomEvent.preventDefault),L.DomEvent.addListener(n,"click",this._createClickListener(t[e]));e||(i=L.DomUtil.create("tr","",this._resultTable),(n=L.DomUtil.create("td","leaflet-routing-geocoder-no-results",i)).innerHTML=this.options.noResultsMessage),this._open(),t.length>0&&this._select(1)},_createClickListener:function(t){var e=this._resultSelected(t);return L.bind((function(){this._elem.blur(),e()}),this)},_resultSelected:function(t){return L.bind((function(){this.close(),this._elem.value=t.name,this._lastCompletedText=t.name,this._selectFn(t)}),this)},_keyPressed:function(t){var e;return this._isOpen&&13===t.keyCode&&this._selection?(e=parseInt(this._selection.getAttribute("data-result-index"),10),this._resultSelected(this._results[e])(),void L.DomEvent.preventDefault(t)):13===t.keyCode?(L.DomEvent.preventDefault(t),void this._complete(this._resultFn,!0)):this._autocomplete&&document.activeElement===this._elem?(this._timer&&clearTimeout(this._timer),void(this._timer=setTimeout(L.Util.bind((function(){this._complete(this._autocomplete)}),this),this.options.timeout))):void this._unselect()},_select:function(t){var e=this._selection;e&&(L.DomUtil.removeClass(e.firstChild,"leaflet-routing-geocoder-selected"),e=e[t>0?"nextSibling":"previousSibling"]),e||(e=this._resultTable[t>0?"firstChild":"lastChild"]),e&&(L.DomUtil.addClass(e.firstChild,"leaflet-routing-geocoder-selected"),this._selection=e)},_unselect:function(){this._selection&&L.DomUtil.removeClass(this._selection.firstChild,"leaflet-routing-geocoder-selected"),delete this._selection},_keyDown:function(t){if(this._isOpen)switch(t.keyCode){case 27:return this.close(),void L.DomEvent.preventDefault(t);case 38:return this._select(-1),void L.DomEvent.preventDefault(t);case 40:return this._select(1),void L.DomEvent.preventDefault(t)}},_complete:function(t,e){var i=this._elem.value;function n(t){this._lastCompletedText=i,e&&1===t.length?this._resultSelected(t[0])():this._setResults(t)}i&&(i!==this._lastCompletedText?t(i,n,this):e&&n.call(this,this._results))}});const u=t=>{t.setSelectionRange?t.setSelectionRange(0,9999):t.select()};var c=L.Class.extend({includes:void 0!==L.Evented&&L.Evented.prototype||L.Mixin.Events,options:{createGeocoder:function(t,e,i){var n=L.DomUtil.create("div","leaflet-routing-geocoder"),o=L.DomUtil.create("input","",n),r=i.addWaypoints?L.DomUtil.create("span","leaflet-routing-remove-waypoint",n):void 0;return o.disabled=!i.addWaypoints,{container:n,input:o,closeButton:r}},geocoderPlaceholder:function(t,e,i){var n=new r(i.options.language).localize("ui");return 0===t?n.startPlaceholder:t<e-1?L.Util.template(n.viaPlaceholder,{viaNumber:t}):n.endPlaceholder},geocoderClass:function(){return""},waypointNameFallback:function(t){var e=t.lat<0?"S":"N",i=t.lng<0?"W":"E";return e+(Math.round(1e4*Math.abs(t.lat))/1e4).toString()+", "+i+(Math.round(1e4*Math.abs(t.lng))/1e4).toString()},maxGeocoderTolerance:200,autocompleteOptions:{},language:"en"},initialize:function(t,e,i,n){L.setOptions(this,n);var o=this.options.createGeocoder(e,i,this.options),r=o.closeButton,a=o.input;a.setAttribute("placeholder",this.options.geocoderPlaceholder(e,i,this)),a.className=this.options.geocoderClass(e,i),this._element=o,this._waypoint=t,this.update(),a.value=t.name,L.DomEvent.addListener(a,"click",(function(){u(this)}),a),r&&L.DomEvent.addListener(r,"click",(function(){this.fire("delete",{waypoint:this._waypoint})}),this),"function"==typeof this.options.formatGeocoderResult&&(this.options.autocompleteOptions.formatGeocoderResult=this.options.formatGeocoderResult),new h(a,(function(e){a.value=e.name,t.name=e.name,t.latLng=e.center,this.fire("geocoded",{waypoint:t,value:e})}),this,L.extend({resultFn:this.options.geocoder.geocode,resultContext:this.options.geocoder,autocompleteFn:this.options.geocoder.suggest,autocompleteContext:this.options.geocoder},this.options.autocompleteOptions))},getContainer:function(){return this._element.container},setValue:function(t){this._element.input.value=t},update:function(t){var e,i=this._waypoint;i.name=i.name||"",!i.latLng||!t&&i.name||(e=this.options.waypointNameFallback(i.latLng),this.options.geocoder&&this.options.geocoder.reverse?this.options.geocoder.reverse(i.latLng,67108864,(function(t){t.length>0&&t[0].center.distanceTo(i.latLng)<this.options.maxGeocoderTolerance?i.name=t[0].name:i.name=e,this._update()}),this):(i.name=e,this._update()))},focus:function(){var t=this._element.input;t.focus(),u(t)},_update:function(){var t=this._waypoint,e=t&&t.name?t.name:"";this.setValue(e),this.fire("reversegeocoded",{waypoint:t,value:e})}}),p=L.Class.extend({options:{allowUTurn:!1},initialize:function(t,e,i){L.Util.setOptions(this,i),this.latLng=L.latLng(t),this.name=e}});var m=(L.Layer||L.Class).extend({includes:void 0!==L.Evented&&L.Evented.prototype||L.Mixin.Events,options:{dragStyles:[{color:"black",opacity:.15,weight:9},{color:"white",opacity:.8,weight:6},{color:"red",opacity:1,weight:2,dashArray:"7,12"}],draggableWaypoints:!0,routeWhileDragging:!1,addWaypoints:!0,reverseWaypoints:!1,addButtonClassName:"",language:"en",markerOptions:{},createGeocoderElement:function(t,e,i,n){return new c(t,e,i,n)},createMarker:function(t,e,i,n={}){const o={draggable:this.draggableWaypoints,...n};return L.marker(e.latLng,o)},geocodersClassName:""},initialize:function(t,e){L.Util.setOptions(this,e),this._waypoints=[],this.setWaypoints(t)},isReady:function(){var t;for(t=0;t<this._waypoints.length;t++)if(!this._waypoints[t].latLng)return!1;return!0},getWaypoints:function(){var t,e=[];for(t=0;t<this._waypoints.length;t++)e.push(this._waypoints[t]);return e},setWaypoints:function(t){var e=[0,this._waypoints.length].concat(t);return this.spliceWaypoints.apply(this,e),this},spliceWaypoints:function(){var t,e=[arguments[0],arguments[1]];for(t=2;t<arguments.length;t++)e.push(arguments[t]&&arguments[t].hasOwnProperty("latLng")?arguments[t]:new p(arguments[t]));for([].splice.apply(this._waypoints,e);this._waypoints.length<2;)this.spliceWaypoints(this._waypoints.length,0,null);this._updateMarkers(),this._fireChanged.apply(this,e)},onAdd:function(t){this._map=t,this._updateMarkers()},onRemove:function(){var t;if(this._removeMarkers(),this._newWp)for(t=0;t<this._newWp.lines.length;t++)this._map.removeLayer(this._newWp.lines[t]);delete this._map},createGeocoders:function(){var t,e,i=L.DomUtil.create("div","leaflet-routing-geocoders "+this.options.geocodersClassName),n=this._waypoints;return this._geocoderContainer=i,this._geocoderElems=[],this.options.addWaypoints&&((t=L.DomUtil.create("button","leaflet-routing-add-waypoint "+this.options.addButtonClassName,i)).setAttribute("type","button"),L.DomEvent.addListener(t,"click",(function(){this.spliceWaypoints(n.length,0,null)}),this)),this.options.reverseWaypoints&&((e=L.DomUtil.create("button","leaflet-routing-reverse-waypoints",i)).setAttribute("type","button"),L.DomEvent.addListener(e,"click",(function(){this._waypoints.reverse(),this.setWaypoints(this._waypoints)}),this)),this._updateGeocoders(),this.on("waypointsspliced",this._updateGeocoders),i},_createGeocoder:function(t){var e=this.options.createGeocoderElement(this._waypoints[t],t,this._waypoints.length,this.options);return e.on("delete",(function(){t>0||this._waypoints.length>2?this.spliceWaypoints(t,1):this.spliceWaypoints(t,1,new p)}),this).on("geocoded",(function(e){this._updateMarkers(),this._fireChanged(),this._focusGeocoder(t+1),this.fire("waypointgeocoded",{waypointIndex:t,waypoint:e.waypoint})}),this).on("reversegeocoded",(function(e){this.fire("waypointgeocoded",{waypointIndex:t,waypoint:e.waypoint})}),this),e},_updateGeocoders:function(){var t,e,i=[];for(t=0;t<this._geocoderElems.length;t++)this._geocoderContainer.removeChild(this._geocoderElems[t].getContainer());for(t=this._waypoints.length-1;t>=0;t--)e=this._createGeocoder(t),this._geocoderContainer.insertBefore(e.getContainer(),this._geocoderContainer.firstChild),i.push(e);this._geocoderElems=i.reverse()},_removeMarkers:function(){var t;if(this._markers)for(t=0;t<this._markers.length;t++)this._markers[t]&&this._map.removeLayer(this._markers[t]);this._markers=[]},_updateMarkers:function(){var t,e;if(this._map)for(this._removeMarkers(),t=0;t<this._waypoints.length;t++)this._waypoints[t].latLng?(e=this.options.createMarker(t,this._waypoints[t],this._waypoints.length,this.options.markerOptions))&&(e.addTo(this._map),this.options.draggableWaypoints&&this._hookWaypointEvents(e,t)):e=null,this._markers.push(e)},_fireChanged:function(){this.fire("waypointschanged",{waypoints:this.getWaypoints()}),arguments.length>=2&&this.fire("waypointsspliced",{index:Array.prototype.shift.call(arguments),nRemoved:Array.prototype.shift.call(arguments),added:arguments})},_hookWaypointEvents:function(t,e,i){var n,o,r=function(t){return i?t.latlng:t.target.getLatLng()},a=L.bind((function(t){this.fire("waypointdragstart",{index:e,latlng:r(t)})}),this),s=L.bind((function(t){this._waypoints[e].latLng=r(t),this.fire("waypointdrag",{index:e,latlng:r(t)})}),this),l=L.bind((function(t){this._waypoints[e].latLng=r(t),this._waypoints[e].name="",this._geocoderElems&&this._geocoderElems[e].update(!0),this.fire("waypointdragend",{index:e,latlng:r(t)}),this._fireChanged()}),this);i?(n=L.bind((function(t){this._markers[e].setLatLng(t.latlng),s(t)}),this),o=L.bind((function(t){this._map.dragging.enable(),this._map.off("mouseup",o),this._map.off("mousemove",n),l(t)}),this),this._map.dragging.disable(),this._map.on("mousemove",n),this._map.on("mouseup",o),a({latlng:this._waypoints[e].latLng})):(t.on("dragstart",a),t.on("drag",s),t.on("dragend",l))},dragNewWaypoint:function(t){var e=t.afterIndex+1;this.options.routeWhileDragging?(this.spliceWaypoints(e,0,t.latlng),this._hookWaypointEvents(this._markers[e],e,!0)):this._dragNewWaypoint(e,t.latlng)},_dragNewWaypoint:function(t,e){var i,n=new p(e),o=this._waypoints[t-1],r=this._waypoints[t],a=this.options.createMarker(t,n,this._waypoints.length+1,this.options.markerOptions),s=[],l=this._map.dragging.enabled(),d=L.bind((function(t){var e,i;for(a&&a.setLatLng(t.latlng),e=0;e<s.length;e++)(i=s[e].getLatLngs()).splice(1,1,t.latlng),s[e].setLatLngs(i);L.DomEvent.stop(t)}),this),h=L.bind((function(e){var i;for(a&&this._map.removeLayer(a),i=0;i<s.length;i++)this._map.removeLayer(s[i]);this._map.off("mousemove",d),this._map.off("mouseup",h),this.spliceWaypoints(t,0,e.latlng),l&&this._map.dragging.enable(),L.DomEvent.stop(e)}),this);for(a&&a.addTo(this._map),i=0;i<this.options.dragStyles.length;i++)s.push(L.polyline([o.latLng,e,r.latLng],this.options.dragStyles[i]).addTo(this._map));l&&this._map.dragging.disable(),this._map.on("mousemove",d),this._map.on("mouseup",h)},_focusGeocoder:function(t){this._geocoderElems[t]?this._geocoderElems[t].focus():document.activeElement.blur()}});const f=i("v5");var g=L.Class.extend({options:{serviceUrl:"https://router.project-osrm.org/route/v1",profile:"driving",timeout:3e4,routingOptions:{alternatives:!0,steps:!0},polylinePrecision:5,useHints:!0,suppressDemoServerWarning:!1,language:"en"},initialize:function(t){L.Util.setOptions(this,t),this._hints={locations:{}},!this.options.suppressDemoServerWarning&&this.options.serviceUrl.indexOf("//router.project-osrm.org")>=0&&console.warn("You are using OSRM's demo server. Please note that it is **NOT SUITABLE FOR PRODUCTION USE**.\nRefer to the demo server's usage policy: https://github.com/Project-OSRM/osrm-backend/wiki/Api-usage-policy\n\nTo change, set the serviceUrl option.\n\nPlease do not report issues with this server to neither Leaflet Routing Machine or OSRM - it's for\ndemo only, and will sometimes not be available, or work in unexpected ways.\n\nPlease set up your own OSRM server, or use a paid service provider for production.")},route:function(e,i,n,o){var r,a,s,l,d,h=!1,u=[];for(o=L.extend({},this.options.routingOptions,o),r=this.buildRouteUrl(e,o),this.options.requestParameters&&(r+=L.Util.getParamString(this.options.requestParameters,r)),a=setTimeout((function(){h=!0,i.call(n||i,{status:-1,message:"OSRM request timed out."})}),this.options.timeout),l=0;l<e.length;l++)s=e[l],u.push(new p(s.latLng,s.name,s.options));return d=t(r,L.bind((function(t,e){var s,l={};if(clearTimeout(a),h)d.abort();else{if(t){var c=t.type+(t.target&&t.target.status?" HTTP "+t.target.status+": "+t.target.statusText:"");if(t.responseText)try{(s=JSON.parse(t.responseText)).message&&(c=s.message)}catch(t){}l.message="HTTP request failed: "+c,l.url=r,l.status=-1,l.target=t}else try{s=JSON.parse(e.responseText);try{return this._routeDone(s,u,o,i,n)}catch(t){l.status=-3,l.message=t.toString()}}catch(t){l.status=-2,l.message="Error parsing OSRM response: "+t.toString()}i.call(n||i,l)}}),this))},requiresMoreDetail:function(t,e,i){if(!t.properties.isSimplified)return!1;var n,o=t.inputWaypoints;for(n=0;n<o.length;++n)if(!i.contains(o[n].latLng))return!0;return!1},_routeDone:function(t,e,i,n,o){var r,a,s,l=[];if(o=o||n,"Ok"===t.code){for(r=this._toWaypoints(e,t.waypoints),a=0;a<t.routes.length;a++)(s=this._convertRoute(t.routes[a])).inputWaypoints=e,s.waypoints=r,s.properties={isSimplified:!i||!i.geometryOnly||i.simplifyGeometry},l.push(s);this._saveHintData(t.waypoints,e),n.call(o,null,l)}else n.call(o,{status:t.code})},_convertRoute:function(t){var e,i,n,o,r,a,s,l,d,h={name:"",coordinates:[],instructions:[],summary:{totalDistance:t.distance,totalTime:t.duration}},u=[],c=[],p=0,m=t.legs.length,g=t.legs[0].steps.length>0;for(d=this.options.stepToText?this.options.stepToText:L.bind(f.compile,f,this.options.language),e=0;e<m;e++)for(n=t.legs[e],u.push(n.summary&&n.summary.charAt(0).toUpperCase()+n.summary.substring(1)),i=0;i<n.steps.length;i++)o=n.steps[i],r=this._decodePolyline(o.geometry),h.coordinates.push.apply(h.coordinates,r),a=this._maneuverToInstructionType(o.maneuver,e===m-1),s=this._maneuverToModifier(o.maneuver),l=d(o,{legCount:m,legIndex:e}),a&&((0==e&&"depart"==o.maneuver.type||"arrive"==o.maneuver.type)&&c.push(p),h.instructions.push({type:a,distance:o.distance,time:o.duration,road:o.name,direction:this._bearingToDirection(o.maneuver.bearing_after),exit:o.maneuver.exit,index:p,mode:o.mode,modifier:s,text:l})),p+=r.length;return h.name=u.join(", "),g?h.waypointIndices=c:h.coordinates=this._decodePolyline(t.geometry),h},_bearingToDirection:function(t){return["N","NE","E","SE","S","SW","W","NW"][Math.round(t/45)%8]},_maneuverToInstructionType:function(t,e){switch(t.type){case"new name":return"Continue";case"depart":return"Head";case"arrive":return e?"DestinationReached":"WaypointReached";case"roundabout":case"rotary":return"Roundabout";case"merge":case"fork":case"on ramp":case"off ramp":case"end of road":return this._camelCase(t.type);default:return this._camelCase(t.modifier)}},_maneuverToModifier:function(t){var e=t.modifier;switch(t.type){case"merge":case"fork":case"on ramp":case"off ramp":case"end of road":e=this._leftOrRight(e)}return e&&this._camelCase(e)},_camelCase:function(t){for(var e=t.split(" "),i="",n=0,o=e.length;n<o;n++)i+=e[n].charAt(0).toUpperCase()+e[n].substring(1);return i},_leftOrRight:function(t){return t.indexOf("left")>=0?"Left":"Right"},_decodePolyline:function(t){var i,n=e.decode(t,this.options.polylinePrecision),o=new Array(n.length);for(i=n.length-1;i>=0;i--)o[i]=L.latLng(n[i]);return o},_toWaypoints:function(t,e){var i,n,o=[];for(i=0;i<e.length;i++)n=e[i].location,o.push(new p(L.latLng(n[1],n[0]),t[i].name,t[i].options));return o},buildRouteUrl:function(t,e){for(var i,n=[],o=[],r=0;r<t.length;r++)i=t[r].latLng,n.push(i.lng+","+i.lat),o.push(this._hints.locations[this._locationKey(i)]||"");return!0,this.options.serviceUrl+"/"+this.options.profile+"/"+n.join(";")+"?"+(e.geometryOnly?e.simplifyGeometry?"":"overview=full":"overview=false")+"&alternatives="+(!0).toString()+"&steps="+true.toString()+(this.options.useHints?"&hints="+o.join(";"):"")+(e.allowUTurns?"&continue_straight="+!e.allowUTurns:"")},_locationKey:function(t){return t.lat+","+t.lng},_saveHintData:function(t,e){var i;this._hints={locations:{}};for(var n=t.length-1;n>=0;n--)i=e[n].latLng,this._hints.locations[this._locationKey(i)]=t[n].hint}}),_=l.extend({options:{fitSelectedRoutes:"smart",routeLine:function(t,e){return new d(t,e)},autoRoute:!0,routeWhileDragging:!1,routeDragInterval:500,waypointMode:"connect",showAlternatives:!1,markerOptions:{},defaultErrorHandler:function(t){console.error("Routing error:",t.error)}},initialize:function(t){L.Util.setOptions(this,t),this._router=this.options.router||new g(t),this._plan=this.options.plan||new m(this.options.waypoints,t),this._requestCount=0,l.prototype.initialize.call(this,t),this.on("routeselected",this._routeSelected,this),this.options.defaultErrorHandler&&this.on("routingerror",this.options.defaultErrorHandler),this._plan.on("waypointschanged",this._onWaypointsChanged,this),t.routeWhileDragging&&this._setupRouteDragging()},_onZoomEnd:function(){if(this._selectedRoute&&this._router.requiresMoreDetail){var t=this._map;this._router.requiresMoreDetail(this._selectedRoute,t.getZoom(),t.getBounds())&&this.route({callback:L.bind((function(t,e){var i;if(!t){for(i=0;i<e.length;i++)this._routes[i].properties=e[i].properties;this._updateLineCallback(t,e)}}),this),simplifyGeometry:!1,geometryOnly:!0})}},onAdd:function(t){this.options.autoRoute&&this.route();var e=l.prototype.onAdd.call(this,t);return this._map=t,this._map.addLayer(this._plan),this._map.on("zoomend",this._onZoomEnd,this),this._plan.options.geocoder&&e.insertBefore(this._plan.createGeocoders(),e.firstChild),e},onRemove:function(t){if(t.off("zoomend",this._onZoomEnd,this),this._line&&t.removeLayer(this._line),t.removeLayer(this._plan),this._alternatives&&this._alternatives.length>0)for(var e=0,i=this._alternatives.length;e<i;e++)t.removeLayer(this._alternatives[e]);return l.prototype.onRemove.call(this,t)},getWaypoints:function(){return this._plan.getWaypoints()},setWaypoints:function(t){return this._plan.setWaypoints(t),this},spliceWaypoints:function(){var t=this._plan.spliceWaypoints.apply(this._plan,arguments);return t},getPlan:function(){return this._plan},getRouter:function(){return this._router},_routeSelected:function(t){var e=this._selectedRoute=t.route,i=this.options.showAlternatives&&t.alternatives,n=this.options.fitSelectedRoutes,o="smart"===n&&!this._waypointsVisible()||"smart"!==n&&n;this._updateLines({route:e,alternatives:i}),o&&this._map.fitBounds(this._line.getBounds()),"snap"===this.options.waypointMode&&(this._plan.off("waypointschanged",this._onWaypointsChanged,this),this.setWaypoints(e.waypoints),this._plan.on("waypointschanged",this._onWaypointsChanged,this))},_waypointsVisible:function(){var t,e,i,n,o,r=this.getWaypoints();try{for(t=this._map.getSize(),n=0;n<r.length;n++)o=this._map.latLngToLayerPoint(r[n].latLng),e?e.extend(o):e=L.bounds([o]);return((i=e.getSize()).x>t.x/5||i.y>t.y/5)&&this._waypointsInViewport()}catch(t){return!1}},_waypointsInViewport:function(){var t,e,i=this.getWaypoints();try{t=this._map.getBounds()}catch(t){return!1}for(e=0;e<i.length;e++)if(t.contains(i[e].latLng))return!0;return!1},_updateLines:function(t){var e=void 0===this.options.addWaypoints||this.options.addWaypoints;this._clearLines(),this._alternatives=[],t.alternatives&&t.alternatives.forEach((function(t,e){this._alternatives[e]=this.options.routeLine(t,L.extend({isAlternative:!0},this.options.altLineOptions||this.options.lineOptions)),this._alternatives[e].addTo(this._map),this._hookAltEvents(this._alternatives[e])}),this),this._line=this.options.routeLine(t.route,L.extend({addWaypoints:e,extendToWaypoints:"connect"===this.options.waypointMode},this.options.lineOptions)),this._line.addTo(this._map),this._hookEvents(this._line)},_hookEvents:function(t){t.on("linetouched",(function(t){t.afterIndex<this.getWaypoints().length-1&&this._plan.dragNewWaypoint(t)}),this)},_hookAltEvents:function(t){t.on("linetouched",(function(t){var e=this._routes.slice(),i=e.splice(t.target._route.routesIndex,1)[0];this.fire("routeselected",{route:i,alternatives:e})}),this)},_onWaypointsChanged:function(t){this.options.autoRoute&&this.route({}),this._plan.isReady()||(this._clearLines(),this._clearAlts()),this.fire("waypointschanged",{waypoints:t.waypoints})},_setupRouteDragging:function(){var t,e=0;this._plan.on("waypointdrag",L.bind((function(i){t=i.waypoints,e||(e=setTimeout(L.bind((function(){this.route({waypoints:t,geometryOnly:!0,callback:L.bind(this._updateLineCallback,this)}),e=void 0}),this),this.options.routeDragInterval))}),this)),this._plan.on("waypointdragend",(function(){e&&(clearTimeout(e),e=void 0),this.route()}),this)},_updateLineCallback:function(t,e){if(t)"abort"!==t.type&&this._clearLines();else{var i=(e=e.slice()).splice(this._selectedRoute.routesIndex,1)[0];this._updateLines({route:i,alternatives:this.options.showAlternatives?e:[]})}},route:function(t){var e,i=++this._requestCount;this._pendingRequest&&this._pendingRequest.abort&&(this._pendingRequest.abort(),this._pendingRequest=null),t=t||{},this._plan.isReady()&&(this.options.useZoomParameter&&(t.z=this._map&&this._map.getZoom()),e=t&&t.waypoints||this._plan.getWaypoints(),this.fire("routingstart",{waypoints:e}),this._pendingRequest=this._router.route(e,(function(n,o){if(this._pendingRequest=null,t.callback)return t.callback.call(this,n,o);if(i===this._requestCount){if(this._clearLines(),this._clearAlts(),n&&"abort"!==n.type)return void this.fire("routingerror",{error:n});if(o.forEach((function(t,e){t.routesIndex=e})),t.geometryOnly){var r=o.splice(0,1)[0];this._routeSelected({route:r,alternatives:o})}else this.fire("routesfound",{waypoints:e,routes:o}),this.setAlternatives(o)}}),this,t))},_clearLines:function(){if(this._line&&this._map&&(this._map.removeLayer(this._line),delete this._line),this._alternatives&&this._alternatives.length){for(var t in this._alternatives)this._map.removeLayer(this._alternatives[t]);this._alternatives=[]}}}),v=g.extend({options:{serviceUrl:"https://api.mapbox.com/directions/v5",profile:"mapbox/driving",useHints:!1},initialize:function(t,e){L.Routing.OSRMv1.prototype.initialize.call(this,e),this.options.requestParameters=this.options.requestParameters||{},this.options.requestParameters.access_token=t}}),y=L.Control.extend({options:{header:"Routing error",formatMessage:function(t){return t.status<0?"Calculating the route caused an error. Technical description follows: <code><pre>"+t.message+"</pre></code":"The route could not be calculated. "+t.message}},initialize:function(t,e){L.Control.prototype.initialize.call(this,e),t.on("routingerror",L.bind((function(t){this._element&&(this._ele