UNPKG

leaflet-routing-machine

Version:
1,469 lines (1,383 loc) 839 kB
(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(_dereq_,module,exports){ function corslite(url, callback, cors) { var sent = false; if (typeof window.XMLHttpRequest === 'undefined') { return callback(Error('Browser not supported')); } if (typeof cors === 'undefined') { var m = url.match(/^\s*https?:\/\/[^\/]*/); cors = m && (m[0] !== location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : '')); } var x = new window.XMLHttpRequest(); function isSuccessful(status) { return status >= 200 && status < 300 || status === 304; } if (cors && !('withCredentials' in x)) { // IE8-9 x = new window.XDomainRequest(); // Ensure callback is never called synchronously, i.e., before // x.send() returns (this has been observed in the wild). // See https://github.com/mapbox/mapbox.js/issues/472 var original = callback; callback = function() { if (sent) { original.apply(this, arguments); } else { var that = this, args = arguments; setTimeout(function() { original.apply(that, args); }, 0); } } } function loaded() { if ( // XDomainRequest x.status === undefined || // modern browsers isSuccessful(x.status)) callback.call(x, null, x); else callback.call(x, x, null); } // Both `onreadystatechange` and `onload` can fire. `onreadystatechange` // has [been supported for longer](http://stackoverflow.com/a/9181508/229001). if ('onload' in x) { x.onload = loaded; } else { x.onreadystatechange = function readystate() { if (x.readyState === 4) { loaded(); } }; } // Call the callback with the XMLHttpRequest object as an error and prevent // it from ever being called again by reassigning it to `noop` x.onerror = function error(evt) { // XDomainRequest provides no evt parameter callback.call(this, evt || true, null); callback = function() { }; }; // IE9 must have onprogress be set to a unique function. x.onprogress = function() { }; x.ontimeout = function(evt) { callback.call(this, evt, null); callback = function() { }; }; x.onabort = function(evt) { callback.call(this, evt, null); callback = function() { }; }; // GET is the only supported HTTP Verb by XDomainRequest and is the // only one supported here. x.open('GET', url, true); // Send the request. Sending data is not supported. x.send(null); sent = true; return x; } if (typeof module !== 'undefined') module.exports = corslite; },{}],2:[function(_dereq_,module,exports){ 'use strict'; /** * Based off of [the offical Google document](https://developers.google.com/maps/documentation/utilities/polylinealgorithm) * * Some parts from [this implementation](http://facstaff.unca.edu/mcmcclur/GoogleMaps/EncodePolyline/PolylineEncoder.js) * by [Mark McClure](http://facstaff.unca.edu/mcmcclur/) * * @module polyline */ var polyline = {}; function py2_round(value) { // Google's polyline algorithm uses the same rounding strategy as Python 2, which is different from JS for negative values return Math.floor(Math.abs(value) + 0.5) * Math.sign(value); } function encode(current, previous, factor) { current = py2_round(current * factor); previous = py2_round(previous * factor); var coordinate = current - previous; coordinate <<= 1; if (current - previous < 0) { coordinate = ~coordinate; } var output = ''; while (coordinate >= 0x20) { output += String.fromCharCode((0x20 | (coordinate & 0x1f)) + 63); coordinate >>= 5; } output += String.fromCharCode(coordinate + 63); return output; } /** * Decodes to a [latitude, longitude] coordinates array. * * This is adapted from the implementation in Project-OSRM. * * @param {String} str * @param {Number} precision * @returns {Array} * * @see https://github.com/Project-OSRM/osrm-frontend/blob/master/WebContent/routing/OSRM.RoutingGeometry.js */ polyline.decode = function(str, precision) { var index = 0, lat = 0, lng = 0, coordinates = [], shift = 0, result = 0, byte = null, latitude_change, longitude_change, factor = Math.pow(10, precision || 5); // Coordinates have variable length when encoded, so just keep // track of whether we've hit the end of the string. In each // loop iteration, a single coordinate is decoded. while (index < str.length) { // Reset shift, result, and byte byte = null; shift = 0; result = 0; do { byte = str.charCodeAt(index++) - 63; result |= (byte & 0x1f) << shift; shift += 5; } while (byte >= 0x20); latitude_change = ((result & 1) ? ~(result >> 1) : (result >> 1)); shift = result = 0; do { byte = str.charCodeAt(index++) - 63; result |= (byte & 0x1f) << shift; shift += 5; } while (byte >= 0x20); longitude_change = ((result & 1) ? ~(result >> 1) : (result >> 1)); lat += latitude_change; lng += longitude_change; coordinates.push([lat / factor, lng / factor]); } return coordinates; }; /** * Encodes the given [latitude, longitude] coordinates array. * * @param {Array.<Array.<Number>>} coordinates * @param {Number} precision * @returns {String} */ polyline.encode = function(coordinates, precision) { if (!coordinates.length) { return ''; } var factor = Math.pow(10, precision || 5), output = encode(coordinates[0][0], 0, factor) + encode(coordinates[0][1], 0, factor); for (var i = 1; i < coordinates.length; i++) { var a = coordinates[i], b = coordinates[i - 1]; output += encode(a[0], b[0], factor); output += encode(a[1], b[1], factor); } return output; }; function flipped(coords) { var flipped = []; for (var i = 0; i < coords.length; i++) { flipped.push(coords[i].slice().reverse()); } return flipped; } /** * Encodes a GeoJSON LineString feature/geometry. * * @param {Object} geojson * @param {Number} precision * @returns {String} */ polyline.fromGeoJSON = function(geojson, precision) { if (geojson && geojson.type === 'Feature') { geojson = geojson.geometry; } if (!geojson || geojson.type !== 'LineString') { throw new Error('Input must be a GeoJSON LineString'); } return polyline.encode(flipped(geojson.coordinates), precision); }; /** * Decodes to a GeoJSON LineString geometry. * * @param {String} str * @param {Number} precision * @returns {Object} */ polyline.toGeoJSON = function(str, precision) { var coords = polyline.decode(str, precision); return { type: 'LineString', coordinates: flipped(coords) }; }; if (typeof module === 'object' && module.exports) { module.exports = polyline; } },{}],3:[function(_dereq_,module,exports){ var languages = _dereq_('./languages'); var instructions = languages.instructions; var grammars = languages.grammars; var abbreviations = languages.abbreviations; module.exports = function(version) { Object.keys(instructions).forEach(function(code) { if (!instructions[code][version]) { throw 'invalid version ' + version + ': ' + code + ' not supported'; } }); return { capitalizeFirstLetter: function(language, string) { return string.charAt(0).toLocaleUpperCase(language) + string.slice(1); }, ordinalize: function(language, number) { // Transform numbers to their translated ordinalized value if (!language) throw new Error('No language code provided'); return instructions[language][version].constants.ordinalize[number.toString()] || ''; }, directionFromDegree: function(language, degree) { // Transform degrees to their translated compass direction if (!language) throw new Error('No language code provided'); if (!degree && degree !== 0) { // step had no bearing_after degree, ignoring return ''; } else if (degree >= 0 && degree <= 20) { return instructions[language][version].constants.direction.north; } else if (degree > 20 && degree < 70) { return instructions[language][version].constants.direction.northeast; } else if (degree >= 70 && degree <= 110) { return instructions[language][version].constants.direction.east; } else if (degree > 110 && degree < 160) { return instructions[language][version].constants.direction.southeast; } else if (degree >= 160 && degree <= 200) { return instructions[language][version].constants.direction.south; } else if (degree > 200 && degree < 250) { return instructions[language][version].constants.direction.southwest; } else if (degree >= 250 && degree <= 290) { return instructions[language][version].constants.direction.west; } else if (degree > 290 && degree < 340) { return instructions[language][version].constants.direction.northwest; } else if (degree >= 340 && degree <= 360) { return instructions[language][version].constants.direction.north; } else { throw new Error('Degree ' + degree + ' invalid'); } }, laneConfig: function(step) { // Reduce any lane combination down to a contracted lane diagram if (!step.intersections || !step.intersections[0].lanes) throw new Error('No lanes object'); var config = []; var currentLaneValidity = null; step.intersections[0].lanes.forEach(function (lane) { if (currentLaneValidity === null || currentLaneValidity !== lane.valid) { if (lane.valid) { config.push('o'); } else { config.push('x'); } currentLaneValidity = lane.valid; } }); return config.join(''); }, getWayName: function(language, step, options) { var classes = options ? options.classes || [] : []; if (typeof step !== 'object') throw new Error('step must be an Object'); if (!language) throw new Error('No language code provided'); if (!Array.isArray(classes)) throw new Error('classes must be an Array or undefined'); var wayName; var name = step.name || ''; var ref = (step.ref || '').split(';')[0]; // Remove hacks from Mapbox Directions mixing ref into name if (name === step.ref) { // if both are the same we assume that there used to be an empty name, with the ref being filled in for it // we only need to retain the ref then name = ''; } name = name.replace(' (' + step.ref + ')', ''); // In attempt to avoid using the highway name of a way, // check and see if the step has a class which should signal // the ref should be used instead of the name. var wayMotorway = classes.indexOf('motorway') !== -1; if (name && ref && name !== ref && !wayMotorway) { var phrase = instructions[language][version].phrase['name and ref'] || instructions.en[version].phrase['name and ref']; wayName = this.tokenize(language, phrase, { name: name, ref: ref }, options); } else if (name && ref && wayMotorway && (/\d/).test(ref)) { wayName = options && options.formatToken ? options.formatToken('ref', ref) : ref; } else if (!name && ref) { wayName = options && options.formatToken ? options.formatToken('ref', ref) : ref; } else { wayName = options && options.formatToken ? options.formatToken('name', name) : name; } return wayName; }, /** * Formulate a localized text instruction from a step. * * @param {string} language Language code. * @param {object} step Step including maneuver property. * @param {object} opts Additional options. * @param {string} opts.legIndex Index of leg in the route. * @param {string} opts.legCount Total number of legs in the route. * @param {array} opts.classes List of road classes. * @param {string} opts.waypointName Name of waypoint for arrival instruction. * * @return {string} Localized text instruction. */ compile: function(language, step, opts) { if (!language) throw new Error('No language code provided'); if (languages.supportedCodes.indexOf(language) === -1) throw new Error('language code ' + language + ' not loaded'); if (!step.maneuver) throw new Error('No step maneuver provided'); var options = opts || {}; var type = step.maneuver.type; var modifier = step.maneuver.modifier; var mode = step.mode; // driving_side will only be defined in OSRM 5.14+ var side = step.driving_side; if (!type) { throw new Error('Missing step maneuver type'); } if (type !== 'depart' && type !== 'arrive' && !modifier) { throw new Error('Missing step maneuver modifier'); } if (!instructions[language][version][type]) { // Log for debugging console.log('Encountered unknown instruction type: ' + type); // eslint-disable-line no-console // OSRM specification assumes turn types can be added without // major version changes. Unknown types are to be treated as // type `turn` by clients type = 'turn'; } // Use special instructions if available, otherwise `defaultinstruction` var instructionObject; if (instructions[language][version].modes[mode]) { instructionObject = instructions[language][version].modes[mode]; } else { // omit side from off ramp if same as driving_side // note: side will be undefined if the input is from OSRM <5.14 // but the condition should still evaluate properly regardless var omitSide = type === 'off ramp' && modifier.indexOf(side) >= 0; if (instructions[language][version][type][modifier] && !omitSide) { instructionObject = instructions[language][version][type][modifier]; } else { instructionObject = instructions[language][version][type].default; } } // Special case handling var laneInstruction; switch (type) { case 'use lane': laneInstruction = instructions[language][version].constants.lanes[this.laneConfig(step)]; if (!laneInstruction) { // If the lane combination is not found, default to continue straight instructionObject = instructions[language][version]['use lane'].no_lanes; } break; case 'rotary': case 'roundabout': if (step.rotary_name && step.maneuver.exit && instructionObject.name_exit) { instructionObject = instructionObject.name_exit; } else if (step.rotary_name && instructionObject.name) { instructionObject = instructionObject.name; } else if (step.maneuver.exit && instructionObject.exit) { instructionObject = instructionObject.exit; } else { instructionObject = instructionObject.default; } break; default: // NOOP, since no special logic for that type } // Decide way_name with special handling for name and ref var wayName = this.getWayName(language, step, options); // Decide which instruction string to use // Destination takes precedence over name var instruction; if (step.destinations && step.exits && instructionObject.exit_destination) { instruction = instructionObject.exit_destination; } else if (step.destinations && instructionObject.destination) { instruction = instructionObject.destination; } else if (step.exits && instructionObject.exit) { instruction = instructionObject.exit; } else if (wayName && instructionObject.name) { instruction = instructionObject.name; } else if (options.waypointName && instructionObject.named) { instruction = instructionObject.named; } else { instruction = instructionObject.default; } var destinations = step.destinations && step.destinations.split(': '); var destinationRef = destinations && destinations[0].split(',')[0]; var destination = destinations && destinations[1] && destinations[1].split(',')[0]; var firstDestination; if (destination && destinationRef) { firstDestination = destinationRef + ': ' + destination; } else { firstDestination = destinationRef || destination || ''; } var nthWaypoint = options.legIndex >= 0 && options.legIndex !== options.legCount - 1 ? this.ordinalize(language, options.legIndex + 1) : ''; // Replace tokens // NOOP if they don't exist var replaceTokens = { 'way_name': wayName, 'destination': firstDestination, 'exit': (step.exits || '').split(';')[0], 'exit_number': this.ordinalize(language, step.maneuver.exit || 1), 'rotary_name': step.rotary_name, 'lane_instruction': laneInstruction, 'modifier': instructions[language][version].constants.modifier[modifier], 'direction': this.directionFromDegree(language, step.maneuver.bearing_after), 'nth': nthWaypoint, 'waypoint_name': options.waypointName }; return this.tokenize(language, instruction, replaceTokens, options); }, grammarize: function(language, name, grammar) { if (!language) throw new Error('No language code provided'); // Process way/rotary name with applying grammar rules if any if (name && grammar && grammars && grammars[language] && grammars[language][version]) { var rules = grammars[language][version][grammar]; if (rules) { // Pass original name to rules' regular expressions enclosed with spaces for simplier parsing var n = ' ' + name + ' '; var flags = grammars[language].meta.regExpFlags || ''; rules.forEach(function(rule) { var re = new RegExp(rule[0], flags); n = n.replace(re, rule[1]); }); return n.trim(); } } return name; }, abbreviations: abbreviations, tokenize: function(language, instruction, tokens, options) { if (!language) throw new Error('No language code provided'); // Keep this function context to use in inline function below (no arrow functions in ES4) var that = this; var startedWithToken = false; var output = instruction.replace(/\{(\w+)(?::(\w+))?\}/g, function(token, tag, grammar, offset) { var value = tokens[tag]; // Return unknown token unchanged if (typeof value === 'undefined') { return token; } value = that.grammarize(language, value, grammar); // If this token appears at the beginning of the instruction, capitalize it. if (offset === 0 && instructions[language].meta.capitalizeFirstLetter) { startedWithToken = true; value = that.capitalizeFirstLetter(language, value); } if (options && options.formatToken) { value = options.formatToken(tag, value); } return value; }) .replace(/ {2}/g, ' '); // remove excess spaces if (!startedWithToken && instructions[language].meta.capitalizeFirstLetter) { return this.capitalizeFirstLetter(language, output); } return output; } }; }; },{"./languages":4}],4:[function(_dereq_,module,exports){ // Load all language files explicitly to allow integration // with bundling tools like webpack and browserify var instructionsDa = _dereq_('./languages/translations/da.json'); var instructionsDe = _dereq_('./languages/translations/de.json'); var instructionsEn = _dereq_('./languages/translations/en.json'); var instructionsEo = _dereq_('./languages/translations/eo.json'); var instructionsEs = _dereq_('./languages/translations/es.json'); var instructionsEsEs = _dereq_('./languages/translations/es-ES.json'); var instructionsFi = _dereq_('./languages/translations/fi.json'); var instructionsFr = _dereq_('./languages/translations/fr.json'); var instructionsHe = _dereq_('./languages/translations/he.json'); var instructionsId = _dereq_('./languages/translations/id.json'); var instructionsIt = _dereq_('./languages/translations/it.json'); var instructionsKo = _dereq_('./languages/translations/ko.json'); var instructionsMy = _dereq_('./languages/translations/my.json'); var instructionsNl = _dereq_('./languages/translations/nl.json'); var instructionsNo = _dereq_('./languages/translations/no.json'); var instructionsPl = _dereq_('./languages/translations/pl.json'); var instructionsPtBr = _dereq_('./languages/translations/pt-BR.json'); var instructionsPtPt = _dereq_('./languages/translations/pt-PT.json'); var instructionsRo = _dereq_('./languages/translations/ro.json'); var instructionsRu = _dereq_('./languages/translations/ru.json'); var instructionsSv = _dereq_('./languages/translations/sv.json'); var instructionsTr = _dereq_('./languages/translations/tr.json'); var instructionsUk = _dereq_('./languages/translations/uk.json'); var instructionsVi = _dereq_('./languages/translations/vi.json'); var instructionsZhHans = _dereq_('./languages/translations/zh-Hans.json'); // Load all grammar files var grammarFr = _dereq_('./languages/grammar/fr.json'); var grammarRu = _dereq_('./languages/grammar/ru.json'); // Load all abbreviations files var abbreviationsBg = _dereq_('./languages/abbreviations/bg.json'); var abbreviationsCa = _dereq_('./languages/abbreviations/ca.json'); var abbreviationsDa = _dereq_('./languages/abbreviations/da.json'); var ebbreviationsDe = _dereq_('./languages/abbreviations/de.json'); var abbreviationsEn = _dereq_('./languages/abbreviations/en.json'); var abbreviationsEs = _dereq_('./languages/abbreviations/es.json'); var abbreviationsFr = _dereq_('./languages/abbreviations/fr.json'); var abbreviationsHe = _dereq_('./languages/abbreviations/he.json'); var abbreviationsHu = _dereq_('./languages/abbreviations/hu.json'); var abbreviationsLt = _dereq_('./languages/abbreviations/lt.json'); var abbreviationsNl = _dereq_('./languages/abbreviations/nl.json'); var abbreviationsRu = _dereq_('./languages/abbreviations/ru.json'); var abbreviationsSl = _dereq_('./languages/abbreviations/sl.json'); var abbreviationsSv = _dereq_('./languages/abbreviations/sv.json'); var abbreviationsUk = _dereq_('./languages/abbreviations/uk.json'); var abbreviationsVi = _dereq_('./languages/abbreviations/vi.json'); // Create a list of supported codes var instructions = { 'da': instructionsDa, 'de': instructionsDe, 'en': instructionsEn, 'eo': instructionsEo, 'es': instructionsEs, 'es-ES': instructionsEsEs, 'fi': instructionsFi, 'fr': instructionsFr, 'he': instructionsHe, 'id': instructionsId, 'it': instructionsIt, 'ko': instructionsKo, 'my': instructionsMy, 'nl': instructionsNl, 'no': instructionsNo, 'pl': instructionsPl, 'pt-BR': instructionsPtBr, 'pt-PT': instructionsPtPt, 'ro': instructionsRo, 'ru': instructionsRu, 'sv': instructionsSv, 'tr': instructionsTr, 'uk': instructionsUk, 'vi': instructionsVi, 'zh-Hans': instructionsZhHans }; // Create list of supported grammar var grammars = { 'fr': grammarFr, 'ru': grammarRu }; // Create list of supported abbrevations var abbreviations = { 'bg': abbreviationsBg, 'ca': abbreviationsCa, 'da': abbreviationsDa, 'de': ebbreviationsDe, 'en': abbreviationsEn, 'es': abbreviationsEs, 'fr': abbreviationsFr, 'he': abbreviationsHe, 'hu': abbreviationsHu, 'lt': abbreviationsLt, 'nl': abbreviationsNl, 'ru': abbreviationsRu, 'sl': abbreviationsSl, 'sv': abbreviationsSv, 'uk': abbreviationsUk, 'vi': abbreviationsVi }; module.exports = { supportedCodes: Object.keys(instructions), instructions: instructions, grammars: grammars, abbreviations: abbreviations }; },{"./languages/abbreviations/bg.json":5,"./languages/abbreviations/ca.json":6,"./languages/abbreviations/da.json":7,"./languages/abbreviations/de.json":8,"./languages/abbreviations/en.json":9,"./languages/abbreviations/es.json":10,"./languages/abbreviations/fr.json":11,"./languages/abbreviations/he.json":12,"./languages/abbreviations/hu.json":13,"./languages/abbreviations/lt.json":14,"./languages/abbreviations/nl.json":15,"./languages/abbreviations/ru.json":16,"./languages/abbreviations/sl.json":17,"./languages/abbreviations/sv.json":18,"./languages/abbreviations/uk.json":19,"./languages/abbreviations/vi.json":20,"./languages/grammar/fr.json":21,"./languages/grammar/ru.json":22,"./languages/translations/da.json":23,"./languages/translations/de.json":24,"./languages/translations/en.json":25,"./languages/translations/eo.json":26,"./languages/translations/es-ES.json":27,"./languages/translations/es.json":28,"./languages/translations/fi.json":29,"./languages/translations/fr.json":30,"./languages/translations/he.json":31,"./languages/translations/id.json":32,"./languages/translations/it.json":33,"./languages/translations/ko.json":34,"./languages/translations/my.json":35,"./languages/translations/nl.json":36,"./languages/translations/no.json":37,"./languages/translations/pl.json":38,"./languages/translations/pt-BR.json":39,"./languages/translations/pt-PT.json":40,"./languages/translations/ro.json":41,"./languages/translations/ru.json":42,"./languages/translations/sv.json":43,"./languages/translations/tr.json":44,"./languages/translations/uk.json":45,"./languages/translations/vi.json":46,"./languages/translations/zh-Hans.json":47}],5:[function(_dereq_,module,exports){ module.exports={ "abbreviations": { "международен": "Межд", "старши": "Стрш", "възел": "Въз", "пазар": "Mkt", "светисвети": "СвСв", "сестра": "сес", "уилям": "Ум", "апартаменти": "ап", "езеро": "Ез", "свети": "Св", "център": "Ц-р", "парк": "Пк", "маршрут": "М-т", "площад": "Пл", "национален": "Нац", "училище": "Уч", "река": "Рек", "поток": "П-к", "район": "Р-н", "крепост": "К-т", "паметник": "Пам", "университет": "Уни", "Връх": "Вр", "точка": "Точ", "планина": "Пл", "село": "с.", "височини": "вис", "младши": "Мл", "станция": "С-я", "проход": "Прох", "баща": "Бщ" }, "classifications": { "шофиране": "Шоф", "плавен": "Пл", "място": "Мя", "тераса": "Тер", "магистрала": "М-ла", "площад": "Пл", "пеш": "Пеш", "залив": "З-в", "пътека": "П-ка", "платно": "Пл", "улица": "Ул", "алея": "Ал", "пешеходна": "Пеш", "точка": "Тч", "задминаване": "Задм", "кръгово": "Кр", "връх": "Вр", "съд": "Сд", "булевард": "Бул", "път": "Път", "скоростна": "Скор", "мост": "Мо" }, "directions": { "северозапад": "СЗ", "североизток": "СИ", "югозапад": "ЮЗ", "югоизток": "ЮИ", "север": "С", "изток": "И", "юг": "Ю" } } },{}],6:[function(_dereq_,module,exports){ module.exports={ "abbreviations": { "comunicacions": "Com.", "entitat de població": "Nucli", "disseminat": "Diss.", "cap de municipi": "Cap", "indret": "Indr.", "comarca": "Cca.", "relleu del litoral": "Lit.", "municipi": "Mun.", "xarxa hidrogràfica": "Curs Fluv.", "equipament": "Equip.", "orografia": "Orogr.", "barri": "Barri", "edificació": "Edif.", "edificació històrica": "Edif. Hist.", "entitat descentralitzada": "E.M.D.", "element hidrogràfic": "Hidr." }, "classifications": { "rotonda": "Rot.", "carrerada": "Ca.", "jardí": "J.", "paratge": "Pge.", "pont": "Pont", "lloc": "Lloc", "rambla": "Rbla.", "cases": "Cses.", "barranc": "Bnc.", "plana": "Plana", "polígon": "Pol.", "muralla": "Mur.", "enllaç": "Ellaç", "antiga carretera": "Actra", "glorieta": "Glor.", "autovia": "Autv.", "prolongació": "Prol.", "calçada": "Cda.", "carretera": "Ctra.", "pujada": "Pda.", "torrent": "T.", "disseminat": "Disse", "barri": "B.", "cinturó": "Cinto", "passera": "Psera", "sender": "Send.", "carrer": "C.", "sèquia": "Sèq.", "blocs": "Bloc", "rambleta": "Rblt.", "partida": "Par.", "costa": "Cos.", "sector": "Sec.", "corraló": "Crral", "urbanització": "Urb.", "autopista": "Autp.", "grup": "Gr.", "platja": "Pja.", "jardins": "J.", "complex": "Comp.", "portals": "Ptals", "finca": "Fin.", "travessera": "Trav.", "plaça": "Pl.", "travessia": "Trv.", "polígon industrial": "PI.", "passatge": "Ptge.", "apartaments": "Apmt.", "mirador": "Mira.", "antic": "Antic", "accés": "Acc.", "colònia": "Col.", "corriol": "Crol.", "portal": "Ptal.", "porta": "Pta.", "port": "Port", "carreró": "Cró.", "riera": "Ra.", "circumval·lació": "Cval.", "baixada": "Bda.", "placeta": "Plta.", "escala": "Esc.", "gran via": "GV", "rial": "Rial", "conjunt": "Conj.", "avinguda": "Av.", "esplanada": "Esp.", "cantonada": "Cant.", "ronda": "Rda.", "corredor": "Cdor.", "drecera": "Drec.", "passadís": "Pdís.", "viaducte": "Vdct.", "passeig": "Pg.", "veïnat": "Veï." }, "directions": { "sudest": "SE", "sudoest": "SO", "nordest": "NE", "nordoest": "NO", "est": "E", "nord": "N", "oest": "O", "sud": "S" } } },{}],7:[function(_dereq_,module,exports){ module.exports={ "abbreviations": { "skole": "Sk.", "ved": "v.", "centrum": "C.", "sankt": "Skt.", "vestre": "v.", "hospital": "Hosp.", "stræde": "Str.", "nordre": "Nr.", "plads": "Pl.", "universitet": "Uni.", "vænge": "vg.", "station": "St." }, "classifications": { "avenue": "Ave", "gammel": "Gl.", "dronning": "Dronn.", "sønder": "Sdr.", "nørre": "Nr.", "vester": "V.", "vestre": "V.", "øster": "Ø.", "østre": "Ø.", "boulevard": "Boul." }, "directions": { "sydøst": "SØ", "nordvest": "NV", "syd": "S", "nordøst": "NØ", "sydvest": "SV", "vest": "V", "nord": "N", "øst": "Ø" } } },{}],8:[function(_dereq_,module,exports){ module.exports={ "abbreviations": {}, "classifications": {}, "directions": { "osten": "O", "nordosten": "NO", "süden": "S", "nordwest": "NW", "norden": "N", "südost": "SO", "südwest": "SW", "westen": "W" } } },{}],9:[function(_dereq_,module,exports){ module.exports={ "abbreviations": { "square": "Sq", "centre": "Ctr", "sister": "Sr", "lake": "Lk", "fort": "Ft", "route": "Rte", "william": "Wm", "national": "Nat’l", "junction": "Jct", "center": "Ctr", "saint": "St", "saints": "SS", "station": "Sta", "mount": "Mt", "junior": "Jr", "mountain": "Mtn", "heights": "Hts", "university": "Univ", "school": "Sch", "international": "Int’l", "apartments": "Apts", "crossing": "Xing", "creek": "Crk", "township": "Twp", "downtown": "Dtwn", "father": "Fr", "senior": "Sr", "point": "Pt", "river": "Riv", "market": "Mkt", "village": "Vil", "park": "Pk", "memorial": "Mem" }, "classifications": { "place": "Pl", "circle": "Cir", "bypass": "Byp", "motorway": "Mwy", "crescent": "Cres", "road": "Rd", "cove": "Cv", "lane": "Ln", "square": "Sq", "street": "St", "freeway": "Fwy", "walk": "Wk", "plaza": "Plz", "parkway": "Pky", "avenue": "Ave", "pike": "Pk", "drive": "Dr", "highway": "Hwy", "footway": "Ftwy", "point": "Pt", "court": "Ct", "terrace": "Ter", "walkway": "Wky", "alley": "Aly", "expressway": "Expy", "bridge": "Br", "boulevard": "Blvd", "turnpike": "Tpk" }, "directions": { "southeast": "SE", "northwest": "NW", "south": "S", "west": "W", "southwest": "SW", "north": "N", "east": "E", "northeast": "NE" } } },{}],10:[function(_dereq_,module,exports){ module.exports={ "abbreviations": { "segunda": "2ª", "octubre": "8bre", "doctores": "Drs", "doctora": "Dra", "internacional": "Intl", "doctor": "Dr", "segundo": "2º", "señorita": "Srta", "doctoras": "Drs", "primera": "1ª", "primero": "1º", "san": "S", "colonia": "Col", "doña": "Dña", "septiembre": "7bre", "diciembre": "10bre", "señor": "Sr", "ayuntamiento": "Ayto", "señora": "Sra", "tercera": "3ª", "tercero": "3º", "don": "D", "santa": "Sta", "ciudad": "Cdad", "noviembre": "9bre", "departamento": "Dep" }, "classifications": { "camino": "Cmno", "avenida": "Av", "paseo": "Pº", "autopista": "Auto", "calle": "C", "plaza": "Pza", "carretera": "Crta" }, "directions": { "este": "E", "noreste": "NE", "sur": "S", "suroeste": "SO", "noroeste": "NO", "oeste": "O", "sureste": "SE", "norte": "N" } } },{}],11:[function(_dereq_,module,exports){ module.exports={ "abbreviations": { "allée": "All", "aérodrome": "Aérod", "aéroport": "Aérop" }, "classifications": { "centrale": "Ctrale", "campings": "Camp.", "urbains": "Urb.", "mineure": "Min.", "publique": "Publ.", "supérieur": "Sup.", "fédération": "Féd.", "notre-dame": "ND", "saint": "St", "centre hospitalier régional": "CHR", "exploitation": "Exploit.", "général": "Gal", "civiles": "Civ.", "maritimes": "Marit.", "aviation": "Aviat.", "iii": "3", "archéologique": "Archéo.", "musical": "Music.", "musicale": "Music.", "immeuble": "Imm.", "xv": "15", "hôtel": "Hôt.", "alpine": "Alp.", "communale": "Commun.", "v": "5", "global": "Glob.", "université": "Univ.", "confédéral": "Conféd.", "xx": "20", "x": "10", "piscine": "Pisc.", "dimanche": "di.", "fleuve": "Flv", "postaux": "Post.", "musicienne": "Music.", "département": "Dépt", "février": "Févr.", "municipales": "Munic.", "province": "Prov.", "communautés": "Commtés", "barrage": "Barr.", "mercredi": "me.", "présidentes": "Pdtes", "cafétérias": "Cafét.", "théâtral": "Thé.", "viticulteur": "Vitic.", "poste": "Post.", "spécialisée": "Spéc.", "agriculture": "Agric.", "infirmier": "Infirm.", "animation": "Anim.", "mondiale": "Mond.", "arrêt": "Arr.", "zone": "zon.", "municipaux": "Munic.", "grand": "Gd", "janvier": "Janv.", "fondateur": "Fond.", "première": "1re", "municipale": "Munic.", "direction": "Dir.", "anonyme": "Anon.", "départementale": "Dépt", "moyens": "Moy.", "novembre": "Nov.", "jardin": "Jard.", "petites": "Pet.", "privé": "Priv.", "centres": "Ctres", "forestier": "Forest.", "xiv": "14", "africaines": "Afric.", "sergent": "Sgt", "européenne": "Eur.", "privée": "Priv.", "café": "Cfé", "xix": "19", "hautes": "Htes", "major": "Mjr", "vendredi": "ve.", "municipalité": "Munic.", "sous-préfecture": "Ss-préf.", "spéciales": "Spéc.", "secondaires": "Second.", "viie": "7e", "moyenne": "Moy.", "commerciale": "Commerc.", "région": "Rég.", "américaines": "Amér.", "américains": "Amér.", "service": "Sce", "professeur": "Prof.", "départemental": "Dépt", "hôtels": "Hôt.", "mondiales": "Mond.", "ire": "1re", "caporal": "Capo.", "militaire": "Milit.", "lycée d'enseignement professionnel": "LEP", "adjudant": "Adj.", "médicale": "Méd.", "conférences": "Confér.", "universelle": "Univ.", "xiie": "12e", "supérieures": "Sup.", "naturel": "Natur.", "société nationale": "SN", "hospitalier": "Hosp.", "culturelle": "Cult.", "américain": "Amér.", "son altesse royale": "S.A.R.", "infirmière": "Infirm.", "viii": "8", "fondatrice": "Fond.", "madame": "Mme", "métropolitain": "Métrop.", "ophtalmologues": "Ophtalmos", "xviie": "18e", "viiie": "8e", "commerçante": "Commerç.", "centre d'enseignement du second degré": "CES", "septembre": "Sept.", "agriculteur": "Agric.", "xiii": "13", "pontifical": "Pontif.", "cafétéria": "Cafét.", "prince": "Pce", "vie": "6e", "archiduchesse": "Archid.", "occidental": "Occ.", "spectacles": "Spect.", "camping": "Camp.", "métro": "Mº", "arrondissement": "Arrond.", "viticole": "Vitic.", "ii": "2", "siècle": "Si.", "chapelles": "Chap.", "centre": "Ctre", "sapeur-pompiers": "Sap.-pomp.", "établissements": "Étabts", "société anonyme": "SA", "directeurs": "Dir.", "vii": "7", "culturel": "Cult.", "central": "Ctral", "métropolitaine": "Métrop.", "administrations": "Admin.", "amiraux": "Amir.", "sur": "s/", "premiers": "1ers", "provence-alpes-côte d'azur": "PACA", "cathédrale": "Cathéd.", "iv": "4", "postale": "Post.", "social": "Soc.", "spécialisé": "Spéc.", "district": "Distr.", "technologique": "Techno.", "viticoles": "Vitic.", "ix": "9", "protégés": "Prot.", "historiques": "Hist.", "sous": "s/s", "national": "Nal", "ambassade": "Amb.", "cafés": "Cfés", "agronomie": "Agro.", "sapeurs": "Sap.", "petits": "Pet.", "monsieur": "M.", "boucher": "Bouch.", "restaurant": "Restau.", "lycée": "Lyc.", "urbaine": "Urb.", "préfecture": "Préf.", "districts": "Distr.", "civil": "Civ.", "protégées": "Prot.", "sapeur": "Sap.", "théâtre": "Thé.", "collège": "Coll.", "mardi": "ma.", "mémorial": "Mémor.", "africain": "Afric.", "républicaine": "Républ.", "sociale": "Soc.", "spécial": "Spéc.", "technologie": "Techno.", "charcuterie": "Charc.", "commerces": "Commerc.", "fluviale": "Flv", "parachutistes": "Para.", "primaires": "Prim.", "directions": "Dir.", "présidentiel": "Pdtl", "nationales": "Nales", "après": "apr.", "samedi": "sa.", "unité": "U.", "xxiii": "23", "associé": "Assoc.", "électrique": "Électr.", "populaire": "Pop.", "asiatique": "Asiat.", "navigable": "Navig.", "présidente": "Pdte", "xive": "14e", "associés": "Assoc.", "pompiers": "Pomp.", "agricoles": "Agric.", "élém": "Élém.", "décembre": "Déc.", "son altesse": "S.Alt.", "après-midi": "a.-m.", "mineures": "Min.", "juillet": "Juil.", "aviatrices": "Aviat.", "fondation": "Fond.", "pontificaux": "Pontif.", "temple": "Tple", "européennes": "Eur.", "régionale": "Rég.", "informations": "Infos", "mondiaux": "Mond.", "infanterie": "Infant.", "archéologie": "Archéo.", "dans": "d/", "hospice": "Hosp.", "spectacle": "Spect.", "hôtels-restaurants": "Hôt.-Rest.", "hôtel-restaurant": "Hôt.-Rest.", "hélicoptère": "hélico", "xixe": "19e", "cliniques": "Clin.", "docteur": "Dr", "secondaire": "Second.", "municipal": "Munic.", "générale": "Gale", "château": "Chât.", "commerçant": "Commerç.", "avril": "Avr.", "clinique": "Clin.", "urbaines": "Urb.", "navale": "Nav.", "navigation": "Navig.", "asiatiques": "Asiat.", "pontificales": "Pontif.", "administrative": "Admin.", "syndicat": "Synd.", "lundi": "lu.", "petite": "Pet.", "maritime": "Marit.", "métros": "Mº", "enseignement": "Enseign.", "fluviales": "Flv", "historique": "Hist.", "comtés": "Ctés", "résidentiel": "Résid.", "international": "Int.", "supérieure": "Sup.", "centre hospitalier universitaire": "CHU", "confédération": "Conféd.", "boucherie": "Bouch.", "fondatrices": "Fond.", "médicaux": "Méd.", "européens": "Eur.", "orientaux": "Ori.", "naval": "Nav.", "étang": "Étg", "provincial": "Prov.", "junior": "Jr", "départementales": "Dépt", "musique": "Musiq.", "directrices": "Dir.", "maréchal": "Mal", "civils": "Civ.", "protégé": "Prot.", "établissement": "Étabt", "trafic": "Traf.", "aviateur": "Aviat.", "archives": "Arch.", "africains": "Afric.", "maternelle": "Matern.", "industrielle": "Ind.", "administratif": "Admin.", "oriental": "Ori.", "universitaire": "Univ.", "majeur": "Maj.", "haute": "Hte", "communal": "Commun.", "petit": "Pet.", "commune": "Commun.", "exploitant": "Exploit.", "conférence": "Confér.", "monseigneur": "Mgr", "pharmacien": "Pharm.", "jeudi": "je.", "primaire": "Prim.", "hélicoptères": "hélicos", "agronomique": "Agro.", "médecin": "Méd.", "ve": "5e", "pontificale": "Pontif.", "ier": "1er", "cinéma": "Ciné", "fluvial": "Flv", "occidentaux": "Occ.", "commerçants": "Commerç.", "banque": "Bq", "moyennes": "Moy.", "pharmacienne": "Pharm.", "démocratique": "Dém.", "cinémas": "Cinés", "spéciale": "Spéc.", "présidents": "Pdts", "directrice": "Dir.", "vi": "6", "basse": "Bas.", "xve": "15e", "état": "É.", "aviateurs": "Aviat.", "majeurs": "Maj.", "infirmiers": "Infirm.", "église": "Égl.", "confédérale": "Conféd.", "xxie": "21e", "comte": "Cte", "européen": "Eur.", "union": "U.", "pharmacie": "Pharm.", "infirmières": "Infirm.", "comté": "Cté", "sportive": "Sport.", "deuxième": "2e", "xvi": "17", "haut": "Ht", "médicales": "Méd.", "développé": "Dévelop.", "bâtiment": "Bât.", "commerce": "Commerc.", "ive": "4e", "associatif": "Assoc.", "rural": "Rur.", "cimetière": "Cim.", "régional": "Rég.", "ferroviaire": "Ferr.", "vers": "v/", "mosquée": "Mosq.", "mineurs": "Min.", "nautique": "Naut.", "châteaux": "Chât.", "sportif": "Sport.", "mademoiselle": "Mle", "école": "Éc.", "doyen": "Doy.", "industriel": "Ind.", "chapelle": "Chap.", "sociétés": "Stés", "internationale": "Int.", "coopératif": "Coop.", "hospices": "Hosp.", "xxii": "22", "parachutiste": "Para.", "alpines": "Alp.", "civile": "Civ.", "xvie": "17e", "états": "É.", "musée": "Msée", "centrales": "Ctrales", "globaux": "Glob.", "supérieurs": "Sup.", "syndicats": "Synd.", "archevêque": "Archev.", "docteurs": "Drs", "bibliothèque": "Biblio.", "lieutenant": "Lieut.", "république": "Rép.", "vétérinaire": "Vét.", "départementaux": "Dépt", "premier": "1er", "fluviaux": "Flv", "animé": "Anim.", "orientales": "Ori.", "technologiques": "Techno.", "princesse": "Pse", "routière": "Rout.", "coopérative": "Coop.", "scolaire": "Scol.", "écoles": "Éc.", "football": "Foot", "territoriale": "Territ.", "commercial": "Commerc.", "mineur": "Min.", "millénaires": "Mill.", "association": "Assoc.", "catholique": "Cathol.", "administration": "Admin.", "mairie": "Mair.", "portuaire": "Port.", "tertiaires": "Terti.", "théâtrale": "Thé.", "palais": "Pal.", "troisième": "3e", "directeur": "Dir.", "vétérinaires": "Vét.", "faculté": "Fac.", "occidentales": "Occ.", "viticulteurs": "Vitic.", "xvii": "18", "occidentale": "Occ.", "amiral": "Amir.", "professionnel": "Profess.", "administratives": "Admin.", "commerciales": "Commerc.", "saints": "Sts", "agronomes": "Agro.", "stade": "Std", "sous-préfet": "Ss-préf.", "senior": "Sr", "agronome": "Agro.", "terrain": "Terr.", "catholiques": "Cathol.", "résidentielle": "Résid.", "grands": "Gds", "exploitants": "Exploit.", "xiiie": "13e", "croix": "Cx", "généraux": "Gaux", "c