From 43e3c7e96f1ccb43addc83aff8bea094317fc067 Mon Sep 17 00:00:00 2001 From: ThomasDaheim Date: Tue, 27 Oct 2015 19:53:48 +0100 Subject: [PATCH 01/11] Add kml-support Probably, gpx.inc.php should be renamed as well... --- gpx.inc.php | 26 ++- leaflet/kml.js | 485 +++++++++++++++++++++++++++++++++++++++++++ template/osm-kml.tpl | 45 ++++ 3 files changed, 548 insertions(+), 8 deletions(-) create mode 100644 leaflet/kml.js create mode 100644 template/osm-kml.tpl diff --git a/gpx.inc.php b/gpx.inc.php index 92e57c3..a180c7f 100644 --- a/gpx.inc.php +++ b/gpx.inc.php @@ -27,6 +27,8 @@ // Add GPX support file extensions array_push($conf['file_ext'], 'gpx'); +// TF, 22.10.2015: handle kml as well! +array_push($conf['file_ext'], 'kml'); // Hook on to an event to display videos as standard images add_event_handler('render_element_content', 'osm_render_media', EVENT_HANDLER_PRIORITY_NEUTRAL, 2); @@ -41,9 +43,10 @@ function osm_render_media($content, $picture) { return $content; } - // If not a GPX file + // If not a GPX or KML file if ( (array_key_exists('path', @$picture['current'])) - && strpos($picture['current']['path'],".gpx") === false) + && (strpos($picture['current']['path'],".gpx") === false + && strpos($picture['current']['path'],".kml") === false)) { return $content; } @@ -66,10 +69,17 @@ function osm_render_media($content, $picture) $js = osm_get_js($conf, $local_conf, $js_data); - // Select the template - $template->set_filenames( - array('osm_content' => dirname(__FILE__)."/template/osm-gpx.tpl") - ); + // Select the template based on the extension + if (strpos($picture['current']['path'],".gpx") === false) + { + $template->set_filenames( + array('osm_content' => dirname(__FILE__)."/template/osm-kml.tpl") + ); + } else { + $template->set_filenames( + array('osm_content' => dirname(__FILE__)."/template/osm-gpx.tpl") + ); + } // Assign the template variables $template->assign( @@ -77,7 +87,7 @@ function osm_render_media($content, $picture) 'HEIGHT' => $height, 'WIDTH' => $width, 'FILENAME' => $filename, - 'OSM_PATH' => embellish_url(get_gallery_home_url().OSM_PATH), + 'OSM_PATH' => embellish_url(get_absolute_root_url().OSM_PATH), 'OSMGPX' => $js, ) ); @@ -91,7 +101,7 @@ function osm_render_media($content, $picture) add_event_handler('get_mimetype_location', 'osm_get_mimetype_icon'); function osm_get_mimetype_icon($location, $element_info) { - if ($element_info == 'gpx') + if ($element_info == 'gpx' || $element_info == 'kml') { $location = 'plugins/' . basename(dirname(__FILE__)) diff --git a/leaflet/kml.js b/leaflet/kml.js new file mode 100644 index 0000000..acdc4e8 --- /dev/null +++ b/leaflet/kml.js @@ -0,0 +1,485 @@ +L.KML = L.FeatureGroup.extend({ + options: { + async: true + }, + + initialize: function(kml, options) { + L.Util.setOptions(this, options); + this._kml = kml; + this._layers = {}; + + if (kml) { + this.addKML(kml, options, this.options.async); + } + }, + + loadXML: function(url, cb, options, async) { + if (async === undefined) async = this.options.async; + if (options === undefined) options = this.options; + + var req = new window.XMLHttpRequest(); + + // Check for IE8 and IE9 Fix Cors for those browsers + if (req.withCredentials === undefined && typeof window.XDomainRequest !== 'undefined') { + var xdr = new window.XDomainRequest(); + xdr.open('GET', url, async); + xdr.onprogress = function () { }; + xdr.ontimeout = function () { }; + xdr.onerror = function () { }; + xdr.onload = function () { + if (xdr.responseText) { + var xml = new window.ActiveXObject('Microsoft.XMLDOM'); + xml.loadXML(xdr.responseText); + cb(xml, options); + } + }; + setTimeout(function () { xdr.send(); }, 0); + } else { + req.open('GET', url, async); + try { + req.overrideMimeType('text/xml'); // unsupported by IE + } catch (e) { } + req.onreadystatechange = function () { + if (req.readyState !== 4) return; + if (req.status === 200) cb(req.responseXML, options); + }; + req.send(null); + } + }, + + addKML: function(url, options, async) { + var _this = this; + var cb = function(gpx, options) { _this._addKML(gpx, options); }; + this.loadXML(url, cb, options, async); + }, + + _addKML: function(xml, options) { + var layers = L.KML.parseKML(xml); + if (!layers || !layers.length) return; + for (var i = 0; i < layers.length; i++) { + this.fire('addlayer', { + layer: layers[i] + }); + this.addLayer(layers[i]); + } + this.latLngs = L.KML.getLatLngs(xml); + this.fire('loaded'); + }, + + latLngs: [] +}); + +L.Util.extend(L.KML, { + + parseKML: function (xml) { + var style = this.parseStyles(xml); + this.parseStyleMap(xml, style); + var el = xml.getElementsByTagName('Folder'); + var layers = [], l; + for (var i = 0; i < el.length; i++) { + if (!this._check_folder(el[i])) { continue; } + l = this.parseFolder(el[i], style); + if (l) { layers.push(l); } + } + el = xml.getElementsByTagName('Placemark'); + for (var j = 0; j < el.length; j++) { + if (!this._check_folder(el[j])) { continue; } + l = this.parsePlacemark(el[j], xml, style); + if (l) { layers.push(l); } + } + el = xml.getElementsByTagName('GroundOverlay'); + for (var k = 0; k < el.length; k++) { + l = this.parseGroundOverlay(el[k]); + if (l) { layers.push(l); } + } + return layers; + }, + + // Return false if e's first parent Folder is not [folder] + // - returns true if no parent Folders + _check_folder: function (e, folder) { + e = e.parentNode; + while (e && e.tagName !== 'Folder') + { + e = e.parentNode; + } + return !e || e === folder; + }, + + parseStyles: function(xml) { + var styles = {}; + var sl = xml.getElementsByTagName('Style'); + for (var i=0, len=sl.length; i 1) { + layer = new L.FeatureGroup(layers); + } + + var name, descr = ''; + el = place.getElementsByTagName('name'); + if (el.length && el[0].childNodes.length) { + name = el[0].childNodes[0].nodeValue; + } + el = place.getElementsByTagName('description'); + for (i = 0; i < el.length; i++) { + for (j = 0; j < el[i].childNodes.length; j++) { + descr = descr + el[i].childNodes[j].nodeValue; + } + } + + if (name) { + layer.on('add', function(e) { + layer.bindPopup('

' + name + '

' + descr); + }); + } + + return layer; + }, + + parseCoords: function (xml) { + var el = xml.getElementsByTagName('coordinates'); + return this._read_coords(el[0]); + }, + + parseLineString: function (line, xml, options) { + var coords = this.parseCoords(line); + if (!coords.length) { return; } + return new L.Polyline(coords, options); + }, + + parseTrack: function (line, xml, options) { + var el = xml.getElementsByTagName('gx:coord'); + if (el.length === 0) { el = xml.getElementsByTagName('coord'); } + var coords = []; + for (var j = 0; j < el.length; j++) { + coords = coords.concat(this._read_gxcoords(el[j])); + } + if (!coords.length) { return; } + return new L.Polyline(coords, options); + }, + + parsePoint: function (line, xml, options) { + var el = line.getElementsByTagName('coordinates'); + if (!el.length) { + return; + } + var ll = el[0].childNodes[0].nodeValue.split(','); + return new L.KMLMarker(new L.LatLng(ll[1], ll[0]), options); + }, + + parsePolygon: function (line, xml, options) { + var el, polys = [], inner = [], i, coords; + el = line.getElementsByTagName('outerBoundaryIs'); + for (i = 0; i < el.length; i++) { + coords = this.parseCoords(el[i]); + if (coords) { + polys.push(coords); + } + } + el = line.getElementsByTagName('innerBoundaryIs'); + for (i = 0; i < el.length; i++) { + coords = this.parseCoords(el[i]); + if (coords) { + inner.push(coords); + } + } + if (!polys.length) { + return; + } + if (options.fillColor) { + options.fill = true; + } + if (polys.length === 1) { + return new L.Polygon(polys.concat(inner), options); + } + return new L.MultiPolygon(polys, options); + }, + + getLatLngs: function (xml) { + var el = xml.getElementsByTagName('coordinates'); + var coords = []; + for (var j = 0; j < el.length; j++) { + // text might span many childNodes + coords = coords.concat(this._read_coords(el[j])); + } + return coords; + }, + + _read_coords: function (el) { + var text = '', coords = [], i; + for (i = 0; i < el.childNodes.length; i++) { + text = text + el.childNodes[i].nodeValue; + } + text = text.split(/[\s\n]+/); + for (i = 0; i < text.length; i++) { + var ll = text[i].split(','); + if (ll.length < 2) { + continue; + } + coords.push(new L.LatLng(ll[1], ll[0])); + } + return coords; + }, + + _read_gxcoords: function (el) { + var text = '', coords = []; + text = el.firstChild.nodeValue.split(' '); + coords.push(new L.LatLng(text[1], text[0])); + return coords; + }, + + parseGroundOverlay: function (xml) { + var latlonbox = xml.getElementsByTagName('LatLonBox')[0]; + var bounds = new L.LatLngBounds( + [ + latlonbox.getElementsByTagName('south')[0].childNodes[0].nodeValue, + latlonbox.getElementsByTagName('west')[0].childNodes[0].nodeValue + ], + [ + latlonbox.getElementsByTagName('north')[0].childNodes[0].nodeValue, + latlonbox.getElementsByTagName('east')[0].childNodes[0].nodeValue + ] + ); + var attributes = {Icon: true, href: true, color: true}; + function _parse(xml) { + var options = {}, ioptions = {}; + for (var i = 0; i < xml.childNodes.length; i++) { + var e = xml.childNodes[i]; + var key = e.tagName; + if (!attributes[key]) { continue; } + var value = e.childNodes[0].nodeValue; + if (key === 'Icon') { + ioptions = _parse(e); + if (ioptions.href) { options.href = ioptions.href; } + } else if (key === 'href') { + options.href = value; + } else if (key === 'color') { + options.opacity = parseInt(value.substring(0, 2), 16) / 255.0; + options.color = '#' + value.substring(6, 8) + value.substring(4, 6) + value.substring(2, 4); + } + } + return options; + } + var options = {}; + options = _parse(xml); + if (latlonbox.getElementsByTagName('rotation')[0] !== undefined) { + var rotation = latlonbox.getElementsByTagName('rotation')[0].childNodes[0].nodeValue; + options.rotation = parseFloat(rotation); + } + return new L.RotatedImageOverlay(options.href, bounds, {opacity: options.opacity, angle: options.rotation}); + } + +}); + +L.KMLIcon = L.Icon.extend({ + _setIconStyles: function (img, name) { + L.Icon.prototype._setIconStyles.apply(this, [img, name]); + var options = this.options; + this.options.popupAnchor = [0,(-0.83*img.height)]; + if (options.anchorType.x === 'fraction') + img.style.marginLeft = (-options.anchorRef.x * img.width) + 'px'; + if (options.anchorType.y === 'fraction') + img.style.marginTop = ((-(1 - options.anchorRef.y) * img.height) + 1) + 'px'; + if (options.anchorType.x === 'pixels') + img.style.marginLeft = (-options.anchorRef.x) + 'px'; + if (options.anchorType.y === 'pixels') + img.style.marginTop = (options.anchorRef.y - img.height + 1) + 'px'; + } +}); + + +L.KMLMarker = L.Marker.extend({ + options: { + icon: new L.KMLIcon.Default() + } +}); + +// Inspired by https://github.com/bbecquet/Leaflet.PolylineDecorator/tree/master/src +L.RotatedImageOverlay = L.ImageOverlay.extend({ + options: { + angle: 0 + }, + _reset: function () { + L.ImageOverlay.prototype._reset.call(this); + this._rotate(); + }, + _animateZoom: function (e) { + L.ImageOverlay.prototype._animateZoom.call(this, e); + this._rotate(); + }, + _rotate: function () { + if (L.DomUtil.TRANSFORM) { + // use the CSS transform rule if available + this._image.style[L.DomUtil.TRANSFORM] += ' rotate(' + this.options.angle + 'deg)'; + } else if(L.Browser.ie) { + // fallback for IE6, IE7, IE8 + var rad = this.options.angle * (Math.PI / 180), + costheta = Math.cos(rad), + sintheta = Math.sin(rad); + this._image.style.filter += ' progid:DXImageTransform.Microsoft.Matrix(sizingMethod=\'auto expand\', M11=' + + costheta + ', M12=' + (-sintheta) + ', M21=' + sintheta + ', M22=' + costheta + ')'; + } + }, + getBounds: function() { + return this._bounds; + } +}); + diff --git a/template/osm-kml.tpl b/template/osm-kml.tpl new file mode 100644 index 0000000..e4955bc --- /dev/null +++ b/template/osm-kml.tpl @@ -0,0 +1,45 @@ +{html_head} + + + + + + +{/html_head} + +{html_style} +{literal} +#mapgpx { + height: {/literal}{$HEIGHT}{literal}px; + width: 90%; + max-width: 1280px; + margin: 0px auto; +} +{/literal} +{/html_style} + +
+ From 6e46f6957f6c2247040ea72ff151f13e3cc217b4 Mon Sep 17 00:00:00 2001 From: ThomasDaheim Date: Tue, 27 Oct 2015 20:44:54 +0100 Subject: [PATCH 02/11] Included remarks from xbgmsharp --- gpx.inc.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gpx.inc.php b/gpx.inc.php index a180c7f..95e0338 100644 --- a/gpx.inc.php +++ b/gpx.inc.php @@ -26,9 +26,8 @@ if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!'); // Add GPX support file extensions -array_push($conf['file_ext'], 'gpx'); // TF, 22.10.2015: handle kml as well! -array_push($conf['file_ext'], 'kml'); +array_push($conf['file_ext'], 'gpx', 'kml'); // Hook on to an event to display videos as standard images add_event_handler('render_element_content', 'osm_render_media', EVENT_HANDLER_PRIORITY_NEUTRAL, 2); From c046a921295f4ca290fd27a669eb3f1fb102bde0 Mon Sep 17 00:00:00 2001 From: ThomasDaheim Date: Tue, 27 Oct 2015 20:49:03 +0100 Subject: [PATCH 03/11] Synched with master --- gpx.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gpx.inc.php b/gpx.inc.php index 95e0338..69a253a 100644 --- a/gpx.inc.php +++ b/gpx.inc.php @@ -86,7 +86,7 @@ function osm_render_media($content, $picture) 'HEIGHT' => $height, 'WIDTH' => $width, 'FILENAME' => $filename, - 'OSM_PATH' => embellish_url(get_absolute_root_url().OSM_PATH), + 'OSM_PATH' => embellish_url(get_gallery_home_url().OSM_PATH), 'OSMGPX' => $js, ) ); From 06b2617a0127fe26c43072a6048edb2700ca2605 Mon Sep 17 00:00:00 2001 From: ThomasDaheim Date: Tue, 27 Oct 2015 21:54:47 +0100 Subject: [PATCH 04/11] License added --- leaflet/kml.js | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/leaflet/kml.js b/leaflet/kml.js index acdc4e8..63bf0f8 100644 --- a/leaflet/kml.js +++ b/leaflet/kml.js @@ -1,4 +1,31 @@ -L.KML = L.FeatureGroup.extend({ +/** + * Copyright (c) 2011-2015, Pavel Shramov, Bruno Bergot + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + + /* + * Thanks to Pavel Shramov who provided the initial implementation and Leaflet + * integration. Original code was at https://github.com/shramov/leaflet-plugins. + */ + + L.KML = L.FeatureGroup.extend({ options: { async: true }, From f2b19b0e65b5d74f851daf2e9f766a8a4ba215fb Mon Sep 17 00:00:00 2001 From: ThomasDaheim Date: Sat, 2 Jan 2016 17:21:32 +0100 Subject: [PATCH 05/11] Options to speed up maps Following options included: - hide gpx of sub-categories - show only first image of sub-categories Additional changes: - add option to specify link target of popup - Bugfix for outdated map provider links --- admin/admin_config.php | 17 ++- admin/admin_config.tpl | 19 ++++ category.inc.php | 6 +- include/functions_map.php | 230 +++++++++++++++++++++++++++----------- menu.inc.php | 6 +- mimetypes/kml.png | Bin 0 -> 87199 bytes osmmap.php | 6 +- osmmap2.php | 6 +- osmmap3.php | 6 +- picture.inc.php | 3 +- 10 files changed, 223 insertions(+), 76 deletions(-) create mode 100644 mimetypes/kml.png diff --git a/admin/admin_config.php b/admin/admin_config.php index 260754f..fc4318e 100644 --- a/admin/admin_config.php +++ b/admin/admin_config.php @@ -119,6 +119,15 @@ '2' => l10n('NEVER'), ); +// TF, 20160102: give choice where to show clicked picture +// Available popup click targets +$available_popup_click_target = array( + '0' => l10n('BLANK'), + '1' => l10n('TOP'), +// '2' => l10n('SELF'), +// '3' => l10n('PARENT'), +); + // Available layout value $available_layout = array( '1' => 'osm-map.tpl', @@ -167,6 +176,7 @@ 'popupinfo_link' => isset($_POST['osm_left_popupinfo_link']), 'popupinfo_comment' => isset($_POST['osm_left_popupinfo_comment']), 'popupinfo_author' => isset($_POST['osm_left_popupinfo_author']), + 'popup_click_target'=> $_POST['osm_left_popup_click_target'], 'zoom' => $_POST['osm_left_zoom'], 'center' => $_POST['osm_left_center'], 'layout' => $_POST['osm_left_layout'], @@ -176,6 +186,10 @@ 'height' => $_POST['osm_cat_height'], 'width' => $_POST['osm_cat_width'], 'index' => $_POST['osm_cat_index'], +// TF, 20160102: improve performance by hiding gpx tracks of sub-categories + 'nogpxforsubcat' => get_boolean($_POST['osm_nogpxforsubcat']), +// TF, 20160102: improve performance by only showing firsat image of sub-categories + 'firstimageforsubcat' => get_boolean($_POST['osm_firstimageforsubcat']), ), 'main_menu' => array( 'enabled' => get_boolean($_POST['osm_main_menu']), @@ -212,7 +226,7 @@ // Update config to DB conf_update_param('osm_conf', serialize($conf['osm_conf'])); - // the prefilter changes, we must delete compiled templatess + // the prefilter changes, we must delete compiled templates $template->delete_compiled_templates(); array_push($page['infos'], l10n('Your configuration settings are saved')); } @@ -227,6 +241,7 @@ 'AVAILABLE_BASELAYER' => $available_baselayer, 'AVAILABLE_PIN' => $available_pin, 'AVAILABLE_POPUP' => $available_popup, + 'AVAILABLE_POPUP_CLICK_TARGET' => $available_popup_click_target, 'AVAILABLE_LAYOUT' => $available_layout, 'NB_GEOTAGGED' => $nb_geotagged, 'OSM_PATH' => OSM_PATH, diff --git a/admin/admin_config.tpl b/admin/admin_config.tpl index e0873b2..d046b6e 100644 --- a/admin/admin_config.tpl +++ b/admin/admin_config.tpl @@ -109,6 +109,13 @@ Refer to the {'LEFTPOPUPINFO_DESC'|@translate} +
  • + + +
    {'LEFTPOPUPCLICKTARGET_DESC'|@translate} +
  • {'Yes'|@translate} + +
    {'NOGPXFORSUBCAT_DESC'|@translate} +
  • +
  • + + + +
    {'FIRSTIMAGEFORSUBCAT_DESC'|@translate} +
  • diff --git a/category.inc.php b/category.inc.php index 2cb9527..96dafbf 100644 --- a/category.inc.php +++ b/category.inc.php @@ -44,7 +44,8 @@ function osm_render_category() osm_load_language(); load_language('plugin.lang', OSM_PATH); - $js_data = osm_get_items($page); + // TF, 20160102: pass config as parameter + $js_data = osm_get_items($conf, $page); if ($js_data != array()) { $local_conf = array(); @@ -56,7 +57,8 @@ function osm_render_category() $local_conf['center_lng'] = 0; $local_conf['zoom'] = 2; $local_conf['auto_center'] = 0; - $local_conf['paths'] = osm_get_gps($page); + // TF, 20160102: pass config as parameter + $local_conf['paths'] = osm_get_gps($conf, $page); $height = isset($conf['osm_conf']['category_description']['height']) ? $conf['osm_conf']['category_description']['height'] : '200'; $width = isset($conf['osm_conf']['category_description']['width']) ? $conf['osm_conf']['category_description']['width'] : 'auto'; $js = osm_get_js($conf, $local_conf, $js_data); diff --git a/include/functions_map.php b/include/functions_map.php index a83b93b..7bd6550 100644 --- a/include/functions_map.php +++ b/include/functions_map.php @@ -52,53 +52,75 @@ function osmcopyright($attrleaflet, $attrimagery, $attrmodule, $bl, $custombasel return $return; } -function osm_get_gps($page) +function osm_get_gps($conf, $page) { - // Limit search by category, by tag, by smartalbum - $LIMIT_SEARCH=""; - $INNER_JOIN=""; - if (isset($page['section'])) + // Load parameter, fallback to default if unset + $nogpxforsubcat = isset($conf['osm_conf']['category_description']['nogpxforsubcat']) ? $conf['osm_conf']['category_description']['nogpxforsubcat'] : 'false'; + + $gpx_list = array(); + + // TF, 20160102 + // check if any items (= pictures) are on that page and show gpx tracks only IF items>0 OR nogpxforsubcat=FALSE + if (!($nogpxforsubcat) or (isset($page['items']) and isset($page['items'][0]))) { - if ($page['section'] === 'categories' and isset($page['category']) and isset($page['category']['id']) ) - { - $LIMIT_SEARCH = "FIND_IN_SET(".$page['category']['id'].", c.uppercats) AND "; - $INNER_JOIN = "INNER JOIN ".CATEGORIES_TABLE." AS c ON ic.category_id = c.id"; - } - if ($page['section'] === 'tags' and isset($page['tags']) and isset($page['tags'][0]['id']) ) - { - $items = get_image_ids_for_tags( array($page['tags'][0]['id']) ); - if ( !empty($items) ) - { - $LIMIT_SEARCH = "ic.image_id IN (".implode(',', $items).") AND "; - } - } - if ($page['section'] === 'tags' and isset($page['category']) and isset($page['category']['id']) ) - { - $LIMIT_SEARCH = "FIND_IN_SET(".$page['category']['id'].", c.uppercats) AND "; - $INNER_JOIN = "INNER JOIN ".CATEGORIES_TABLE." AS c ON ic.category_id = c.id"; - } - } - - $forbidden = get_sql_condition_FandF( - array - ( - 'forbidden_categories' => 'ic.category_id', - 'visible_categories' => 'ic.category_id', - 'visible_images' => 'i.id' - ), - "\n AND" - ); - - /* Get all GPX tracks */ - $query="SELECT i.path FROM ".IMAGES_TABLE." AS i - INNER JOIN (".IMAGE_CATEGORY_TABLE." AS ic ".$INNER_JOIN.") ON i.id = ic.image_id - WHERE ".$LIMIT_SEARCH." `path` LIKE '%gpx%' ".$forbidden." "; - - return array_from_query($query, 'path'); + // Limit search by category, by tag, by smartalbum + $LIMIT_SEARCH=""; + $INNER_JOIN=""; + if (isset($page['section'])) + { + if ($page['section'] === 'categories' and isset($page['category']) and isset($page['category']['id']) ) + { + $LIMIT_SEARCH = "FIND_IN_SET(".$page['category']['id'].", c.uppercats) AND "; + $INNER_JOIN = "INNER JOIN ".CATEGORIES_TABLE." AS c ON ic.category_id = c.id"; + } + if ($page['section'] === 'tags' and isset($page['tags']) and isset($page['tags'][0]['id']) ) + { + $items = get_image_ids_for_tags( array($page['tags'][0]['id']) ); + if ( !empty($items) ) + { + $LIMIT_SEARCH = "ic.image_id IN (".implode(',', $items).") AND "; + } + } + if ($page['section'] === 'tags' and isset($page['category']) and isset($page['category']['id']) ) + { + $LIMIT_SEARCH = "FIND_IN_SET(".$page['category']['id'].", c.uppercats) AND "; + $INNER_JOIN = "INNER JOIN ".CATEGORIES_TABLE." AS c ON ic.category_id = c.id"; + } + } + + // print_r('limit: '); + // print_r($LIMIT_SEARCH); + // print_r(' - '); + // print_r('join: '); + // print_r($INNER_JOIN); + // print_r(' - '); + + $forbidden = get_sql_condition_FandF( + array + ( + 'forbidden_categories' => 'ic.category_id', + 'visible_categories' => 'ic.category_id', + 'visible_images' => 'i.id' + ), + "\n AND" + ); + + /* Get all GPX tracks */ + $query="SELECT i.path FROM ".IMAGES_TABLE." AS i + INNER JOIN (".IMAGE_CATEGORY_TABLE." AS ic ".$INNER_JOIN.") ON i.id = ic.image_id + WHERE ".$LIMIT_SEARCH." `path` LIKE '%gpx%' ".$forbidden." "; + + $gpx_list = array_from_query($query, 'path'); + } + + return $gpx_list; } -function osm_get_items($page) +function osm_get_items($conf, $page) { + // Load parameter, fallback to default if unset + $firstimageforsubcat = isset($conf['osm_conf']['category_description']['firstimageforsubcat']) ? $conf['osm_conf']['category_description']['firstimageforsubcat'] : 'false'; + // Limit search by category, by tag, by smartalbum $LIMIT_SEARCH=""; $INNER_JOIN=""; @@ -123,7 +145,7 @@ function osm_get_items($page) $INNER_JOIN = "INNER JOIN ".CATEGORIES_TABLE." AS c ON ic.category_id = c.id"; } } - + $forbidden = get_sql_condition_FandF( array ( @@ -134,7 +156,7 @@ function osm_get_items($page) "\n AND" ); - /* We have lat and lng coordonate for virtual album */ + /* We have lat and lng coordinate for virtual album */ if (isset($_GET['min_lat']) and isset($_GET['max_lat']) and isset($_GET['min_lng']) and isset($_GET['max_lng'])) { $LIMIT_SEARCH=""; @@ -186,6 +208,32 @@ function osm_get_items($page) // SUBSTRING_INDEX(TRIM(LEADING '.' FROM `path`), '.', 1) full path without filename extension // SUBSTRING_INDEX(TRIM(LEADING '.' FROM `path`), '.', -1) full path with only filename extension + // TF, 20160102 + // check if any items (= pictures) are on that page + // if not => has only sub galleries but no pictures => show only first picture IF flag $firstimageforsubcat is set accordingly + if (!($firstimageforsubcat) or isset($page['items']) and isset($page['items'][0])) + { + $only_first_item = false; + } + else + { + $only_first_item = true; + } + + // TF, 20160102 + // if we show only the first picture then we want to link to the category + if ($only_first_item) + { + $concat_for_url = "'category/', IFNULL(ic.category_id, '')"; + } + else + { + // Fix for issue #74: i.storage_category_id might be in the list of $forbidden categories, use ic.category_id instead + $concat_for_url = "i.id, '/category/', IFNULL(ic.category_id, '')"; + } + + // TF, 20160102 + // add ORDER BY to always show the first image in a category $query="SELECT i.latitude, i.longitude, IFNULL(i.name, '') AS `name`, IF(i.representative_ext IS NULL, @@ -201,30 +249,55 @@ function osm_get_items($page) ) ) ) AS `pathurl`, - TRIM(TRAILING '/' FROM CONCAT( i.id, '/category/', IFNULL(i.storage_category_id, '') ) ) AS `imgurl`, + TRIM(TRAILING '/' FROM CONCAT( ".$concat_for_url." ) ) AS `imgurl`, IFNULL(i.comment, '') AS `comment`, IFNULL(i.author, '') AS `author`, - i.width + i.width, + ic.category_id AS imgcategory FROM ".IMAGES_TABLE." AS i INNER JOIN (".IMAGE_CATEGORY_TABLE." AS ic ".$INNER_JOIN.") ON i.id = ic.image_id - WHERE ".$LIMIT_SEARCH." i.latitude IS NOT NULL AND i.longitude IS NOT NULL ".$forbidden." GROUP BY i.id;"; - //echo $query; + WHERE ".$LIMIT_SEARCH." i.latitude IS NOT NULL AND i.longitude IS NOT NULL ".$forbidden." GROUP BY i.id + ORDER BY ic.category_id, ic.rank"; + // echo $query; + // echo '
    '; + $php_data = array_from_query($query); //print_r($php_data); + $js_data = array(); + $cur_category = ""; foreach($php_data as $array) { // MySQL did all the job - //print_r($array); - $js_data[] = array((double)$array['latitude'], - (double)$array['longitude'], - $array['name'], - get_absolute_root_url() ."i.php?".$array['pathurl'], - get_absolute_root_url() ."picture.php?/".$array['imgurl'], - $array['comment'], - $array['author'], - (int)$array['width'] - ); + // print_r($array); + // echo '
    '; + if (!$only_first_item || $array['imgcategory'] != $cur_category) + { + // TF, 20160102 + // if we show only the first picture then we want to link to the category + if ($only_first_item) + { + $linkurl = get_absolute_root_url() ."index.php?/".$array['imgurl']; + } + else + { + $linkurl = get_absolute_root_url() ."picture.php?/".$array['imgurl']; + } + + $js_data[] = array((double)$array['latitude'], + (double)$array['longitude'], + $array['name'], + get_absolute_root_url() ."i.php?".$array['pathurl'], + $linkurl, + $array['comment'], + $array['author'], + (int)$array['width'] + ); + + $cur_category = $array['imgcategory']; + // print_r($linkurl); + // echo ' added
    '; + } } /* START Debug generate dummy data $js_data = array(); @@ -246,6 +319,7 @@ function osm_get_items($page) ); } END Debug generate dummy data */ + return $js_data; } @@ -262,6 +336,7 @@ function osm_get_js($conf, $local_conf, $js_data) $popupinfo_link = isset($conf['osm_conf']['left_menu']['popupinfo_link']) ? $conf['osm_conf']['left_menu']['popupinfo_link'] : 0; $popupinfo_comment = isset($conf['osm_conf']['left_menu']['popupinfo_comment']) ? $conf['osm_conf']['left_menu']['popupinfo_comment'] : 0; $popupinfo_author = isset($conf['osm_conf']['left_menu']['popupinfo_author']) ? $conf['osm_conf']['left_menu']['popupinfo_author'] : 0; + $popup_click_target = isset($conf['osm_conf']['left_menu']['popup_click_target']) ? $conf['osm_conf']['left_menu']['popup_click_target'] : 0; $baselayer = isset($conf['osm_conf']['map']['baselayer']) ? $conf['osm_conf']['map']['baselayer'] : 'mapnik'; $custombaselayer = isset($conf['osm_conf']['map']['custombaselayer']) ? $conf['osm_conf']['map']['custombaselayer'] : ''; $custombaselayerurl = isset($conf['osm_conf']['map']['custombaselayerurl']) ? $conf['osm_conf']['map']['custombaselayerurl'] : ''; @@ -292,13 +367,15 @@ function osm_get_js($conf, $local_conf, $js_data) // Load baselayerURL if ($baselayer == 'mapnik') $baselayerurl = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'; - else if($baselayer == 'mapquest') $baselayerurl = 'http://otile1.mqcdn.com/tiles/1.0.0/osm/{z}/{x}/{y}.png'; else if($baselayer == 'cloudmade') $baselayerurl = 'http://{s}.tile.cloudmade.com/7807cc60c1354628aab5156cfc1d4b3b/997/256/{z}/{x}/{y}.png'; else if($baselayer == 'mapnikde') $baselayerurl = 'http://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png'; else if($baselayer == 'mapnikfr') $baselayerurl = 'http://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png'; else if($baselayer == 'blackandwhite') $baselayerurl = 'http://{s}.www.toolserver.org/tiles/bw-mapnik/{z}/{x}/{y}.png'; else if($baselayer == 'mapnikhot') $baselayerurl = 'http://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png'; - else if($baselayer == 'mapquestaerial') $baselayerurl = 'http://oatile{s}.mqcdn.com/tiles/1.0.0/sat/{z}/{x}/{y}.jpg'; + // else if($baselayer == 'mapquest') $baselayerurl = 'http://otile1.mqcdn.com/tiles/1.0.0/osm/{z}/{x}/{y}.png'; + // else if($baselayer == 'mapquestaerial') $baselayerurl = 'http://oatile{s}.mqcdn.com/tiles/1.0.0/sat/{z}/{x}/{y}.jpg'; + else if($baselayer == 'mapquest') $baselayerurl = 'http://otile1.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.png'; + else if($baselayer == 'mapquestaerial') $baselayerurl = 'http://otile1.mqcdn.com/tiles/1.0.0/sat/{z}/{x}/{y}.png'; else if($baselayer == 'toner') $baselayerurl = 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner/{z}/{x}/{y}.png'; else if($baselayer == 'custom') $baselayerurl = $custombaselayerurl; @@ -478,7 +555,24 @@ function osm_get_js($conf, $local_conf, $js_data) $attribute = ' target=\"_blank\"'; else $attribute = ''; - $myinfo .= "
    "; + // TF, 20160102 + // choose link target based on config setting + $linktarget = "_blank"; + switch ($popup_click_target) { + case 0: + $linktarget = "_blank"; + break; + case 1: + $linktarget = "_top"; + break; + case 2: + $linktarget = "_self"; + break; + case 3: + $linktarget = "_parent"; + break; + } + $myinfo .= "
    "; } if($popupinfo_comment) { @@ -501,9 +595,16 @@ function osm_get_js($conf, $local_conf, $js_data) \t}"; if (isset($local_conf['paths'])) { foreach ($local_conf['paths'] as $path) { - $ext = pathinfo($path); - $ext = $ext['extension']; - $js .= "\nomnivore.".$ext."('".$path."').addTo(".$divname.");"; + $ext = pathinfo($path)['extension']; + $geojson_path = str_replace(".$ext", '.geojson', $path); + if (file_exists($geojson_path) and is_readable ($geojson_path)){ + $contain = file_get_contents(PHPWG_ROOT_PATH . $geojson_path); + $contain = rtrim($contain); + $js .= "\nvar contain = $contain"; + $js .= "\nvar l = L.geoJson(contain).addTo($divname);"; + } else { + $js .= "\nomnivore.".$ext."('".$path."').addTo(".$divname.");"; + } } } $js .= "\nif (typeof L.MarkerClusterGroup === 'function')\n"; @@ -516,6 +617,7 @@ function osm_get_js($conf, $local_conf, $js_data) }.bind(this), 200); }, this);"; } + return $js; } diff --git a/menu.inc.php b/menu.inc.php index af4e0c2..f7fdfd3 100644 --- a/menu.inc.php +++ b/menu.inc.php @@ -54,7 +54,8 @@ function osm_apply_menu($menu_ref_arr) // Comment are used only with this condition index.php l294 if ($page['start']==0 and !isset($page['chronology_field']) ) { - $js_data = osm_get_items($page); + // TF, 20160102: pass config as parameter + $js_data = osm_get_items($conf, $page); if ($js_data != array()) { $local_conf = array(); @@ -67,7 +68,8 @@ function osm_apply_menu($menu_ref_arr) $local_conf['zoom'] = 2; $local_conf['auto_center'] = 0; $local_conf['divname'] = 'mapmenu'; - $local_conf['paths'] = osm_get_gps($page); + // TF, 20160102: pass config as parameter + $local_conf['paths'] = osm_get_gps($conf, $page); $height = isset($conf['osm_conf']['main_menu']['height']) ? $conf['osm_conf']['main_menu']['height'] : '200'; $js = osm_get_js($conf, $local_conf, $js_data); $template->set_template_dir(dirname(__FILE__).'/template/'); diff --git a/mimetypes/kml.png b/mimetypes/kml.png new file mode 100644 index 0000000000000000000000000000000000000000..ee57ad221f59178a47d3d0bc8d56bc9e277be6f4 GIT binary patch literal 87199 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 literal 0 HcmV?d00001 diff --git a/osmmap.php b/osmmap.php index 1fc6cef..854c898 100644 --- a/osmmap.php +++ b/osmmap.php @@ -85,10 +85,12 @@ $local_conf['contextmenu'] = 'false'; $local_conf['control'] = true; $local_conf['img_popup'] = false; -$local_conf['paths'] = osm_get_gps($page); +// TF, 20160102: pass config as parameter +$local_conf['paths'] = osm_get_gps($conf, $page); $local_conf = $local_conf + $conf['osm_conf']['map'] + $conf['osm_conf']['left_menu']; -$js_data = osm_get_items($page); +// TF, 20160102: pass config as parameter +$js_data = osm_get_items($conf, $page); $js = osm_get_js($conf, $local_conf, $js_data); osm_gen_template($conf, $js, $js_data, 'osm-map.tpl', $template); ?> diff --git a/osmmap2.php b/osmmap2.php index 52b4144..ccffaba 100644 --- a/osmmap2.php +++ b/osmmap2.php @@ -86,10 +86,12 @@ $local_conf['contextmenu'] = 'true'; $local_conf['control'] = true; $local_conf['img_popup'] = false; -$local_conf['paths'] = osm_get_gps($page); +// TF, 20160102: pass config as parameter +$local_conf['paths'] = osm_get_gps($conf, $page); $local_conf = $local_conf + $conf['osm_conf']['map'] + $conf['osm_conf']['left_menu']; -$js_data = osm_get_items($page); +// TF, 20160102: pass config as parameter +$js_data = osm_get_items($conf, $page); $js = osm_get_js($conf, $local_conf, $js_data); osm_gen_template($conf, $js, $js_data, 'osm-map2.tpl', $template); ?> diff --git a/osmmap3.php b/osmmap3.php index b63e741..293ffe0 100644 --- a/osmmap3.php +++ b/osmmap3.php @@ -86,10 +86,12 @@ $local_conf['contextmenu'] = 'true'; $local_conf['control'] = true; $local_conf['img_popup'] = false; -$local_conf['paths'] = osm_get_gps($page); +// TF, 20160102: pass config as parameter +$local_conf['paths'] = osm_get_gps($conf, $page); $local_conf = $local_conf + $conf['osm_conf']['map'] + $conf['osm_conf']['left_menu']; -$js_data = osm_get_items($page); +// TF, 20160102: pass config as parameter +$js_data = osm_get_items($conf, $page); $js = osm_get_js($conf, $local_conf, $js_data); osm_gen_template($conf, $js, $js_data, 'osm-map3.tpl', $template); ?> diff --git a/picture.inc.php b/picture.inc.php index 7abd4ce..b971524 100644 --- a/picture.inc.php +++ b/picture.inc.php @@ -126,7 +126,8 @@ function osm_render_element_content() $local_conf['center_lng'] = $lon; $local_conf['zoom'] = $zoom; - $js_data = osm_get_items($page); + // TF, 20160102: pass config as parameter + $js_data = osm_get_items($conf, $page); $js = osm_get_js($conf, $local_conf, $js_data); From fc50bddae61007b26d685804323db9acf8132d7e Mon Sep 17 00:00:00 2001 From: ThomasDaheim Date: Sat, 2 Jan 2016 17:59:07 +0100 Subject: [PATCH 06/11] Manual sync with xbgmsharp/master --- include/functions_map.php | 65 ++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 29 deletions(-) diff --git a/include/functions_map.php b/include/functions_map.php index 7bd6550..7944c8b 100644 --- a/include/functions_map.php +++ b/include/functions_map.php @@ -88,13 +88,6 @@ function osm_get_gps($conf, $page) } } - // print_r('limit: '); - // print_r($LIMIT_SEARCH); - // print_r(' - '); - // print_r('join: '); - // print_r($INNER_JOIN); - // print_r(' - '); - $forbidden = get_sql_condition_FandF( array ( @@ -108,7 +101,7 @@ function osm_get_gps($conf, $page) /* Get all GPX tracks */ $query="SELECT i.path FROM ".IMAGES_TABLE." AS i INNER JOIN (".IMAGE_CATEGORY_TABLE." AS ic ".$INNER_JOIN.") ON i.id = ic.image_id - WHERE ".$LIMIT_SEARCH." `path` LIKE '%gpx%' ".$forbidden." "; + WHERE ".$LIMIT_SEARCH." `path` LIKE '%.gpx' ".$forbidden." "; $gpx_list = array_from_query($query, 'path'); } @@ -234,6 +227,7 @@ function osm_get_items($conf, $page) // TF, 20160102 // add ORDER BY to always show the first image in a category + if (isset($page['image_id'])) $LIMIT_SEARCH .= 'i.id = ' . $page['image_id'] . ' AND '; $query="SELECT i.latitude, i.longitude, IFNULL(i.name, '') AS `name`, IF(i.representative_ext IS NULL, @@ -259,7 +253,6 @@ function osm_get_items($conf, $page) WHERE ".$LIMIT_SEARCH." i.latitude IS NOT NULL AND i.longitude IS NOT NULL ".$forbidden." GROUP BY i.id ORDER BY ic.category_id, ic.rank"; // echo $query; - // echo '
    '; $php_data = array_from_query($query); //print_r($php_data); @@ -295,8 +288,6 @@ function osm_get_items($conf, $page) ); $cur_category = $array['imgcategory']; - // print_r($linkurl); - // echo ' added
    '; } } /* START Debug generate dummy data @@ -354,27 +345,35 @@ function osm_get_js($conf, $local_conf, $js_data) $divname = isset($local_conf['divname']) ? $local_conf['divname'] : 'map'; /* If the config include parameters get them */ - $zoom = isset($conf['osm_conf']['left_menu']['zoom']) ? $conf['osm_conf']['left_menu']['zoom'] : 2; + $center = isset($conf['osm_conf']['left_menu']['center']) ? $conf['osm_conf']['left_menu']['center'] : '0,0'; $center_arr = preg_split('/,/', $center); $center_lat = isset($center_arr) ? $center_arr[0] : 0; $center_lng = isset($center_arr) ? $center_arr[1] : 0; /* If we have zoom and center coordonate, set it otherwise fallback default */ - $zoom = isset($_GET['zoom']) ? $_GET['zoom'] : $zoom; + $zoom = isset($_GET['zoom']) + ? $_GET['zoom'] + : ( + isset($local_conf['zoom']) + ? $local_conf['zoom'] + : 2 + ); $center_lat = isset($_GET['center_lat']) ? $_GET['center_lat'] : $center_lat; $center_lng = isset($_GET['center_lng']) ? $_GET['center_lng'] : $center_lng; + $autocenter = isset($local_conf['autocenter']) + ? $local_conf['autocenter'] + : 0; // Load baselayerURL + // TF, 20160102: fix for broken mapquest links if ($baselayer == 'mapnik') $baselayerurl = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'; + else if($baselayer == 'mapquest') $baselayerurl = 'http://otile1.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.png'; else if($baselayer == 'cloudmade') $baselayerurl = 'http://{s}.tile.cloudmade.com/7807cc60c1354628aab5156cfc1d4b3b/997/256/{z}/{x}/{y}.png'; else if($baselayer == 'mapnikde') $baselayerurl = 'http://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png'; else if($baselayer == 'mapnikfr') $baselayerurl = 'http://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png'; else if($baselayer == 'blackandwhite') $baselayerurl = 'http://{s}.www.toolserver.org/tiles/bw-mapnik/{z}/{x}/{y}.png'; else if($baselayer == 'mapnikhot') $baselayerurl = 'http://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png'; - // else if($baselayer == 'mapquest') $baselayerurl = 'http://otile1.mqcdn.com/tiles/1.0.0/osm/{z}/{x}/{y}.png'; - // else if($baselayer == 'mapquestaerial') $baselayerurl = 'http://oatile{s}.mqcdn.com/tiles/1.0.0/sat/{z}/{x}/{y}.jpg'; - else if($baselayer == 'mapquest') $baselayerurl = 'http://otile1.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.png'; else if($baselayer == 'mapquestaerial') $baselayerurl = 'http://otile1.mqcdn.com/tiles/1.0.0/sat/{z}/{x}/{y}.png'; else if($baselayer == 'toner') $baselayerurl = 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner/{z}/{x}/{y}.png'; else if($baselayer == 'custom') $baselayerurl = $custombaselayerurl; @@ -421,7 +420,7 @@ function osm_get_js($conf, $local_conf, $js_data) $js .= "\nvar Url = '".$baselayerurl."', Attribution = '".$attribution."', TileLayer = new L.TileLayer(Url, {maxZoom: 18, noWrap: ".$nowarp.", attribution: Attribution});\n"; - $js .= "var " . $divname . " = new L.Map('" . $divname . "', {" . $worldcopyjump . ", zoom: ".$local_conf['zoom'].", layers: [TileLayer], contextmenu: " . $local_conf['contextmenu'] . "});\n"; + $js .= "var " . $divname . " = new L.Map('" . $divname . "', {" . $worldcopyjump . ", zoom: ".$zoom.", layers: [TileLayer], contextmenu: " . $local_conf['contextmenu'] . "});\n"; $js .= $divname . ".attributionControl.setPrefix('');\n"; $js .= "\nL.control.scale().addTo(" . $divname . ");\n"; return $js; @@ -431,7 +430,7 @@ function osm_get_js($conf, $local_conf, $js_data) Attribution = '".$attribution."', TileLayer = new L.TileLayer(Url, {maxZoom: 18, noWrap: ".$nowarp.", attribution: Attribution}), latlng = new L.LatLng(".$local_conf['center_lat'].", ".$local_conf['center_lng'].");\n"; - $js .= "var " . $divname . " = new L.Map('" . $divname . "', {" . $worldcopyjump . ", center: latlng, ".$editor." zoom: ".$local_conf['zoom'].", layers: [TileLayer], contextmenu: " . $local_conf['contextmenu'] . "});\n"; + $js .= "var " . $divname . " = new L.Map('" . $divname . "', {" . $worldcopyjump . ", center: latlng, ".$editor." zoom: ".$zoom.", layers: [TileLayer], contextmenu: " . $local_conf['contextmenu'] . "});\n"; $js .= $divname . ".attributionControl.setPrefix('');\n"; $js .= "var MarkerClusterList=[];\n"; $js .= "if (typeof L.MarkerClusterGroup === 'function')\n"; @@ -595,21 +594,14 @@ function osm_get_js($conf, $local_conf, $js_data) \t}"; if (isset($local_conf['paths'])) { foreach ($local_conf['paths'] as $path) { - $ext = pathinfo($path)['extension']; - $geojson_path = str_replace(".$ext", '.geojson', $path); - if (file_exists($geojson_path) and is_readable ($geojson_path)){ - $contain = file_get_contents(PHPWG_ROOT_PATH . $geojson_path); - $contain = rtrim($contain); - $js .= "\nvar contain = $contain"; - $js .= "\nvar l = L.geoJson(contain).addTo($divname);"; - } else { - $js .= "\nomnivore.".$ext."('".$path."').addTo(".$divname.");"; - } + $ext = pathinfo($path); + $ext = $ext['extension']; + $js .= "\nomnivore.".$ext."('".$path."').addTo(".$divname.");"; } } $js .= "\nif (typeof L.MarkerClusterGroup === 'function')\n"; $js .= " " . $divname . ".addLayer(markers);\n"; - if (isset($local_conf['auto_center']) and $local_conf['auto_center'] === 0 ) { + if ( $autocenter ) { $js .= "var group = new L.featureGroup(MarkerClusterList);"; $js .= "this." . $divname . ".whenReady(function () { window.setTimeout(function () { @@ -638,9 +630,24 @@ function osm_gen_template($conf, $js, $js_data, $tmpl, $template) 'TOTAL' => sprintf( l10n('ITEMS'), count($js_data) ), 'OSMJS' => $js, 'MYROOT_URL' => get_absolute_root_url(), + 'default_baselayer' => $conf['osm_conf']['map']['baselayer'], ) ); + if ( $conf['osm_conf']['map']['baselayer'] == 'custom' ) { + $iconbaselayer = $conf['osm_conf']['map']['custombaselayerurl']; + $iconbaselayer = str_replace('{s}', 'a', $iconbaselayer); + $iconbaselayer = str_replace('{z}', '5', $iconbaselayer); + $iconbaselayer = str_replace('{x}', '15', $iconbaselayer); + $iconbaselayer = str_replace('{y}', '11', $iconbaselayer); + $template->assign( + array( + 'custombaselayer' => $conf['osm_conf']['map']['custombaselayer'], + 'custombaselayerurl' => $conf['osm_conf']['map']['custombaselayerurl'], + 'iconbaselayer' => $iconbaselayer, + ) + ); + } $template->pparse('map'); $template->p(); } From 9818cbdb8d02b5e7077c88439c8eb6008f0f76b6 Mon Sep 17 00:00:00 2001 From: ThomasDaheim Date: Sat, 2 Jan 2016 18:04:16 +0100 Subject: [PATCH 07/11] Manual sync with xbgmsharp/master (II) --- include/functions_map.php | 8 -------- 1 file changed, 8 deletions(-) diff --git a/include/functions_map.php b/include/functions_map.php index ba6948a..7944c8b 100644 --- a/include/functions_map.php +++ b/include/functions_map.php @@ -201,7 +201,6 @@ function osm_get_items($conf, $page) // SUBSTRING_INDEX(TRIM(LEADING '.' FROM `path`), '.', 1) full path without filename extension // SUBSTRING_INDEX(TRIM(LEADING '.' FROM `path`), '.', -1) full path with only filename extension -<<<<<<< HEAD // TF, 20160102 // check if any items (= pictures) are on that page // if not => has only sub galleries but no pictures => show only first picture IF flag $firstimageforsubcat is set accordingly @@ -229,9 +228,6 @@ function osm_get_items($conf, $page) // TF, 20160102 // add ORDER BY to always show the first image in a category if (isset($page['image_id'])) $LIMIT_SEARCH .= 'i.id = ' . $page['image_id'] . ' AND '; -======= - // Fix for issue #74: i.storage_category_id might be in the list of $forbidden categories, use ic.category_id instead ->>>>>>> refs/remotes/origin/Fix-for-#74 $query="SELECT i.latitude, i.longitude, IFNULL(i.name, '') AS `name`, IF(i.representative_ext IS NULL, @@ -247,11 +243,7 @@ function osm_get_items($conf, $page) ) ) ) AS `pathurl`, -<<<<<<< HEAD TRIM(TRAILING '/' FROM CONCAT( ".$concat_for_url." ) ) AS `imgurl`, -======= - TRIM(TRAILING '/' FROM CONCAT( i.id, '/category/', IFNULL(ic.category_id, '') ) ) AS `imgurl`, ->>>>>>> refs/remotes/origin/Fix-for-#74 IFNULL(i.comment, '') AS `comment`, IFNULL(i.author, '') AS `author`, i.width, From 9dbafd01ff9fe6f719e4baa44698dd3e70648e3b Mon Sep 17 00:00:00 2001 From: ThomasDaheim Date: Sat, 2 Jan 2016 18:43:15 +0100 Subject: [PATCH 08/11] Added english descriptions for new options --- admin/admin_config.tpl | 2 +- language/en_UK/plugin.lang.php | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/admin/admin_config.tpl b/admin/admin_config.tpl index d046b6e..11fc47f 100644 --- a/admin/admin_config.tpl +++ b/admin/admin_config.tpl @@ -110,7 +110,7 @@ Refer to the {'LEFTPOPUPINFO_DESC'|@translate}
  • - + diff --git a/language/en_UK/plugin.lang.php b/language/en_UK/plugin.lang.php index 443e9a0..e88e925 100644 --- a/language/en_UK/plugin.lang.php +++ b/language/en_UK/plugin.lang.php @@ -32,11 +32,19 @@ $lang['POPUPLINK'] = "Add a link to image"; $lang['POPUPCOMMENT'] = "Comment of the image"; $lang['POPUPAUTHOR'] = "Author of the image"; +$lang['TOP'] = "Same window"; +$lang['BLANK'] = "New window"; +$lang['LEFTPOPUPCLICKTARGET'] = "Where should page with image open"; +$lang['LEFTPOPUPCLICKTARGET_DESC'] = "Select target for image page when clicking on a popup. Default is new window."; $lang['C_MAP'] = "Category's description"; $lang['SHOWCMAP'] = "Add a map in category's description"; $lang['SHOWCMAP_DESC'] = 'Show a world map menu on category\'s description, will display all the images in the gallery.'; $lang['WIDTH'] = 'Map width'; $lang['WIDTH_DESC'] = 'in px or auto'; +$lang['NOGPXFORSUBCAT'] = 'Hide gpx tracks of sub-categories'; +$lang['NOGPXFORSUBCAT_DESC'] = "Should gpx tracks of sub-categories be hidden in a category's map? Default is no."; +$lang['FIRSTIMAGEFORSUBCAT'] = 'Show only first image of sub-categories'; +$lang['FIRSTIMAGEFORSUBCAT_DESC'] = "Should only the first image of sub-categories be shown in a category's map? Default is no."; $lang['M_MAP'] = "Main menu"; $lang['SHOWMMAP'] = "Add a map in main menu"; $lang['SHOWMMAP_DESC'] = 'Show a world map menu on main menu, will display all the images in the gallery.'; From 8c1c3a7a637eccfbb92368b8827a8d0424689393 Mon Sep 17 00:00:00 2001 From: ThomasDaheim Date: Mon, 28 Mar 2016 20:53:54 +0200 Subject: [PATCH 09/11] Sync with "autocenter" update in xbgmsharp/master --- admin/admin_config.php | 1 + admin/admin_config.tpl | 6 ++++++ category.inc.php | 2 +- include/functions_map.php | 5 +++-- menu.inc.php | 2 +- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/admin/admin_config.php b/admin/admin_config.php index fc4318e..9fbf8b9 100644 --- a/admin/admin_config.php +++ b/admin/admin_config.php @@ -179,6 +179,7 @@ 'popup_click_target'=> $_POST['osm_left_popup_click_target'], 'zoom' => $_POST['osm_left_zoom'], 'center' => $_POST['osm_left_center'], + 'autocenter' => get_boolean($_POST['osm_left_autocenter']), 'layout' => $_POST['osm_left_layout'], ), 'category_description' => array( diff --git a/admin/admin_config.tpl b/admin/admin_config.tpl index 11fc47f..c7e833b 100644 --- a/admin/admin_config.tpl +++ b/admin/admin_config.tpl @@ -109,6 +109,12 @@ Refer to the {'LEFTPOPUPINFO_DESC'|@translate}
  • +
  • + + + +
    {'The map will be automatically centered and zoomed to contain all infos.'|@translate} +
  • {html_options options=$AVAILABLE_ZOOM selected=$left_menu.zoom}
    {'ZOOM_DESC'|@translate}
  • -
  • +

  • {'CENTER_MAP_DESC'|@translate} @@ -235,16 +235,27 @@ Refer to the
    Check out this example with half a hundred different layers to choose from.
  • +
  • @@ -328,14 +339,21 @@ Refer to the function tile_toggle() { - var div = document.getElementById("custom-tile-toggle"); + var div_custom = document.getElementById("custom-tile-toggle"); + var div_mapquest = document.getElementById("mapquest-tile-toggle"); var select = document.getElementById("osm_baselayer").value; //alert(select.selectedIndex); if (select == "custom") // If custom { - div.removeAttribute("style"); + div_custom.removeAttribute("style"); + div_mapquest.setAttribute("style","visibility:hidden; width:0px; height:0px; display:none;"); + } else if (select.startsWith("mapquest")) // If mapquest + { + div_mapquest.removeAttribute("style"); + div_custom.setAttribute("style","visibility:hidden; width:0px; height:0px; display:none;"); } else { - div.setAttribute("style","visibility:hidden; width:0px; height:0px; display:none;"); + div_custom.setAttribute("style","visibility:hidden; width:0px; height:0px; display:none;"); + div_mapquest.setAttribute("style","visibility:hidden; width:0px; height:0px; display:none;"); } tile_preview(); } @@ -354,9 +372,30 @@ function pin_toggle() pin_preview(); } +function autocenter_toggle() +{ + var radio = document.getElementById("autocenter_enabled"); + var zoom_block = document.getElementById("osm_left_zoom_block"); + var center_block = document.getElementById("osm_left_center_block"); + if (radio.checked) // If autocenter + { + zoom_block.setAttribute("style", "display:none;"); + center_block.setAttribute("style", "display:none;"); + } else { + zoom_block.removeAttribute("style"); + center_block.removeAttribute("style"); + } +} + function tile_preview() { var select = document.getElementById("osm_baselayer"); + var custom_url = document.getElementById("osm_custombaselayerurl").value; + if ( custom_url ) { + custom_url = custom_url.replace('{z}', '5').replace('{x}', '15').replace('{y}', '11'); + } else { + custom_url = 'NULL'; + } baselayer = new Array( '{/literal}{$OSM_PATH}{literal}leaflet/icons/preview_openstreetmap_mapnik.png', '{/literal}{$OSM_PATH}{literal}leaflet/icons/preview_openstreetmap_blackandwhite.png', @@ -365,9 +404,9 @@ function tile_preview() '{/literal}{$OSM_PATH}{literal}leaflet/icons/preview_openstreetmap_fr.png', '{/literal}{$OSM_PATH}{literal}leaflet/icons/preview_mapquest.png', '{/literal}{$OSM_PATH}{literal}leaflet/icons/preview_mapquest_aerial.png', - 'https://a.tile.cloudmade.com/7807cc60c1354628aab5156cfc1d4b3b/997/256/5/15/11.png', '{/literal}{$OSM_PATH}{literal}leaflet/icons/preview_toner.png', - 'NULL' + custom_url, + '{/literal}{$OSM_PATH}{literal}leaflet/icons/preview_Esri.WorldTopoMap.png' ); //alert(baselayer[select.selectedIndex]); var img_elem = document.getElementById("tile_preview"); @@ -410,6 +449,7 @@ function pin_preview() window.onload = pin_preview(); window.onload = tile_preview(); +window.onload = autocenter_toggle() {/literal} diff --git a/admin/admin_photo.php b/admin/admin_photo.php index f169a59..143650e 100644 --- a/admin/admin_photo.php +++ b/admin/admin_photo.php @@ -39,12 +39,23 @@ $admin_photo_base_url = get_root_url().'admin.php?page=photo-'.$_GET['image_id']; $self_url = get_root_url().'admin.php?page=plugin&section=piwigo-openstreetmap/admin/admin_photo.php&image_id='.$_GET['image_id']; +$delete_url = get_root_url().'admin.php?page=plugin&section=piwigo-openstreetmap/admin/admin_photo.php&delete_coords=1&image_id='.$_GET['image_id'].'&pwg_token='.get_pwg_token(); load_language('plugin.lang', PHPWG_PLUGINS_PATH.basename(dirname(__FILE__)).'/'); load_language('plugin.lang', OSM_PATH); global $template, $page, $conf; +// Delete the extra data +if (isset($_GET['delete_coords']) and $_GET['delete_coords'] == 1) +{ + check_pwg_token(); + $_POST['osmlat'] = ""; + $_POST['osmlon'] = ""; + $_POST['submit'] = 1; +} + + if (isset($_POST['submit'])) { check_pwg_token(); @@ -60,10 +71,12 @@ else $page['errors'][] = 'Invalid latitude or longitude value'; } - elseif ( strlen($lat)==0 and strlen($lon)==0 ) + elseif ( (strlen($lat)==0 and strlen($lon)==0) or (isset($_GET['delete_coords']) and $_GET['delete_coords'] == 1)) { $update_query = 'latitude=NULL, longitude=NULL'; - else + array_push( $page['infos'], l10n('Coordinates erased')); + } else { $page['errors'][] = 'Both latitude/longitude must be empty or not empty'; + } if (isset($update_query)) { @@ -142,6 +155,8 @@ // Easy access define('osm_place_table', $prefixeTable.'osm_places'); // Save location, eg Place +$list_of_places = array(); +$available_places = array(); $query = ' SELECT id, name, latitude, longitude FROM '.osm_place_table.' @@ -150,23 +165,24 @@ // JS for the template while ($row = pwg_db_fetch_assoc($result)) { - $list_of_places[$row['id']] = [$row['name'], $row['latitude'], $row['longitude'] ]; + $list_of_places[$row['id']] = array($row['name'], $row['latitude'], $row['longitude']); $available_places[$row['id']] = $row['name']; } $jsplaces = "\nvar arr_places = ". json_encode($list_of_places) .";\n"; $template->assign(array( - 'PWG_TOKEN' => get_pwg_token(), - 'F_ACTION' => $self_url, - 'TN_SRC' => DerivativeImage::thumb_url($picture).'?'.time(), - 'TITLE' => render_element_name($picture), - 'OSM_PATH' => embellish_url(get_absolute_root_url().OSM_PATH), - 'OSM_JS' => $js, - 'LAT' => $lat, - 'LON' => $lon, - 'AVAILABLE_PLACES' => $available_places, - 'LIST_PLACES' => $jsplaces, + 'PWG_TOKEN' => get_pwg_token(), + 'F_ACTION' => $self_url, + 'DELETE_URL' => $delete_url, + 'TN_SRC' => DerivativeImage::thumb_url($picture).'?'.time(), + 'TITLE' => render_element_name($picture), + 'OSM_PATH' => embellish_url(get_absolute_root_url().OSM_PATH), + 'OSM_JS' => $js, + 'LAT' => $lat, + 'LON' => $lon, + 'AVAILABLE_PLACES' => $available_places, + 'LIST_PLACES' => $jsplaces, )); $template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content'); diff --git a/admin/admin_photo.tpl b/admin/admin_photo.tpl index 850684f..d1ab853 100644 --- a/admin/admin_photo.tpl +++ b/admin/admin_photo.tpl @@ -36,8 +36,8 @@
    {'Thumbnail'|@translate}
    -
  • {'EDIT_MAP'|@translate} {'EDIT_UPDATE_LOCATION_DESC'|@translate}
    -
    - Search values: OpenStreetMap Data offer by MapQuest Open Platform - open.mapquestapi.com -

    @@ -94,7 +98,9 @@ map.on('click', onMapClick); + /* Disable search require AppKey from mapquest */ /* BEGIN leaflet-search */ + /* var jsonpurl = 'https://open.mapquestapi.com/nominatim/v1/search.php?q={s}'+ '&format=json&osm_type=N&limit=100&addressdetails=0', jsonpName = 'json_callback'; @@ -128,6 +134,7 @@ }; map.addControl( new L.Control.Search(searchOpts) ); + */ /* END leaflet-search */ function place_to_latlon() diff --git a/admin/admin_place.php b/admin/admin_place.php index c6559f4..feebc40 100644 --- a/admin/admin_place.php +++ b/admin/admin_place.php @@ -6,7 +6,7 @@ * * Created : 07.07.2015 * -* Copyright 2013-2015 +* Copyright 2013-2016 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/admin/admin_tag.php b/admin/admin_tag.php index 917d1e9..ba0645f 100644 --- a/admin/admin_tag.php +++ b/admin/admin_tag.php @@ -6,7 +6,7 @@ * * Created : 06.07.2015 * -* Copyright 2013-2015 +* Copyright 2013-2016 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -52,9 +52,18 @@ 'osm_tag_address_country_code' => false, ); -if ( isset($_POST['osm_tag_submit']) ) +// Check if tag_groups is present and active +$query="SELECT COUNT(*) FROM ".PLUGINS_TABLE." WHERE `id`='tag_groups' AND `state`='active';"; +list($tag_groups) = pwg_db_fetch_array( pwg_query($query) ); +if ($tag_groups != 1) { + $page['warnings'][] = "To use this feature you need the tag_groups plugin to be activate"; +} + +// On submit +if ( $tag_groups == 1 and isset($_POST['osm_tag_submit']) ) { // Override default value from the form + $tmp = preg_split("/_/",$_POST['language']); $sync_options = array( 'overwrite' => isset($_POST['overwrite']), 'simulate' => isset($_POST['simulate']), @@ -68,11 +77,12 @@ 'osm_tag_address_state' => isset($_POST['osm_tag_address_state']), 'osm_tag_address_country' => isset($_POST['osm_tag_address_country']), 'osm_tag_address_postcode' => isset($_POST['osm_tag_address_postcode']), - 'osm_tag_address_country_code' => isset($_POST['osm_tag_address_country_code']) + 'osm_tag_address_country_code' => isset($_POST['osm_tag_address_country_code']), + 'language' => $tmp[0], ); // TODO allow to filter on overwrite - // Define files which lat and long avaiable + // Define files with lat and lon available define('SQL_EXIF', "`latitude` IS NOT NULL AND `longitude` is NOT NULL"); if ( $sync_options['cat_id']!=0 ) { @@ -101,18 +111,21 @@ foreach ($images as $image) { // Fech reverse location from API + // http://wiki.openstreetmap.org/wiki/Nominatim // https://nominatim.openstreetmap.org/reverse?format=xml&lat=51.082333&lon=10.366229&zoom=12 // https://open.mapquestapi.com/nominatim/v1/reverse.php?format=xml&lat=48.858366666667&lon=2.2942166666667&zoom=12 - // http://wiki.openstreetmap.org/wiki/Nominatim //$osm_url = "https://nominatim.openstreetmap.org/reverse?format=json&addressdetails=1&zoom=12&lat=". $image['latitude'] ."&lon=". $image['longitude']; - $osm_url = "https://open.mapquestapi.com/nominatim/v1/reverse.php?format=json&addressdetails=1&zoom=12&lat=". $image['latitude'] ."&lon=". $image['longitude']; + // As of Sept 2015 require a API KEY + //$osm_url = "https://open.mapquestapi.com/nominatim/v1/reverse.php?format=json&addressdetails=1&zoom=12&lat=". $image['latitude'] ."&lon=". $image['longitude']; + //$osm_url = "http://localhost:8443/api/". $image['latitude'] ."/". $image['longitude']; + $osm_url = "https://nominatim-xbgmsharp.rhcloud.com/api/". $image['latitude'] ."/". $image['longitude'] ."/". $sync_options['language']; //print $osm_url ."
    "; // Ensure we do have PHP curl install // Or should fallback to fopen if (function_exists('curl_init')) { - // Get cURL resource + // Get Curl resource $curl = curl_init(); // Set some options http://wiki.openstreetmap.org/wiki/Nominatim_usage_policy curl_setopt_array($curl, array( @@ -127,7 +140,7 @@ curl_close($curl); } else { - // Curl module un available, use fopen + // Curl module unavailable, use fopen $opts = array( 'http'=>array( 'method'=>"GET", @@ -153,51 +166,54 @@ //print_r($response); // If reponse include [address] - if (isset($response) and isset($response['address']) and is_array($response['address'])) + if (isset($response) and isset($response['success']) and isset($response['success'][0]) and isset($response['success'][0]['result']) + and isset($response['success'][0]['result']['address']) and is_array($response['success'][0]['result']['address'])) { + $response['address'] = $response['success'][0]['result']['address']; //print_r($response['address']); //print_r($sync_options); - $tag_ids = array(); $tag_names = array(); if (isset($response['address']['suburb']) and $sync_options['osm_tag_address_suburb']) { - array_push( $tag_ids, tag_id_from_tag_name($sync_options['osm_tag_group'].":".$response['address']['suburb']) ); array_push( $tag_names, $response['address']['suburb'] ); } if (isset($response['address']['city_district']) and $sync_options['osm_tag_address_city_district']) { - array_push( $tag_ids, tag_id_from_tag_name($sync_options['osm_tag_group'].":".$response['address']['city_district']) ); array_push( $tag_names, $response['address']['city_district'] ); } if (isset($response['address']['city']) and $sync_options['osm_tag_address_city']) { - array_push( $tag_ids, tag_id_from_tag_name($sync_options['osm_tag_group'].":".$response['address']['city']) ); array_push( $tag_names, $response['address']['city'] ); } if (isset($response['address']['county']) and $sync_options['osm_tag_address_county']) { - array_push( $tag_ids, tag_id_from_tag_name($sync_options['osm_tag_group'].":".$response['address']['county']) ); array_push( $tag_names, $response['address']['county'] ); } if (isset($response['address']['state']) and $sync_options['osm_tag_address_state']) { - array_push( $tag_ids, tag_id_from_tag_name($sync_options['osm_tag_group'].":".$response['address']['state']) ); array_push( $tag_names, $response['address']['state'] ); } if (isset($response['address']['country']) and $sync_options['osm_tag_address_country']) { - array_push( $tag_ids, tag_id_from_tag_name($sync_options['osm_tag_group'].":".$response['address']['country']) ); array_push( $tag_names, $response['address']['country'] ); } if (isset($response['address']['postcode']) and $sync_options['osm_tag_address_postcode']) { - array_push( $tag_ids, tag_id_from_tag_name($sync_options['osm_tag_group'].":".$response['address']['postcode']) ); array_push( $tag_names, $response['address']['postcode'] ); } if (isset($response['address']['country_code']) and $sync_options['osm_tag_address_country_code']) { - array_push( $tag_ids, tag_id_from_tag_name($sync_options['osm_tag_group'].":".$response['address']['country_code']) ); array_push( $tag_names, $response['address']['country_code'] ); } - //print_r($tag_ids); //print_r($tag_names); - if (!empty($tag_ids) and !empty($tag_names)) + if (!empty($tag_names)) { if (!$sync_options['simulate']) { - add_tags($tag_ids, [$image['id']]); + /* Create tag */ + $tag_ids = array(); + foreach ($tag_names as $tag_name) + { + array_push( $tag_ids, tag_id_from_tag_name($sync_options['osm_tag_group'].":".$tag_name) ); + } + /* Assign tags to image */ + //print_r($tag_ids); + if (!empty($tag_ids)) + { + add_tags($tag_ids, array($image['id'])); + } } $datas[] = $image['id']; $infos[] = "Set tags '". osm_pprint_r($tag_names) ."' for ". $image['name']; @@ -227,13 +243,6 @@ ); } -// Check if tag_groups is present and active -$query="SELECT COUNT(*) FROM ".PLUGINS_TABLE." WHERE `id`='tag_groups' AND `state`='active';"; -list($tag_groups) = pwg_db_fetch_array( pwg_query($query) ); -if ($tag_groups != 1) { - $page['warnings'][] = "To use this feature you need the tag_groups plugin to be activate"; -} - $query = 'SELECT COUNT(*) FROM '.IMAGES_TABLE.' WHERE `latitude` IS NOT NULL and `longitude` IS NOT NULL '; list($nb_geotagged) = pwg_db_fetch_array( pwg_query($query) ); @@ -249,6 +258,9 @@ 'SUBCATS_INCLUDED_CHECKED' => $sync_options['subcats_included'] ? 'checked="checked"' : '', 'NB_GEOTAGGED' => $nb_geotagged, 'OSM_PATH' => OSM_PATH, + 'sync_options' => $sync_options, + 'language_options' => get_languages(), + 'language_selected' => get_default_language(), ) ); diff --git a/admin/admin_tag.tpl b/admin/admin_tag.tpl index 594f97e..b806f7f 100644 --- a/admin/admin_tag.tpl +++ b/admin/admin_tag.tpl @@ -76,24 +76,36 @@ Refer to the


  • - {'suburb'|@translate}
    - {'city_district'|@translate}
    - {'city'|@translate}
    - {'county'|@translate}
    - {'state'|@translate}
    - {'country'|@translate}
    - {'postcode'|@translate}
    - {'country_code'|@translate}
    + {'suburb'|@translate}
    + {'city_district'|@translate}
    + {'city'|@translate}
    + {'county'|@translate}
    + {'state'|@translate}
    + {'country'|@translate}
    + {'postcode'|@translate}
    + {'country_code'|@translate}
    - {'Create tag using one or multiple value from the adress part'|@translate} + {'Create tag using one or multiple value from the address part'|@translate} +
  • + +
  • +
    +
    + +
    + {'Fetch the result in a specific language, mostly for the country and city fields, eg: (EN:Japan, ES:Japón, FR:Japon, JP:日本)'|@translate}
  • +
    diff --git a/category.inc.php b/category.inc.php index 6d328a7..038e283 100644 --- a/category.inc.php +++ b/category.inc.php @@ -6,7 +6,7 @@ * * Created : 10.10.2014 * -* Copyright 2013-2015 +* Copyright 2013-2016 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -56,7 +56,7 @@ function osm_render_category() $local_conf['center_lat'] = 0; $local_conf['center_lng'] = 0; $local_conf['zoom'] = 2; - $local_conf['auto_center'] = 1; + $local_conf['autocenter'] = 1; // TF, 20160102: pass config as parameter $local_conf['paths'] = osm_get_gps($conf, $page); $height = isset($conf['osm_conf']['category_description']['height']) ? $conf['osm_conf']['category_description']['height'] : '200'; diff --git a/gpx.inc.php b/gpx.inc.php index 69a253a..9bf472a 100644 --- a/gpx.inc.php +++ b/gpx.inc.php @@ -6,7 +6,7 @@ * * Created : 01.11.2014 * -* Copyright 2013-2015 +* Copyright 2013-2016 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -68,7 +68,8 @@ function osm_render_media($content, $picture) $js = osm_get_js($conf, $local_conf, $js_data); - // Select the template based on the extension + // Select the template + // TF, 22.10.2015: handle kml as well! if (strpos($picture['current']['path'],".gpx") === false) { $template->set_filenames( @@ -79,7 +80,6 @@ function osm_render_media($content, $picture) array('osm_content' => dirname(__FILE__)."/template/osm-gpx.tpl") ); } - // Assign the template variables $template->assign( array( @@ -100,6 +100,7 @@ function osm_render_media($content, $picture) add_event_handler('get_mimetype_location', 'osm_get_mimetype_icon'); function osm_get_mimetype_icon($location, $element_info) { + // TF, 22.10.2015: handle kml as well! if ($element_info == 'gpx' || $element_info == 'kml') { $location = 'plugins/' diff --git a/include/functions_map.php b/include/functions_map.php index 38d4807..0bb7fe5 100644 --- a/include/functions_map.php +++ b/include/functions_map.php @@ -40,11 +40,11 @@ function osmcopyright($attrleaflet, $attrimagery, $attrmodule, $bl, $custombasel else if($bl == 'mapnikde') $return .= "Tiles Courtesy of Openstreetmap.de (CC BY-SA)"; else if($bl == 'blackandwhite') $return .= "Tiles Courtesy of OSM.org (CC BY-SA)"; else if($bl == 'mapnikhot') $return .= 'Tiles Courtesy of © Humanitarian OpenStreetMap Team'; - else if($bl == 'cloudmade') $return .= 'Tiles Courtesy of © CloudMade '; else if($bl == 'mapquest') $return .= 'Tiles Courtesy of © MapQuest'; else if($bl == 'mapquestaerial') $return .= 'Tiles Courtesy of MapQuest — Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency'; else if($bl == 'toner') $return .= 'Tiles Courtesy of © Stamen Design, CC BY 3.0 —'; else if($bl == 'custom') $return .= $custombaselayer; + else if($bl == 'esri') $return .= "Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community"; } // Mandatory by http://www.openstreetmap.org/copyright $return .= ' © '; @@ -107,6 +107,41 @@ function osm_get_gps($conf, $page) } return $gpx_list; + if ($page['section'] === 'categories' and isset($page['category']) and isset($page['category']['id']) ) + { + $LIMIT_SEARCH = "FIND_IN_SET(".$page['category']['id'].", c.uppercats) AND "; + $INNER_JOIN = "INNER JOIN ".CATEGORIES_TABLE." AS c ON ic.category_id = c.id"; + } + if ($page['section'] === 'tags' and isset($page['tags']) and isset($page['tags'][0]['id']) ) + { + $items = get_image_ids_for_tags( array($page['tags'][0]['id']) ); + if ( !empty($items) ) + { + $LIMIT_SEARCH = "ic.image_id IN (".implode(',', $items).") AND "; + } + } + if ($page['section'] === 'tags' and isset($page['category']) and isset($page['category']['id']) ) + { + $LIMIT_SEARCH = "FIND_IN_SET(".$page['category']['id'].", c.uppercats) AND "; + $INNER_JOIN = "INNER JOIN ".CATEGORIES_TABLE." AS c ON ic.category_id = c.id"; + } + + $forbidden = get_sql_condition_FandF( + array + ( + 'forbidden_categories' => 'ic.category_id', + 'visible_categories' => 'ic.category_id', + 'visible_images' => 'i.id' + ), + "\n AND" + ); + + /* Get all GPX tracks */ + $query="SELECT i.path FROM ".IMAGES_TABLE." AS i + INNER JOIN (".IMAGE_CATEGORY_TABLE." AS ic ".$INNER_JOIN.") ON i.id = ic.image_id + WHERE ".$LIMIT_SEARCH." `path` LIKE '%.gpx' ".$forbidden." "; + + return array_from_query($query, 'path'); } function osm_get_items($conf, $page) @@ -138,7 +173,7 @@ function osm_get_items($conf, $page) $INNER_JOIN = "INNER JOIN ".CATEGORIES_TABLE." AS c ON ic.category_id = c.id"; } } - + $forbidden = get_sql_condition_FandF( array ( @@ -149,12 +184,17 @@ function osm_get_items($conf, $page) "\n AND" ); - /* We have lat and lng coordinate for virtual album */ + /* We have lat and lng coordonate for virtual album */ if (isset($_GET['min_lat']) and isset($_GET['max_lat']) and isset($_GET['min_lng']) and isset($_GET['max_lng'])) { $LIMIT_SEARCH=""; $INNER_JOIN=""; + foreach (array('min_lat', 'min_lng', 'max_lat', 'max_lng') as $get_key) + { + check_input_parameter($get_key, $_GET, false, '/^\d+(\.\d+)?$/'); + } + /* Delete all previous album */ $query="SELECT `id` FROM ".CATEGORIES_TABLE." WHERE `name` = 'Locations' AND `comment` LIKE '%OSM plugin%';"; $ids = array_from_query($query, 'id'); @@ -227,7 +267,8 @@ function osm_get_items($conf, $page) // TF, 20160102 // add ORDER BY to always show the first image in a category - if (isset($page['image_id'])) $LIMIT_SEARCH .= 'i.id = ' . $page['image_id'] . ' AND '; + if (isset($page['image_id'])) $LIMIT_SEARCH .= 'i.id = ' . $page['image_id'] . ' AND '; + $query="SELECT i.latitude, i.longitude, IFNULL(i.name, '') AS `name`, IF(i.representative_ext IS NULL, @@ -252,17 +293,17 @@ function osm_get_items($conf, $page) INNER JOIN (".IMAGE_CATEGORY_TABLE." AS ic ".$INNER_JOIN.") ON i.id = ic.image_id WHERE ".$LIMIT_SEARCH." i.latitude IS NOT NULL AND i.longitude IS NOT NULL ".$forbidden." GROUP BY i.id ORDER BY ic.category_id, ic.rank"; - // echo $query; - + //echo $query; + $php_data = array_from_query($query); //print_r($php_data); - + $js_data = array(); $cur_category = ""; foreach($php_data as $array) { // MySQL did all the job - // print_r($array); + //print_r($array); // echo '
    '; if (!$only_first_item || $array['imgcategory'] != $cur_category) { @@ -310,7 +351,6 @@ function osm_get_items($conf, $page) ); } END Debug generate dummy data */ - return $js_data; } @@ -345,7 +385,6 @@ function osm_get_js($conf, $local_conf, $js_data) $divname = isset($local_conf['divname']) ? $local_conf['divname'] : 'map'; /* If the config include parameters get them */ - $center = isset($conf['osm_conf']['left_menu']['center']) ? $conf['osm_conf']['left_menu']['center'] : '0,0'; $center_arr = preg_split('/,/', $center); $center_lat = isset($center_arr) ? $center_arr[0] : 0; @@ -362,15 +401,13 @@ function osm_get_js($conf, $local_conf, $js_data) $center_lat = isset($_GET['center_lat']) ? $_GET['center_lat'] : $center_lat; $center_lng = isset($_GET['center_lng']) ? $_GET['center_lng'] : $center_lng; - //print_r($conf); - $autocenter = isset($conf['osm_conf']['left_menu']['autocenter']) - ? $conf['osm_conf']['left_menu']['autocenter'] + $autocenter = isset($local_conf['autocenter']) + ? $local_conf['autocenter'] : 0; + // Load baselayerURL - // TF, 20160102: fix for broken mapquest links if ($baselayer == 'mapnik') $baselayerurl = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'; - else if($baselayer == 'mapquest') $baselayerurl = 'http://otile1.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.png'; - else if($baselayer == 'cloudmade') $baselayerurl = 'http://{s}.tile.cloudmade.com/7807cc60c1354628aab5156cfc1d4b3b/997/256/{z}/{x}/{y}.png'; + else if($baselayer == 'mapquest') $baselayerurl = 'http://otile1.mqcdn.com/tiles/1.0.0/osm/{z}/{x}/{y}.png'; else if($baselayer == 'mapnikde') $baselayerurl = 'http://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png'; else if($baselayer == 'mapnikfr') $baselayerurl = 'http://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png'; else if($baselayer == 'blackandwhite') $baselayerurl = 'http://{s}.www.toolserver.org/tiles/bw-mapnik/{z}/{x}/{y}.png'; @@ -378,6 +415,7 @@ function osm_get_js($conf, $local_conf, $js_data) else if($baselayer == 'mapquestaerial') $baselayerurl = 'http://otile1.mqcdn.com/tiles/1.0.0/sat/{z}/{x}/{y}.png'; else if($baselayer == 'toner') $baselayerurl = 'https://stamen-tiles-{s}.a.ssl.fastly.net/toner/{z}/{x}/{y}.png'; else if($baselayer == 'custom') $baselayerurl = $custombaselayerurl; + else if($baselayer == 'esri') $baselayerurl = 'http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}'; $attribution = osmcopyright($attrleaflet, $attrimagery, $attrmodule, $baselayer, $custombaselayer); @@ -602,7 +640,7 @@ function osm_get_js($conf, $local_conf, $js_data) } $js .= "\nif (typeof L.MarkerClusterGroup === 'function')\n"; $js .= " " . $divname . ".addLayer(markers);\n"; - if ( $autocenter ) { + if ( $autocenter and !isset($_GET['center_lat']) and !isset($_GET['center_lng']) and !isset($_GET['zoom']) ) { $js .= "var group = new L.featureGroup(MarkerClusterList);"; $js .= "this." . $divname . ".whenReady(function () { window.setTimeout(function () { @@ -610,7 +648,6 @@ function osm_get_js($conf, $local_conf, $js_data) }.bind(this), 200); }, this);"; } - return $js; } @@ -649,6 +686,8 @@ function osm_gen_template($conf, $js, $js_data, $tmpl, $template) ) ); } + + $template->pparse('map'); $template->p(); } diff --git a/language/br_FR/description.txt b/language/br_FR/description.txt new file mode 100644 index 0000000..f95b894 --- /dev/null +++ b/language/br_FR/description.txt @@ -0,0 +1 @@ +Enframmañ OpenStreetMap e Piwigo \ No newline at end of file diff --git a/language/br_FR/plugin.lang.php b/language/br_FR/plugin.lang.php new file mode 100644 index 0000000..5e307ad --- /dev/null +++ b/language/br_FR/plugin.lang.php @@ -0,0 +1,93 @@ +xbgmsharp'; $lang['OSM_CONTRIBUTORS'] = 'OpenStreetMap medewerkers, (ODbL)'; -$lang['MOUSE_OVER'] = 'Beweeg de muis over een groep om de grenzen van de onderdelen te bekijken en klik op een groep om deze te vergroten'; -$lang['LAYOUT_MAP'] = 'Vormgeving van de Wereldkaart'; -$lang['CENTER_MAP_DESC'] = 'Centreer de wereldkaart op een specifieke lokatie (GPS). Scheidt lengte- en breedtegraad van elkaar door een komma. De standaard instelling is 0,0.'; -$lang['POSITION_INDEX_CMAP'] = 'Geef de kaart weer op'; -$lang['POSITION_INDEX_CMAP_DESC'] = 'Geeft de kaart weer op de gespecificeerde index'; \ No newline at end of file +$lang['MOUSE_OVER'] = 'Beweeg de muis over een groep om de grenzen van de onderdelen te bekijken en klik op een groep om die te vergroten'; +$lang['LAYOUT_MAP'] = 'Vormgeving van de wereldkaart'; +$lang['CENTER_MAP_DESC'] = 'Centreer de wereldkaart op een specifieke locatie (GPS). Scheid lengte- en breedtegraad van elkaar door een komma. De standaard instelling is 0,0.'; +$lang['POSITION_INDEX_CMAP'] = 'Toon de kaart op'; +$lang['POSITION_INDEX_CMAP_DESC'] = 'Toont de kaart op de gespecificeerde index'; \ No newline at end of file diff --git a/language/pl_PL/plugin.lang.php b/language/pl_PL/plugin.lang.php index edbaa14..50d4d9a 100644 --- a/language/pl_PL/plugin.lang.php +++ b/language/pl_PL/plugin.lang.php @@ -20,7 +20,6 @@ // | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, | // | USA. | // +-----------------------------------------------------------------------+ -$lang['AUTOSYNC_DESC'] = 'Kiedy metadane są zsynchronizowane, koordynaty mogą zostać odrzucone. Wyłącz jeśli masz zainstalowane \'RV Maps&Earth\''; $lang['IMAGERYBY'] = 'Imagery by'; $lang['POPUPCOMMENT'] = 'Komentarz zdjęcia'; $lang['POPUPLINK'] = 'Dodaj link do zdjęcia'; @@ -55,7 +54,6 @@ $lang['PINSIZE_DESC'] = 'Wymiary obrazka w pixelach. Znakiem podziału jest \'x\'. Np: \'24x24\''; $lang['PIN_DESC'] = 'Wybierz ostatnią opcję jeśli chcesz używać własnej.'; $lang['PLUGINBY'] = 'Wtyczka'; -$lang['PLUGINCONF'] = 'Opcje wtyczki'; $lang['POPUPAUTHOR'] = 'Autor obrazka'; $lang['ATTRPLUGIN'] = 'Pokaż adnotację od autora'; $lang['DEFAULTPIN'] = 'domyślne'; @@ -83,11 +81,8 @@ $lang['ATTRLEAFLET'] = 'Pokaż \'Powered by Leaflet\''; $lang['ATTRLEAFLET_DESC'] = 'Pokazuje a'; $lang['ATTRPLUGIN_DESC'] = 'Ja stworzylem tą wtyczkę. :)'; -$lang['AUTOSYNC'] = 'Automatycznie synchronizuje EXIF jesli istnieje'; $lang['BASELAYER'] = 'Styl mapy'; $lang['BASELAYER_DESC'] = 'Mapnik jest domyślnym stylem OpenStreetMap'; -$lang['BATCHMANAGER'] = 'Uaktywnij integrację z Batch Managerem'; -$lang['BATCHMANAGER_DESC'] = 'Pozwala na manualną modyfikację szerokości i długości geograficznej. Deaktywuj jesli masz zainstalowany \'RV Maps & Earth\''; $lang['CLICK'] = 'pokaż po kliknięciu'; $lang['CUSTOMBASELAYER'] = 'Osobisty styl mapy'; $lang['CUSTOMBASELAYERURL'] = 'URL serwera tile'; @@ -98,10 +93,29 @@ $lang['EDIT_UPDATE_LOCATION_DESC'] = 'Kliknij na mapie, aby zaktualizować położenie'; $lang['LATITUDE'] = 'Szerokość geograficzna'; $lang['LONGITUDE'] = 'Długość geograficzna'; -$lang['OVERWRITE'] = 'Nadpisz istniejące dane geolokalizacyjne'; -$lang['OVERWRITE_LGD'] = 'Nadpisz'; -$lang['SYNC_ERRORS'] = 'Błędy'; -$lang['SYNC_INFOS'] = 'Informacje szczegółowe'; -$lang['SYNC_WARNINGS'] = 'Ostrzeżenia'; -$lang['OVERWRITE_DESC'] = 'Nadpisz istniejące dane geolokalizacyjne nowymi. Jeśli zostanie odznaczone powinień zostać dodany tylko nowy wpis (bez aktualizacji).'; -?> \ No newline at end of file +$lang['ITEMS'] = '%d elementów'; +$lang['METERS_FROM_POINT'] = 'Jesteś w odległości %s metrów od tego punktu'; +$lang['OSM_CONTRIBUTORS'] = 'OpenStreetMap, (Licencja ODbL)'; +$lang['SHOW_ALL'] = 'Pokaż wszystko'; +$lang['SHOW_ALL_ITEMS'] = 'Pokaż wszystkie elementy'; +$lang['SHOW_ALL_PIWIGO'] = 'Pokaż wszystkie elementy w galerii Piwigo'; +$lang['SHOW_COORD'] = 'Pokaż współrzędne'; +$lang['VIEW_OSM'] = 'Zobacz na OpenStreetMap'; +$lang['WIDTH'] = 'Szerokość mapy'; +$lang['WIDTH_DESC'] = 'w pikselach lub auto'; +$lang['ZOOM_IN'] = 'Zoom +'; +$lang['ZOOM_OUT'] = 'Zoom -'; +$lang['BROWSER_JAVASCRIPT'] = 'Twoja przeglądarka musi obsługiwać JavaScript'; +$lang['CENTER_MAP'] = 'Wyśrodkuj mapę tutaj'; +$lang['CLICKED_MAP'] = 'Klinknąłeś mapę na'; +$lang['COPY_PASTE_URL'] = 'Skopiuj i wklej poniższy adres'; +$lang['C_MAP'] = 'Opis kategorii'; +$lang['FIND_POSITION'] = 'Znajdź moją pozycję'; +$lang['IMAGE'] = 'Użyj kwadratowej miniaturki zdjęcia'; +$lang['LINK_MAP'] = 'Link do mapy'; +$lang['MAP'] = 'Mapa'; +$lang['M_MAP'] = 'Menu główne'; +$lang['PIWIGO_GALLERY'] = 'Idź do galerii Piwigo'; +$lang['SEARCH_MY_POSITION'] = 'Znajdź moją pozycję na mapie'; +$lang['SHOWCMAP'] = 'Dodaj mapę w opisie kategorii'; +$lang['SHOWMMAP'] = 'Dodaj mapę w menu głównym'; \ No newline at end of file diff --git a/leaflet/icons/Thumbs.db b/leaflet/icons/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..30b01f4b755b331fadc7a1262a88cb946f712644 GIT binary patch literal 34816 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 FzX1I!;1>V@ literal 0 HcmV?d00001 diff --git a/leaflet/images/Thumbs.db b/leaflet/images/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..23848f6eff82a17d2fbaf06354f1d2ff8c66a4e9 GIT binary patch literal 4096 zcmca`Uhu)fjZzO8(10BSGsD0CoD6J8;*3Bx2!nwD0|OI~0pkDr|NlQkkbwcn90fxt z1pWfu3W`4vW&uVbD-eU?9K;_5!#@Oq81jLzgh7G9l_3vE7co@AvNBP$7%;`aLJ3|r z;Lz#t=En5emP?GxK=}rCh$15fQwB4Jcpx@rNMSGlLQ@8Fu$UP`Dv*^77D>ZlA_IdK z0}~_2eo$EiqH!ujlb8rf>_7msKb64*Y?}$t6&66ZSOTF1&~{6pibSAGZ~>tGaQ_o) zzcA3SevpHy1VHw}0I5cT;tb>zP@Ev=e^B&r05K;Ja{)0o5c2>rFA(zqF+UIks{jT; zAQl2*PnSOSP8fmjNNrGZ!mh-HCzv}}RJ*1*%CI0D6eB{V-gnxqx+ zRkCT?{~P}wFbH_LdAcz$GD0)<|Jw}C3@psdEX*wIEG+Dt?5ymZ+?+tb&Bp@*e1c$# z2TDOW=p@JxMiw?U9u6Kc9v(3fK0ZDX5Wyz`(I!ZgAqN-)IT$n2u7x`o$Y)|^VP#|I;N;>4D%dIjEG?LsnOK-vSy_M{W~>FuGq4D<3Mm>o zvIz$!vMUve7&T5@$f4}C@t|nX#SbdRNkvVZTw>x9l2WQ_>Kd9_CZ=ZQ7M51dF0O9w z9-dyoA)#U65s^{JDXD4c8JStdC8cHM6_r)ZEv;?s9i3g1CQq3GGAU*RJ2VdF$b$$4{OPfBE|D z`;VW$K>lK6V1{@L?lUxh2?G7a!~%*JkiQt2%0V6%WMNe_WD{}>WKS#c@69{;yl(wme1fGL-^|!0}nGJF!GoM8SEKOUtUvp zbEb-QQXHqO=NI`a-_~xuyyn{j$BD1J(?7G+HLb|J)R@oJ*CPDYy8rV5(Xabk?Bsr! zeLfVn$vczvz>e*nsyhpKT4xqL@&5k!*3ky8(@!6)moWV$r!BDIrKQ@>-SV>^7Hm3V zw&>E+ca`;r|1&1G4A*?+qWRXuUUZt#CwzMH z%U?g_elGN$so47Ggwd;Y^}URW5x+Mz+z*Z^pBZDZW}B(hl-kp;uCALucio!b-@oqt z%cGaB<$26|-YxZN)2G$e>+bH=&6di&_u`h!r~O8M?K|p~e_lHhr+h_mYqrMosktd9 zD_Z)Lld7im7`WLjS$V$dvBFLRk4=2XKg%9}WUpVT~!K6p2?*5vZ9owq9F9qmj$@=j|zzah>e^tQD}r^rb|=dB0obtRKeO}*!k zqv!G4`k(0e=K2@h%j+Mg*#GgZ6n}I0!TrrQ?o{l1Q1d-<>z3#LBHZrpt)JRqmveeM zU)RegPdy_ofAQ_(H$A#*YOZ+3;k%c;_wBB|ul#P)8m(6CldZa6Fgh~%%B0HGA%XF;<}ZCy|NkbiEFuNK%CB;0efn_z>(K5=N0$wS g@{5syakTsbm&-%G{QCW?OJe~)$*Gr=lujG906Bvu0RR91 literal 0 HcmV?d00001 diff --git a/leaflet/leaflet-src.js b/leaflet/leaflet-src.js index 640ef73..721ddfb 100644 --- a/leaflet/leaflet-src.js +++ b/leaflet/leaflet-src.js @@ -7,7 +7,7 @@ var oldL = window.L, L = {}; -L.version = '0.7.3'; +L.version = '0.7.7'; // define Leaflet for Node module pattern loaders, including Browserify if (typeof module === 'object' && typeof module.exports === 'object') { @@ -519,9 +519,8 @@ L.Mixin.Events.fire = L.Mixin.Events.fireEvent; gecko = ua.indexOf('gecko') !== -1, mobile = typeof orientation !== undefined + '', - msPointer = window.navigator && window.navigator.msPointerEnabled && - window.navigator.msMaxTouchPoints && !window.PointerEvent, - pointer = (window.PointerEvent && window.navigator.pointerEnabled && window.navigator.maxTouchPoints) || + msPointer = !window.PointerEvent && window.MSPointerEvent, + pointer = (window.PointerEvent && window.navigator.pointerEnabled) || msPointer, retina = ('devicePixelRatio' in window && window.devicePixelRatio > 1) || ('matchMedia' in window && window.matchMedia('(min-resolution:144dpi)') && @@ -534,38 +533,8 @@ L.Mixin.Events.fire = L.Mixin.Events.fireEvent; opera3d = 'OTransition' in doc.style, any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d || opera3d) && !phantomjs; - - // PhantomJS has 'ontouchstart' in document.documentElement, but doesn't actually support touch. - // https://github.com/Leaflet/Leaflet/pull/1434#issuecomment-13843151 - - var touch = !window.L_NO_TOUCH && !phantomjs && (function () { - - var startName = 'ontouchstart'; - - // IE10+ (We simulate these into touch* events in L.DomEvent and L.DomEvent.Pointer) or WebKit, etc. - if (pointer || (startName in doc)) { - return true; - } - - // Firefox/Gecko - var div = document.createElement('div'), - supported = false; - - if (!div.setAttribute) { - return false; - } - div.setAttribute(startName, 'return;'); - - if (typeof div[startName] === 'function') { - supported = true; - } - - div.removeAttribute(startName); - div = null; - - return supported; - }()); - + var touch = !window.L_NO_TOUCH && !phantomjs && (pointer || 'ontouchstart' in window || + (window.DocumentTouch && document instanceof window.DocumentTouch)); L.Browser = { ie: ie, @@ -1632,15 +1601,16 @@ L.Map = L.Class.extend({ var paddingTL = L.point(options.paddingTopLeft || options.padding || [0, 0]), paddingBR = L.point(options.paddingBottomRight || options.padding || [0, 0]), - zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR)), - paddingOffset = paddingBR.subtract(paddingTL).divideBy(2), + zoom = this.getBoundsZoom(bounds, false, paddingTL.add(paddingBR)); + + zoom = (options.maxZoom) ? Math.min(options.maxZoom, zoom) : zoom; + + var paddingOffset = paddingBR.subtract(paddingTL).divideBy(2), swPoint = this.project(bounds.getSouthWest(), zoom), nePoint = this.project(bounds.getNorthEast(), zoom), center = this.unproject(swPoint.add(nePoint).divideBy(2).add(paddingOffset), zoom); - zoom = options && options.maxZoom ? Math.min(options.maxZoom, zoom) : zoom; - return this.setView(center, zoom, options); }, @@ -2782,7 +2752,7 @@ L.TileLayer = L.Class.extend({ } if (options.bounds) { - var tileSize = options.tileSize, + var tileSize = this._getTileSize(), nwPoint = tilePoint.multiplyBy(tileSize), sePoint = nwPoint.add([tileSize, tileSize]), nw = this._map.unproject(nwPoint), @@ -3567,10 +3537,8 @@ L.Marker = L.Class.extend({ update: function () { if (this._icon) { - var pos = this._map.latLngToLayerPoint(this._latlng).round(); - this._setPos(pos); + this._setPos(this._map.latLngToLayerPoint(this._latlng).round()); } - return this; }, @@ -3593,7 +3561,7 @@ L.Marker = L.Class.extend({ if (options.title) { icon.title = options.title; } - + if (options.alt) { icon.alt = options.alt; } @@ -4228,6 +4196,7 @@ L.Marker.include({ if (content instanceof L.Popup) { L.setOptions(content, options); this._popup = content; + content._source = this; } else { this._popup = new L.Popup(options, this) .setContent(content); @@ -4420,7 +4389,9 @@ L.FeatureGroup = L.LayerGroup.extend({ layer = this._layers[layer]; } - layer.off(L.FeatureGroup.EVENTS, this._propagateEvent, this); + if ('off' in layer) { + layer.off(L.FeatureGroup.EVENTS, this._propagateEvent, this); + } L.LayerGroup.prototype.removeLayer.call(this, layer); @@ -4740,7 +4711,7 @@ L.Path = L.Path.extend({ }, _fireMouseEvent: function (e) { - if (!this.hasEventListeners(e.type)) { return; } + if (!this._map || !this.hasEventListeners(e.type)) { return; } var map = this._map, containerPoint = map.mouseEventToContainerPoint(e), @@ -5114,6 +5085,13 @@ L.Path = (L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? L.Path : if (options.fill) { this._ctx.fillStyle = options.fillColor || options.color; } + + if (options.lineCap) { + this._ctx.lineCap = options.lineCap; + } + if (options.lineJoin) { + this._ctx.lineJoin = options.lineJoin; + } }, _drawPath: function () { @@ -5151,7 +5129,7 @@ L.Path = (L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? L.Path : if (options.fill) { ctx.globalAlpha = options.fillOpacity; - ctx.fill(); + ctx.fill(options.fillRule || 'evenodd'); } if (options.stroke) { @@ -5166,15 +5144,14 @@ L.Path = (L.Path.SVG && !window.L_PREFER_CANVAS) || !L.Browser.canvas ? L.Path : _initEvents: function () { if (this.options.clickable) { - // TODO dblclick this._map.on('mousemove', this._onMouseMove, this); - this._map.on('click', this._onClick, this); + this._map.on('click dblclick contextmenu', this._fireMouseEvent, this); } }, - _onClick: function (e) { + _fireMouseEvent: function (e) { if (this._containsPoint(e.layerPoint)) { - this.fire('click', e); + this.fire(e.type, e); } }, @@ -7192,8 +7169,9 @@ L.extend(L.DomEvent, { pointers = this._pointers; var cb = function (e) { - - L.DomEvent.preventDefault(e); + if (e.pointerType !== 'mouse' && e.pointerType !== e.MSPOINTER_TYPE_MOUSE) { + L.DomEvent.preventDefault(e); + } var alreadyInArray = false; for (var i = 0; i < pointers.length; i++) { @@ -8952,20 +8930,25 @@ L.Map.include(!L.DomUtil.TRANSITION ? {} : { delta: delta, backwards: backwards }); + // horrible hack to work around a Chrome bug https://github.com/Leaflet/Leaflet/issues/3689 + setTimeout(L.bind(this._onZoomTransitionEnd, this), 250); }, this); }, _onZoomTransitionEnd: function () { + if (!this._animatingZoom) { return; } this._animatingZoom = false; L.DomUtil.removeClass(this._mapPane, 'leaflet-zoom-anim'); - this._resetView(this._animateToCenter, this._animateToZoom, true, true); + L.Util.requestAnimFrame(function () { + this._resetView(this._animateToCenter, this._animateToZoom, true, true); - if (L.Draggable) { - L.Draggable._disabled = false; - } + if (L.Draggable) { + L.Draggable._disabled = false; + } + }, this); } }); @@ -9001,6 +8984,11 @@ L.TileLayer.include({ // force reflow L.Util.falseFn(bg.offsetWidth); + var zoom = this._map.getZoom(); + if (zoom > this.options.maxZoom || zoom < this.options.minZoom) { + this._clearBgBuffer(); + } + this._animating = false; }, diff --git a/leaflet/leaflet.css b/leaflet/leaflet.css index ac0cd17..c161c31 100644 --- a/leaflet/leaflet.css +++ b/leaflet/leaflet.css @@ -21,6 +21,7 @@ .leaflet-container { overflow: hidden; -ms-touch-action: none; + touch-action: none; } .leaflet-tile, .leaflet-marker-icon, diff --git a/leaflet/leaflet.js b/leaflet/leaflet.js index 03434b7..ee5ff5a 100644 --- a/leaflet/leaflet.js +++ b/leaflet/leaflet.js @@ -3,7 +3,7 @@ (c) 2010-2013, Vladimir Agafonkin (c) 2010-2011, CloudMade */ -!function(t,e,i){var n=t.L,o={};o.version="0.7.3","object"==typeof module&&"object"==typeof module.exports?module.exports=o:"function"==typeof define&&define.amd&&define(o),o.noConflict=function(){return t.L=n,this},t.L=o,o.Util={extend:function(t){var e,i,n,o,s=Array.prototype.slice.call(arguments,1);for(i=0,n=s.length;n>i;i++){o=s[i]||{};for(e in o)o.hasOwnProperty(e)&&(t[e]=o[e])}return t},bind:function(t,e){var i=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(e,i||arguments)}},stamp:function(){var t=0,e="_leaflet_id";return function(i){return i[e]=i[e]||++t,i[e]}}(),invokeEach:function(t,e,i){var n,o;if("object"==typeof t){o=Array.prototype.slice.call(arguments,3);for(n in t)e.apply(i,[n,t[n]].concat(o));return!0}return!1},limitExecByInterval:function(t,e,i){var n,o;return function s(){var a=arguments;return n?void(o=!0):(n=!0,setTimeout(function(){n=!1,o&&(s.apply(i,a),o=!1)},e),void t.apply(i,a))}},falseFn:function(){return!1},formatNum:function(t,e){var i=Math.pow(10,e||5);return Math.round(t*i)/i},trim:function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")},splitWords:function(t){return o.Util.trim(t).split(/\s+/)},setOptions:function(t,e){return t.options=o.extend({},t.options,e),t.options},getParamString:function(t,e,i){var n=[];for(var o in t)n.push(encodeURIComponent(i?o.toUpperCase():o)+"="+encodeURIComponent(t[o]));return(e&&-1!==e.indexOf("?")?"&":"?")+n.join("&")},template:function(t,e){return t.replace(/\{ *([\w_]+) *\}/g,function(t,n){var o=e[n];if(o===i)throw new Error("No value provided for variable "+t);return"function"==typeof o&&(o=o(e)),o})},isArray:Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function e(e){var i,n,o=["webkit","moz","o","ms"];for(i=0;it;t++)n._initHooks[t].call(this)}},e},o.Class.include=function(t){o.extend(this.prototype,t)},o.Class.mergeOptions=function(t){o.extend(this.prototype.options,t)},o.Class.addInitHook=function(t){var e=Array.prototype.slice.call(arguments,1),i="function"==typeof t?t:function(){this[t].apply(this,e)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(i)};var s="_leaflet_events";o.Mixin={},o.Mixin.Events={addEventListener:function(t,e,i){if(o.Util.invokeEach(t,this.addEventListener,this,e,i))return this;var n,a,r,h,l,u,c,d=this[s]=this[s]||{},p=i&&i!==this&&o.stamp(i);for(t=o.Util.splitWords(t),n=0,a=t.length;a>n;n++)r={action:e,context:i||this},h=t[n],p?(l=h+"_idx",u=l+"_len",c=d[l]=d[l]||{},c[p]||(c[p]=[],d[u]=(d[u]||0)+1),c[p].push(r)):(d[h]=d[h]||[],d[h].push(r));return this},hasEventListeners:function(t){var e=this[s];return!!e&&(t in e&&e[t].length>0||t+"_idx"in e&&e[t+"_idx_len"]>0)},removeEventListener:function(t,e,i){if(!this[s])return this;if(!t)return this.clearAllEventListeners();if(o.Util.invokeEach(t,this.removeEventListener,this,e,i))return this;var n,a,r,h,l,u,c,d,p,_=this[s],m=i&&i!==this&&o.stamp(i);for(t=o.Util.splitWords(t),n=0,a=t.length;a>n;n++)if(r=t[n],u=r+"_idx",c=u+"_len",d=_[u],e){if(h=m&&d?d[m]:_[r]){for(l=h.length-1;l>=0;l--)h[l].action!==e||i&&h[l].context!==i||(p=h.splice(l,1),p[0].action=o.Util.falseFn);i&&d&&0===h.length&&(delete d[m],_[c]--)}}else delete _[r],delete _[u],delete _[c];return this},clearAllEventListeners:function(){return delete this[s],this},fireEvent:function(t,e){if(!this.hasEventListeners(t))return this;var i,n,a,r,h,l=o.Util.extend({},e,{type:t,target:this}),u=this[s];if(u[t])for(i=u[t].slice(),n=0,a=i.length;a>n;n++)i[n].action.call(i[n].context,l);r=u[t+"_idx"];for(h in r)if(i=r[h].slice())for(n=0,a=i.length;a>n;n++)i[n].action.call(i[n].context,l);return this},addOneTimeEventListener:function(t,e,i){if(o.Util.invokeEach(t,this.addOneTimeEventListener,this,e,i))return this;var n=o.bind(function(){this.removeEventListener(t,e,i).removeEventListener(t,n,i)},this);return this.addEventListener(t,e,i).addEventListener(t,n,i)}},o.Mixin.Events.on=o.Mixin.Events.addEventListener,o.Mixin.Events.off=o.Mixin.Events.removeEventListener,o.Mixin.Events.once=o.Mixin.Events.addOneTimeEventListener,o.Mixin.Events.fire=o.Mixin.Events.fireEvent,function(){var n="ActiveXObject"in t,s=n&&!e.addEventListener,a=navigator.userAgent.toLowerCase(),r=-1!==a.indexOf("webkit"),h=-1!==a.indexOf("chrome"),l=-1!==a.indexOf("phantom"),u=-1!==a.indexOf("android"),c=-1!==a.search("android [23]"),d=-1!==a.indexOf("gecko"),p=typeof orientation!=i+"",_=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints&&!t.PointerEvent,m=t.PointerEvent&&t.navigator.pointerEnabled&&t.navigator.maxTouchPoints||_,f="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,g=e.documentElement,v=n&&"transition"in g.style,y="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix&&!c,P="MozPerspective"in g.style,L="OTransition"in g.style,x=!t.L_DISABLE_3D&&(v||y||P||L)&&!l,w=!t.L_NO_TOUCH&&!l&&function(){var t="ontouchstart";if(m||t in g)return!0;var i=e.createElement("div"),n=!1;return i.setAttribute?(i.setAttribute(t,"return;"),"function"==typeof i[t]&&(n=!0),i.removeAttribute(t),i=null,n):!1}();o.Browser={ie:n,ielt9:s,webkit:r,gecko:d&&!r&&!t.opera&&!n,android:u,android23:c,chrome:h,ie3d:v,webkit3d:y,gecko3d:P,opera3d:L,any3d:x,mobile:p,mobileWebkit:p&&r,mobileWebkit3d:p&&y,mobileOpera:p&&t.opera,touch:w,msPointer:_,pointer:m,retina:f}}(),o.Point=function(t,e,i){this.x=i?Math.round(t):t,this.y=i?Math.round(e):e},o.Point.prototype={clone:function(){return new o.Point(this.x,this.y)},add:function(t){return this.clone()._add(o.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(o.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=o.point(t);var e=t.x-this.x,i=t.y-this.y;return Math.sqrt(e*e+i*i)},equals:function(t){return t=o.point(t),t.x===this.x&&t.y===this.y},contains:function(t){return t=o.point(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+o.Util.formatNum(this.x)+", "+o.Util.formatNum(this.y)+")"}},o.point=function(t,e,n){return t instanceof o.Point?t:o.Util.isArray(t)?new o.Point(t[0],t[1]):t===i||null===t?t:new o.Point(t,e,n)},o.Bounds=function(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;o>n;n++)this.extend(i[n])},o.Bounds.prototype={extend:function(t){return t=o.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new o.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new o.Point(this.min.x,this.max.y)},getTopRight:function(){return new o.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var e,i;return t="number"==typeof t[0]||t instanceof o.Point?o.point(t):o.bounds(t),t instanceof o.Bounds?(e=t.min,i=t.max):e=i=t,e.x>=this.min.x&&i.x<=this.max.x&&e.y>=this.min.y&&i.y<=this.max.y},intersects:function(t){t=o.bounds(t);var e=this.min,i=this.max,n=t.min,s=t.max,a=s.x>=e.x&&n.x<=i.x,r=s.y>=e.y&&n.y<=i.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},o.bounds=function(t,e){return!t||t instanceof o.Bounds?t:new o.Bounds(t,e)},o.Transformation=function(t,e,i,n){this._a=t,this._b=e,this._c=i,this._d=n},o.Transformation.prototype={transform:function(t,e){return this._transform(t.clone(),e)},_transform:function(t,e){return e=e||1,t.x=e*(this._a*t.x+this._b),t.y=e*(this._c*t.y+this._d),t},untransform:function(t,e){return e=e||1,new o.Point((t.x/e-this._b)/this._a,(t.y/e-this._d)/this._c)}},o.DomUtil={get:function(t){return"string"==typeof t?e.getElementById(t):t},getStyle:function(t,i){var n=t.style[i];if(!n&&t.currentStyle&&(n=t.currentStyle[i]),(!n||"auto"===n)&&e.defaultView){var o=e.defaultView.getComputedStyle(t,null);n=o?o[i]:null}return"auto"===n?null:n},getViewportOffset:function(t){var i,n=0,s=0,a=t,r=e.body,h=e.documentElement;do{if(n+=a.offsetTop||0,s+=a.offsetLeft||0,n+=parseInt(o.DomUtil.getStyle(a,"borderTopWidth"),10)||0,s+=parseInt(o.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,i=o.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===i)break;if("fixed"===i){n+=r.scrollTop||h.scrollTop||0,s+=r.scrollLeft||h.scrollLeft||0;break}if("relative"===i&&!a.offsetLeft){var l=o.DomUtil.getStyle(a,"width"),u=o.DomUtil.getStyle(a,"max-width"),c=a.getBoundingClientRect();("none"!==l||"none"!==u)&&(s+=c.left+a.clientLeft),n+=c.top+(r.scrollTop||h.scrollTop||0);break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;n-=a.scrollTop||0,s-=a.scrollLeft||0,a=a.parentNode}while(a);return new o.Point(s,n)},documentIsLtr:function(){return o.DomUtil._docIsLtrCached||(o.DomUtil._docIsLtrCached=!0,o.DomUtil._docIsLtr="ltr"===o.DomUtil.getStyle(e.body,"direction")),o.DomUtil._docIsLtr},create:function(t,i,n){var o=e.createElement(t);return o.className=i,n&&n.appendChild(o),o},hasClass:function(t,e){if(t.classList!==i)return t.classList.contains(e);var n=o.DomUtil._getClass(t);return n.length>0&&new RegExp("(^|\\s)"+e+"(\\s|$)").test(n)},addClass:function(t,e){if(t.classList!==i)for(var n=o.Util.splitWords(e),s=0,a=n.length;a>s;s++)t.classList.add(n[s]);else if(!o.DomUtil.hasClass(t,e)){var r=o.DomUtil._getClass(t);o.DomUtil._setClass(t,(r?r+" ":"")+e)}},removeClass:function(t,e){t.classList!==i?t.classList.remove(e):o.DomUtil._setClass(t,o.Util.trim((" "+o.DomUtil._getClass(t)+" ").replace(" "+e+" "," ")))},_setClass:function(t,e){t.className.baseVal===i?t.className=e:t.className.baseVal=e},_getClass:function(t){return t.className.baseVal===i?t.className:t.className.baseVal},setOpacity:function(t,e){if("opacity"in t.style)t.style.opacity=e;else if("filter"in t.style){var i=!1,n="DXImageTransform.Microsoft.Alpha";try{i=t.filters.item(n)}catch(o){if(1===e)return}e=Math.round(100*e),i?(i.Enabled=100!==e,i.Opacity=e):t.style.filter+=" progid:"+n+"(opacity="+e+")"}},testProp:function(t){for(var i=e.documentElement.style,n=0;ni||i===e?e:t),new o.LatLng(this.lat,i)}},o.latLng=function(t,e){return t instanceof o.LatLng?t:o.Util.isArray(t)?"number"==typeof t[0]||"string"==typeof t[0]?new o.LatLng(t[0],t[1],t[2]):null:t===i||null===t?t:"object"==typeof t&&"lat"in t?new o.LatLng(t.lat,"lng"in t?t.lng:t.lon):e===i?null:new o.LatLng(t,e)},o.LatLngBounds=function(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;o>n;n++)this.extend(i[n])},o.LatLngBounds.prototype={extend:function(t){if(!t)return this;var e=o.latLng(t);return t=null!==e?e:o.latLngBounds(t),t instanceof o.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new o.LatLng(t.lat,t.lng),this._northEast=new o.LatLng(t.lat,t.lng)):t instanceof o.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var e=this._southWest,i=this._northEast,n=Math.abs(e.lat-i.lat)*t,s=Math.abs(e.lng-i.lng)*t;return new o.LatLngBounds(new o.LatLng(e.lat-n,e.lng-s),new o.LatLng(i.lat+n,i.lng+s))},getCenter:function(){return new o.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new o.LatLng(this.getNorth(),this.getWest())},getSouthEast:function(){return new o.LatLng(this.getSouth(),this.getEast())},getWest:function(){return this._southWest.lng},getSouth:function(){return this._southWest.lat},getEast:function(){return this._northEast.lng},getNorth:function(){return this._northEast.lat},contains:function(t){t="number"==typeof t[0]||t instanceof o.LatLng?o.latLng(t):o.latLngBounds(t);var e,i,n=this._southWest,s=this._northEast;return t instanceof o.LatLngBounds?(e=t.getSouthWest(),i=t.getNorthEast()):e=i=t,e.lat>=n.lat&&i.lat<=s.lat&&e.lng>=n.lng&&i.lng<=s.lng},intersects:function(t){t=o.latLngBounds(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),s=t.getNorthEast(),a=s.lat>=e.lat&&n.lat<=i.lat,r=s.lng>=e.lng&&n.lng<=i.lng;return a&&r},toBBoxString:function(){return[this.getWest(),this.getSouth(),this.getEast(),this.getNorth()].join(",")},equals:function(t){return t?(t=o.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},o.latLngBounds=function(t,e){return!t||t instanceof o.LatLngBounds?t:new o.LatLngBounds(t,e)},o.Projection={},o.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var e=o.LatLng.DEG_TO_RAD,i=this.MAX_LATITUDE,n=Math.max(Math.min(i,t.lat),-i),s=t.lng*e,a=n*e;return a=Math.log(Math.tan(Math.PI/4+a/2)),new o.Point(s,a)},unproject:function(t){var e=o.LatLng.RAD_TO_DEG,i=t.x*e,n=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*e;return new o.LatLng(n,i)}},o.Projection.LonLat={project:function(t){return new o.Point(t.lng,t.lat)},unproject:function(t){return new o.LatLng(t.y,t.x)}},o.CRS={latLngToPoint:function(t,e){var i=this.projection.project(t),n=this.scale(e);return this.transformation._transform(i,n)},pointToLatLng:function(t,e){var i=this.scale(e),n=this.transformation.untransform(t,i);return this.projection.unproject(n)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)},getSize:function(t){var e=this.scale(t);return o.point(e,e)}},o.CRS.Simple=o.extend({},o.CRS,{projection:o.Projection.LonLat,transformation:new o.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),o.CRS.EPSG3857=o.extend({},o.CRS,{code:"EPSG:3857",projection:o.Projection.SphericalMercator,transformation:new o.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var e=this.projection.project(t),i=6378137;return e.multiplyBy(i)}}),o.CRS.EPSG900913=o.extend({},o.CRS.EPSG3857,{code:"EPSG:900913"}),o.CRS.EPSG4326=o.extend({},o.CRS,{code:"EPSG:4326",projection:o.Projection.LonLat,transformation:new o.Transformation(1/360,.5,-1/360,.5)}),o.Map=o.Class.extend({includes:o.Mixin.Events,options:{crs:o.CRS.EPSG3857,fadeAnimation:o.DomUtil.TRANSITION&&!o.Browser.android23,trackResize:!0,markerZoomAnimation:o.DomUtil.TRANSITION&&o.Browser.any3d},initialize:function(t,e){e=o.setOptions(this,e),this._initContainer(t),this._initLayout(),this._onResize=o.bind(this._onResize,this),this._initEvents(),e.maxBounds&&this.setMaxBounds(e.maxBounds),e.center&&e.zoom!==i&&this.setView(o.latLng(e.center),e.zoom,{reset:!0}),this._handlers=[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0,this.callInitHooks(),this._addLayers(e.layers)},setView:function(t,e){return e=e===i?this.getZoom():e,this._resetView(o.latLng(t),this._limitZoom(e)),this},setZoom:function(t,e){return this._loaded?this.setView(this.getCenter(),t,{zoom:e}):(this._zoom=this._limitZoom(t),this)},zoomIn:function(t,e){return this.setZoom(this._zoom+(t||1),e)},zoomOut:function(t,e){return this.setZoom(this._zoom-(t||1),e)},setZoomAround:function(t,e,i){var n=this.getZoomScale(e),s=this.getSize().divideBy(2),a=t instanceof o.Point?t:this.latLngToContainerPoint(t),r=a.subtract(s).multiplyBy(1-1/n),h=this.containerPointToLatLng(s.add(r));return this.setView(h,e,{zoom:i})},fitBounds:function(t,e){e=e||{},t=t.getBounds?t.getBounds():o.latLngBounds(t);var i=o.point(e.paddingTopLeft||e.padding||[0,0]),n=o.point(e.paddingBottomRight||e.padding||[0,0]),s=this.getBoundsZoom(t,!1,i.add(n)),a=n.subtract(i).divideBy(2),r=this.project(t.getSouthWest(),s),h=this.project(t.getNorthEast(),s),l=this.unproject(r.add(h).divideBy(2).add(a),s);return s=e&&e.maxZoom?Math.min(e.maxZoom,s):s,this.setView(l,s,e)},fitWorld:function(t){return this.fitBounds([[-90,-180],[90,180]],t)},panTo:function(t,e){return this.setView(t,this._zoom,{pan:e})},panBy:function(t){return this.fire("movestart"),this._rawPanBy(o.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){return t=o.latLngBounds(t),this.options.maxBounds=t,t?(this._loaded&&this._panInsideMaxBounds(),this.on("moveend",this._panInsideMaxBounds,this)):this.off("moveend",this._panInsideMaxBounds,this)},panInsideBounds:function(t,e){var i=this.getCenter(),n=this._limitCenter(i,this._zoom,t);return i.equals(n)?this:this.panTo(n,e)},addLayer:function(t){var e=o.stamp(t);return this._layers[e]?this:(this._layers[e]=t,!t.options||isNaN(t.options.maxZoom)&&isNaN(t.options.minZoom)||(this._zoomBoundLayers[e]=t,this._updateZoomLevels()),this.options.zoomAnimation&&o.TileLayer&&t instanceof o.TileLayer&&(this._tileLayersNum++,this._tileLayersToLoad++,t.on("load",this._onTileLayerLoad,this)),this._loaded&&this._layerAdd(t),this)},removeLayer:function(t){var e=o.stamp(t);return this._layers[e]?(this._loaded&&t.onRemove(this),delete this._layers[e],this._loaded&&this.fire("layerremove",{layer:t}),this._zoomBoundLayers[e]&&(delete this._zoomBoundLayers[e],this._updateZoomLevels()),this.options.zoomAnimation&&o.TileLayer&&t instanceof o.TileLayer&&(this._tileLayersNum--,this._tileLayersToLoad--,t.off("load",this._onTileLayerLoad,this)),this):this},hasLayer:function(t){return t?o.stamp(t)in this._layers:!1},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},invalidateSize:function(t){if(!this._loaded)return this;t=o.extend({animate:!1,pan:!0},t===!0?{animate:!0}:t);var e=this.getSize();this._sizeChanged=!0,this._initialCenter=null;var i=this.getSize(),n=e.divideBy(2).round(),s=i.divideBy(2).round(),a=n.subtract(s);return a.x||a.y?(t.animate&&t.pan?this.panBy(a):(t.pan&&this._rawPanBy(a),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(o.bind(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:e,newSize:i})):this},addHandler:function(t,e){if(!e)return this;var i=this[t]=new e(this);return this._handlers.push(i),this.options[t]&&i.enable(),this},remove:function(){this._loaded&&this.fire("unload"),this._initEvents("off");try{delete this._container._leaflet}catch(t){this._container._leaflet=i}return this._clearPanes(),this._clearControlPos&&this._clearControlPos(),this._clearHandlers(),this},getCenter:function(){return this._checkIfLoaded(),this._initialCenter&&!this._moved()?this._initialCenter:this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds(),e=this.unproject(t.getBottomLeft()),i=this.unproject(t.getTopRight());return new o.LatLngBounds(e,i)},getMinZoom:function(){return this.options.minZoom===i?this._layersMinZoom===i?0:this._layersMinZoom:this.options.minZoom},getMaxZoom:function(){return this.options.maxZoom===i?this._layersMaxZoom===i?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,i){t=o.latLngBounds(t);var n,s=this.getMinZoom()-(e?1:0),a=this.getMaxZoom(),r=this.getSize(),h=t.getNorthWest(),l=t.getSouthEast(),u=!0;i=o.point(i||[0,0]);do s++,n=this.project(l,s).subtract(this.project(h,s)).add(i),u=e?n.x=s);return u&&e?null:e?s:s-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new o.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new o.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var e=this.options.crs;return e.scale(t)/e.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,e){return e=e===i?this._zoom:e,this.options.crs.latLngToPoint(o.latLng(t),e)},unproject:function(t,e){return e=e===i?this._zoom:e,this.options.crs.pointToLatLng(o.point(t),e)},layerPointToLatLng:function(t){var e=o.point(t).add(this.getPixelOrigin());return this.unproject(e)},latLngToLayerPoint:function(t){var e=this.project(o.latLng(t))._round();return e._subtract(this.getPixelOrigin())},containerPointToLayerPoint:function(t){return o.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return o.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var e=this.containerPointToLayerPoint(o.point(t));return this.layerPointToLatLng(e)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(o.latLng(t)))},mouseEventToContainerPoint:function(t){return o.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var e=this._container=o.DomUtil.get(t);if(!e)throw new Error("Map container not found.");if(e._leaflet)throw new Error("Map container is already initialized.");e._leaflet=!0},_initLayout:function(){var t=this._container;o.DomUtil.addClass(t,"leaflet-container"+(o.Browser.touch?" leaflet-touch":"")+(o.Browser.retina?" leaflet-retina":"")+(o.Browser.ielt9?" leaflet-oldie":"")+(this.options.fadeAnimation?" leaflet-fade-anim":""));var e=o.DomUtil.getStyle(t,"position");"absolute"!==e&&"relative"!==e&&"fixed"!==e&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var e=" leaflet-zoom-hide";this.options.markerZoomAnimation||(o.DomUtil.addClass(t.markerPane,e),o.DomUtil.addClass(t.shadowPane,e),o.DomUtil.addClass(t.popupPane,e))},_createPane:function(t,e){return o.DomUtil.create("div",t,e||this._panes.objectsPane)},_clearPanes:function(){this._container.removeChild(this._mapPane)},_addLayers:function(t){t=t?o.Util.isArray(t)?t:[t]:[];for(var e=0,i=t.length;i>e;e++)this.addLayer(t[e])},_resetView:function(t,e,i,n){var s=this._zoom!==e;n||(this.fire("movestart"),s&&this.fire("zoomstart")),this._zoom=e,this._initialCenter=t,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),i?this._initialTopLeftPoint._add(this._getMapPanePos()):o.DomUtil.setPosition(this._mapPane,new o.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!i}),a&&(this.fire("load"),this.eachLayer(this._layerAdd,this)),this.fire("move"),(s||n)&&this.fire("zoomend"),this.fire("moveend",{hard:!i})},_rawPanBy:function(t){o.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_updateZoomLevels:function(){var t,e=1/0,n=-1/0,o=this._getZoomSpan();for(t in this._zoomBoundLayers){var s=this._zoomBoundLayers[t];isNaN(s.options.minZoom)||(e=Math.min(e,s.options.minZoom)),isNaN(s.options.maxZoom)||(n=Math.max(n,s.options.maxZoom))}t===i?this._layersMaxZoom=this._layersMinZoom=i:(this._layersMaxZoom=n,this._layersMinZoom=e),o!==this._getZoomSpan()&&this.fire("zoomlevelschange")},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(e){if(o.DomEvent){e=e||"on",o.DomEvent[e](this._container,"click",this._onMouseClick,this);var i,n,s=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,n=s.length;n>i;i++)o.DomEvent[e](this._container,s[i],this._fireMouseEvent,this);this.options.trackResize&&o.DomEvent[e](t,"resize",this._onResize,this)}},_onResize:function(){o.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=o.Util.requestAnimFrame(function(){this.invalidateSize({debounceMoveend:!0})},this,!1,this._container)},_onMouseClick:function(t){!this._loaded||!t._simulated&&(this.dragging&&this.dragging.moved()||this.boxZoom&&this.boxZoom.moved())||o.DomEvent._skipped(t)||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded&&!o.DomEvent._skipped(t)){var e=t.type;if(e="mouseenter"===e?"mouseover":"mouseleave"===e?"mouseout":e,this.hasEventListeners(e)){"contextmenu"===e&&o.DomEvent.preventDefault(t);var i=this.mouseEventToContainerPoint(t),n=this.containerPointToLayerPoint(i),s=this.layerPointToLatLng(n);this.fire(e,{latlng:s,layerPoint:n,containerPoint:i,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this.fire("tilelayersload")},_clearHandlers:function(){for(var t=0,e=this._handlers.length;e>t;t++)this._handlers[t].disable()},whenReady:function(t,e){return this._loaded?t.call(e||this,this):this.on("load",t,e),this},_layerAdd:function(t){t.onAdd(this),this.fire("layeradd",{layer:t})},_getMapPanePos:function(){return o.DomUtil.getPosition(this._mapPane)},_moved:function(){var t=this._getMapPanePos();return t&&!t.equals([0,0])},_getTopLeftPoint:function(){return this.getPixelOrigin().subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,e){var i=this.getSize()._divideBy(2);return this.project(t,e)._subtract(i)._round()},_latLngToNewLayerPoint:function(t,e,i){var n=this._getNewTopLeftPoint(i,e).add(this._getMapPanePos());return this.project(t,e)._subtract(n)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitCenter:function(t,e,i){if(!i)return t;var n=this.project(t,e),s=this.getSize().divideBy(2),a=new o.Bounds(n.subtract(s),n.add(s)),r=this._getBoundsOffset(a,i,e);return this.unproject(n.add(r),e)},_limitOffset:function(t,e){if(!e)return t;var i=this.getPixelBounds(),n=new o.Bounds(i.min.add(t),i.max.add(t));return t.add(this._getBoundsOffset(n,e))},_getBoundsOffset:function(t,e,i){var n=this.project(e.getNorthWest(),i).subtract(t.min),s=this.project(e.getSouthEast(),i).subtract(t.max),a=this._rebound(n.x,-s.x),r=this._rebound(n.y,-s.y);return new o.Point(a,r)},_rebound:function(t,e){return t+e>0?Math.round(t-e)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(e))},_limitZoom:function(t){var e=this.getMinZoom(),i=this.getMaxZoom();return Math.max(e,Math.min(i,t))}}),o.map=function(t,e){return new o.Map(t,e)},o.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.314245179,R_MAJOR:6378137,project:function(t){var e=o.LatLng.DEG_TO_RAD,i=this.MAX_LATITUDE,n=Math.max(Math.min(i,t.lat),-i),s=this.R_MAJOR,a=this.R_MINOR,r=t.lng*e*s,h=n*e,l=a/s,u=Math.sqrt(1-l*l),c=u*Math.sin(h);c=Math.pow((1-c)/(1+c),.5*u);var d=Math.tan(.5*(.5*Math.PI-h))/c;return h=-s*Math.log(d),new o.Point(r,h)},unproject:function(t){for(var e,i=o.LatLng.RAD_TO_DEG,n=this.R_MAJOR,s=this.R_MINOR,a=t.x*i/n,r=s/n,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),u=Math.PI/2-2*Math.atan(l),c=15,d=1e-7,p=c,_=.1;Math.abs(_)>d&&--p>0;)e=h*Math.sin(u),_=Math.PI/2-2*Math.atan(l*Math.pow((1-e)/(1+e),.5*h))-u,u+=_; -return new o.LatLng(u*i,a)}},o.CRS.EPSG3395=o.extend({},o.CRS,{code:"EPSG:3395",projection:o.Projection.Mercator,transformation:function(){var t=o.Projection.Mercator,e=t.R_MAJOR,i=.5/(Math.PI*e);return new o.Transformation(i,.5,-i,.5)}()}),o.TileLayer=o.Class.extend({includes:o.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:o.Browser.mobile,updateWhenIdle:o.Browser.mobile},initialize:function(t,e){e=o.setOptions(this,e),e.detectRetina&&o.Browser.retina&&e.maxZoom>0&&(e.tileSize=Math.floor(e.tileSize/2),e.zoomOffset++,e.minZoom>0&&e.minZoom--,this.options.maxZoom--),e.bounds&&(e.bounds=o.latLngBounds(e.bounds)),this._url=t;var i=this.options.subdomains;"string"==typeof i&&(this.options.subdomains=i.split(""))},onAdd:function(t){this._map=t,this._animated=t._zoomAnimated,this._initContainer(),t.on({viewreset:this._reset,moveend:this._update},this),this._animated&&t.on({zoomanim:this._animateZoom,zoomend:this._endZoomAnim},this),this.options.updateWhenIdle||(this._limitedUpdate=o.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._reset,moveend:this._update},this),this._animated&&t.off({zoomanim:this._animateZoom,zoomend:this._endZoomAnim},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},getContainer:function(){return this._container},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,e){return this._url=t,e||this.redraw(),this},redraw:function(){return this._map&&(this._reset({hard:!0}),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==i&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,e){var i,n,o,s=t.children,a=-e(1/0,-1/0);for(n=0,o=s.length;o>n;n++)s[n]!==this._container&&(i=parseInt(s[n].style.zIndex,10),isNaN(i)||(a=e(a,i)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+e(1,-1)},_updateOpacity:function(){var t,e=this._tiles;if(o.Browser.ielt9)for(t in e)o.DomUtil.setOpacity(e[t],this.options.opacity);else o.DomUtil.setOpacity(this._container,this.options.opacity)},_initContainer:function(){var t=this._map._panes.tilePane;if(!this._container){if(this._container=o.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),this._animated){var e="leaflet-tile-container";this._bgBuffer=o.DomUtil.create("div",e,this._container),this._tileContainer=o.DomUtil.create("div",e,this._container)}else this._tileContainer=this._container;t.appendChild(this._container),this.options.opacity<1&&this._updateOpacity()}},_reset:function(t){for(var e in this._tiles)this.fire("tileunload",{tile:this._tiles[e]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),this._tileContainer.innerHTML="",this._animated&&t&&t.hard&&this._clearBgBuffer(),this._initContainer()},_getTileSize:function(){var t=this._map,e=t.getZoom()+this.options.zoomOffset,i=this.options.maxNativeZoom,n=this.options.tileSize;return i&&e>i&&(n=Math.round(t.getZoomScale(e)/t.getZoomScale(i)*n)),n},_update:function(){if(this._map){var t=this._map,e=t.getPixelBounds(),i=t.getZoom(),n=this._getTileSize();if(!(i>this.options.maxZoom||in;n++)this._addTile(a[n],l);this._tileContainer.appendChild(l)}},_tileShouldBeLoaded:function(t){if(t.x+":"+t.y in this._tiles)return!1;var e=this.options;if(!e.continuousWorld){var i=this._getWrapTileNum();if(e.noWrap&&(t.x<0||t.x>=i.x)||t.y<0||t.y>=i.y)return!1}if(e.bounds){var n=e.tileSize,o=t.multiplyBy(n),s=o.add([n,n]),a=this._map.unproject(o),r=this._map.unproject(s);if(e.continuousWorld||e.noWrap||(a=a.wrap(),r=r.wrap()),!e.bounds.intersects([a,r]))return!1}return!0},_removeOtherTiles:function(t){var e,i,n,o;for(o in this._tiles)e=o.split(":"),i=parseInt(e[0],10),n=parseInt(e[1],10),(it.max.x||nt.max.y)&&this._removeTile(o)},_removeTile:function(t){var e=this._tiles[t];this.fire("tileunload",{tile:e,url:e.src}),this.options.reuseTiles?(o.DomUtil.removeClass(e,"leaflet-tile-loaded"),this._unusedTiles.push(e)):e.parentNode===this._tileContainer&&this._tileContainer.removeChild(e),o.Browser.android||(e.onload=null,e.src=o.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,e){var i=this._getTilePos(t),n=this._getTile();o.DomUtil.setPosition(n,i,o.Browser.chrome),this._tiles[t.x+":"+t.y]=n,this._loadTile(n,t),n.parentNode!==this._tileContainer&&e.appendChild(n)},_getZoomForUrl:function(){var t=this.options,e=this._map.getZoom();return t.zoomReverse&&(e=t.maxZoom-e),e+=t.zoomOffset,t.maxNativeZoom?Math.min(e,t.maxNativeZoom):e},_getTilePos:function(t){var e=this._map.getPixelOrigin(),i=this._getTileSize();return t.multiplyBy(i).subtract(e)},getTileUrl:function(t){return o.Util.template(this._url,o.extend({s:this._getSubdomain(t),z:t.z,x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){var t=this._map.options.crs,e=t.getSize(this._map.getZoom());return e.divideBy(this._getTileSize())._floor()},_adjustTilePoint:function(t){var e=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%e.x+e.x)%e.x),this.options.tms&&(t.y=e.y-t.y-1),t.z=this._getZoomForUrl()},_getSubdomain:function(t){var e=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[e]},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=o.DomUtil.create("img","leaflet-tile");return t.style.width=t.style.height=this._getTileSize()+"px",t.galleryimg="no",t.onselectstart=t.onmousemove=o.Util.falseFn,o.Browser.ielt9&&this.options.opacity!==i&&o.DomUtil.setOpacity(t,this.options.opacity),o.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden"),t},_loadTile:function(t,e){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,this._adjustTilePoint(e),t.src=this.getTileUrl(e),this.fire("tileloadstart",{tile:t,url:t.src})},_tileLoaded:function(){this._tilesToLoad--,this._animated&&o.DomUtil.addClass(this._tileContainer,"leaflet-zoom-animated"),this._tilesToLoad||(this.fire("load"),this._animated&&(clearTimeout(this._clearBgBufferTimer),this._clearBgBufferTimer=setTimeout(o.bind(this._clearBgBuffer,this),500)))},_tileOnLoad:function(){var t=this._layer;this.src!==o.Util.emptyImageUrl&&(o.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var e=t.options.errorTileUrl;e&&(this.src=e),t._tileLoaded()}}),o.tileLayer=function(t,e){return new o.TileLayer(t,e)},o.TileLayer.WMS=o.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,e){this._url=t;var i=o.extend({},this.defaultWmsParams),n=e.tileSize||this.options.tileSize;i.width=i.height=e.detectRetina&&o.Browser.retina?2*n:n;for(var s in e)this.options.hasOwnProperty(s)||"crs"===s||(i[s]=e[s]);this.wmsParams=i,o.setOptions(this,e)},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var e=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[e]=this._crs.code,o.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t){var e=this._map,i=this.options.tileSize,n=t.multiplyBy(i),s=n.add([i,i]),a=this._crs.project(e.unproject(n,t.z)),r=this._crs.project(e.unproject(s,t.z)),h=this._wmsVersion>=1.3&&this._crs===o.CRS.EPSG4326?[r.y,a.x,a.y,r.x].join(","):[a.x,r.y,r.x,a.y].join(","),l=o.Util.template(this._url,{s:this._getSubdomain(t)});return l+o.Util.getParamString(this.wmsParams,l,!0)+"&BBOX="+h},setParams:function(t,e){return o.extend(this.wmsParams,t),e||this.redraw(),this}}),o.tileLayer.wms=function(t,e){return new o.TileLayer.WMS(t,e)},o.TileLayer.Canvas=o.TileLayer.extend({options:{async:!1},initialize:function(t){o.setOptions(this,t)},redraw:function(){this._map&&(this._reset({hard:!0}),this._update());for(var t in this._tiles)this._redrawTile(this._tiles[t]);return this},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTile:function(){var t=o.DomUtil.create("canvas","leaflet-tile");return t.width=t.height=this.options.tileSize,t.onselectstart=t.onmousemove=o.Util.falseFn,t},_loadTile:function(t,e){t._layer=this,t._tilePoint=e,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),o.tileLayer.canvas=function(t){return new o.TileLayer.Canvas(t)},o.ImageOverlay=o.Class.extend({includes:o.Mixin.Events,options:{opacity:1},initialize:function(t,e,i){this._url=t,this._bounds=o.latLngBounds(e),o.setOptions(this,i)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&o.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},setUrl:function(t){this._url=t,this._image.src=this._url},getAttribution:function(){return this.options.attribution},_initImage:function(){this._image=o.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&o.Browser.any3d?o.DomUtil.addClass(this._image,"leaflet-zoom-animated"):o.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),o.extend(this._image,{galleryimg:"no",onselectstart:o.Util.falseFn,onmousemove:o.Util.falseFn,onload:o.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var e=this._map,i=this._image,n=e.getZoomScale(t.zoom),s=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=e._latLngToNewLayerPoint(s,t.zoom,t.center),h=e._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/n)));i.style[o.DomUtil.TRANSFORM]=o.DomUtil.getTranslateString(l)+" scale("+n+") "},_reset:function(){var t=this._image,e=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),i=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(e);o.DomUtil.setPosition(t,e),t.style.width=i.x+"px",t.style.height=i.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){o.DomUtil.setOpacity(this._image,this.options.opacity)}}),o.imageOverlay=function(t,e,i){return new o.ImageOverlay(t,e,i)},o.Icon=o.Class.extend({options:{className:""},initialize:function(t){o.setOptions(this,t)},createIcon:function(t){return this._createIcon("icon",t)},createShadow:function(t){return this._createIcon("shadow",t)},_createIcon:function(t,e){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw new Error("iconUrl not set in Icon options (see the docs).");return null}var n;return n=e&&"IMG"===e.tagName?this._createImg(i,e):this._createImg(i),this._setIconStyles(n,t),n},_setIconStyles:function(t,e){var i,n=this.options,s=o.point(n[e+"Size"]);i=o.point("shadow"===e?n.shadowAnchor||n.iconAnchor:n.iconAnchor),!i&&s&&(i=s.divideBy(2,!0)),t.className="leaflet-marker-"+e+" "+n.className,i&&(t.style.marginLeft=-i.x+"px",t.style.marginTop=-i.y+"px"),s&&(t.style.width=s.x+"px",t.style.height=s.y+"px")},_createImg:function(t,i){return i=i||e.createElement("img"),i.src=t,i},_getIconUrl:function(t){return o.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),o.icon=function(t){return new o.Icon(t)},o.Icon.Default=o.Icon.extend({options:{iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],shadowSize:[41,41]},_getIconUrl:function(t){var e=t+"Url";if(this.options[e])return this.options[e];o.Browser.retina&&"icon"===t&&(t+="-2x");var i=o.Icon.Default.imagePath;if(!i)throw new Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return i+"/marker-"+t+".png"}}),o.Icon.Default.imagePath=function(){var t,i,n,o,s,a=e.getElementsByTagName("script"),r=/[\/^]leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,i=a.length;i>t;t++)if(n=a[t].src,o=n.match(r))return s=n.split(r)[0],(s?s+"/":"")+"images"}(),o.Marker=o.Class.extend({includes:o.Mixin.Events,options:{icon:new o.Icon.Default,title:"",alt:"",clickable:!0,draggable:!1,keyboard:!0,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,e){o.setOptions(this,e),this._latlng=o.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),this.fire("add"),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this.dragging&&this.dragging.disable(),this._removeIcon(),this._removeShadow(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=o.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this.options.icon=t,this._map&&(this._initIcon(),this.update()),this._popup&&this.bindPopup(this._popup),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,e=this._map,i=e.options.zoomAnimation&&e.options.markerZoomAnimation,n=i?"leaflet-zoom-animated":"leaflet-zoom-hide",s=t.icon.createIcon(this._icon),a=!1;s!==this._icon&&(this._icon&&this._removeIcon(),a=!0,t.title&&(s.title=t.title),t.alt&&(s.alt=t.alt)),o.DomUtil.addClass(s,n),t.keyboard&&(s.tabIndex="0"),this._icon=s,this._initInteraction(),t.riseOnHover&&o.DomEvent.on(s,"mouseover",this._bringToFront,this).on(s,"mouseout",this._resetZIndex,this);var r=t.icon.createShadow(this._shadow),h=!1;r!==this._shadow&&(this._removeShadow(),h=!0),r&&o.DomUtil.addClass(r,n),this._shadow=r,t.opacity<1&&this._updateOpacity();var l=this._map._panes;a&&l.markerPane.appendChild(this._icon),r&&h&&l.shadowPane.appendChild(this._shadow)},_removeIcon:function(){this.options.riseOnHover&&o.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),this._map._panes.markerPane.removeChild(this._icon),this._icon=null},_removeShadow:function(){this._shadow&&this._map._panes.shadowPane.removeChild(this._shadow),this._shadow=null},_setPos:function(t){o.DomUtil.setPosition(this._icon,t),this._shadow&&o.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center).round();this._setPos(e)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,e=["dblclick","mousedown","mouseover","mouseout","contextmenu"];o.DomUtil.addClass(t,"leaflet-clickable"),o.DomEvent.on(t,"click",this._onMouseClick,this),o.DomEvent.on(t,"keypress",this._onKeyPress,this);for(var i=0;is?(e.height=s+"px",o.DomUtil.addClass(t,a)):o.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),e=this._animated,i=o.point(this.options.offset);e&&o.DomUtil.setPosition(this._container,t),this._containerBottom=-i.y-(e?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+i.x+(e?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);o.DomUtil.setPosition(this._container,e)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,e=this._container.offsetHeight,i=this._containerWidth,n=new o.Point(this._containerLeft,-e-this._containerBottom);this._animated&&n._add(o.DomUtil.getPosition(this._container));var s=t.layerPointToContainerPoint(n),a=o.point(this.options.autoPanPadding),r=o.point(this.options.autoPanPaddingTopLeft||a),h=o.point(this.options.autoPanPaddingBottomRight||a),l=t.getSize(),u=0,c=0;s.x+i+h.x>l.x&&(u=s.x+i-l.x+h.x),s.x-u-r.x<0&&(u=s.x-r.x),s.y+e+h.y>l.y&&(c=s.y+e-l.y+h.y),s.y-c-r.y<0&&(c=s.y-r.y),(u||c)&&t.fire("autopanstart").panBy([u,c])}},_onCloseButtonClick:function(t){this._close(),o.DomEvent.stop(t)}}),o.popup=function(t,e){return new o.Popup(t,e)},o.Map.include({openPopup:function(t,e,i){if(this.closePopup(),!(t instanceof o.Popup)){var n=t;t=new o.Popup(i).setLatLng(e).setContent(n)}return t._isOpen=!0,this._popup=t,this.addLayer(t)},closePopup:function(t){return t&&t!==this._popup||(t=this._popup,this._popup=null),t&&(this.removeLayer(t),t._isOpen=!1),this}}),o.Marker.include({openPopup:function(){return this._popup&&this._map&&!this._map.hasLayer(this._popup)&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},togglePopup:function(){return this._popup&&(this._popup._isOpen?this.closePopup():this.openPopup()),this},bindPopup:function(t,e){var i=o.point(this.options.icon.options.popupAnchor||[0,0]);return i=i.add(o.Popup.prototype.options.offset),e&&e.offset&&(i=i.add(e.offset)),e=o.extend({offset:i},e),this._popupHandlersAdded||(this.on("click",this.togglePopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popupHandlersAdded=!0),t instanceof o.Popup?(o.setOptions(t,e),this._popup=t):this._popup=new o.Popup(e,this).setContent(t),this},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.togglePopup,this).off("remove",this.closePopup,this).off("move",this._movePopup,this),this._popupHandlersAdded=!1),this},getPopup:function(){return this._popup},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),o.LayerGroup=o.Class.extend({initialize:function(t){this._layers={};var e,i;if(t)for(e=0,i=t.length;i>e;e++)this.addLayer(t[e])},addLayer:function(t){var e=this.getLayerId(t);return this._layers[e]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var e=t in this._layers?t:this.getLayerId(t);return this._map&&this._layers[e]&&this._map.removeLayer(this._layers[e]),delete this._layers[e],this},hasLayer:function(t){return t?t in this._layers||this.getLayerId(t)in this._layers:!1},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var e,i,n=Array.prototype.slice.call(arguments,1);for(e in this._layers)i=this._layers[e],i[t]&&i[t].apply(i,n);return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},getLayer:function(t){return this._layers[t]},getLayers:function(){var t=[];for(var e in this._layers)t.push(this._layers[e]);return t},setZIndex:function(t){return this.invoke("setZIndex",t)},getLayerId:function(t){return o.stamp(t)}}),o.layerGroup=function(t){return new o.LayerGroup(t)},o.FeatureGroup=o.LayerGroup.extend({includes:o.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose"},addLayer:function(t){return this.hasLayer(t)?this:("on"in t&&t.on(o.FeatureGroup.EVENTS,this._propagateEvent,this),o.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return this.hasLayer(t)?(t in this._layers&&(t=this._layers[t]),t.off(o.FeatureGroup.EVENTS,this._propagateEvent,this),o.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})):this},bindPopup:function(t,e){return this._popupContent=t,this._popupOptions=e,this.invoke("bindPopup",t,e)},openPopup:function(t){for(var e in this._layers){this._layers[e].openPopup(t);break}return this},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new o.LatLngBounds;return this.eachLayer(function(e){t.extend(e instanceof o.Marker?e.getLatLng():e.getBounds())}),t},_propagateEvent:function(t){t=o.extend({layer:t.target,target:this},t),this.fire(t.type,t)}}),o.featureGroup=function(t){return new o.FeatureGroup(t)},o.Path=o.Class.extend({includes:[o.Mixin.Events],statics:{CLIP_PADDING:function(){var e=o.Browser.mobile?1280:2e3,i=(e/Math.max(t.outerWidth,t.outerHeight)-1)/2;return Math.max(0,Math.min(.5,i))}()},options:{stroke:!0,color:"#0033ff",dashArray:null,lineCap:null,lineJoin:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){o.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,o.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return o.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),o.Map.include({_updatePathViewport:function(){var t=o.Path.CLIP_PADDING,e=this.getSize(),i=o.DomUtil.getPosition(this._mapPane),n=i.multiplyBy(-1)._subtract(e.multiplyBy(t)._round()),s=n.add(e.multiplyBy(1+2*t)._round());this._pathViewport=new o.Bounds(n,s)}}),o.Path.SVG_NS="http://www.w3.org/2000/svg",o.Browser.svg=!(!e.createElementNS||!e.createElementNS(o.Path.SVG_NS,"svg").createSVGRect),o.Path=o.Path.extend({statics:{SVG:o.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,e=this._container;return e&&t.lastChild!==e&&t.appendChild(e),this},bringToBack:function(){var t=this._map._pathRoot,e=this._container,i=t.firstChild;return e&&i!==e&&t.insertBefore(e,i),this},getPathString:function(){},_createElement:function(t){return e.createElementNS(o.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this.options.className&&o.DomUtil.addClass(this._path,this.options.className),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this.options.pointerEvents&&this._path.setAttribute("pointer-events",this.options.pointerEvents),this.options.clickable||this.options.pointerEvents||this._path.setAttribute("pointer-events","none"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray"),this.options.lineCap&&this._path.setAttribute("stroke-linecap",this.options.lineCap),this.options.lineJoin&&this._path.setAttribute("stroke-linejoin",this.options.lineJoin)):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(o.Browser.svg||!o.Browser.vml)&&o.DomUtil.addClass(this._path,"leaflet-clickable"),o.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],e=0;e';var i=t.firstChild;return i.style.behavior="url(#default#VML)",i&&"object"==typeof i.adj}catch(n){return!1}}(),o.Path=o.Browser.svg||!o.Browser.vml?o.Path:o.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return e.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return e.createElement("')}}catch(t){return function(t){return e.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");o.DomUtil.addClass(t,"leaflet-vml-shape"+(this.options.className?" "+this.options.className:"")),this.options.clickable&&o.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,e=this._fill,i=this.options,n=this._container;n.stroked=i.stroke,n.filled=i.fill,i.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",n.appendChild(t)),t.weight=i.weight+"px",t.color=i.color,t.opacity=i.opacity,t.dashStyle=i.dashArray?o.Util.isArray(i.dashArray)?i.dashArray.join(" "):i.dashArray.replace(/( *, *)/g," "):"",i.lineCap&&(t.endcap=i.lineCap.replace("butt","flat")),i.lineJoin&&(t.joinstyle=i.lineJoin)):t&&(n.removeChild(t),this._stroke=null),i.fill?(e||(e=this._fill=this._createElement("fill"),n.appendChild(e)),e.color=i.fillColor||i.color,e.opacity=i.fillOpacity):e&&(n.removeChild(e),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),o.Map.include(o.Browser.svg||!o.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=e.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),o.Browser.canvas=function(){return!!e.createElement("canvas").getContext}(),o.Path=o.Path.SVG&&!t.L_PREFER_CANVAS||!o.Browser.canvas?o.Path:o.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return o.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&(this._map.off("click",this._onClick,this),this._map.off("mousemove",this._onMouseMove,this)),this._requestUpdate(),this.fire("remove"),this._map=null},_requestUpdate:function(){this._map&&!o.Path._updateRequest&&(o.Path._updateRequest=o.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){o.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,e,i,n,s,a;for(this._ctx.beginPath(),t=0,i=this._parts.length;i>t;t++){for(e=0,n=this._parts[t].length;n>e;e++)s=this._parts[t][e],a=(0===e?"move":"line")+"To",this._ctx[a](s.x,s.y);this instanceof o.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,e=this.options;this._drawPath(),t.save(),this._updateStyle(),e.fill&&(t.globalAlpha=e.fillOpacity,t.fill()),e.stroke&&(t.globalAlpha=e.opacity,t.stroke()),t.restore()}},_initEvents:function(){this.options.clickable&&(this._map.on("mousemove",this._onMouseMove,this),this._map.on("click",this._onClick,this))},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",t)},_onMouseMove:function(t){this._map&&!this._map._animatingZoom&&(this._containsPoint(t.layerPoint)?(this._ctx.canvas.style.cursor="pointer",this._mouseInside=!0,this.fire("mouseover",t)):this._mouseInside&&(this._ctx.canvas.style.cursor="",this._mouseInside=!1,this.fire("mouseout",t)))}}),o.Map.include(o.Path.SVG&&!t.L_PREFER_CANVAS||!o.Browser.canvas?{}:{_initPathRoot:function(){var t,i=this._pathRoot;i||(i=this._pathRoot=e.createElement("canvas"),i.style.position="absolute",t=this._canvasCtx=i.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(i),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,e=t.min,i=t.max.subtract(e),n=this._pathRoot;o.DomUtil.setPosition(n,e),n.width=i.x,n.height=i.y,n.getContext("2d").translate(-e.x,-e.y)}}}),o.LineUtil={simplify:function(t,e){if(!e||!t.length)return t.slice();var i=e*e;return t=this._reducePoints(t,i),t=this._simplifyDP(t,i)},pointToSegmentDistance:function(t,e,i){return Math.sqrt(this._sqClosestPointOnSegment(t,e,i,!0))},closestPointOnSegment:function(t,e,i){return this._sqClosestPointOnSegment(t,e,i)},_simplifyDP:function(t,e){var n=t.length,o=typeof Uint8Array!=i+""?Uint8Array:Array,s=new o(n);s[0]=s[n-1]=1,this._simplifyDPStep(t,s,e,0,n-1);var a,r=[];for(a=0;n>a;a++)s[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,e,i,n,o){var s,a,r,h=0;for(a=n+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[n],t[o],!0),r>h&&(s=a,h=r);h>i&&(e[s]=1,this._simplifyDPStep(t,e,i,n,s),this._simplifyDPStep(t,e,i,s,o))},_reducePoints:function(t,e){for(var i=[t[0]],n=1,o=0,s=t.length;s>n;n++)this._sqDist(t[n],t[o])>e&&(i.push(t[n]),o=n);return s-1>o&&i.push(t[s-1]),i},clipSegment:function(t,e,i,n){var o,s,a,r=n?this._lastCode:this._getBitCode(t,i),h=this._getBitCode(e,i);for(this._lastCode=h;;){if(!(r|h))return[t,e];if(r&h)return!1;o=r||h,s=this._getEdgeIntersection(t,e,o,i),a=this._getBitCode(s,i),o===r?(t=s,r=a):(e=s,h=a)}},_getEdgeIntersection:function(t,e,i,n){var s=e.x-t.x,a=e.y-t.y,r=n.min,h=n.max;return 8&i?new o.Point(t.x+s*(h.y-t.y)/a,h.y):4&i?new o.Point(t.x+s*(r.y-t.y)/a,r.y):2&i?new o.Point(h.x,t.y+a*(h.x-t.x)/s):1&i?new o.Point(r.x,t.y+a*(r.x-t.x)/s):void 0},_getBitCode:function(t,e){var i=0;return t.xe.max.x&&(i|=2),t.ye.max.y&&(i|=8),i},_sqDist:function(t,e){var i=e.x-t.x,n=e.y-t.y;return i*i+n*n},_sqClosestPointOnSegment:function(t,e,i,n){var s,a=e.x,r=e.y,h=i.x-a,l=i.y-r,u=h*h+l*l;return u>0&&(s=((t.x-a)*h+(t.y-r)*l)/u,s>1?(a=i.x,r=i.y):s>0&&(a+=h*s,r+=l*s)),h=t.x-a,l=t.y-r,n?h*h+l*l:new o.Point(a,r)}},o.Polyline=o.Path.extend({initialize:function(t,e){o.Path.prototype.initialize.call(this,e),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,e=this._latlngs.length;e>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,e=this._parts.length,i="";e>t;t++)i+=this._getPathPartStr(this._parts[t]);return i},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(o.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs,!0),this.redraw(),t},closestLayerPoint:function(t){for(var e,i,n=1/0,s=this._parts,a=null,r=0,h=s.length;h>r;r++)for(var l=s[r],u=1,c=l.length;c>u;u++){e=l[u-1],i=l[u];var d=o.LineUtil._sqClosestPointOnSegment(t,e,i,!0);n>d&&(n=d,a=o.LineUtil._sqClosestPointOnSegment(t,e,i))}return a&&(a.distance=Math.sqrt(n)),a},getBounds:function(){return new o.LatLngBounds(this.getLatLngs())},_convertLatLngs:function(t,e){var i,n,s=e?t:[];for(i=0,n=t.length;n>i;i++){if(o.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;s[i]=o.latLng(t[i])}return s},_initEvents:function(){o.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var e,i=o.Path.VML,n=0,s=t.length,a="";s>n;n++)e=t[n],i&&e._round(),a+=(n?"L":"M")+e.x+" "+e.y;return a},_clipPoints:function(){var t,e,i,n=this._originalPoints,s=n.length;if(this.options.noClip)return void(this._parts=[n]);this._parts=[];var a=this._parts,r=this._map._pathViewport,h=o.LineUtil;for(t=0,e=0;s-1>t;t++)i=h.clipSegment(n[t],n[t+1],r,t),i&&(a[e]=a[e]||[],a[e].push(i[0]),(i[1]!==n[t+1]||t===s-2)&&(a[e].push(i[1]),e++))},_simplifyPoints:function(){for(var t=this._parts,e=o.LineUtil,i=0,n=t.length;n>i;i++)t[i]=e.simplify(t[i],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),o.Path.prototype._updatePath.call(this))}}),o.polyline=function(t,e){return new o.Polyline(t,e)},o.PolyUtil={},o.PolyUtil.clipPolygon=function(t,e){var i,n,s,a,r,h,l,u,c,d=[1,4,2,8],p=o.LineUtil;for(n=0,l=t.length;l>n;n++)t[n]._code=p._getBitCode(t[n],e);for(a=0;4>a;a++){for(u=d[a],i=[],n=0,l=t.length,s=l-1;l>n;s=n++)r=t[n],h=t[s],r._code&u?h._code&u||(c=p._getEdgeIntersection(h,r,u,e),c._code=p._getBitCode(c,e),i.push(c)):(h._code&u&&(c=p._getEdgeIntersection(h,r,u,e),c._code=p._getBitCode(c,e),i.push(c)),i.push(r));t=i}return t},o.Polygon=o.Polyline.extend({options:{fill:!0},initialize:function(t,e){o.Polyline.prototype.initialize.call(this,t,e),this._initWithHoles(t)},_initWithHoles:function(t){var e,i,n;if(t&&o.Util.isArray(t[0])&&"number"!=typeof t[0][0])for(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1),e=0,i=this._holes.length;i>e;e++)n=this._holes[e]=this._convertLatLngs(this._holes[e]),n[0].equals(n[n.length-1])&&n.pop();t=this._latlngs,t.length>=2&&t[0].equals(t[t.length-1])&&t.pop()},projectLatlngs:function(){if(o.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,e,i,n;for(t=0,i=this._holes.length;i>t;t++)for(this._holePoints[t]=[],e=0,n=this._holes[t].length;n>e;e++)this._holePoints[t][e]=this._map.latLngToLayerPoint(this._holes[t][e])}},setLatLngs:function(t){return t&&o.Util.isArray(t[0])&&"number"!=typeof t[0][0]?(this._initWithHoles(t),this.redraw()):o.Polyline.prototype.setLatLngs.call(this,t)},_clipPoints:function(){var t=this._originalPoints,e=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var i=0,n=this._parts.length;n>i;i++){var s=o.PolyUtil.clipPolygon(this._parts[i],this._map._pathViewport);s.length&&e.push(s)}this._parts=e}},_getPathPartStr:function(t){var e=o.Polyline.prototype._getPathPartStr.call(this,t);return e+(o.Browser.svg?"z":"x")}}),o.polygon=function(t,e){return new o.Polygon(t,e)},function(){function t(t){return o.FeatureGroup.extend({initialize:function(t,e){this._layers={},this._options=e,this.setLatLngs(t)},setLatLngs:function(e){var i=0,n=e.length;for(this.eachLayer(function(t){n>i?t.setLatLngs(e[i++]):this.removeLayer(t)},this);n>i;)this.addLayer(new t(e[i++],this._options));return this},getLatLngs:function(){var t=[];return this.eachLayer(function(e){t.push(e.getLatLngs())}),t}})}o.MultiPolyline=t(o.Polyline),o.MultiPolygon=t(o.Polygon),o.multiPolyline=function(t,e){return new o.MultiPolyline(t,e)},o.multiPolygon=function(t,e){return new o.MultiPolygon(t,e)}}(),o.Rectangle=o.Polygon.extend({initialize:function(t,e){o.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=o.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),o.rectangle=function(t,e){return new o.Rectangle(t,e)},o.Circle=o.Path.extend({initialize:function(t,e,i){o.Path.prototype.initialize.call(this,i),this._latlng=o.latLng(t),this._mRadius=e},options:{fill:!0},setLatLng:function(t){return this._latlng=o.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),e=this._latlng,i=this._map.latLngToLayerPoint([e.lat,e.lng-t]);this._point=this._map.latLngToLayerPoint(e),this._radius=Math.max(this._point.x-i.x,1)},getBounds:function(){var t=this._getLngRadius(),e=this._mRadius/40075017*360,i=this._latlng;return new o.LatLngBounds([i.lat-e,i.lng-t],[i.lat+e,i.lng+t])},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,e=this._radius;return this._checkIfEmpty()?"":o.Browser.svg?"M"+t.x+","+(t.y-e)+"A"+e+","+e+",0,1,1,"+(t.x-.1)+","+(t.y-e)+" z":(t._round(),e=Math.round(e),"AL "+t.x+","+t.y+" "+e+","+e+" 0,23592600")},getRadius:function(){return this._mRadius},_getLatRadius:function(){return this._mRadius/40075017*360},_getLngRadius:function(){return this._getLatRadius()/Math.cos(o.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,e=this._radius,i=this._point;return i.x-e>t.max.x||i.y-e>t.max.y||i.x+ei;i++)for(l=this._parts[i],n=0,r=l.length,s=r-1;r>n;s=n++)if((e||0!==n)&&(h=o.LineUtil.pointToSegmentDistance(t,l[s],l[n]),u>=h))return!0;return!1}}:{}),o.Polygon.include(o.Path.CANVAS?{_containsPoint:function(t){var e,i,n,s,a,r,h,l,u=!1;if(o.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(s=0,h=this._parts.length;h>s;s++)for(e=this._parts[s],a=0,l=e.length,r=l-1;l>a;r=a++)i=e[a],n=e[r],i.y>t.y!=n.y>t.y&&t.x<(n.x-i.x)*(t.y-i.y)/(n.y-i.y)+i.x&&(u=!u);return u}}:{}),o.Circle.include(o.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var e=this._point,i=this.options.stroke?this.options.weight/2:0;return t.distanceTo(e)<=this._radius+i}}:{}),o.CircleMarker.include(o.Path.CANVAS?{_updateStyle:function(){o.Path.prototype._updateStyle.call(this)}}:{}),o.GeoJSON=o.FeatureGroup.extend({initialize:function(t,e){o.setOptions(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e,i,n,s=o.Util.isArray(t)?t:t.features;if(s){for(e=0,i=s.length;i>e;e++)n=s[e],(n.geometries||n.geometry||n.features||n.coordinates)&&this.addData(s[e]);return this}var a=this.options;if(!a.filter||a.filter(t)){var r=o.GeoJSON.geometryToLayer(t,a.pointToLayer,a.coordsToLatLng,a);return r.feature=o.GeoJSON.asFeature(t),r.defaultOptions=r.options,this.resetStyle(r),a.onEachFeature&&a.onEachFeature(t,r),this.addLayer(r)}},resetStyle:function(t){var e=this.options.style;e&&(o.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,e))},setStyle:function(t){this.eachLayer(function(e){this._setLayerStyle(e,t)},this)},_setLayerStyle:function(t,e){"function"==typeof e&&(e=e(t.feature)),t.setStyle&&t.setStyle(e)}}),o.extend(o.GeoJSON,{geometryToLayer:function(t,e,i,n){var s,a,r,h,l="Feature"===t.type?t.geometry:t,u=l.coordinates,c=[];switch(i=i||this.coordsToLatLng,l.type){case"Point":return s=i(u),e?e(t,s):new o.Marker(s);case"MultiPoint":for(r=0,h=u.length;h>r;r++)s=i(u[r]),c.push(e?e(t,s):new o.Marker(s));return new o.FeatureGroup(c);case"LineString":return a=this.coordsToLatLngs(u,0,i),new o.Polyline(a,n);case"Polygon":if(2===u.length&&!u[1].length)throw new Error("Invalid GeoJSON object.");return a=this.coordsToLatLngs(u,1,i),new o.Polygon(a,n);case"MultiLineString":return a=this.coordsToLatLngs(u,1,i),new o.MultiPolyline(a,n);case"MultiPolygon":return a=this.coordsToLatLngs(u,2,i),new o.MultiPolygon(a,n);case"GeometryCollection":for(r=0,h=l.geometries.length;h>r;r++)c.push(this.geometryToLayer({geometry:l.geometries[r],type:"Feature",properties:t.properties},e,i,n));return new o.FeatureGroup(c);default:throw new Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t){return new o.LatLng(t[1],t[0],t[2])},coordsToLatLngs:function(t,e,i){var n,o,s,a=[];for(o=0,s=t.length;s>o;o++)n=e?this.coordsToLatLngs(t[o],e-1,i):(i||this.coordsToLatLng)(t[o]),a.push(n);return a},latLngToCoords:function(t){var e=[t.lng,t.lat];return t.alt!==i&&e.push(t.alt),e},latLngsToCoords:function(t){for(var e=[],i=0,n=t.length;n>i;i++)e.push(o.GeoJSON.latLngToCoords(t[i]));return e},getFeature:function(t,e){return t.feature?o.extend({},t.feature,{geometry:e}):o.GeoJSON.asFeature(e)},asFeature:function(t){return"Feature"===t.type?t:{type:"Feature",properties:{},geometry:t}}});var a={toGeoJSON:function(){return o.GeoJSON.getFeature(this,{type:"Point",coordinates:o.GeoJSON.latLngToCoords(this.getLatLng())})}};o.Marker.include(a),o.Circle.include(a),o.CircleMarker.include(a),o.Polyline.include({toGeoJSON:function(){return o.GeoJSON.getFeature(this,{type:"LineString",coordinates:o.GeoJSON.latLngsToCoords(this.getLatLngs())})}}),o.Polygon.include({toGeoJSON:function(){var t,e,i,n=[o.GeoJSON.latLngsToCoords(this.getLatLngs())];if(n[0].push(n[0][0]),this._holes)for(t=0,e=this._holes.length;e>t;t++)i=o.GeoJSON.latLngsToCoords(this._holes[t]),i.push(i[0]),n.push(i);return o.GeoJSON.getFeature(this,{type:"Polygon",coordinates:n})}}),function(){function t(t){return function(){var e=[];return this.eachLayer(function(t){e.push(t.toGeoJSON().geometry.coordinates)}),o.GeoJSON.getFeature(this,{type:t,coordinates:e})}}o.MultiPolyline.include({toGeoJSON:t("MultiLineString")}),o.MultiPolygon.include({toGeoJSON:t("MultiPolygon")}),o.LayerGroup.include({toGeoJSON:function(){var e,i=this.feature&&this.feature.geometry,n=[];if(i&&"MultiPoint"===i.type)return t("MultiPoint").call(this);var s=i&&"GeometryCollection"===i.type;return this.eachLayer(function(t){t.toGeoJSON&&(e=t.toGeoJSON(),n.push(s?e.geometry:o.GeoJSON.asFeature(e)))}),s?o.GeoJSON.getFeature(this,{geometries:n,type:"GeometryCollection"}):{type:"FeatureCollection",features:n}}})}(),o.geoJson=function(t,e){return new o.GeoJSON(t,e)},o.DomEvent={addListener:function(t,e,i,n){var s,a,r,h=o.stamp(i),l="_leaflet_"+e+h;return t[l]?this:(s=function(e){return i.call(n||t,e||o.DomEvent._getEvent())},o.Browser.pointer&&0===e.indexOf("touch")?this.addPointerListener(t,e,s,h):(o.Browser.touch&&"dblclick"===e&&this.addDoubleTapListener&&this.addDoubleTapListener(t,s,h),"addEventListener"in t?"mousewheel"===e?(t.addEventListener("DOMMouseScroll",s,!1),t.addEventListener(e,s,!1)):"mouseenter"===e||"mouseleave"===e?(a=s,r="mouseenter"===e?"mouseover":"mouseout",s=function(e){return o.DomEvent._checkMouse(t,e)?a(e):void 0},t.addEventListener(r,s,!1)):"click"===e&&o.Browser.android?(a=s,s=function(t){return o.DomEvent._filterClick(t,a)},t.addEventListener(e,s,!1)):t.addEventListener(e,s,!1):"attachEvent"in t&&t.attachEvent("on"+e,s),t[l]=s,this))},removeListener:function(t,e,i){var n=o.stamp(i),s="_leaflet_"+e+n,a=t[s];return a?(o.Browser.pointer&&0===e.indexOf("touch")?this.removePointerListener(t,e,n):o.Browser.touch&&"dblclick"===e&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,n):"removeEventListener"in t?"mousewheel"===e?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(e,a,!1)):"mouseenter"===e||"mouseleave"===e?t.removeEventListener("mouseenter"===e?"mouseover":"mouseout",a,!1):t.removeEventListener(e,a,!1):"detachEvent"in t&&t.detachEvent("on"+e,a),t[s]=null,this):this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,o.DomEvent._skipped(t),this},disableScrollPropagation:function(t){var e=o.DomEvent.stopPropagation;return o.DomEvent.on(t,"mousewheel",e).on(t,"MozMousePixelScroll",e)},disableClickPropagation:function(t){for(var e=o.DomEvent.stopPropagation,i=o.Draggable.START.length-1;i>=0;i--)o.DomEvent.on(t,o.Draggable.START[i],e);return o.DomEvent.on(t,"click",o.DomEvent._fakeStop).on(t,"dblclick",e)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return o.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,e){if(!e)return new o.Point(t.clientX,t.clientY);var i=e.getBoundingClientRect();return new o.Point(t.clientX-i.left-e.clientLeft,t.clientY-i.top-e.clientTop)},getWheelDelta:function(t){var e=0;return t.wheelDelta&&(e=t.wheelDelta/120),t.detail&&(e=-t.detail/3),e},_skipEvents:{},_fakeStop:function(t){o.DomEvent._skipEvents[t.type]=!0},_skipped:function(t){var e=this._skipEvents[t.type];return this._skipEvents[t.type]=!1,e},_checkMouse:function(t,e){var i=e.relatedTarget;if(!i)return!0;try{for(;i&&i!==t;)i=i.parentNode}catch(n){return!1}return i!==t},_getEvent:function(){var e=t.event;if(!e)for(var i=arguments.callee.caller;i&&(e=i.arguments[0],!e||t.Event!==e.constructor);)i=i.caller;return e},_filterClick:function(t,e){var i=t.timeStamp||t.originalEvent.timeStamp,n=o.DomEvent._lastClick&&i-o.DomEvent._lastClick;return n&&n>100&&500>n||t.target._simulatedClick&&!t._simulated?void o.DomEvent.stop(t):(o.DomEvent._lastClick=i,e(t))}},o.DomEvent.on=o.DomEvent.addListener,o.DomEvent.off=o.DomEvent.removeListener,o.Draggable=o.Class.extend({includes:o.Mixin.Events,statics:{START:o.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"}},initialize:function(t,e){this._element=t,this._dragStartTarget=e||t},enable:function(){if(!this._enabled){for(var t=o.Draggable.START.length-1;t>=0;t--)o.DomEvent.on(this._dragStartTarget,o.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=o.Draggable.START.length-1;t>=0;t--)o.DomEvent.off(this._dragStartTarget,o.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(this._moved=!1,!(t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(o.DomEvent.stopPropagation(t),o.Draggable._disabled||(o.DomUtil.disableImageDrag(),o.DomUtil.disableTextSelection(),this._moving)))){var i=t.touches?t.touches[0]:t;this._startPoint=new o.Point(i.clientX,i.clientY),this._startPos=this._newPos=o.DomUtil.getPosition(this._element),o.DomEvent.on(e,o.Draggable.MOVE[t.type],this._onMove,this).on(e,o.Draggable.END[t.type],this._onUp,this)}},_onMove:function(t){if(t.touches&&t.touches.length>1)return void(this._moved=!0);var i=t.touches&&1===t.touches.length?t.touches[0]:t,n=new o.Point(i.clientX,i.clientY),s=n.subtract(this._startPoint);(s.x||s.y)&&(o.Browser.touch&&Math.abs(s.x)+Math.abs(s.y)<3||(o.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=o.DomUtil.getPosition(this._element).subtract(s),o.DomUtil.addClass(e.body,"leaflet-dragging"),this._lastTarget=t.target||t.srcElement,o.DomUtil.addClass(this._lastTarget,"leaflet-drag-target")),this._newPos=this._startPos.add(s),this._moving=!0,o.Util.cancelAnimFrame(this._animRequest),this._animRequest=o.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget)))},_updatePosition:function(){this.fire("predrag"),o.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(){o.DomUtil.removeClass(e.body,"leaflet-dragging"),this._lastTarget&&(o.DomUtil.removeClass(this._lastTarget,"leaflet-drag-target"),this._lastTarget=null);for(var t in o.Draggable.MOVE)o.DomEvent.off(e,o.Draggable.MOVE[t],this._onMove).off(e,o.Draggable.END[t],this._onUp);o.DomUtil.enableImageDrag(),o.DomUtil.enableTextSelection(),this._moved&&this._moving&&(o.Util.cancelAnimFrame(this._animRequest),this.fire("dragend",{distance:this._newPos.distanceTo(this._startPos)})),this._moving=!1}}),o.Handler=o.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),o.Map.mergeOptions({dragging:!0,inertia:!o.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:o.Browser.touch?32:18,easeLinearity:.25,worldCopyJump:!1}),o.Map.Drag=o.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new o.Draggable(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this),t.whenReady(this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,e=this._lastPos=this._draggable._newPos;this._positions.push(e),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),e=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=e.subtract(t).x,this._worldWidth=this._map.project([0,180]).x},_onPreDrag:function(){var t=this._worldWidth,e=Math.round(t/2),i=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-e+i)%t+e-i,s=(n+e+i)%t-e-i,a=Math.abs(o+i)i.inertiaThreshold||!this._positions[0];if(e.fire("dragend",t),s)e.fire("moveend");else{var a=this._lastPos.subtract(this._positions[0]),r=(this._lastTime+n-this._times[0])/1e3,h=i.easeLinearity,l=a.multiplyBy(h/r),u=l.distanceTo([0,0]),c=Math.min(i.inertiaMaxSpeed,u),d=l.multiplyBy(c/u),p=c/(i.inertiaDeceleration*h),_=d.multiplyBy(-p/2).round();_.x&&_.y?(_=e._limitOffset(_,e.options.maxBounds),o.Util.requestAnimFrame(function(){e.panBy(_,{duration:p,easeLinearity:h,noMoveStart:!0})})):e.fire("moveend")}}}),o.Map.addInitHook("addHandler","dragging",o.Map.Drag),o.Map.mergeOptions({doubleClickZoom:!0}),o.Map.DoubleClickZoom=o.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,i=e.getZoom()+(t.originalEvent.shiftKey?-1:1);"center"===e.options.doubleClickZoom?e.setZoom(i):e.setZoomAround(t.containerPoint,i)}}),o.Map.addInitHook("addHandler","doubleClickZoom",o.Map.DoubleClickZoom),o.Map.mergeOptions({scrollWheelZoom:!0}),o.Map.ScrollWheelZoom=o.Handler.extend({addHooks:function(){o.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),o.DomEvent.on(this._map._container,"MozMousePixelScroll",o.DomEvent.preventDefault),this._delta=0},removeHooks:function(){o.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll),o.DomEvent.off(this._map._container,"MozMousePixelScroll",o.DomEvent.preventDefault)},_onWheelScroll:function(t){var e=o.DomEvent.getWheelDelta(t);this._delta+=e,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var i=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(o.bind(this._performZoom,this),i),o.DomEvent.preventDefault(t),o.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,e=this._delta,i=t.getZoom();e=e>0?Math.ceil(e):Math.floor(e),e=Math.max(Math.min(e,4),-4),e=t._limitZoom(i+e)-i,this._delta=0,this._startTime=null,e&&("center"===t.options.scrollWheelZoom?t.setZoom(i+e):t.setZoomAround(this._lastMousePos,i+e))}}),o.Map.addInitHook("addHandler","scrollWheelZoom",o.Map.ScrollWheelZoom),o.extend(o.DomEvent,{_touchstart:o.Browser.msPointer?"MSPointerDown":o.Browser.pointer?"pointerdown":"touchstart",_touchend:o.Browser.msPointer?"MSPointerUp":o.Browser.pointer?"pointerup":"touchend",addDoubleTapListener:function(t,i,n){function s(t){var e;if(o.Browser.pointer?(_.push(t.pointerId),e=_.length):e=t.touches.length,!(e>1)){var i=Date.now(),n=i-(r||i);h=t.touches?t.touches[0]:t,l=n>0&&u>=n,r=i}}function a(t){if(o.Browser.pointer){var e=_.indexOf(t.pointerId);if(-1===e)return;_.splice(e,1)}if(l){if(o.Browser.pointer){var n,s={};for(var a in h)n=h[a],s[a]="function"==typeof n?n.bind(h):n;h=s}h.type="dblclick",i(h),r=null}}var r,h,l=!1,u=250,c="_leaflet_",d=this._touchstart,p=this._touchend,_=[];t[c+d+n]=s,t[c+p+n]=a;var m=o.Browser.pointer?e.documentElement:t;return t.addEventListener(d,s,!1),m.addEventListener(p,a,!1),o.Browser.pointer&&m.addEventListener(o.DomEvent.POINTER_CANCEL,a,!1),this},removeDoubleTapListener:function(t,i){var n="_leaflet_";return t.removeEventListener(this._touchstart,t[n+this._touchstart+i],!1),(o.Browser.pointer?e.documentElement:t).removeEventListener(this._touchend,t[n+this._touchend+i],!1),o.Browser.pointer&&e.documentElement.removeEventListener(o.DomEvent.POINTER_CANCEL,t[n+this._touchend+i],!1),this}}),o.extend(o.DomEvent,{POINTER_DOWN:o.Browser.msPointer?"MSPointerDown":"pointerdown",POINTER_MOVE:o.Browser.msPointer?"MSPointerMove":"pointermove",POINTER_UP:o.Browser.msPointer?"MSPointerUp":"pointerup",POINTER_CANCEL:o.Browser.msPointer?"MSPointerCancel":"pointercancel",_pointers:[],_pointerDocumentListener:!1,addPointerListener:function(t,e,i,n){switch(e){case"touchstart":return this.addPointerListenerStart(t,e,i,n);case"touchend":return this.addPointerListenerEnd(t,e,i,n);case"touchmove":return this.addPointerListenerMove(t,e,i,n);default:throw"Unknown touch event type"}},addPointerListenerStart:function(t,i,n,s){var a="_leaflet_",r=this._pointers,h=function(t){o.DomEvent.preventDefault(t);for(var e=!1,i=0;i1))&&(this._moved||(o.DomUtil.addClass(e._mapPane,"leaflet-touching"),e.fire("movestart").fire("zoomstart"),this._moved=!0),o.Util.cancelAnimFrame(this._animRequest),this._animRequest=o.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),o.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,e=this._getScaleOrigin(),i=t.layerPointToLatLng(e),n=t.getScaleZoom(this._scale);t._animateZoom(i,n,this._startCenter,this._scale,this._delta,!1,!0)},_onTouchEnd:function(){if(!this._moved||!this._zooming)return void(this._zooming=!1);var t=this._map;this._zooming=!1,o.DomUtil.removeClass(t._mapPane,"leaflet-touching"),o.Util.cancelAnimFrame(this._animRequest),o.DomEvent.off(e,"touchmove",this._onTouchMove).off(e,"touchend",this._onTouchEnd);var i=this._getScaleOrigin(),n=t.layerPointToLatLng(i),s=t.getZoom(),a=t.getScaleZoom(this._scale)-s,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(s+r),l=t.getZoomScale(h)/this._scale;t._animateZoom(n,h,i,l)},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),o.Map.addInitHook("addHandler","touchZoom",o.Map.TouchZoom),o.Map.mergeOptions({tap:!0,tapTolerance:15}),o.Map.Tap=o.Handler.extend({addHooks:function(){o.DomEvent.on(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){o.DomEvent.off(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(t.touches){if(o.DomEvent.preventDefault(t),this._fireClick=!0,t.touches.length>1)return this._fireClick=!1,void clearTimeout(this._holdTimeout);var i=t.touches[0],n=i.target;this._startPos=this._newPos=new o.Point(i.clientX,i.clientY),n.tagName&&"a"===n.tagName.toLowerCase()&&o.DomUtil.addClass(n,"leaflet-active"),this._holdTimeout=setTimeout(o.bind(function(){this._isTapValid()&&(this._fireClick=!1,this._onUp(),this._simulateEvent("contextmenu",i))},this),1e3),o.DomEvent.on(e,"touchmove",this._onMove,this).on(e,"touchend",this._onUp,this)}},_onUp:function(t){if(clearTimeout(this._holdTimeout),o.DomEvent.off(e,"touchmove",this._onMove,this).off(e,"touchend",this._onUp,this),this._fireClick&&t&&t.changedTouches){var i=t.changedTouches[0],n=i.target;n&&n.tagName&&"a"===n.tagName.toLowerCase()&&o.DomUtil.removeClass(n,"leaflet-active"),this._isTapValid()&&this._simulateEvent("click",i)}},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_onMove:function(t){var e=t.touches[0];this._newPos=new o.Point(e.clientX,e.clientY)},_simulateEvent:function(i,n){var o=e.createEvent("MouseEvents");o._simulated=!0,n.target._simulatedClick=!0,o.initMouseEvent(i,!0,!0,t,1,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),n.target.dispatchEvent(o)}}),o.Browser.touch&&!o.Browser.pointer&&o.Map.addInitHook("addHandler","tap",o.Map.Tap),o.Map.mergeOptions({boxZoom:!0}),o.Map.BoxZoom=o.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._moved=!1},addHooks:function(){o.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){o.DomEvent.off(this._container,"mousedown",this._onMouseDown),this._moved=!1},moved:function(){return this._moved},_onMouseDown:function(t){return this._moved=!1,!t.shiftKey||1!==t.which&&1!==t.button?!1:(o.DomUtil.disableTextSelection(),o.DomUtil.disableImageDrag(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),void o.DomEvent.on(e,"mousemove",this._onMouseMove,this).on(e,"mouseup",this._onMouseUp,this).on(e,"keydown",this._onKeyDown,this))},_onMouseMove:function(t){this._moved||(this._box=o.DomUtil.create("div","leaflet-zoom-box",this._pane),o.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",this._map.fire("boxzoomstart"));var e=this._startLayerPoint,i=this._box,n=this._map.mouseEventToLayerPoint(t),s=n.subtract(e),a=new o.Point(Math.min(n.x,e.x),Math.min(n.y,e.y));o.DomUtil.setPosition(i,a),this._moved=!0,i.style.width=Math.max(0,Math.abs(s.x)-4)+"px",i.style.height=Math.max(0,Math.abs(s.y)-4)+"px"},_finish:function(){this._moved&&(this._pane.removeChild(this._box),this._container.style.cursor=""),o.DomUtil.enableTextSelection(),o.DomUtil.enableImageDrag(),o.DomEvent.off(e,"mousemove",this._onMouseMove).off(e,"mouseup",this._onMouseUp).off(e,"keydown",this._onKeyDown)},_onMouseUp:function(t){this._finish();var e=this._map,i=e.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(i)){var n=new o.LatLngBounds(e.layerPointToLatLng(this._startLayerPoint),e.layerPointToLatLng(i));e.fitBounds(n),e.fire("boxzoomend",{boxZoomBounds:n})}},_onKeyDown:function(t){27===t.keyCode&&this._finish()}}),o.Map.addInitHook("addHandler","boxZoom",o.Map.BoxZoom),o.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),o.Map.Keyboard=o.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61,171],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),o.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;o.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){if(!this._focused){var i=e.body,n=e.documentElement,o=i.scrollTop||n.scrollTop,s=i.scrollLeft||n.scrollLeft;this._map._container.focus(),t.scrollTo(s,o)}},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var e,i,n=this._panKeys={},o=this.keyCodes;for(e=0,i=o.left.length;i>e;e++)n[o.left[e]]=[-1*t,0];for(e=0,i=o.right.length;i>e;e++)n[o.right[e]]=[t,0];for(e=0,i=o.down.length;i>e;e++)n[o.down[e]]=[0,t];for(e=0,i=o.up.length;i>e;e++)n[o.up[e]]=[0,-1*t]},_setZoomOffset:function(t){var e,i,n=this._zoomKeys={},o=this.keyCodes;for(e=0,i=o.zoomIn.length;i>e;e++)n[o.zoomIn[e]]=t;for(e=0,i=o.zoomOut.length;i>e;e++)n[o.zoomOut[e]]=-t},_addHooks:function(){o.DomEvent.on(e,"keydown",this._onKeyDown,this)},_removeHooks:function(){o.DomEvent.off(e,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var e=t.keyCode,i=this._map;if(e in this._panKeys){if(i._panAnim&&i._panAnim._inProgress)return;i.panBy(this._panKeys[e]),i.options.maxBounds&&i.panInsideBounds(i.options.maxBounds)}else{if(!(e in this._zoomKeys))return;i.setZoom(i.getZoom()+this._zoomKeys[e])}o.DomEvent.stop(t)}}),o.Map.addInitHook("addHandler","keyboard",o.Map.Keyboard),o.Handler.MarkerDrag=o.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new o.Draggable(t,t)),this._draggable.on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this),this._draggable.enable(),o.DomUtil.addClass(this._marker._icon,"leaflet-marker-draggable")},removeHooks:function(){this._draggable.off("dragstart",this._onDragStart,this).off("drag",this._onDrag,this).off("dragend",this._onDragEnd,this),this._draggable.disable(),o.DomUtil.removeClass(this._marker._icon,"leaflet-marker-draggable")},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,e=t._shadow,i=o.DomUtil.getPosition(t._icon),n=t._map.layerPointToLatLng(i);e&&o.DomUtil.setPosition(e,i),t._latlng=n,t.fire("move",{latlng:n}).fire("drag")},_onDragEnd:function(t){this._marker.fire("moveend").fire("dragend",t)}}),o.Control=o.Class.extend({options:{position:"topright"},initialize:function(t){o.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),n=t._controlCorners[i];return o.DomUtil.addClass(e,"leaflet-control"),-1!==i.indexOf("bottom")?n.insertBefore(e,n.firstChild):n.appendChild(e),this},removeFrom:function(t){var e=this.getPosition(),i=t._controlCorners[e];return i.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this},_refocusOnMap:function(){this._map&&this._map.getContainer().focus()}}),o.control=function(t){return new o.Control(t)},o.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,s){var a=i+t+" "+i+s;e[t+s]=o.DomUtil.create("div",a,n)}var e=this._controlCorners={},i="leaflet-",n=this._controlContainer=o.DomUtil.create("div",i+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")},_clearControlPos:function(){this._container.removeChild(this._controlContainer)}}),o.Control.Zoom=o.Control.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom in",zoomOutText:"-",zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",i=o.DomUtil.create("div",e+" leaflet-bar");return this._map=t,this._zoomInButton=this._createButton(this.options.zoomInText,this.options.zoomInTitle,e+"-in",i,this._zoomIn,this),this._zoomOutButton=this._createButton(this.options.zoomOutText,this.options.zoomOutTitle,e+"-out",i,this._zoomOut,this),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),i},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,e,i,n,s,a){var r=o.DomUtil.create("a",i,n);r.innerHTML=t,r.href="#",r.title=e;var h=o.DomEvent.stopPropagation;return o.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",o.DomEvent.preventDefault).on(r,"click",s,a).on(r,"click",this._refocusOnMap,a),r},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";o.DomUtil.removeClass(this._zoomInButton,e),o.DomUtil.removeClass(this._zoomOutButton,e),t._zoom===t.getMinZoom()&&o.DomUtil.addClass(this._zoomOutButton,e),t._zoom===t.getMaxZoom()&&o.DomUtil.addClass(this._zoomInButton,e)}}),o.Map.mergeOptions({zoomControl:!0}),o.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new o.Control.Zoom,this.addControl(this.zoomControl))}),o.control.zoom=function(t){return new o.Control.Zoom(t)},o.Control.Attribution=o.Control.extend({options:{position:"bottomright",prefix:'Leaflet'},initialize:function(t){o.setOptions(this,t),this._attributions={}},onAdd:function(t){this._container=o.DomUtil.create("div","leaflet-control-attribution"),o.DomEvent.disableClickPropagation(this._container);for(var e in t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):void 0},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):void 0},_update:function(){if(this._map){var t=[];for(var e in this._attributions)this._attributions[e]&&t.push(e);var i=[];this.options.prefix&&i.push(this.options.prefix),t.length&&i.push(t.join(", ")),this._container.innerHTML=i.join(" | ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),o.Map.mergeOptions({attributionControl:!0}),o.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new o.Control.Attribution).addTo(this))}),o.control.attribution=function(t){return new o.Control.Attribution(t)},o.Control.Scale=o.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var e="leaflet-control-scale",i=o.DomUtil.create("div",e),n=this.options;return this._addScales(n,e,i),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=o.DomUtil.create("div",e+"-line",i)),t.imperial&&(this._iScale=o.DomUtil.create("div",e+"-line",i))},_update:function(){var t=this._map.getBounds(),e=t.getCenter().lat,i=6378137*Math.PI*Math.cos(e*Math.PI/180),n=i*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),s=this.options,a=0;o.x>0&&(a=n*(s.maxWidth/o.x)),this._updateScales(s,a)},_updateScales:function(t,e){t.metric&&e&&this._updateMetric(e),t.imperial&&e&&this._updateImperial(e)},_updateMetric:function(t){var e=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(e/t)+"px",this._mScale.innerHTML=1e3>e?e+" m":e/1e3+" km"},_updateImperial:function(t){var e,i,n,o=3.2808399*t,s=this._iScale;o>5280?(e=o/5280,i=this._getRoundNum(e),s.style.width=this._getScaleWidth(i/e)+"px",s.innerHTML=i+" mi"):(n=this._getRoundNum(o),s.style.width=this._getScaleWidth(n/o)+"px",s.innerHTML=n+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var e=Math.pow(10,(Math.floor(t)+"").length-1),i=t/e;return i=i>=10?10:i>=5?5:i>=3?3:i>=2?2:1,e*i}}),o.control.scale=function(t){return new o.Control.Scale(t)},o.Control.Layers=o.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,e,i){o.setOptions(this,i),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var n in t)this._addLayer(t[n],n);for(n in e)this._addLayer(e[n],n,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange,this).off("layerremove",this._onLayerChange,this)},addBaseLayer:function(t,e){return this._addLayer(t,e),this._update(),this},addOverlay:function(t,e){return this._addLayer(t,e,!0),this._update(),this},removeLayer:function(t){var e=o.stamp(t);return delete this._layers[e],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",e=this._container=o.DomUtil.create("div",t);e.setAttribute("aria-haspopup",!0),o.Browser.touch?o.DomEvent.on(e,"click",o.DomEvent.stopPropagation):o.DomEvent.disableClickPropagation(e).disableScrollPropagation(e);var i=this._form=o.DomUtil.create("form",t+"-list");if(this.options.collapsed){o.Browser.android||o.DomEvent.on(e,"mouseover",this._expand,this).on(e,"mouseout",this._collapse,this);var n=this._layersLink=o.DomUtil.create("a",t+"-toggle",e);n.href="#",n.title="Layers",o.Browser.touch?o.DomEvent.on(n,"click",o.DomEvent.stop).on(n,"click",this._expand,this):o.DomEvent.on(n,"focus",this._expand,this),o.DomEvent.on(i,"click",function(){setTimeout(o.bind(this._onInputClick,this),0)},this),this._map.on("click",this._collapse,this)}else this._expand();this._baseLayersList=o.DomUtil.create("div",t+"-base",i),this._separator=o.DomUtil.create("div",t+"-separator",i),this._overlaysList=o.DomUtil.create("div",t+"-overlays",i),e.appendChild(i)},_addLayer:function(t,e,i){var n=o.stamp(t);this._layers[n]={layer:t,name:e,overlay:i},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t,e,i=!1,n=!1;for(t in this._layers)e=this._layers[t],this._addItem(e),n=n||e.overlay,i=i||!e.overlay;this._separator.style.display=n&&i?"":"none"}},_onLayerChange:function(t){var e=this._layers[o.stamp(t.layer)];if(e){this._handlingClick||this._update();var i=e.overlay?"layeradd"===t.type?"overlayadd":"overlayremove":"layeradd"===t.type?"baselayerchange":null;i&&this._map.fire(i,e)}},_createRadioElement:function(t,i){var n='t;t++)e=n[t],i=this._layers[e.layerId],e.checked&&!this._map.hasLayer(i.layer)?this._map.addLayer(i.layer):!e.checked&&this._map.hasLayer(i.layer)&&this._map.removeLayer(i.layer);this._handlingClick=!1,this._refocusOnMap()},_expand:function(){o.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),o.control.layers=function(t,e,i){return new o.Control.Layers(t,e,i)},o.PosAnimation=o.Class.extend({includes:o.Mixin.Events,run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._newPos=e,this.fire("start"),t.style[o.DomUtil.TRANSITION]="all "+(i||.25)+"s cubic-bezier(0,0,"+(n||.5)+",1)",o.DomEvent.on(t,o.DomUtil.TRANSITION_END,this._onTransitionEnd,this),o.DomUtil.setPosition(t,e),o.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(o.bind(this._onStep,this),50)},stop:function(){this._inProgress&&(o.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),o.Util.falseFn(this._el.offsetWidth))},_onStep:function(){var t=this._getPos();return t?(this._el._leaflet_pos=t,void this.fire("step")):void this._onTransitionEnd()},_transformRe:/([-+]?(?:\d*\.)?\d+)\D*, ([-+]?(?:\d*\.)?\d+)\D*\)/,_getPos:function(){var e,i,n,s=this._el,a=t.getComputedStyle(s);if(o.Browser.any3d){if(n=a[o.DomUtil.TRANSFORM].match(this._transformRe),!n)return;e=parseFloat(n[1]),i=parseFloat(n[2])}else e=parseFloat(a.left),i=parseFloat(a.top);return new o.Point(e,i,!0)},_onTransitionEnd:function(){o.DomEvent.off(this._el,o.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[o.DomUtil.TRANSITION]="",this._el._leaflet_pos=this._newPos,clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),o.Map.include({setView:function(t,e,n){if(e=e===i?this._zoom:this._limitZoom(e),t=this._limitCenter(o.latLng(t),e,this.options.maxBounds),n=n||{},this._panAnim&&this._panAnim.stop(),this._loaded&&!n.reset&&n!==!0){n.animate!==i&&(n.zoom=o.extend({animate:n.animate},n.zoom),n.pan=o.extend({animate:n.animate},n.pan));var s=this._zoom!==e?this._tryAnimatedZoom&&this._tryAnimatedZoom(t,e,n.zoom):this._tryAnimatedPan(t,n.pan);if(s)return clearTimeout(this._sizeTimer),this}return this._resetView(t,e),this},panBy:function(t,e){if(t=o.point(t).round(),e=e||{},!t.x&&!t.y)return this;if(this._panAnim||(this._panAnim=new o.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),e.noMoveStart||this.fire("movestart"),e.animate!==!1){o.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var i=this._getMapPanePos().subtract(t);this._panAnim.run(this._mapPane,i,e.duration||.25,e.easeLinearity)}else this._rawPanBy(t),this.fire("move").fire("moveend");return this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){o.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,e){var i=this._getCenterOffset(t)._floor();return(e&&e.animate)===!0||this.getSize().contains(i)?(this.panBy(i,e),!0):!1}}),o.PosAnimation=o.DomUtil.TRANSITION?o.PosAnimation:o.PosAnimation.extend({run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=i||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=o.DomUtil.getPosition(t),this._offset=e.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=o.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,e=1e3*this._duration;e>t?this._runFrame(this._easeOut(t/e)):(this._runFrame(1),this._complete())},_runFrame:function(t){var e=this._startPos.add(this._offset.multiplyBy(t));o.DomUtil.setPosition(this._el,e),this.fire("step")},_complete:function(){o.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),o.Map.mergeOptions({zoomAnimation:!0,zoomAnimationThreshold:4}),o.DomUtil.TRANSITION&&o.Map.addInitHook(function(){this._zoomAnimated=this.options.zoomAnimation&&o.DomUtil.TRANSITION&&o.Browser.any3d&&!o.Browser.android23&&!o.Browser.mobileOpera,this._zoomAnimated&&o.DomEvent.on(this._mapPane,o.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),o.Map.include(o.DomUtil.TRANSITION?{_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,e,i){if(this._animatingZoom)return!0;if(i=i||{},!this._zoomAnimated||i.animate===!1||this._nothingToAnimate()||Math.abs(e-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(e),o=this._getCenterOffset(t)._divideBy(1-1/n),s=this._getCenterLayerPoint()._add(o);return i.animate===!0||this.getSize().contains(o)?(this.fire("movestart").fire("zoomstart"),this._animateZoom(t,e,s,n,null,!0),!0):!1},_animateZoom:function(t,e,i,n,s,a,r){r||(this._animatingZoom=!0),o.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this._animateToCenter=t,this._animateToZoom=e,o.Draggable&&(o.Draggable._disabled=!0),o.Util.requestAnimFrame(function(){this.fire("zoomanim",{center:t,zoom:e,origin:i,scale:n,delta:s,backwards:a})},this)},_onZoomTransitionEnd:function(){this._animatingZoom=!1,o.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),o.Draggable&&(o.Draggable._disabled=!1)}}:{}),o.TileLayer.include({_animateZoom:function(t){this._animating||(this._animating=!0,this._prepareBgBuffer());var e=this._bgBuffer,i=o.DomUtil.TRANSFORM,n=t.delta?o.DomUtil.getTranslateString(t.delta):e.style[i],s=o.DomUtil.getScaleString(t.scale,t.origin);e.style[i]=t.backwards?s+" "+n:n+" "+s},_endZoomAnim:function(){var t=this._tileContainer,e=this._bgBuffer;t.style.visibility="",t.parentNode.appendChild(t),o.Util.falseFn(e.offsetWidth),this._animating=!1},_clearBgBuffer:function(){var t=this._map;!t||t._animatingZoom||t.touchZoom._zooming||(this._bgBuffer.innerHTML="",this._bgBuffer.style[o.DomUtil.TRANSFORM]="")},_prepareBgBuffer:function(){var t=this._tileContainer,e=this._bgBuffer,i=this._getLoadedTilesPercentage(e),n=this._getLoadedTilesPercentage(t);return e&&i>.5&&.5>n?(t.style.visibility="hidden",void this._stopLoadingImages(t)):(e.style.visibility="hidden",e.style[o.DomUtil.TRANSFORM]="",this._tileContainer=e,e=this._bgBuffer=t,this._stopLoadingImages(e),void clearTimeout(this._clearBgBufferTimer))},_getLoadedTilesPercentage:function(t){var e,i,n=t.getElementsByTagName("img"),o=0;for(e=0,i=n.length;i>e;e++)n[e].complete&&o++;return o/i},_stopLoadingImages:function(t){var e,i,n,s=Array.prototype.slice.call(t.getElementsByTagName("img"));for(e=0,i=s.length;i>e;e++)n=s[e],n.complete||(n.onload=o.Util.falseFn,n.onerror=o.Util.falseFn,n.src=o.Util.emptyImageUrl,n.parentNode.removeChild(n))}}),o.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locateOptions=o.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var e=o.bind(this._handleGeolocationResponse,this),i=o.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var e=t.code,i=t.message||(1===e?"permission denied":2===e?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+i+"."})},_handleGeolocationResponse:function(t){var e=t.coords.latitude,i=t.coords.longitude,n=new o.LatLng(e,i),s=180*t.coords.accuracy/40075017,a=s/Math.cos(o.LatLng.DEG_TO_RAD*e),r=o.latLngBounds([e-s,i-a],[e+s,i+a]),h=this._locateOptions;if(h.setView){var l=Math.min(this.getBoundsZoom(r),h.maxZoom);this.setView(n,l)}var u={latlng:n,bounds:r,timestamp:t.timestamp};for(var c in t.coords)"number"==typeof t.coords[c]&&(u[c]=t.coords[c]);this.fire("locationfound",u)}})}(window,document); \ No newline at end of file +!function(t,e,i){var n=t.L,o={};o.version="0.7.7","object"==typeof module&&"object"==typeof module.exports?module.exports=o:"function"==typeof define&&define.amd&&define(o),o.noConflict=function(){return t.L=n,this},t.L=o,o.Util={extend:function(t){var e,i,n,o,s=Array.prototype.slice.call(arguments,1);for(i=0,n=s.length;n>i;i++){o=s[i]||{};for(e in o)o.hasOwnProperty(e)&&(t[e]=o[e])}return t},bind:function(t,e){var i=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(e,i||arguments)}},stamp:function(){var t=0,e="_leaflet_id";return function(i){return i[e]=i[e]||++t,i[e]}}(),invokeEach:function(t,e,i){var n,o;if("object"==typeof t){o=Array.prototype.slice.call(arguments,3);for(n in t)e.apply(i,[n,t[n]].concat(o));return!0}return!1},limitExecByInterval:function(t,e,i){var n,o;return function s(){var a=arguments;return n?void(o=!0):(n=!0,setTimeout(function(){n=!1,o&&(s.apply(i,a),o=!1)},e),void t.apply(i,a))}},falseFn:function(){return!1},formatNum:function(t,e){var i=Math.pow(10,e||5);return Math.round(t*i)/i},trim:function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")},splitWords:function(t){return o.Util.trim(t).split(/\s+/)},setOptions:function(t,e){return t.options=o.extend({},t.options,e),t.options},getParamString:function(t,e,i){var n=[];for(var o in t)n.push(encodeURIComponent(i?o.toUpperCase():o)+"="+encodeURIComponent(t[o]));return(e&&-1!==e.indexOf("?")?"&":"?")+n.join("&")},template:function(t,e){return t.replace(/\{ *([\w_]+) *\}/g,function(t,n){var o=e[n];if(o===i)throw new Error("No value provided for variable "+t);return"function"==typeof o&&(o=o(e)),o})},isArray:Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function e(e){var i,n,o=["webkit","moz","o","ms"];for(i=0;it;t++)n._initHooks[t].call(this)}},e},o.Class.include=function(t){o.extend(this.prototype,t)},o.Class.mergeOptions=function(t){o.extend(this.prototype.options,t)},o.Class.addInitHook=function(t){var e=Array.prototype.slice.call(arguments,1),i="function"==typeof t?t:function(){this[t].apply(this,e)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(i)};var s="_leaflet_events";o.Mixin={},o.Mixin.Events={addEventListener:function(t,e,i){if(o.Util.invokeEach(t,this.addEventListener,this,e,i))return this;var n,a,r,h,l,u,c,d=this[s]=this[s]||{},p=i&&i!==this&&o.stamp(i);for(t=o.Util.splitWords(t),n=0,a=t.length;a>n;n++)r={action:e,context:i||this},h=t[n],p?(l=h+"_idx",u=l+"_len",c=d[l]=d[l]||{},c[p]||(c[p]=[],d[u]=(d[u]||0)+1),c[p].push(r)):(d[h]=d[h]||[],d[h].push(r));return this},hasEventListeners:function(t){var e=this[s];return!!e&&(t in e&&e[t].length>0||t+"_idx"in e&&e[t+"_idx_len"]>0)},removeEventListener:function(t,e,i){if(!this[s])return this;if(!t)return this.clearAllEventListeners();if(o.Util.invokeEach(t,this.removeEventListener,this,e,i))return this;var n,a,r,h,l,u,c,d,p,_=this[s],m=i&&i!==this&&o.stamp(i);for(t=o.Util.splitWords(t),n=0,a=t.length;a>n;n++)if(r=t[n],u=r+"_idx",c=u+"_len",d=_[u],e){if(h=m&&d?d[m]:_[r]){for(l=h.length-1;l>=0;l--)h[l].action!==e||i&&h[l].context!==i||(p=h.splice(l,1),p[0].action=o.Util.falseFn);i&&d&&0===h.length&&(delete d[m],_[c]--)}}else delete _[r],delete _[u],delete _[c];return this},clearAllEventListeners:function(){return delete this[s],this},fireEvent:function(t,e){if(!this.hasEventListeners(t))return this;var i,n,a,r,h,l=o.Util.extend({},e,{type:t,target:this}),u=this[s];if(u[t])for(i=u[t].slice(),n=0,a=i.length;a>n;n++)i[n].action.call(i[n].context,l);r=u[t+"_idx"];for(h in r)if(i=r[h].slice())for(n=0,a=i.length;a>n;n++)i[n].action.call(i[n].context,l);return this},addOneTimeEventListener:function(t,e,i){if(o.Util.invokeEach(t,this.addOneTimeEventListener,this,e,i))return this;var n=o.bind(function(){this.removeEventListener(t,e,i).removeEventListener(t,n,i)},this);return this.addEventListener(t,e,i).addEventListener(t,n,i)}},o.Mixin.Events.on=o.Mixin.Events.addEventListener,o.Mixin.Events.off=o.Mixin.Events.removeEventListener,o.Mixin.Events.once=o.Mixin.Events.addOneTimeEventListener,o.Mixin.Events.fire=o.Mixin.Events.fireEvent,function(){var n="ActiveXObject"in t,s=n&&!e.addEventListener,a=navigator.userAgent.toLowerCase(),r=-1!==a.indexOf("webkit"),h=-1!==a.indexOf("chrome"),l=-1!==a.indexOf("phantom"),u=-1!==a.indexOf("android"),c=-1!==a.search("android [23]"),d=-1!==a.indexOf("gecko"),p=typeof orientation!=i+"",_=!t.PointerEvent&&t.MSPointerEvent,m=t.PointerEvent&&t.navigator.pointerEnabled||_,f="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,g=e.documentElement,v=n&&"transition"in g.style,y="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix&&!c,P="MozPerspective"in g.style,L="OTransition"in g.style,x=!t.L_DISABLE_3D&&(v||y||P||L)&&!l,w=!t.L_NO_TOUCH&&!l&&(m||"ontouchstart"in t||t.DocumentTouch&&e instanceof t.DocumentTouch);o.Browser={ie:n,ielt9:s,webkit:r,gecko:d&&!r&&!t.opera&&!n,android:u,android23:c,chrome:h,ie3d:v,webkit3d:y,gecko3d:P,opera3d:L,any3d:x,mobile:p,mobileWebkit:p&&r,mobileWebkit3d:p&&y,mobileOpera:p&&t.opera,touch:w,msPointer:_,pointer:m,retina:f}}(),o.Point=function(t,e,i){this.x=i?Math.round(t):t,this.y=i?Math.round(e):e},o.Point.prototype={clone:function(){return new o.Point(this.x,this.y)},add:function(t){return this.clone()._add(o.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(o.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=o.point(t);var e=t.x-this.x,i=t.y-this.y;return Math.sqrt(e*e+i*i)},equals:function(t){return t=o.point(t),t.x===this.x&&t.y===this.y},contains:function(t){return t=o.point(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+o.Util.formatNum(this.x)+", "+o.Util.formatNum(this.y)+")"}},o.point=function(t,e,n){return t instanceof o.Point?t:o.Util.isArray(t)?new o.Point(t[0],t[1]):t===i||null===t?t:new o.Point(t,e,n)},o.Bounds=function(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;o>n;n++)this.extend(i[n])},o.Bounds.prototype={extend:function(t){return t=o.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new o.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new o.Point(this.min.x,this.max.y)},getTopRight:function(){return new o.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var e,i;return t="number"==typeof t[0]||t instanceof o.Point?o.point(t):o.bounds(t),t instanceof o.Bounds?(e=t.min,i=t.max):e=i=t,e.x>=this.min.x&&i.x<=this.max.x&&e.y>=this.min.y&&i.y<=this.max.y},intersects:function(t){t=o.bounds(t);var e=this.min,i=this.max,n=t.min,s=t.max,a=s.x>=e.x&&n.x<=i.x,r=s.y>=e.y&&n.y<=i.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},o.bounds=function(t,e){return!t||t instanceof o.Bounds?t:new o.Bounds(t,e)},o.Transformation=function(t,e,i,n){this._a=t,this._b=e,this._c=i,this._d=n},o.Transformation.prototype={transform:function(t,e){return this._transform(t.clone(),e)},_transform:function(t,e){return e=e||1,t.x=e*(this._a*t.x+this._b),t.y=e*(this._c*t.y+this._d),t},untransform:function(t,e){return e=e||1,new o.Point((t.x/e-this._b)/this._a,(t.y/e-this._d)/this._c)}},o.DomUtil={get:function(t){return"string"==typeof t?e.getElementById(t):t},getStyle:function(t,i){var n=t.style[i];if(!n&&t.currentStyle&&(n=t.currentStyle[i]),(!n||"auto"===n)&&e.defaultView){var o=e.defaultView.getComputedStyle(t,null);n=o?o[i]:null}return"auto"===n?null:n},getViewportOffset:function(t){var i,n=0,s=0,a=t,r=e.body,h=e.documentElement;do{if(n+=a.offsetTop||0,s+=a.offsetLeft||0,n+=parseInt(o.DomUtil.getStyle(a,"borderTopWidth"),10)||0,s+=parseInt(o.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,i=o.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===i)break;if("fixed"===i){n+=r.scrollTop||h.scrollTop||0,s+=r.scrollLeft||h.scrollLeft||0;break}if("relative"===i&&!a.offsetLeft){var l=o.DomUtil.getStyle(a,"width"),u=o.DomUtil.getStyle(a,"max-width"),c=a.getBoundingClientRect();("none"!==l||"none"!==u)&&(s+=c.left+a.clientLeft),n+=c.top+(r.scrollTop||h.scrollTop||0);break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;n-=a.scrollTop||0,s-=a.scrollLeft||0,a=a.parentNode}while(a);return new o.Point(s,n)},documentIsLtr:function(){return o.DomUtil._docIsLtrCached||(o.DomUtil._docIsLtrCached=!0,o.DomUtil._docIsLtr="ltr"===o.DomUtil.getStyle(e.body,"direction")),o.DomUtil._docIsLtr},create:function(t,i,n){var o=e.createElement(t);return o.className=i,n&&n.appendChild(o),o},hasClass:function(t,e){if(t.classList!==i)return t.classList.contains(e);var n=o.DomUtil._getClass(t);return n.length>0&&new RegExp("(^|\\s)"+e+"(\\s|$)").test(n)},addClass:function(t,e){if(t.classList!==i)for(var n=o.Util.splitWords(e),s=0,a=n.length;a>s;s++)t.classList.add(n[s]);else if(!o.DomUtil.hasClass(t,e)){var r=o.DomUtil._getClass(t);o.DomUtil._setClass(t,(r?r+" ":"")+e)}},removeClass:function(t,e){t.classList!==i?t.classList.remove(e):o.DomUtil._setClass(t,o.Util.trim((" "+o.DomUtil._getClass(t)+" ").replace(" "+e+" "," ")))},_setClass:function(t,e){t.className.baseVal===i?t.className=e:t.className.baseVal=e},_getClass:function(t){return t.className.baseVal===i?t.className:t.className.baseVal},setOpacity:function(t,e){if("opacity"in t.style)t.style.opacity=e;else if("filter"in t.style){var i=!1,n="DXImageTransform.Microsoft.Alpha";try{i=t.filters.item(n)}catch(o){if(1===e)return}e=Math.round(100*e),i?(i.Enabled=100!==e,i.Opacity=e):t.style.filter+=" progid:"+n+"(opacity="+e+")"}},testProp:function(t){for(var i=e.documentElement.style,n=0;ni||i===e?e:t),new o.LatLng(this.lat,i)}},o.latLng=function(t,e){return t instanceof o.LatLng?t:o.Util.isArray(t)?"number"==typeof t[0]||"string"==typeof t[0]?new o.LatLng(t[0],t[1],t[2]):null:t===i||null===t?t:"object"==typeof t&&"lat"in t?new o.LatLng(t.lat,"lng"in t?t.lng:t.lon):e===i?null:new o.LatLng(t,e)},o.LatLngBounds=function(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;o>n;n++)this.extend(i[n])},o.LatLngBounds.prototype={extend:function(t){if(!t)return this;var e=o.latLng(t);return t=null!==e?e:o.latLngBounds(t),t instanceof o.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new o.LatLng(t.lat,t.lng),this._northEast=new o.LatLng(t.lat,t.lng)):t instanceof o.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var e=this._southWest,i=this._northEast,n=Math.abs(e.lat-i.lat)*t,s=Math.abs(e.lng-i.lng)*t;return new o.LatLngBounds(new o.LatLng(e.lat-n,e.lng-s),new o.LatLng(i.lat+n,i.lng+s))},getCenter:function(){return new o.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new o.LatLng(this.getNorth(),this.getWest())},getSouthEast:function(){return new o.LatLng(this.getSouth(),this.getEast())},getWest:function(){return this._southWest.lng},getSouth:function(){return this._southWest.lat},getEast:function(){return this._northEast.lng},getNorth:function(){return this._northEast.lat},contains:function(t){t="number"==typeof t[0]||t instanceof o.LatLng?o.latLng(t):o.latLngBounds(t);var e,i,n=this._southWest,s=this._northEast;return t instanceof o.LatLngBounds?(e=t.getSouthWest(),i=t.getNorthEast()):e=i=t,e.lat>=n.lat&&i.lat<=s.lat&&e.lng>=n.lng&&i.lng<=s.lng},intersects:function(t){t=o.latLngBounds(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),s=t.getNorthEast(),a=s.lat>=e.lat&&n.lat<=i.lat,r=s.lng>=e.lng&&n.lng<=i.lng;return a&&r},toBBoxString:function(){return[this.getWest(),this.getSouth(),this.getEast(),this.getNorth()].join(",")},equals:function(t){return t?(t=o.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},o.latLngBounds=function(t,e){return!t||t instanceof o.LatLngBounds?t:new o.LatLngBounds(t,e)},o.Projection={},o.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var e=o.LatLng.DEG_TO_RAD,i=this.MAX_LATITUDE,n=Math.max(Math.min(i,t.lat),-i),s=t.lng*e,a=n*e;return a=Math.log(Math.tan(Math.PI/4+a/2)),new o.Point(s,a)},unproject:function(t){var e=o.LatLng.RAD_TO_DEG,i=t.x*e,n=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*e;return new o.LatLng(n,i)}},o.Projection.LonLat={project:function(t){return new o.Point(t.lng,t.lat)},unproject:function(t){return new o.LatLng(t.y,t.x)}},o.CRS={latLngToPoint:function(t,e){var i=this.projection.project(t),n=this.scale(e);return this.transformation._transform(i,n)},pointToLatLng:function(t,e){var i=this.scale(e),n=this.transformation.untransform(t,i);return this.projection.unproject(n)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)},getSize:function(t){var e=this.scale(t);return o.point(e,e)}},o.CRS.Simple=o.extend({},o.CRS,{projection:o.Projection.LonLat,transformation:new o.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),o.CRS.EPSG3857=o.extend({},o.CRS,{code:"EPSG:3857",projection:o.Projection.SphericalMercator,transformation:new o.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var e=this.projection.project(t),i=6378137;return e.multiplyBy(i)}}),o.CRS.EPSG900913=o.extend({},o.CRS.EPSG3857,{code:"EPSG:900913"}),o.CRS.EPSG4326=o.extend({},o.CRS,{code:"EPSG:4326",projection:o.Projection.LonLat,transformation:new o.Transformation(1/360,.5,-1/360,.5)}),o.Map=o.Class.extend({includes:o.Mixin.Events,options:{crs:o.CRS.EPSG3857,fadeAnimation:o.DomUtil.TRANSITION&&!o.Browser.android23,trackResize:!0,markerZoomAnimation:o.DomUtil.TRANSITION&&o.Browser.any3d},initialize:function(t,e){e=o.setOptions(this,e),this._initContainer(t),this._initLayout(),this._onResize=o.bind(this._onResize,this),this._initEvents(),e.maxBounds&&this.setMaxBounds(e.maxBounds),e.center&&e.zoom!==i&&this.setView(o.latLng(e.center),e.zoom,{reset:!0}),this._handlers=[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0,this.callInitHooks(),this._addLayers(e.layers)},setView:function(t,e){return e=e===i?this.getZoom():e,this._resetView(o.latLng(t),this._limitZoom(e)),this},setZoom:function(t,e){return this._loaded?this.setView(this.getCenter(),t,{zoom:e}):(this._zoom=this._limitZoom(t),this)},zoomIn:function(t,e){return this.setZoom(this._zoom+(t||1),e)},zoomOut:function(t,e){return this.setZoom(this._zoom-(t||1),e)},setZoomAround:function(t,e,i){var n=this.getZoomScale(e),s=this.getSize().divideBy(2),a=t instanceof o.Point?t:this.latLngToContainerPoint(t),r=a.subtract(s).multiplyBy(1-1/n),h=this.containerPointToLatLng(s.add(r));return this.setView(h,e,{zoom:i})},fitBounds:function(t,e){e=e||{},t=t.getBounds?t.getBounds():o.latLngBounds(t);var i=o.point(e.paddingTopLeft||e.padding||[0,0]),n=o.point(e.paddingBottomRight||e.padding||[0,0]),s=this.getBoundsZoom(t,!1,i.add(n));s=e.maxZoom?Math.min(e.maxZoom,s):s;var a=n.subtract(i).divideBy(2),r=this.project(t.getSouthWest(),s),h=this.project(t.getNorthEast(),s),l=this.unproject(r.add(h).divideBy(2).add(a),s);return this.setView(l,s,e)},fitWorld:function(t){return this.fitBounds([[-90,-180],[90,180]],t)},panTo:function(t,e){return this.setView(t,this._zoom,{pan:e})},panBy:function(t){return this.fire("movestart"),this._rawPanBy(o.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){return t=o.latLngBounds(t),this.options.maxBounds=t,t?(this._loaded&&this._panInsideMaxBounds(),this.on("moveend",this._panInsideMaxBounds,this)):this.off("moveend",this._panInsideMaxBounds,this)},panInsideBounds:function(t,e){var i=this.getCenter(),n=this._limitCenter(i,this._zoom,t);return i.equals(n)?this:this.panTo(n,e)},addLayer:function(t){var e=o.stamp(t);return this._layers[e]?this:(this._layers[e]=t,!t.options||isNaN(t.options.maxZoom)&&isNaN(t.options.minZoom)||(this._zoomBoundLayers[e]=t,this._updateZoomLevels()),this.options.zoomAnimation&&o.TileLayer&&t instanceof o.TileLayer&&(this._tileLayersNum++,this._tileLayersToLoad++,t.on("load",this._onTileLayerLoad,this)),this._loaded&&this._layerAdd(t),this)},removeLayer:function(t){var e=o.stamp(t);return this._layers[e]?(this._loaded&&t.onRemove(this),delete this._layers[e],this._loaded&&this.fire("layerremove",{layer:t}),this._zoomBoundLayers[e]&&(delete this._zoomBoundLayers[e],this._updateZoomLevels()),this.options.zoomAnimation&&o.TileLayer&&t instanceof o.TileLayer&&(this._tileLayersNum--,this._tileLayersToLoad--,t.off("load",this._onTileLayerLoad,this)),this):this},hasLayer:function(t){return t?o.stamp(t)in this._layers:!1},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},invalidateSize:function(t){if(!this._loaded)return this;t=o.extend({animate:!1,pan:!0},t===!0?{animate:!0}:t);var e=this.getSize();this._sizeChanged=!0,this._initialCenter=null;var i=this.getSize(),n=e.divideBy(2).round(),s=i.divideBy(2).round(),a=n.subtract(s);return a.x||a.y?(t.animate&&t.pan?this.panBy(a):(t.pan&&this._rawPanBy(a),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(o.bind(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:e,newSize:i})):this},addHandler:function(t,e){if(!e)return this;var i=this[t]=new e(this);return this._handlers.push(i),this.options[t]&&i.enable(),this},remove:function(){this._loaded&&this.fire("unload"),this._initEvents("off");try{delete this._container._leaflet}catch(t){this._container._leaflet=i}return this._clearPanes(),this._clearControlPos&&this._clearControlPos(),this._clearHandlers(),this},getCenter:function(){return this._checkIfLoaded(),this._initialCenter&&!this._moved()?this._initialCenter:this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds(),e=this.unproject(t.getBottomLeft()),i=this.unproject(t.getTopRight());return new o.LatLngBounds(e,i)},getMinZoom:function(){return this.options.minZoom===i?this._layersMinZoom===i?0:this._layersMinZoom:this.options.minZoom},getMaxZoom:function(){return this.options.maxZoom===i?this._layersMaxZoom===i?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,i){t=o.latLngBounds(t);var n,s=this.getMinZoom()-(e?1:0),a=this.getMaxZoom(),r=this.getSize(),h=t.getNorthWest(),l=t.getSouthEast(),u=!0;i=o.point(i||[0,0]);do s++,n=this.project(l,s).subtract(this.project(h,s)).add(i),u=e?n.x=s);return u&&e?null:e?s:s-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new o.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new o.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var e=this.options.crs;return e.scale(t)/e.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,e){return e=e===i?this._zoom:e,this.options.crs.latLngToPoint(o.latLng(t),e)},unproject:function(t,e){return e=e===i?this._zoom:e,this.options.crs.pointToLatLng(o.point(t),e)},layerPointToLatLng:function(t){var e=o.point(t).add(this.getPixelOrigin());return this.unproject(e)},latLngToLayerPoint:function(t){var e=this.project(o.latLng(t))._round();return e._subtract(this.getPixelOrigin())},containerPointToLayerPoint:function(t){return o.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return o.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var e=this.containerPointToLayerPoint(o.point(t));return this.layerPointToLatLng(e)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(o.latLng(t)))},mouseEventToContainerPoint:function(t){return o.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var e=this._container=o.DomUtil.get(t);if(!e)throw new Error("Map container not found.");if(e._leaflet)throw new Error("Map container is already initialized.");e._leaflet=!0},_initLayout:function(){var t=this._container;o.DomUtil.addClass(t,"leaflet-container"+(o.Browser.touch?" leaflet-touch":"")+(o.Browser.retina?" leaflet-retina":"")+(o.Browser.ielt9?" leaflet-oldie":"")+(this.options.fadeAnimation?" leaflet-fade-anim":""));var e=o.DomUtil.getStyle(t,"position");"absolute"!==e&&"relative"!==e&&"fixed"!==e&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var e=" leaflet-zoom-hide";this.options.markerZoomAnimation||(o.DomUtil.addClass(t.markerPane,e),o.DomUtil.addClass(t.shadowPane,e),o.DomUtil.addClass(t.popupPane,e))},_createPane:function(t,e){return o.DomUtil.create("div",t,e||this._panes.objectsPane)},_clearPanes:function(){this._container.removeChild(this._mapPane)},_addLayers:function(t){t=t?o.Util.isArray(t)?t:[t]:[];for(var e=0,i=t.length;i>e;e++)this.addLayer(t[e])},_resetView:function(t,e,i,n){var s=this._zoom!==e;n||(this.fire("movestart"),s&&this.fire("zoomstart")),this._zoom=e,this._initialCenter=t,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),i?this._initialTopLeftPoint._add(this._getMapPanePos()):o.DomUtil.setPosition(this._mapPane,new o.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!i}),a&&(this.fire("load"),this.eachLayer(this._layerAdd,this)),this.fire("move"),(s||n)&&this.fire("zoomend"),this.fire("moveend",{hard:!i})},_rawPanBy:function(t){o.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_updateZoomLevels:function(){var t,e=1/0,n=-(1/0),o=this._getZoomSpan();for(t in this._zoomBoundLayers){var s=this._zoomBoundLayers[t];isNaN(s.options.minZoom)||(e=Math.min(e,s.options.minZoom)),isNaN(s.options.maxZoom)||(n=Math.max(n,s.options.maxZoom))}t===i?this._layersMaxZoom=this._layersMinZoom=i:(this._layersMaxZoom=n,this._layersMinZoom=e),o!==this._getZoomSpan()&&this.fire("zoomlevelschange")},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(e){if(o.DomEvent){e=e||"on",o.DomEvent[e](this._container,"click",this._onMouseClick,this);var i,n,s=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,n=s.length;n>i;i++)o.DomEvent[e](this._container,s[i],this._fireMouseEvent,this);this.options.trackResize&&o.DomEvent[e](t,"resize",this._onResize,this)}},_onResize:function(){o.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=o.Util.requestAnimFrame(function(){this.invalidateSize({debounceMoveend:!0})},this,!1,this._container)},_onMouseClick:function(t){!this._loaded||!t._simulated&&(this.dragging&&this.dragging.moved()||this.boxZoom&&this.boxZoom.moved())||o.DomEvent._skipped(t)||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded&&!o.DomEvent._skipped(t)){var e=t.type;if(e="mouseenter"===e?"mouseover":"mouseleave"===e?"mouseout":e,this.hasEventListeners(e)){"contextmenu"===e&&o.DomEvent.preventDefault(t);var i=this.mouseEventToContainerPoint(t),n=this.containerPointToLayerPoint(i),s=this.layerPointToLatLng(n);this.fire(e,{latlng:s,layerPoint:n,containerPoint:i,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this.fire("tilelayersload")},_clearHandlers:function(){for(var t=0,e=this._handlers.length;e>t;t++)this._handlers[t].disable()},whenReady:function(t,e){return this._loaded?t.call(e||this,this):this.on("load",t,e),this},_layerAdd:function(t){t.onAdd(this),this.fire("layeradd",{layer:t})},_getMapPanePos:function(){return o.DomUtil.getPosition(this._mapPane)},_moved:function(){var t=this._getMapPanePos();return t&&!t.equals([0,0])},_getTopLeftPoint:function(){return this.getPixelOrigin().subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,e){var i=this.getSize()._divideBy(2);return this.project(t,e)._subtract(i)._round()},_latLngToNewLayerPoint:function(t,e,i){var n=this._getNewTopLeftPoint(i,e).add(this._getMapPanePos());return this.project(t,e)._subtract(n)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitCenter:function(t,e,i){if(!i)return t;var n=this.project(t,e),s=this.getSize().divideBy(2),a=new o.Bounds(n.subtract(s),n.add(s)),r=this._getBoundsOffset(a,i,e);return this.unproject(n.add(r),e)},_limitOffset:function(t,e){if(!e)return t;var i=this.getPixelBounds(),n=new o.Bounds(i.min.add(t),i.max.add(t));return t.add(this._getBoundsOffset(n,e))},_getBoundsOffset:function(t,e,i){var n=this.project(e.getNorthWest(),i).subtract(t.min),s=this.project(e.getSouthEast(),i).subtract(t.max),a=this._rebound(n.x,-s.x),r=this._rebound(n.y,-s.y);return new o.Point(a,r)},_rebound:function(t,e){return t+e>0?Math.round(t-e)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(e))},_limitZoom:function(t){var e=this.getMinZoom(),i=this.getMaxZoom();return Math.max(e,Math.min(i,t))}}),o.map=function(t,e){return new o.Map(t,e)},o.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.314245179,R_MAJOR:6378137,project:function(t){var e=o.LatLng.DEG_TO_RAD,i=this.MAX_LATITUDE,n=Math.max(Math.min(i,t.lat),-i),s=this.R_MAJOR,a=this.R_MINOR,r=t.lng*e*s,h=n*e,l=a/s,u=Math.sqrt(1-l*l),c=u*Math.sin(h);c=Math.pow((1-c)/(1+c),.5*u);var d=Math.tan(.5*(.5*Math.PI-h))/c;return h=-s*Math.log(d),new o.Point(r,h)},unproject:function(t){for(var e,i=o.LatLng.RAD_TO_DEG,n=this.R_MAJOR,s=this.R_MINOR,a=t.x*i/n,r=s/n,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),u=Math.PI/2-2*Math.atan(l),c=15,d=1e-7,p=c,_=.1;Math.abs(_)>d&&--p>0;)e=h*Math.sin(u),_=Math.PI/2-2*Math.atan(l*Math.pow((1-e)/(1+e),.5*h))-u,u+=_;return new o.LatLng(u*i,a)}},o.CRS.EPSG3395=o.extend({},o.CRS,{code:"EPSG:3395",projection:o.Projection.Mercator, +transformation:function(){var t=o.Projection.Mercator,e=t.R_MAJOR,i=.5/(Math.PI*e);return new o.Transformation(i,.5,-i,.5)}()}),o.TileLayer=o.Class.extend({includes:o.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:o.Browser.mobile,updateWhenIdle:o.Browser.mobile},initialize:function(t,e){e=o.setOptions(this,e),e.detectRetina&&o.Browser.retina&&e.maxZoom>0&&(e.tileSize=Math.floor(e.tileSize/2),e.zoomOffset++,e.minZoom>0&&e.minZoom--,this.options.maxZoom--),e.bounds&&(e.bounds=o.latLngBounds(e.bounds)),this._url=t;var i=this.options.subdomains;"string"==typeof i&&(this.options.subdomains=i.split(""))},onAdd:function(t){this._map=t,this._animated=t._zoomAnimated,this._initContainer(),t.on({viewreset:this._reset,moveend:this._update},this),this._animated&&t.on({zoomanim:this._animateZoom,zoomend:this._endZoomAnim},this),this.options.updateWhenIdle||(this._limitedUpdate=o.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._reset,moveend:this._update},this),this._animated&&t.off({zoomanim:this._animateZoom,zoomend:this._endZoomAnim},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},getContainer:function(){return this._container},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,e){return this._url=t,e||this.redraw(),this},redraw:function(){return this._map&&(this._reset({hard:!0}),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==i&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,e){var i,n,o,s=t.children,a=-e(1/0,-(1/0));for(n=0,o=s.length;o>n;n++)s[n]!==this._container&&(i=parseInt(s[n].style.zIndex,10),isNaN(i)||(a=e(a,i)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+e(1,-1)},_updateOpacity:function(){var t,e=this._tiles;if(o.Browser.ielt9)for(t in e)o.DomUtil.setOpacity(e[t],this.options.opacity);else o.DomUtil.setOpacity(this._container,this.options.opacity)},_initContainer:function(){var t=this._map._panes.tilePane;if(!this._container){if(this._container=o.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),this._animated){var e="leaflet-tile-container";this._bgBuffer=o.DomUtil.create("div",e,this._container),this._tileContainer=o.DomUtil.create("div",e,this._container)}else this._tileContainer=this._container;t.appendChild(this._container),this.options.opacity<1&&this._updateOpacity()}},_reset:function(t){for(var e in this._tiles)this.fire("tileunload",{tile:this._tiles[e]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),this._tileContainer.innerHTML="",this._animated&&t&&t.hard&&this._clearBgBuffer(),this._initContainer()},_getTileSize:function(){var t=this._map,e=t.getZoom()+this.options.zoomOffset,i=this.options.maxNativeZoom,n=this.options.tileSize;return i&&e>i&&(n=Math.round(t.getZoomScale(e)/t.getZoomScale(i)*n)),n},_update:function(){if(this._map){var t=this._map,e=t.getPixelBounds(),i=t.getZoom(),n=this._getTileSize();if(!(i>this.options.maxZoom||in;n++)this._addTile(a[n],l);this._tileContainer.appendChild(l)}},_tileShouldBeLoaded:function(t){if(t.x+":"+t.y in this._tiles)return!1;var e=this.options;if(!e.continuousWorld){var i=this._getWrapTileNum();if(e.noWrap&&(t.x<0||t.x>=i.x)||t.y<0||t.y>=i.y)return!1}if(e.bounds){var n=this._getTileSize(),o=t.multiplyBy(n),s=o.add([n,n]),a=this._map.unproject(o),r=this._map.unproject(s);if(e.continuousWorld||e.noWrap||(a=a.wrap(),r=r.wrap()),!e.bounds.intersects([a,r]))return!1}return!0},_removeOtherTiles:function(t){var e,i,n,o;for(o in this._tiles)e=o.split(":"),i=parseInt(e[0],10),n=parseInt(e[1],10),(it.max.x||nt.max.y)&&this._removeTile(o)},_removeTile:function(t){var e=this._tiles[t];this.fire("tileunload",{tile:e,url:e.src}),this.options.reuseTiles?(o.DomUtil.removeClass(e,"leaflet-tile-loaded"),this._unusedTiles.push(e)):e.parentNode===this._tileContainer&&this._tileContainer.removeChild(e),o.Browser.android||(e.onload=null,e.src=o.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,e){var i=this._getTilePos(t),n=this._getTile();o.DomUtil.setPosition(n,i,o.Browser.chrome),this._tiles[t.x+":"+t.y]=n,this._loadTile(n,t),n.parentNode!==this._tileContainer&&e.appendChild(n)},_getZoomForUrl:function(){var t=this.options,e=this._map.getZoom();return t.zoomReverse&&(e=t.maxZoom-e),e+=t.zoomOffset,t.maxNativeZoom?Math.min(e,t.maxNativeZoom):e},_getTilePos:function(t){var e=this._map.getPixelOrigin(),i=this._getTileSize();return t.multiplyBy(i).subtract(e)},getTileUrl:function(t){return o.Util.template(this._url,o.extend({s:this._getSubdomain(t),z:t.z,x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){var t=this._map.options.crs,e=t.getSize(this._map.getZoom());return e.divideBy(this._getTileSize())._floor()},_adjustTilePoint:function(t){var e=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%e.x+e.x)%e.x),this.options.tms&&(t.y=e.y-t.y-1),t.z=this._getZoomForUrl()},_getSubdomain:function(t){var e=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[e]},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=o.DomUtil.create("img","leaflet-tile");return t.style.width=t.style.height=this._getTileSize()+"px",t.galleryimg="no",t.onselectstart=t.onmousemove=o.Util.falseFn,o.Browser.ielt9&&this.options.opacity!==i&&o.DomUtil.setOpacity(t,this.options.opacity),o.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden"),t},_loadTile:function(t,e){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,this._adjustTilePoint(e),t.src=this.getTileUrl(e),this.fire("tileloadstart",{tile:t,url:t.src})},_tileLoaded:function(){this._tilesToLoad--,this._animated&&o.DomUtil.addClass(this._tileContainer,"leaflet-zoom-animated"),this._tilesToLoad||(this.fire("load"),this._animated&&(clearTimeout(this._clearBgBufferTimer),this._clearBgBufferTimer=setTimeout(o.bind(this._clearBgBuffer,this),500)))},_tileOnLoad:function(){var t=this._layer;this.src!==o.Util.emptyImageUrl&&(o.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var e=t.options.errorTileUrl;e&&(this.src=e),t._tileLoaded()}}),o.tileLayer=function(t,e){return new o.TileLayer(t,e)},o.TileLayer.WMS=o.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,e){this._url=t;var i=o.extend({},this.defaultWmsParams),n=e.tileSize||this.options.tileSize;e.detectRetina&&o.Browser.retina?i.width=i.height=2*n:i.width=i.height=n;for(var s in e)this.options.hasOwnProperty(s)||"crs"===s||(i[s]=e[s]);this.wmsParams=i,o.setOptions(this,e)},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var e=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[e]=this._crs.code,o.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t){var e=this._map,i=this.options.tileSize,n=t.multiplyBy(i),s=n.add([i,i]),a=this._crs.project(e.unproject(n,t.z)),r=this._crs.project(e.unproject(s,t.z)),h=this._wmsVersion>=1.3&&this._crs===o.CRS.EPSG4326?[r.y,a.x,a.y,r.x].join(","):[a.x,r.y,r.x,a.y].join(","),l=o.Util.template(this._url,{s:this._getSubdomain(t)});return l+o.Util.getParamString(this.wmsParams,l,!0)+"&BBOX="+h},setParams:function(t,e){return o.extend(this.wmsParams,t),e||this.redraw(),this}}),o.tileLayer.wms=function(t,e){return new o.TileLayer.WMS(t,e)},o.TileLayer.Canvas=o.TileLayer.extend({options:{async:!1},initialize:function(t){o.setOptions(this,t)},redraw:function(){this._map&&(this._reset({hard:!0}),this._update());for(var t in this._tiles)this._redrawTile(this._tiles[t]);return this},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTile:function(){var t=o.DomUtil.create("canvas","leaflet-tile");return t.width=t.height=this.options.tileSize,t.onselectstart=t.onmousemove=o.Util.falseFn,t},_loadTile:function(t,e){t._layer=this,t._tilePoint=e,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),o.tileLayer.canvas=function(t){return new o.TileLayer.Canvas(t)},o.ImageOverlay=o.Class.extend({includes:o.Mixin.Events,options:{opacity:1},initialize:function(t,e,i){this._url=t,this._bounds=o.latLngBounds(e),o.setOptions(this,i)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&o.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},setUrl:function(t){this._url=t,this._image.src=this._url},getAttribution:function(){return this.options.attribution},_initImage:function(){this._image=o.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&o.Browser.any3d?o.DomUtil.addClass(this._image,"leaflet-zoom-animated"):o.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),o.extend(this._image,{galleryimg:"no",onselectstart:o.Util.falseFn,onmousemove:o.Util.falseFn,onload:o.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var e=this._map,i=this._image,n=e.getZoomScale(t.zoom),s=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=e._latLngToNewLayerPoint(s,t.zoom,t.center),h=e._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/n)));i.style[o.DomUtil.TRANSFORM]=o.DomUtil.getTranslateString(l)+" scale("+n+") "},_reset:function(){var t=this._image,e=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),i=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(e);o.DomUtil.setPosition(t,e),t.style.width=i.x+"px",t.style.height=i.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){o.DomUtil.setOpacity(this._image,this.options.opacity)}}),o.imageOverlay=function(t,e,i){return new o.ImageOverlay(t,e,i)},o.Icon=o.Class.extend({options:{className:""},initialize:function(t){o.setOptions(this,t)},createIcon:function(t){return this._createIcon("icon",t)},createShadow:function(t){return this._createIcon("shadow",t)},_createIcon:function(t,e){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw new Error("iconUrl not set in Icon options (see the docs).");return null}var n;return n=e&&"IMG"===e.tagName?this._createImg(i,e):this._createImg(i),this._setIconStyles(n,t),n},_setIconStyles:function(t,e){var i,n=this.options,s=o.point(n[e+"Size"]);i="shadow"===e?o.point(n.shadowAnchor||n.iconAnchor):o.point(n.iconAnchor),!i&&s&&(i=s.divideBy(2,!0)),t.className="leaflet-marker-"+e+" "+n.className,i&&(t.style.marginLeft=-i.x+"px",t.style.marginTop=-i.y+"px"),s&&(t.style.width=s.x+"px",t.style.height=s.y+"px")},_createImg:function(t,i){return i=i||e.createElement("img"),i.src=t,i},_getIconUrl:function(t){return o.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),o.icon=function(t){return new o.Icon(t)},o.Icon.Default=o.Icon.extend({options:{iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],shadowSize:[41,41]},_getIconUrl:function(t){var e=t+"Url";if(this.options[e])return this.options[e];o.Browser.retina&&"icon"===t&&(t+="-2x");var i=o.Icon.Default.imagePath;if(!i)throw new Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return i+"/marker-"+t+".png"}}),o.Icon.Default.imagePath=function(){var t,i,n,o,s,a=e.getElementsByTagName("script"),r=/[\/^]leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,i=a.length;i>t;t++)if(n=a[t].src,o=n.match(r))return s=n.split(r)[0],(s?s+"/":"")+"images"}(),o.Marker=o.Class.extend({includes:o.Mixin.Events,options:{icon:new o.Icon.Default,title:"",alt:"",clickable:!0,draggable:!1,keyboard:!0,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,e){o.setOptions(this,e),this._latlng=o.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),this.fire("add"),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this.dragging&&this.dragging.disable(),this._removeIcon(),this._removeShadow(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=o.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this.options.icon=t,this._map&&(this._initIcon(),this.update()),this._popup&&this.bindPopup(this._popup),this},update:function(){return this._icon&&this._setPos(this._map.latLngToLayerPoint(this._latlng).round()),this},_initIcon:function(){var t=this.options,e=this._map,i=e.options.zoomAnimation&&e.options.markerZoomAnimation,n=i?"leaflet-zoom-animated":"leaflet-zoom-hide",s=t.icon.createIcon(this._icon),a=!1;s!==this._icon&&(this._icon&&this._removeIcon(),a=!0,t.title&&(s.title=t.title),t.alt&&(s.alt=t.alt)),o.DomUtil.addClass(s,n),t.keyboard&&(s.tabIndex="0"),this._icon=s,this._initInteraction(),t.riseOnHover&&o.DomEvent.on(s,"mouseover",this._bringToFront,this).on(s,"mouseout",this._resetZIndex,this);var r=t.icon.createShadow(this._shadow),h=!1;r!==this._shadow&&(this._removeShadow(),h=!0),r&&o.DomUtil.addClass(r,n),this._shadow=r,t.opacity<1&&this._updateOpacity();var l=this._map._panes;a&&l.markerPane.appendChild(this._icon),r&&h&&l.shadowPane.appendChild(this._shadow)},_removeIcon:function(){this.options.riseOnHover&&o.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),this._map._panes.markerPane.removeChild(this._icon),this._icon=null},_removeShadow:function(){this._shadow&&this._map._panes.shadowPane.removeChild(this._shadow),this._shadow=null},_setPos:function(t){o.DomUtil.setPosition(this._icon,t),this._shadow&&o.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center).round();this._setPos(e)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,e=["dblclick","mousedown","mouseover","mouseout","contextmenu"];o.DomUtil.addClass(t,"leaflet-clickable"),o.DomEvent.on(t,"click",this._onMouseClick,this),o.DomEvent.on(t,"keypress",this._onKeyPress,this);for(var i=0;is?(e.height=s+"px",o.DomUtil.addClass(t,a)):o.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),e=this._animated,i=o.point(this.options.offset);e&&o.DomUtil.setPosition(this._container,t),this._containerBottom=-i.y-(e?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+i.x+(e?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);o.DomUtil.setPosition(this._container,e)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,e=this._container.offsetHeight,i=this._containerWidth,n=new o.Point(this._containerLeft,-e-this._containerBottom);this._animated&&n._add(o.DomUtil.getPosition(this._container));var s=t.layerPointToContainerPoint(n),a=o.point(this.options.autoPanPadding),r=o.point(this.options.autoPanPaddingTopLeft||a),h=o.point(this.options.autoPanPaddingBottomRight||a),l=t.getSize(),u=0,c=0;s.x+i+h.x>l.x&&(u=s.x+i-l.x+h.x),s.x-u-r.x<0&&(u=s.x-r.x),s.y+e+h.y>l.y&&(c=s.y+e-l.y+h.y),s.y-c-r.y<0&&(c=s.y-r.y),(u||c)&&t.fire("autopanstart").panBy([u,c])}},_onCloseButtonClick:function(t){this._close(),o.DomEvent.stop(t)}}),o.popup=function(t,e){return new o.Popup(t,e)},o.Map.include({openPopup:function(t,e,i){if(this.closePopup(),!(t instanceof o.Popup)){var n=t;t=new o.Popup(i).setLatLng(e).setContent(n)}return t._isOpen=!0,this._popup=t,this.addLayer(t)},closePopup:function(t){return t&&t!==this._popup||(t=this._popup,this._popup=null),t&&(this.removeLayer(t),t._isOpen=!1),this}}),o.Marker.include({openPopup:function(){return this._popup&&this._map&&!this._map.hasLayer(this._popup)&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},togglePopup:function(){return this._popup&&(this._popup._isOpen?this.closePopup():this.openPopup()),this},bindPopup:function(t,e){var i=o.point(this.options.icon.options.popupAnchor||[0,0]);return i=i.add(o.Popup.prototype.options.offset),e&&e.offset&&(i=i.add(e.offset)),e=o.extend({offset:i},e),this._popupHandlersAdded||(this.on("click",this.togglePopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popupHandlersAdded=!0),t instanceof o.Popup?(o.setOptions(t,e),this._popup=t,t._source=this):this._popup=new o.Popup(e,this).setContent(t),this},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.togglePopup,this).off("remove",this.closePopup,this).off("move",this._movePopup,this),this._popupHandlersAdded=!1),this},getPopup:function(){return this._popup},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),o.LayerGroup=o.Class.extend({initialize:function(t){this._layers={};var e,i;if(t)for(e=0,i=t.length;i>e;e++)this.addLayer(t[e])},addLayer:function(t){var e=this.getLayerId(t);return this._layers[e]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var e=t in this._layers?t:this.getLayerId(t);return this._map&&this._layers[e]&&this._map.removeLayer(this._layers[e]),delete this._layers[e],this},hasLayer:function(t){return t?t in this._layers||this.getLayerId(t)in this._layers:!1},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var e,i,n=Array.prototype.slice.call(arguments,1);for(e in this._layers)i=this._layers[e],i[t]&&i[t].apply(i,n);return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},getLayer:function(t){return this._layers[t]},getLayers:function(){var t=[];for(var e in this._layers)t.push(this._layers[e]);return t},setZIndex:function(t){return this.invoke("setZIndex",t)},getLayerId:function(t){return o.stamp(t)}}),o.layerGroup=function(t){return new o.LayerGroup(t)},o.FeatureGroup=o.LayerGroup.extend({includes:o.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose"},addLayer:function(t){return this.hasLayer(t)?this:("on"in t&&t.on(o.FeatureGroup.EVENTS,this._propagateEvent,this),o.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return this.hasLayer(t)?(t in this._layers&&(t=this._layers[t]),"off"in t&&t.off(o.FeatureGroup.EVENTS,this._propagateEvent,this),o.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})):this},bindPopup:function(t,e){return this._popupContent=t,this._popupOptions=e,this.invoke("bindPopup",t,e)},openPopup:function(t){for(var e in this._layers){this._layers[e].openPopup(t);break}return this},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new o.LatLngBounds;return this.eachLayer(function(e){t.extend(e instanceof o.Marker?e.getLatLng():e.getBounds())}),t},_propagateEvent:function(t){t=o.extend({layer:t.target,target:this},t),this.fire(t.type,t)}}),o.featureGroup=function(t){return new o.FeatureGroup(t)},o.Path=o.Class.extend({includes:[o.Mixin.Events],statics:{CLIP_PADDING:function(){var e=o.Browser.mobile?1280:2e3,i=(e/Math.max(t.outerWidth,t.outerHeight)-1)/2;return Math.max(0,Math.min(.5,i))}()},options:{stroke:!0,color:"#0033ff",dashArray:null,lineCap:null,lineJoin:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){o.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,o.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return o.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),o.Map.include({_updatePathViewport:function(){var t=o.Path.CLIP_PADDING,e=this.getSize(),i=o.DomUtil.getPosition(this._mapPane),n=i.multiplyBy(-1)._subtract(e.multiplyBy(t)._round()),s=n.add(e.multiplyBy(1+2*t)._round());this._pathViewport=new o.Bounds(n,s)}}),o.Path.SVG_NS="http://www.w3.org/2000/svg",o.Browser.svg=!(!e.createElementNS||!e.createElementNS(o.Path.SVG_NS,"svg").createSVGRect),o.Path=o.Path.extend({statics:{SVG:o.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,e=this._container;return e&&t.lastChild!==e&&t.appendChild(e),this},bringToBack:function(){var t=this._map._pathRoot,e=this._container,i=t.firstChild;return e&&i!==e&&t.insertBefore(e,i),this},getPathString:function(){},_createElement:function(t){return e.createElementNS(o.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this.options.className&&o.DomUtil.addClass(this._path,this.options.className),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this.options.pointerEvents&&this._path.setAttribute("pointer-events",this.options.pointerEvents),this.options.clickable||this.options.pointerEvents||this._path.setAttribute("pointer-events","none"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray"),this.options.lineCap&&this._path.setAttribute("stroke-linecap",this.options.lineCap),this.options.lineJoin&&this._path.setAttribute("stroke-linejoin",this.options.lineJoin)):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(o.Browser.svg||!o.Browser.vml)&&o.DomUtil.addClass(this._path,"leaflet-clickable"),o.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],e=0;e';var i=t.firstChild;return i.style.behavior="url(#default#VML)",i&&"object"==typeof i.adj}catch(n){return!1}}(),o.Path=o.Browser.svg||!o.Browser.vml?o.Path:o.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return e.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return e.createElement("')}}catch(t){return function(t){return e.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");o.DomUtil.addClass(t,"leaflet-vml-shape"+(this.options.className?" "+this.options.className:"")),this.options.clickable&&o.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,e=this._fill,i=this.options,n=this._container;n.stroked=i.stroke,n.filled=i.fill,i.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",n.appendChild(t)),t.weight=i.weight+"px",t.color=i.color,t.opacity=i.opacity,i.dashArray?t.dashStyle=o.Util.isArray(i.dashArray)?i.dashArray.join(" "):i.dashArray.replace(/( *, *)/g," "):t.dashStyle="",i.lineCap&&(t.endcap=i.lineCap.replace("butt","flat")),i.lineJoin&&(t.joinstyle=i.lineJoin)):t&&(n.removeChild(t),this._stroke=null),i.fill?(e||(e=this._fill=this._createElement("fill"),n.appendChild(e)),e.color=i.fillColor||i.color,e.opacity=i.fillOpacity):e&&(n.removeChild(e),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),o.Map.include(o.Browser.svg||!o.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=e.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),o.Browser.canvas=function(){return!!e.createElement("canvas").getContext}(),o.Path=o.Path.SVG&&!t.L_PREFER_CANVAS||!o.Browser.canvas?o.Path:o.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return o.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&(this._map.off("click",this._onClick,this),this._map.off("mousemove",this._onMouseMove,this)),this._requestUpdate(),this.fire("remove"),this._map=null},_requestUpdate:function(){this._map&&!o.Path._updateRequest&&(o.Path._updateRequest=o.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){o.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color),t.lineCap&&(this._ctx.lineCap=t.lineCap),t.lineJoin&&(this._ctx.lineJoin=t.lineJoin)},_drawPath:function(){var t,e,i,n,s,a;for(this._ctx.beginPath(),t=0,i=this._parts.length;i>t;t++){for(e=0,n=this._parts[t].length;n>e;e++)s=this._parts[t][e],a=(0===e?"move":"line")+"To",this._ctx[a](s.x,s.y);this instanceof o.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,e=this.options;this._drawPath(),t.save(),this._updateStyle(),e.fill&&(t.globalAlpha=e.fillOpacity,t.fill(e.fillRule||"evenodd")),e.stroke&&(t.globalAlpha=e.opacity,t.stroke()),t.restore()}},_initEvents:function(){this.options.clickable&&(this._map.on("mousemove",this._onMouseMove,this),this._map.on("click dblclick contextmenu",this._fireMouseEvent,this))},_fireMouseEvent:function(t){this._containsPoint(t.layerPoint)&&this.fire(t.type,t)},_onMouseMove:function(t){this._map&&!this._map._animatingZoom&&(this._containsPoint(t.layerPoint)?(this._ctx.canvas.style.cursor="pointer",this._mouseInside=!0,this.fire("mouseover",t)):this._mouseInside&&(this._ctx.canvas.style.cursor="",this._mouseInside=!1,this.fire("mouseout",t)))}}),o.Map.include(o.Path.SVG&&!t.L_PREFER_CANVAS||!o.Browser.canvas?{}:{_initPathRoot:function(){var t,i=this._pathRoot;i||(i=this._pathRoot=e.createElement("canvas"),i.style.position="absolute",t=this._canvasCtx=i.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(i),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,e=t.min,i=t.max.subtract(e),n=this._pathRoot;o.DomUtil.setPosition(n,e),n.width=i.x,n.height=i.y,n.getContext("2d").translate(-e.x,-e.y)}}}),o.LineUtil={simplify:function(t,e){if(!e||!t.length)return t.slice();var i=e*e;return t=this._reducePoints(t,i),t=this._simplifyDP(t,i)},pointToSegmentDistance:function(t,e,i){return Math.sqrt(this._sqClosestPointOnSegment(t,e,i,!0))},closestPointOnSegment:function(t,e,i){return this._sqClosestPointOnSegment(t,e,i)},_simplifyDP:function(t,e){var n=t.length,o=typeof Uint8Array!=i+""?Uint8Array:Array,s=new o(n);s[0]=s[n-1]=1,this._simplifyDPStep(t,s,e,0,n-1);var a,r=[];for(a=0;n>a;a++)s[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,e,i,n,o){var s,a,r,h=0;for(a=n+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[n],t[o],!0),r>h&&(s=a,h=r);h>i&&(e[s]=1,this._simplifyDPStep(t,e,i,n,s),this._simplifyDPStep(t,e,i,s,o))},_reducePoints:function(t,e){for(var i=[t[0]],n=1,o=0,s=t.length;s>n;n++)this._sqDist(t[n],t[o])>e&&(i.push(t[n]),o=n);return s-1>o&&i.push(t[s-1]),i},clipSegment:function(t,e,i,n){var o,s,a,r=n?this._lastCode:this._getBitCode(t,i),h=this._getBitCode(e,i);for(this._lastCode=h;;){if(!(r|h))return[t,e];if(r&h)return!1;o=r||h,s=this._getEdgeIntersection(t,e,o,i),a=this._getBitCode(s,i),o===r?(t=s,r=a):(e=s,h=a)}},_getEdgeIntersection:function(t,e,i,n){var s=e.x-t.x,a=e.y-t.y,r=n.min,h=n.max;return 8&i?new o.Point(t.x+s*(h.y-t.y)/a,h.y):4&i?new o.Point(t.x+s*(r.y-t.y)/a,r.y):2&i?new o.Point(h.x,t.y+a*(h.x-t.x)/s):1&i?new o.Point(r.x,t.y+a*(r.x-t.x)/s):void 0},_getBitCode:function(t,e){var i=0;return t.xe.max.x&&(i|=2),t.ye.max.y&&(i|=8),i},_sqDist:function(t,e){var i=e.x-t.x,n=e.y-t.y;return i*i+n*n},_sqClosestPointOnSegment:function(t,e,i,n){var s,a=e.x,r=e.y,h=i.x-a,l=i.y-r,u=h*h+l*l;return u>0&&(s=((t.x-a)*h+(t.y-r)*l)/u,s>1?(a=i.x,r=i.y):s>0&&(a+=h*s,r+=l*s)),h=t.x-a,l=t.y-r,n?h*h+l*l:new o.Point(a,r)}},o.Polyline=o.Path.extend({initialize:function(t,e){o.Path.prototype.initialize.call(this,e),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,e=this._latlngs.length;e>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,e=this._parts.length,i="";e>t;t++)i+=this._getPathPartStr(this._parts[t]);return i},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(o.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs,!0),this.redraw(),t},closestLayerPoint:function(t){for(var e,i,n=1/0,s=this._parts,a=null,r=0,h=s.length;h>r;r++)for(var l=s[r],u=1,c=l.length;c>u;u++){e=l[u-1],i=l[u];var d=o.LineUtil._sqClosestPointOnSegment(t,e,i,!0);n>d&&(n=d,a=o.LineUtil._sqClosestPointOnSegment(t,e,i))}return a&&(a.distance=Math.sqrt(n)),a},getBounds:function(){return new o.LatLngBounds(this.getLatLngs())},_convertLatLngs:function(t,e){var i,n,s=e?t:[];for(i=0,n=t.length;n>i;i++){if(o.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;s[i]=o.latLng(t[i])}return s},_initEvents:function(){o.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var e,i=o.Path.VML,n=0,s=t.length,a="";s>n;n++)e=t[n],i&&e._round(),a+=(n?"L":"M")+e.x+" "+e.y;return a},_clipPoints:function(){var t,e,i,n=this._originalPoints,s=n.length;if(this.options.noClip)return void(this._parts=[n]);this._parts=[];var a=this._parts,r=this._map._pathViewport,h=o.LineUtil;for(t=0,e=0;s-1>t;t++)i=h.clipSegment(n[t],n[t+1],r,t),i&&(a[e]=a[e]||[],a[e].push(i[0]),(i[1]!==n[t+1]||t===s-2)&&(a[e].push(i[1]),e++))},_simplifyPoints:function(){for(var t=this._parts,e=o.LineUtil,i=0,n=t.length;n>i;i++)t[i]=e.simplify(t[i],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),o.Path.prototype._updatePath.call(this))}}),o.polyline=function(t,e){return new o.Polyline(t,e)},o.PolyUtil={},o.PolyUtil.clipPolygon=function(t,e){var i,n,s,a,r,h,l,u,c,d=[1,4,2,8],p=o.LineUtil;for(n=0,l=t.length;l>n;n++)t[n]._code=p._getBitCode(t[n],e);for(a=0;4>a;a++){for(u=d[a],i=[],n=0,l=t.length,s=l-1;l>n;s=n++)r=t[n],h=t[s],r._code&u?h._code&u||(c=p._getEdgeIntersection(h,r,u,e),c._code=p._getBitCode(c,e),i.push(c)):(h._code&u&&(c=p._getEdgeIntersection(h,r,u,e),c._code=p._getBitCode(c,e),i.push(c)),i.push(r));t=i}return t},o.Polygon=o.Polyline.extend({options:{fill:!0},initialize:function(t,e){o.Polyline.prototype.initialize.call(this,t,e),this._initWithHoles(t)},_initWithHoles:function(t){var e,i,n;if(t&&o.Util.isArray(t[0])&&"number"!=typeof t[0][0])for(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1),e=0,i=this._holes.length;i>e;e++)n=this._holes[e]=this._convertLatLngs(this._holes[e]),n[0].equals(n[n.length-1])&&n.pop();t=this._latlngs,t.length>=2&&t[0].equals(t[t.length-1])&&t.pop()},projectLatlngs:function(){if(o.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,e,i,n;for(t=0,i=this._holes.length;i>t;t++)for(this._holePoints[t]=[],e=0,n=this._holes[t].length;n>e;e++)this._holePoints[t][e]=this._map.latLngToLayerPoint(this._holes[t][e])}},setLatLngs:function(t){return t&&o.Util.isArray(t[0])&&"number"!=typeof t[0][0]?(this._initWithHoles(t),this.redraw()):o.Polyline.prototype.setLatLngs.call(this,t)},_clipPoints:function(){var t=this._originalPoints,e=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var i=0,n=this._parts.length;n>i;i++){var s=o.PolyUtil.clipPolygon(this._parts[i],this._map._pathViewport);s.length&&e.push(s)}this._parts=e}},_getPathPartStr:function(t){var e=o.Polyline.prototype._getPathPartStr.call(this,t);return e+(o.Browser.svg?"z":"x")}}),o.polygon=function(t,e){return new o.Polygon(t,e)},function(){function t(t){return o.FeatureGroup.extend({initialize:function(t,e){this._layers={},this._options=e,this.setLatLngs(t)},setLatLngs:function(e){var i=0,n=e.length;for(this.eachLayer(function(t){n>i?t.setLatLngs(e[i++]):this.removeLayer(t)},this);n>i;)this.addLayer(new t(e[i++],this._options));return this},getLatLngs:function(){var t=[];return this.eachLayer(function(e){t.push(e.getLatLngs())}),t}})}o.MultiPolyline=t(o.Polyline),o.MultiPolygon=t(o.Polygon),o.multiPolyline=function(t,e){return new o.MultiPolyline(t,e)},o.multiPolygon=function(t,e){return new o.MultiPolygon(t,e)}}(),o.Rectangle=o.Polygon.extend({initialize:function(t,e){o.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=o.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),o.rectangle=function(t,e){return new o.Rectangle(t,e)},o.Circle=o.Path.extend({initialize:function(t,e,i){o.Path.prototype.initialize.call(this,i),this._latlng=o.latLng(t),this._mRadius=e},options:{fill:!0},setLatLng:function(t){return this._latlng=o.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),e=this._latlng,i=this._map.latLngToLayerPoint([e.lat,e.lng-t]);this._point=this._map.latLngToLayerPoint(e),this._radius=Math.max(this._point.x-i.x,1)},getBounds:function(){var t=this._getLngRadius(),e=this._mRadius/40075017*360,i=this._latlng;return new o.LatLngBounds([i.lat-e,i.lng-t],[i.lat+e,i.lng+t])},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,e=this._radius;return this._checkIfEmpty()?"":o.Browser.svg?"M"+t.x+","+(t.y-e)+"A"+e+","+e+",0,1,1,"+(t.x-.1)+","+(t.y-e)+" z":(t._round(),e=Math.round(e),"AL "+t.x+","+t.y+" "+e+","+e+" 0,23592600")},getRadius:function(){return this._mRadius},_getLatRadius:function(){return this._mRadius/40075017*360},_getLngRadius:function(){return this._getLatRadius()/Math.cos(o.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,e=this._radius,i=this._point;return i.x-e>t.max.x||i.y-e>t.max.y||i.x+ei;i++)for(l=this._parts[i],n=0,r=l.length,s=r-1;r>n;s=n++)if((e||0!==n)&&(h=o.LineUtil.pointToSegmentDistance(t,l[s],l[n]),u>=h))return!0;return!1}}:{}),o.Polygon.include(o.Path.CANVAS?{_containsPoint:function(t){var e,i,n,s,a,r,h,l,u=!1;if(o.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(s=0,h=this._parts.length;h>s;s++)for(e=this._parts[s],a=0,l=e.length,r=l-1;l>a;r=a++)i=e[a],n=e[r],i.y>t.y!=n.y>t.y&&t.x<(n.x-i.x)*(t.y-i.y)/(n.y-i.y)+i.x&&(u=!u);return u}}:{}),o.Circle.include(o.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var e=this._point,i=this.options.stroke?this.options.weight/2:0;return t.distanceTo(e)<=this._radius+i}}:{}),o.CircleMarker.include(o.Path.CANVAS?{_updateStyle:function(){o.Path.prototype._updateStyle.call(this)}}:{}),o.GeoJSON=o.FeatureGroup.extend({initialize:function(t,e){o.setOptions(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e,i,n,s=o.Util.isArray(t)?t:t.features;if(s){for(e=0,i=s.length;i>e;e++)n=s[e],(n.geometries||n.geometry||n.features||n.coordinates)&&this.addData(s[e]);return this}var a=this.options;if(!a.filter||a.filter(t)){var r=o.GeoJSON.geometryToLayer(t,a.pointToLayer,a.coordsToLatLng,a);return r.feature=o.GeoJSON.asFeature(t),r.defaultOptions=r.options,this.resetStyle(r),a.onEachFeature&&a.onEachFeature(t,r),this.addLayer(r)}},resetStyle:function(t){var e=this.options.style;e&&(o.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,e))},setStyle:function(t){this.eachLayer(function(e){this._setLayerStyle(e,t)},this)},_setLayerStyle:function(t,e){"function"==typeof e&&(e=e(t.feature)),t.setStyle&&t.setStyle(e)}}),o.extend(o.GeoJSON,{geometryToLayer:function(t,e,i,n){var s,a,r,h,l="Feature"===t.type?t.geometry:t,u=l.coordinates,c=[];switch(i=i||this.coordsToLatLng,l.type){case"Point":return s=i(u),e?e(t,s):new o.Marker(s);case"MultiPoint":for(r=0,h=u.length;h>r;r++)s=i(u[r]),c.push(e?e(t,s):new o.Marker(s));return new o.FeatureGroup(c);case"LineString":return a=this.coordsToLatLngs(u,0,i),new o.Polyline(a,n);case"Polygon":if(2===u.length&&!u[1].length)throw new Error("Invalid GeoJSON object.");return a=this.coordsToLatLngs(u,1,i),new o.Polygon(a,n);case"MultiLineString":return a=this.coordsToLatLngs(u,1,i),new o.MultiPolyline(a,n);case"MultiPolygon":return a=this.coordsToLatLngs(u,2,i),new o.MultiPolygon(a,n);case"GeometryCollection":for(r=0,h=l.geometries.length;h>r;r++)c.push(this.geometryToLayer({geometry:l.geometries[r],type:"Feature",properties:t.properties},e,i,n));return new o.FeatureGroup(c);default:throw new Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t){return new o.LatLng(t[1],t[0],t[2])},coordsToLatLngs:function(t,e,i){var n,o,s,a=[];for(o=0,s=t.length;s>o;o++)n=e?this.coordsToLatLngs(t[o],e-1,i):(i||this.coordsToLatLng)(t[o]),a.push(n);return a},latLngToCoords:function(t){var e=[t.lng,t.lat];return t.alt!==i&&e.push(t.alt),e},latLngsToCoords:function(t){for(var e=[],i=0,n=t.length;n>i;i++)e.push(o.GeoJSON.latLngToCoords(t[i]));return e},getFeature:function(t,e){return t.feature?o.extend({},t.feature,{geometry:e}):o.GeoJSON.asFeature(e)},asFeature:function(t){return"Feature"===t.type?t:{type:"Feature",properties:{},geometry:t}}});var a={toGeoJSON:function(){return o.GeoJSON.getFeature(this,{type:"Point",coordinates:o.GeoJSON.latLngToCoords(this.getLatLng())})}};o.Marker.include(a),o.Circle.include(a),o.CircleMarker.include(a),o.Polyline.include({toGeoJSON:function(){return o.GeoJSON.getFeature(this,{type:"LineString",coordinates:o.GeoJSON.latLngsToCoords(this.getLatLngs())})}}),o.Polygon.include({toGeoJSON:function(){var t,e,i,n=[o.GeoJSON.latLngsToCoords(this.getLatLngs())];if(n[0].push(n[0][0]),this._holes)for(t=0,e=this._holes.length;e>t;t++)i=o.GeoJSON.latLngsToCoords(this._holes[t]),i.push(i[0]),n.push(i);return o.GeoJSON.getFeature(this,{type:"Polygon",coordinates:n})}}),function(){function t(t){return function(){var e=[];return this.eachLayer(function(t){e.push(t.toGeoJSON().geometry.coordinates)}),o.GeoJSON.getFeature(this,{type:t,coordinates:e})}}o.MultiPolyline.include({toGeoJSON:t("MultiLineString")}),o.MultiPolygon.include({toGeoJSON:t("MultiPolygon")}),o.LayerGroup.include({toGeoJSON:function(){var e,i=this.feature&&this.feature.geometry,n=[];if(i&&"MultiPoint"===i.type)return t("MultiPoint").call(this);var s=i&&"GeometryCollection"===i.type;return this.eachLayer(function(t){t.toGeoJSON&&(e=t.toGeoJSON(),n.push(s?e.geometry:o.GeoJSON.asFeature(e)))}),s?o.GeoJSON.getFeature(this,{geometries:n,type:"GeometryCollection"}):{type:"FeatureCollection",features:n}}})}(),o.geoJson=function(t,e){return new o.GeoJSON(t,e)},o.DomEvent={addListener:function(t,e,i,n){var s,a,r,h=o.stamp(i),l="_leaflet_"+e+h;return t[l]?this:(s=function(e){return i.call(n||t,e||o.DomEvent._getEvent())},o.Browser.pointer&&0===e.indexOf("touch")?this.addPointerListener(t,e,s,h):(o.Browser.touch&&"dblclick"===e&&this.addDoubleTapListener&&this.addDoubleTapListener(t,s,h),"addEventListener"in t?"mousewheel"===e?(t.addEventListener("DOMMouseScroll",s,!1),t.addEventListener(e,s,!1)):"mouseenter"===e||"mouseleave"===e?(a=s,r="mouseenter"===e?"mouseover":"mouseout",s=function(e){return o.DomEvent._checkMouse(t,e)?a(e):void 0},t.addEventListener(r,s,!1)):"click"===e&&o.Browser.android?(a=s,s=function(t){return o.DomEvent._filterClick(t,a)},t.addEventListener(e,s,!1)):t.addEventListener(e,s,!1):"attachEvent"in t&&t.attachEvent("on"+e,s),t[l]=s,this))},removeListener:function(t,e,i){var n=o.stamp(i),s="_leaflet_"+e+n,a=t[s];return a?(o.Browser.pointer&&0===e.indexOf("touch")?this.removePointerListener(t,e,n):o.Browser.touch&&"dblclick"===e&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,n):"removeEventListener"in t?"mousewheel"===e?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(e,a,!1)):"mouseenter"===e||"mouseleave"===e?t.removeEventListener("mouseenter"===e?"mouseover":"mouseout",a,!1):t.removeEventListener(e,a,!1):"detachEvent"in t&&t.detachEvent("on"+e,a),t[s]=null,this):this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,o.DomEvent._skipped(t),this},disableScrollPropagation:function(t){var e=o.DomEvent.stopPropagation;return o.DomEvent.on(t,"mousewheel",e).on(t,"MozMousePixelScroll",e)},disableClickPropagation:function(t){for(var e=o.DomEvent.stopPropagation,i=o.Draggable.START.length-1;i>=0;i--)o.DomEvent.on(t,o.Draggable.START[i],e);return o.DomEvent.on(t,"click",o.DomEvent._fakeStop).on(t,"dblclick",e)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return o.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,e){if(!e)return new o.Point(t.clientX,t.clientY);var i=e.getBoundingClientRect();return new o.Point(t.clientX-i.left-e.clientLeft,t.clientY-i.top-e.clientTop)},getWheelDelta:function(t){var e=0;return t.wheelDelta&&(e=t.wheelDelta/120),t.detail&&(e=-t.detail/3),e},_skipEvents:{},_fakeStop:function(t){o.DomEvent._skipEvents[t.type]=!0},_skipped:function(t){var e=this._skipEvents[t.type];return this._skipEvents[t.type]=!1,e},_checkMouse:function(t,e){var i=e.relatedTarget;if(!i)return!0;try{for(;i&&i!==t;)i=i.parentNode}catch(n){return!1}return i!==t},_getEvent:function(){var e=t.event;if(!e)for(var i=arguments.callee.caller;i&&(e=i.arguments[0],!e||t.Event!==e.constructor);)i=i.caller;return e},_filterClick:function(t,e){var i=t.timeStamp||t.originalEvent.timeStamp,n=o.DomEvent._lastClick&&i-o.DomEvent._lastClick;return n&&n>100&&500>n||t.target._simulatedClick&&!t._simulated?void o.DomEvent.stop(t):(o.DomEvent._lastClick=i,e(t))}},o.DomEvent.on=o.DomEvent.addListener,o.DomEvent.off=o.DomEvent.removeListener,o.Draggable=o.Class.extend({includes:o.Mixin.Events,statics:{START:o.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"}},initialize:function(t,e){this._element=t,this._dragStartTarget=e||t},enable:function(){if(!this._enabled){for(var t=o.Draggable.START.length-1;t>=0;t--)o.DomEvent.on(this._dragStartTarget,o.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=o.Draggable.START.length-1;t>=0;t--)o.DomEvent.off(this._dragStartTarget,o.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(this._moved=!1,!t.shiftKey&&(1===t.which||1===t.button||t.touches)&&(o.DomEvent.stopPropagation(t),!o.Draggable._disabled&&(o.DomUtil.disableImageDrag(),o.DomUtil.disableTextSelection(),!this._moving))){var i=t.touches?t.touches[0]:t;this._startPoint=new o.Point(i.clientX,i.clientY),this._startPos=this._newPos=o.DomUtil.getPosition(this._element),o.DomEvent.on(e,o.Draggable.MOVE[t.type],this._onMove,this).on(e,o.Draggable.END[t.type],this._onUp,this)}},_onMove:function(t){if(t.touches&&t.touches.length>1)return void(this._moved=!0);var i=t.touches&&1===t.touches.length?t.touches[0]:t,n=new o.Point(i.clientX,i.clientY),s=n.subtract(this._startPoint);(s.x||s.y)&&(o.Browser.touch&&Math.abs(s.x)+Math.abs(s.y)<3||(o.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=o.DomUtil.getPosition(this._element).subtract(s),o.DomUtil.addClass(e.body,"leaflet-dragging"),this._lastTarget=t.target||t.srcElement,o.DomUtil.addClass(this._lastTarget,"leaflet-drag-target")),this._newPos=this._startPos.add(s),this._moving=!0,o.Util.cancelAnimFrame(this._animRequest),this._animRequest=o.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget)))},_updatePosition:function(){this.fire("predrag"),o.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(){o.DomUtil.removeClass(e.body,"leaflet-dragging"),this._lastTarget&&(o.DomUtil.removeClass(this._lastTarget,"leaflet-drag-target"),this._lastTarget=null);for(var t in o.Draggable.MOVE)o.DomEvent.off(e,o.Draggable.MOVE[t],this._onMove).off(e,o.Draggable.END[t],this._onUp);o.DomUtil.enableImageDrag(),o.DomUtil.enableTextSelection(),this._moved&&this._moving&&(o.Util.cancelAnimFrame(this._animRequest),this.fire("dragend",{distance:this._newPos.distanceTo(this._startPos)})),this._moving=!1}}),o.Handler=o.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),o.Map.mergeOptions({dragging:!0,inertia:!o.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:o.Browser.touch?32:18,easeLinearity:.25,worldCopyJump:!1}),o.Map.Drag=o.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new o.Draggable(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this),t.whenReady(this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,e=this._lastPos=this._draggable._newPos;this._positions.push(e),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),e=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=e.subtract(t).x,this._worldWidth=this._map.project([0,180]).x},_onPreDrag:function(){var t=this._worldWidth,e=Math.round(t/2),i=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-e+i)%t+e-i,s=(n+e+i)%t-e-i,a=Math.abs(o+i)i.inertiaThreshold||!this._positions[0];if(e.fire("dragend",t),s)e.fire("moveend");else{var a=this._lastPos.subtract(this._positions[0]),r=(this._lastTime+n-this._times[0])/1e3,h=i.easeLinearity,l=a.multiplyBy(h/r),u=l.distanceTo([0,0]),c=Math.min(i.inertiaMaxSpeed,u),d=l.multiplyBy(c/u),p=c/(i.inertiaDeceleration*h),_=d.multiplyBy(-p/2).round();_.x&&_.y?(_=e._limitOffset(_,e.options.maxBounds),o.Util.requestAnimFrame(function(){e.panBy(_,{duration:p,easeLinearity:h,noMoveStart:!0})})):e.fire("moveend")}}}),o.Map.addInitHook("addHandler","dragging",o.Map.Drag),o.Map.mergeOptions({doubleClickZoom:!0}),o.Map.DoubleClickZoom=o.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,i=e.getZoom()+(t.originalEvent.shiftKey?-1:1);"center"===e.options.doubleClickZoom?e.setZoom(i):e.setZoomAround(t.containerPoint,i)}}),o.Map.addInitHook("addHandler","doubleClickZoom",o.Map.DoubleClickZoom),o.Map.mergeOptions({scrollWheelZoom:!0}),o.Map.ScrollWheelZoom=o.Handler.extend({addHooks:function(){o.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),o.DomEvent.on(this._map._container,"MozMousePixelScroll",o.DomEvent.preventDefault),this._delta=0},removeHooks:function(){o.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll),o.DomEvent.off(this._map._container,"MozMousePixelScroll",o.DomEvent.preventDefault)},_onWheelScroll:function(t){var e=o.DomEvent.getWheelDelta(t);this._delta+=e,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var i=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(o.bind(this._performZoom,this),i),o.DomEvent.preventDefault(t),o.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,e=this._delta,i=t.getZoom();e=e>0?Math.ceil(e):Math.floor(e),e=Math.max(Math.min(e,4),-4),e=t._limitZoom(i+e)-i,this._delta=0,this._startTime=null,e&&("center"===t.options.scrollWheelZoom?t.setZoom(i+e):t.setZoomAround(this._lastMousePos,i+e))}}),o.Map.addInitHook("addHandler","scrollWheelZoom",o.Map.ScrollWheelZoom),o.extend(o.DomEvent,{_touchstart:o.Browser.msPointer?"MSPointerDown":o.Browser.pointer?"pointerdown":"touchstart",_touchend:o.Browser.msPointer?"MSPointerUp":o.Browser.pointer?"pointerup":"touchend",addDoubleTapListener:function(t,i,n){function s(t){var e;if(o.Browser.pointer?(_.push(t.pointerId),e=_.length):e=t.touches.length,!(e>1)){var i=Date.now(),n=i-(r||i);h=t.touches?t.touches[0]:t,l=n>0&&u>=n,r=i}}function a(t){if(o.Browser.pointer){var e=_.indexOf(t.pointerId);if(-1===e)return;_.splice(e,1)}if(l){if(o.Browser.pointer){var n,s={};for(var a in h)n=h[a],"function"==typeof n?s[a]=n.bind(h):s[a]=n;h=s}h.type="dblclick",i(h),r=null}}var r,h,l=!1,u=250,c="_leaflet_",d=this._touchstart,p=this._touchend,_=[];t[c+d+n]=s,t[c+p+n]=a;var m=o.Browser.pointer?e.documentElement:t;return t.addEventListener(d,s,!1),m.addEventListener(p,a,!1),o.Browser.pointer&&m.addEventListener(o.DomEvent.POINTER_CANCEL,a,!1),this},removeDoubleTapListener:function(t,i){var n="_leaflet_";return t.removeEventListener(this._touchstart,t[n+this._touchstart+i],!1),(o.Browser.pointer?e.documentElement:t).removeEventListener(this._touchend,t[n+this._touchend+i],!1),o.Browser.pointer&&e.documentElement.removeEventListener(o.DomEvent.POINTER_CANCEL,t[n+this._touchend+i],!1),this}}),o.extend(o.DomEvent,{POINTER_DOWN:o.Browser.msPointer?"MSPointerDown":"pointerdown",POINTER_MOVE:o.Browser.msPointer?"MSPointerMove":"pointermove",POINTER_UP:o.Browser.msPointer?"MSPointerUp":"pointerup",POINTER_CANCEL:o.Browser.msPointer?"MSPointerCancel":"pointercancel",_pointers:[],_pointerDocumentListener:!1,addPointerListener:function(t,e,i,n){switch(e){case"touchstart":return this.addPointerListenerStart(t,e,i,n); +case"touchend":return this.addPointerListenerEnd(t,e,i,n);case"touchmove":return this.addPointerListenerMove(t,e,i,n);default:throw"Unknown touch event type"}},addPointerListenerStart:function(t,i,n,s){var a="_leaflet_",r=this._pointers,h=function(t){"mouse"!==t.pointerType&&t.pointerType!==t.MSPOINTER_TYPE_MOUSE&&o.DomEvent.preventDefault(t);for(var e=!1,i=0;i1))&&(this._moved||(o.DomUtil.addClass(e._mapPane,"leaflet-touching"),e.fire("movestart").fire("zoomstart"),this._moved=!0),o.Util.cancelAnimFrame(this._animRequest),this._animRequest=o.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),o.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,e=this._getScaleOrigin(),i=t.layerPointToLatLng(e),n=t.getScaleZoom(this._scale);t._animateZoom(i,n,this._startCenter,this._scale,this._delta,!1,!0)},_onTouchEnd:function(){if(!this._moved||!this._zooming)return void(this._zooming=!1);var t=this._map;this._zooming=!1,o.DomUtil.removeClass(t._mapPane,"leaflet-touching"),o.Util.cancelAnimFrame(this._animRequest),o.DomEvent.off(e,"touchmove",this._onTouchMove).off(e,"touchend",this._onTouchEnd);var i=this._getScaleOrigin(),n=t.layerPointToLatLng(i),s=t.getZoom(),a=t.getScaleZoom(this._scale)-s,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(s+r),l=t.getZoomScale(h)/this._scale;t._animateZoom(n,h,i,l)},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),o.Map.addInitHook("addHandler","touchZoom",o.Map.TouchZoom),o.Map.mergeOptions({tap:!0,tapTolerance:15}),o.Map.Tap=o.Handler.extend({addHooks:function(){o.DomEvent.on(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){o.DomEvent.off(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(t.touches){if(o.DomEvent.preventDefault(t),this._fireClick=!0,t.touches.length>1)return this._fireClick=!1,void clearTimeout(this._holdTimeout);var i=t.touches[0],n=i.target;this._startPos=this._newPos=new o.Point(i.clientX,i.clientY),n.tagName&&"a"===n.tagName.toLowerCase()&&o.DomUtil.addClass(n,"leaflet-active"),this._holdTimeout=setTimeout(o.bind(function(){this._isTapValid()&&(this._fireClick=!1,this._onUp(),this._simulateEvent("contextmenu",i))},this),1e3),o.DomEvent.on(e,"touchmove",this._onMove,this).on(e,"touchend",this._onUp,this)}},_onUp:function(t){if(clearTimeout(this._holdTimeout),o.DomEvent.off(e,"touchmove",this._onMove,this).off(e,"touchend",this._onUp,this),this._fireClick&&t&&t.changedTouches){var i=t.changedTouches[0],n=i.target;n&&n.tagName&&"a"===n.tagName.toLowerCase()&&o.DomUtil.removeClass(n,"leaflet-active"),this._isTapValid()&&this._simulateEvent("click",i)}},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_onMove:function(t){var e=t.touches[0];this._newPos=new o.Point(e.clientX,e.clientY)},_simulateEvent:function(i,n){var o=e.createEvent("MouseEvents");o._simulated=!0,n.target._simulatedClick=!0,o.initMouseEvent(i,!0,!0,t,1,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),n.target.dispatchEvent(o)}}),o.Browser.touch&&!o.Browser.pointer&&o.Map.addInitHook("addHandler","tap",o.Map.Tap),o.Map.mergeOptions({boxZoom:!0}),o.Map.BoxZoom=o.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._moved=!1},addHooks:function(){o.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){o.DomEvent.off(this._container,"mousedown",this._onMouseDown),this._moved=!1},moved:function(){return this._moved},_onMouseDown:function(t){return this._moved=!1,!t.shiftKey||1!==t.which&&1!==t.button?!1:(o.DomUtil.disableTextSelection(),o.DomUtil.disableImageDrag(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),void o.DomEvent.on(e,"mousemove",this._onMouseMove,this).on(e,"mouseup",this._onMouseUp,this).on(e,"keydown",this._onKeyDown,this))},_onMouseMove:function(t){this._moved||(this._box=o.DomUtil.create("div","leaflet-zoom-box",this._pane),o.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",this._map.fire("boxzoomstart"));var e=this._startLayerPoint,i=this._box,n=this._map.mouseEventToLayerPoint(t),s=n.subtract(e),a=new o.Point(Math.min(n.x,e.x),Math.min(n.y,e.y));o.DomUtil.setPosition(i,a),this._moved=!0,i.style.width=Math.max(0,Math.abs(s.x)-4)+"px",i.style.height=Math.max(0,Math.abs(s.y)-4)+"px"},_finish:function(){this._moved&&(this._pane.removeChild(this._box),this._container.style.cursor=""),o.DomUtil.enableTextSelection(),o.DomUtil.enableImageDrag(),o.DomEvent.off(e,"mousemove",this._onMouseMove).off(e,"mouseup",this._onMouseUp).off(e,"keydown",this._onKeyDown)},_onMouseUp:function(t){this._finish();var e=this._map,i=e.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(i)){var n=new o.LatLngBounds(e.layerPointToLatLng(this._startLayerPoint),e.layerPointToLatLng(i));e.fitBounds(n),e.fire("boxzoomend",{boxZoomBounds:n})}},_onKeyDown:function(t){27===t.keyCode&&this._finish()}}),o.Map.addInitHook("addHandler","boxZoom",o.Map.BoxZoom),o.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),o.Map.Keyboard=o.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61,171],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),o.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;o.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){if(!this._focused){var i=e.body,n=e.documentElement,o=i.scrollTop||n.scrollTop,s=i.scrollLeft||n.scrollLeft;this._map._container.focus(),t.scrollTo(s,o)}},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var e,i,n=this._panKeys={},o=this.keyCodes;for(e=0,i=o.left.length;i>e;e++)n[o.left[e]]=[-1*t,0];for(e=0,i=o.right.length;i>e;e++)n[o.right[e]]=[t,0];for(e=0,i=o.down.length;i>e;e++)n[o.down[e]]=[0,t];for(e=0,i=o.up.length;i>e;e++)n[o.up[e]]=[0,-1*t]},_setZoomOffset:function(t){var e,i,n=this._zoomKeys={},o=this.keyCodes;for(e=0,i=o.zoomIn.length;i>e;e++)n[o.zoomIn[e]]=t;for(e=0,i=o.zoomOut.length;i>e;e++)n[o.zoomOut[e]]=-t},_addHooks:function(){o.DomEvent.on(e,"keydown",this._onKeyDown,this)},_removeHooks:function(){o.DomEvent.off(e,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var e=t.keyCode,i=this._map;if(e in this._panKeys){if(i._panAnim&&i._panAnim._inProgress)return;i.panBy(this._panKeys[e]),i.options.maxBounds&&i.panInsideBounds(i.options.maxBounds)}else{if(!(e in this._zoomKeys))return;i.setZoom(i.getZoom()+this._zoomKeys[e])}o.DomEvent.stop(t)}}),o.Map.addInitHook("addHandler","keyboard",o.Map.Keyboard),o.Handler.MarkerDrag=o.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new o.Draggable(t,t)),this._draggable.on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this),this._draggable.enable(),o.DomUtil.addClass(this._marker._icon,"leaflet-marker-draggable")},removeHooks:function(){this._draggable.off("dragstart",this._onDragStart,this).off("drag",this._onDrag,this).off("dragend",this._onDragEnd,this),this._draggable.disable(),o.DomUtil.removeClass(this._marker._icon,"leaflet-marker-draggable")},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,e=t._shadow,i=o.DomUtil.getPosition(t._icon),n=t._map.layerPointToLatLng(i);e&&o.DomUtil.setPosition(e,i),t._latlng=n,t.fire("move",{latlng:n}).fire("drag")},_onDragEnd:function(t){this._marker.fire("moveend").fire("dragend",t)}}),o.Control=o.Class.extend({options:{position:"topright"},initialize:function(t){o.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),n=t._controlCorners[i];return o.DomUtil.addClass(e,"leaflet-control"),-1!==i.indexOf("bottom")?n.insertBefore(e,n.firstChild):n.appendChild(e),this},removeFrom:function(t){var e=this.getPosition(),i=t._controlCorners[e];return i.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this},_refocusOnMap:function(){this._map&&this._map.getContainer().focus()}}),o.control=function(t){return new o.Control(t)},o.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,s){var a=i+t+" "+i+s;e[t+s]=o.DomUtil.create("div",a,n)}var e=this._controlCorners={},i="leaflet-",n=this._controlContainer=o.DomUtil.create("div",i+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")},_clearControlPos:function(){this._container.removeChild(this._controlContainer)}}),o.Control.Zoom=o.Control.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom in",zoomOutText:"-",zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",i=o.DomUtil.create("div",e+" leaflet-bar");return this._map=t,this._zoomInButton=this._createButton(this.options.zoomInText,this.options.zoomInTitle,e+"-in",i,this._zoomIn,this),this._zoomOutButton=this._createButton(this.options.zoomOutText,this.options.zoomOutTitle,e+"-out",i,this._zoomOut,this),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),i},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,e,i,n,s,a){var r=o.DomUtil.create("a",i,n);r.innerHTML=t,r.href="#",r.title=e;var h=o.DomEvent.stopPropagation;return o.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",o.DomEvent.preventDefault).on(r,"click",s,a).on(r,"click",this._refocusOnMap,a),r},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";o.DomUtil.removeClass(this._zoomInButton,e),o.DomUtil.removeClass(this._zoomOutButton,e),t._zoom===t.getMinZoom()&&o.DomUtil.addClass(this._zoomOutButton,e),t._zoom===t.getMaxZoom()&&o.DomUtil.addClass(this._zoomInButton,e)}}),o.Map.mergeOptions({zoomControl:!0}),o.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new o.Control.Zoom,this.addControl(this.zoomControl))}),o.control.zoom=function(t){return new o.Control.Zoom(t)},o.Control.Attribution=o.Control.extend({options:{position:"bottomright",prefix:'Leaflet'},initialize:function(t){o.setOptions(this,t),this._attributions={}},onAdd:function(t){this._container=o.DomUtil.create("div","leaflet-control-attribution"),o.DomEvent.disableClickPropagation(this._container);for(var e in t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):void 0},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):void 0},_update:function(){if(this._map){var t=[];for(var e in this._attributions)this._attributions[e]&&t.push(e);var i=[];this.options.prefix&&i.push(this.options.prefix),t.length&&i.push(t.join(", ")),this._container.innerHTML=i.join(" | ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),o.Map.mergeOptions({attributionControl:!0}),o.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new o.Control.Attribution).addTo(this))}),o.control.attribution=function(t){return new o.Control.Attribution(t)},o.Control.Scale=o.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var e="leaflet-control-scale",i=o.DomUtil.create("div",e),n=this.options;return this._addScales(n,e,i),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=o.DomUtil.create("div",e+"-line",i)),t.imperial&&(this._iScale=o.DomUtil.create("div",e+"-line",i))},_update:function(){var t=this._map.getBounds(),e=t.getCenter().lat,i=6378137*Math.PI*Math.cos(e*Math.PI/180),n=i*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),s=this.options,a=0;o.x>0&&(a=n*(s.maxWidth/o.x)),this._updateScales(s,a)},_updateScales:function(t,e){t.metric&&e&&this._updateMetric(e),t.imperial&&e&&this._updateImperial(e)},_updateMetric:function(t){var e=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(e/t)+"px",this._mScale.innerHTML=1e3>e?e+" m":e/1e3+" km"},_updateImperial:function(t){var e,i,n,o=3.2808399*t,s=this._iScale;o>5280?(e=o/5280,i=this._getRoundNum(e),s.style.width=this._getScaleWidth(i/e)+"px",s.innerHTML=i+" mi"):(n=this._getRoundNum(o),s.style.width=this._getScaleWidth(n/o)+"px",s.innerHTML=n+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var e=Math.pow(10,(Math.floor(t)+"").length-1),i=t/e;return i=i>=10?10:i>=5?5:i>=3?3:i>=2?2:1,e*i}}),o.control.scale=function(t){return new o.Control.Scale(t)},o.Control.Layers=o.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,e,i){o.setOptions(this,i),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var n in t)this._addLayer(t[n],n);for(n in e)this._addLayer(e[n],n,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange,this).off("layerremove",this._onLayerChange,this)},addBaseLayer:function(t,e){return this._addLayer(t,e),this._update(),this},addOverlay:function(t,e){return this._addLayer(t,e,!0),this._update(),this},removeLayer:function(t){var e=o.stamp(t);return delete this._layers[e],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",e=this._container=o.DomUtil.create("div",t);e.setAttribute("aria-haspopup",!0),o.Browser.touch?o.DomEvent.on(e,"click",o.DomEvent.stopPropagation):o.DomEvent.disableClickPropagation(e).disableScrollPropagation(e);var i=this._form=o.DomUtil.create("form",t+"-list");if(this.options.collapsed){o.Browser.android||o.DomEvent.on(e,"mouseover",this._expand,this).on(e,"mouseout",this._collapse,this);var n=this._layersLink=o.DomUtil.create("a",t+"-toggle",e);n.href="#",n.title="Layers",o.Browser.touch?o.DomEvent.on(n,"click",o.DomEvent.stop).on(n,"click",this._expand,this):o.DomEvent.on(n,"focus",this._expand,this),o.DomEvent.on(i,"click",function(){setTimeout(o.bind(this._onInputClick,this),0)},this),this._map.on("click",this._collapse,this)}else this._expand();this._baseLayersList=o.DomUtil.create("div",t+"-base",i),this._separator=o.DomUtil.create("div",t+"-separator",i),this._overlaysList=o.DomUtil.create("div",t+"-overlays",i),e.appendChild(i)},_addLayer:function(t,e,i){var n=o.stamp(t);this._layers[n]={layer:t,name:e,overlay:i},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t,e,i=!1,n=!1;for(t in this._layers)e=this._layers[t],this._addItem(e),n=n||e.overlay,i=i||!e.overlay;this._separator.style.display=n&&i?"":"none"}},_onLayerChange:function(t){var e=this._layers[o.stamp(t.layer)];if(e){this._handlingClick||this._update();var i=e.overlay?"layeradd"===t.type?"overlayadd":"overlayremove":"layeradd"===t.type?"baselayerchange":null;i&&this._map.fire(i,e)}},_createRadioElement:function(t,i){var n='t;t++)e=n[t],i=this._layers[e.layerId],e.checked&&!this._map.hasLayer(i.layer)?this._map.addLayer(i.layer):!e.checked&&this._map.hasLayer(i.layer)&&this._map.removeLayer(i.layer);this._handlingClick=!1,this._refocusOnMap()},_expand:function(){o.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),o.control.layers=function(t,e,i){return new o.Control.Layers(t,e,i)},o.PosAnimation=o.Class.extend({includes:o.Mixin.Events,run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._newPos=e,this.fire("start"),t.style[o.DomUtil.TRANSITION]="all "+(i||.25)+"s cubic-bezier(0,0,"+(n||.5)+",1)",o.DomEvent.on(t,o.DomUtil.TRANSITION_END,this._onTransitionEnd,this),o.DomUtil.setPosition(t,e),o.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(o.bind(this._onStep,this),50)},stop:function(){this._inProgress&&(o.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),o.Util.falseFn(this._el.offsetWidth))},_onStep:function(){var t=this._getPos();return t?(this._el._leaflet_pos=t,void this.fire("step")):void this._onTransitionEnd()},_transformRe:/([-+]?(?:\d*\.)?\d+)\D*, ([-+]?(?:\d*\.)?\d+)\D*\)/,_getPos:function(){var e,i,n,s=this._el,a=t.getComputedStyle(s);if(o.Browser.any3d){if(n=a[o.DomUtil.TRANSFORM].match(this._transformRe),!n)return;e=parseFloat(n[1]),i=parseFloat(n[2])}else e=parseFloat(a.left),i=parseFloat(a.top);return new o.Point(e,i,!0)},_onTransitionEnd:function(){o.DomEvent.off(this._el,o.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[o.DomUtil.TRANSITION]="",this._el._leaflet_pos=this._newPos,clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),o.Map.include({setView:function(t,e,n){if(e=e===i?this._zoom:this._limitZoom(e),t=this._limitCenter(o.latLng(t),e,this.options.maxBounds),n=n||{},this._panAnim&&this._panAnim.stop(),this._loaded&&!n.reset&&n!==!0){n.animate!==i&&(n.zoom=o.extend({animate:n.animate},n.zoom),n.pan=o.extend({animate:n.animate},n.pan));var s=this._zoom!==e?this._tryAnimatedZoom&&this._tryAnimatedZoom(t,e,n.zoom):this._tryAnimatedPan(t,n.pan);if(s)return clearTimeout(this._sizeTimer),this}return this._resetView(t,e),this},panBy:function(t,e){if(t=o.point(t).round(),e=e||{},!t.x&&!t.y)return this;if(this._panAnim||(this._panAnim=new o.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),e.noMoveStart||this.fire("movestart"),e.animate!==!1){o.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var i=this._getMapPanePos().subtract(t);this._panAnim.run(this._mapPane,i,e.duration||.25,e.easeLinearity)}else this._rawPanBy(t),this.fire("move").fire("moveend");return this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){o.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,e){var i=this._getCenterOffset(t)._floor();return(e&&e.animate)===!0||this.getSize().contains(i)?(this.panBy(i,e),!0):!1}}),o.PosAnimation=o.DomUtil.TRANSITION?o.PosAnimation:o.PosAnimation.extend({run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=i||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=o.DomUtil.getPosition(t),this._offset=e.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=o.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,e=1e3*this._duration;e>t?this._runFrame(this._easeOut(t/e)):(this._runFrame(1),this._complete())},_runFrame:function(t){var e=this._startPos.add(this._offset.multiplyBy(t));o.DomUtil.setPosition(this._el,e),this.fire("step")},_complete:function(){o.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),o.Map.mergeOptions({zoomAnimation:!0,zoomAnimationThreshold:4}),o.DomUtil.TRANSITION&&o.Map.addInitHook(function(){this._zoomAnimated=this.options.zoomAnimation&&o.DomUtil.TRANSITION&&o.Browser.any3d&&!o.Browser.android23&&!o.Browser.mobileOpera,this._zoomAnimated&&o.DomEvent.on(this._mapPane,o.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),o.Map.include(o.DomUtil.TRANSITION?{_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,e,i){if(this._animatingZoom)return!0;if(i=i||{},!this._zoomAnimated||i.animate===!1||this._nothingToAnimate()||Math.abs(e-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(e),o=this._getCenterOffset(t)._divideBy(1-1/n),s=this._getCenterLayerPoint()._add(o);return i.animate===!0||this.getSize().contains(o)?(this.fire("movestart").fire("zoomstart"),this._animateZoom(t,e,s,n,null,!0),!0):!1},_animateZoom:function(t,e,i,n,s,a,r){r||(this._animatingZoom=!0),o.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this._animateToCenter=t,this._animateToZoom=e,o.Draggable&&(o.Draggable._disabled=!0),o.Util.requestAnimFrame(function(){this.fire("zoomanim",{center:t,zoom:e,origin:i,scale:n,delta:s,backwards:a}),setTimeout(o.bind(this._onZoomTransitionEnd,this),250)},this)},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._animatingZoom=!1,o.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),o.Util.requestAnimFrame(function(){this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),o.Draggable&&(o.Draggable._disabled=!1)},this))}}:{}),o.TileLayer.include({_animateZoom:function(t){this._animating||(this._animating=!0,this._prepareBgBuffer());var e=this._bgBuffer,i=o.DomUtil.TRANSFORM,n=t.delta?o.DomUtil.getTranslateString(t.delta):e.style[i],s=o.DomUtil.getScaleString(t.scale,t.origin);e.style[i]=t.backwards?s+" "+n:n+" "+s},_endZoomAnim:function(){var t=this._tileContainer,e=this._bgBuffer;t.style.visibility="",t.parentNode.appendChild(t),o.Util.falseFn(e.offsetWidth);var i=this._map.getZoom();(i>this.options.maxZoom||i.5&&.5>n?(t.style.visibility="hidden",void this._stopLoadingImages(t)):(e.style.visibility="hidden",e.style[o.DomUtil.TRANSFORM]="",this._tileContainer=e,e=this._bgBuffer=t,this._stopLoadingImages(e),void clearTimeout(this._clearBgBufferTimer))},_getLoadedTilesPercentage:function(t){var e,i,n=t.getElementsByTagName("img"),o=0;for(e=0,i=n.length;i>e;e++)n[e].complete&&o++;return o/i},_stopLoadingImages:function(t){var e,i,n,s=Array.prototype.slice.call(t.getElementsByTagName("img"));for(e=0,i=s.length;i>e;e++)n=s[e],n.complete||(n.onload=o.Util.falseFn,n.onerror=o.Util.falseFn,n.src=o.Util.emptyImageUrl,n.parentNode.removeChild(n))}}),o.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locateOptions=o.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var e=o.bind(this._handleGeolocationResponse,this),i=o.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var e=t.code,i=t.message||(1===e?"permission denied":2===e?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+i+"."})},_handleGeolocationResponse:function(t){var e=t.coords.latitude,i=t.coords.longitude,n=new o.LatLng(e,i),s=180*t.coords.accuracy/40075017,a=s/Math.cos(o.LatLng.DEG_TO_RAD*e),r=o.latLngBounds([e-s,i-a],[e+s,i+a]),h=this._locateOptions;if(h.setView){var l=Math.min(this.getBoundsZoom(r),h.maxZoom);this.setView(n,l)}var u={latlng:n,bounds:r,timestamp:t.timestamp};for(var c in t.coords)"number"==typeof t.coords[c]&&(u[c]=t.coords[c]);this.fire("locationfound",u)}})}(window,document); \ No newline at end of file diff --git a/leaflet/qleaflet.jquery.js b/leaflet/qleaflet.jquery.js index be1281e..b2a9b3c 100644 --- a/leaflet/qleaflet.jquery.js +++ b/leaflet/qleaflet.jquery.js @@ -97,7 +97,9 @@ this.map.on('click', onMapClick, this); + /* Disable search require AppKey from mapquest */ /* BEGIN leaflet-search */ + /* var jsonpurl = 'https://open.mapquestapi.com/nominatim/v1/search.php?q={s}'+ '&format=json&osm_type=N&limit=100&addressdetails=0', jsonpName = 'json_callback'; @@ -131,6 +133,7 @@ }; window.L.control.search(searchOpts).addTo(this.map); + */ /* END leaflet-search */ }, diff --git a/main.inc.php b/main.inc.php index 6559c13..77e62d1 100644 --- a/main.inc.php +++ b/main.inc.php @@ -1,7 +1,7 @@ +* Copyright 2013-2016 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -120,6 +120,22 @@ function plugin_install() if (file_exists($gpx_dir) and is_dir($gpx_dir)) osm_deltree($gpx_dir); + // Easy access + if (!defined('osm_place_table')) + define('osm_place_table', $prefixeTable.'osm_places'); + + /* Table to hold osm places details */ + $q = 'CREATE TABLE IF NOT EXISTS `'.osm_place_table.'` ( + `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, + `latitude` double(8,6) NOT NULL, + `longitude` double(8,6) NOT NULL, + `name` varchar(255) DEFAULT NULL, + `parentId` mediumint(8), + PRIMARY KEY (id) + ) ENGINE=MyISAM DEFAULT CHARSET=utf8 + ;'; + pwg_query($q); + // Create world map link $dir_name = basename( dirname(__FILE__) ); $c = << EOF; $fp = fopen( PHPWG_ROOT_PATH.'osmmap.php', 'w' ); diff --git a/menu.inc.php b/menu.inc.php index 4b0cd7f..2285113 100644 --- a/menu.inc.php +++ b/menu.inc.php @@ -6,7 +6,7 @@ * * Created : 10.10.2014 * -* Copyright 2013-2015 +* Copyright 2013-2016 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -54,7 +54,6 @@ function osm_apply_menu($menu_ref_arr) // Comment are used only with this condition index.php l294 if ($page['start']==0 and !isset($page['chronology_field']) ) { - // TF, 20160102: pass config as parameter $js_data = osm_get_items($conf, $page); if ($js_data != array()) { @@ -66,7 +65,7 @@ function osm_apply_menu($menu_ref_arr) $local_conf['center_lat'] = 0; $local_conf['center_lng'] = 0; $local_conf['zoom'] = 2; - $local_conf['auto_center'] = true; + $local_conf['autocenter'] = 1; $local_conf['divname'] = 'mapmenu'; // TF, 20160102: pass config as parameter $local_conf['paths'] = osm_get_gps($conf, $page); diff --git a/mimetypes/Thumbs.db b/mimetypes/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..b4ede4348e3aa081387c3e21448b3c12811e3b18 GIT binary patch literal 21504 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 literal 0 HcmV?d00001 diff --git a/osmmap.php b/osmmap.php index 854c898..67d3744 100644 --- a/osmmap.php +++ b/osmmap.php @@ -6,7 +6,7 @@ * * Created : 28.05.2013 * -* Copyright 2013-2015 +* Copyright 2013-2016 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/osmmap2.php b/osmmap2.php index ccffaba..115d06e 100644 --- a/osmmap2.php +++ b/osmmap2.php @@ -6,7 +6,7 @@ * * Created : 18.01.2014 * -* Copyright 2013-2015 +* Copyright 2013-2016 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/osmmap3.php b/osmmap3.php index 293ffe0..8f235b4 100644 --- a/osmmap3.php +++ b/osmmap3.php @@ -6,7 +6,7 @@ * * Created : 28.05.2014 * -* Copyright 2013-2015 +* Copyright 2013-2016 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/osmmap4.php b/osmmap4.php new file mode 100644 index 0000000..bc4d80a --- /dev/null +++ b/osmmap4.php @@ -0,0 +1,95 @@ + +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* +************************************************/ + +if ( !defined('PHPWG_ROOT_PATH') ) + define('PHPWG_ROOT_PATH','../../'); + +include_once( PHPWG_ROOT_PATH.'include/common.inc.php' ); +include_once( PHPWG_ROOT_PATH.'admin/include/functions.php' ); +include_once( dirname(__FILE__) .'/include/functions.php'); +include_once( dirname(__FILE__) .'/include/functions_map.php'); + +check_status(ACCESS_GUEST); + +osm_load_language(); +load_language('plugin.lang', OSM_PATH); + +$section = ''; +if ( $conf['question_mark_in_urls']==false and isset($_SERVER["PATH_INFO"]) and !empty($_SERVER["PATH_INFO"]) ) +{ + $section = $_SERVER["PATH_INFO"]; + $section = str_replace('//', '/', $section); + $path_count = count( explode('/', $section) ); + $page['root_path'] = PHPWG_ROOT_PATH.str_repeat('../', $path_count-1); + if ( strncmp($page['root_path'], './', 2) == 0 ) + { + $page['root_path'] = substr($page['root_path'], 2); + } +} +else +{ + foreach ($_GET as $key=>$value) + { + if (!strlen($value)) $section=$key; + break; + } +} + +// deleting first "/" if displayed +$tokens = explode('/', preg_replace('#^/#', '', $section)); +$next_token = 0; +$result = osm_parse_map_data_url($tokens, $next_token); +$page = array_merge( $page, $result ); + + +if (isset($page['category'])) + check_restrictions($page['category']['id']); + +/* If the config include parameters get them */ +$zoom = isset($conf['osm_conf']['left_menu']['zoom']) ? $conf['osm_conf']['left_menu']['zoom'] : 2; +$center = isset($conf['osm_conf']['left_menu']['center']) ? $conf['osm_conf']['left_menu']['center'] : '0,0'; +$center_arr = preg_split('/,/', $center); +$center_lat = isset($center_arr) ? $center_arr[0] : 0; +$center_lng = isset($center_arr) ? $center_arr[1] : 0; + +/* If we have zoom and center coordonate, set it otherwise fallback default */ +$zoom = isset($_GET['zoom']) ? $_GET['zoom'] : $zoom; +$center_lat = isset($_GET['center_lat']) ? $_GET['center_lat'] : $center_lat; +$center_lng = isset($_GET['center_lng']) ? $_GET['center_lng'] : $center_lng; + +$local_conf = array(); +$local_conf['zoom'] = $zoom; +$local_conf['center_lat'] = $center_lat; +$local_conf['center_lng'] = $center_lng; +$local_conf['contextmenu'] = 'true'; +$local_conf['control'] = true; +$local_conf['img_popup'] = false; +$local_conf['paths'] = osm_get_gps($page); +$local_conf = $local_conf + $conf['osm_conf']['map'] + $conf['osm_conf']['left_menu']; + +$js_data = osm_get_items($page); +$js = osm_get_js($conf, $local_conf, $js_data); +osm_gen_template($conf, $js, $js_data, 'osm-map4.tpl', $template); +?> diff --git a/pem_metadata.txt b/pem_metadata.txt new file mode 100644 index 0000000..9dc0a40 --- /dev/null +++ b/pem_metadata.txt @@ -0,0 +1,4 @@ +File automatically created from SVN or Git repository. + +URL: https://github.com/xbgmsharp/piwigo-openstreetmap +Revision: 0347d04cb896f82cb969880ca723036714addbf5 (Sun Nov 13 17:33:53 2016 +0000) \ No newline at end of file diff --git a/picture.inc.php b/picture.inc.php index b971524..1551a15 100644 --- a/picture.inc.php +++ b/picture.inc.php @@ -6,7 +6,7 @@ * * Created : 28.05.2013 * -* Copyright 2013-2015 +* Copyright 2013-2016 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/template/osm-map3.tpl b/template/osm-map3.tpl index 9060308..bffa42c 100644 --- a/template/osm-map3.tpl +++ b/template/osm-map3.tpl @@ -229,6 +229,19 @@ html, body { * Here because of the icon path */ +var provider_mapping = { + 'mapnik' : 'OpenStreetMap_Mapnik', + 'blackandwhite' : 'OpenStreetMap_BlackAndWhite', + 'mapnikfr' : 'OpenStreetMap_France', + 'mapnikde' : 'OpenStreetMap_DE', + 'mapnikhot' : 'OpenStreetMap_HOT', + 'mapquest' : 'MapQuestOpen_OSM', + 'mapquestaerial' : 'MapQuestOpen_Aerial', + 'cloudmade' : 'CloudMade', + 'toner' : 'Stamen_Toner', + 'custom' : 'Custom', +}; + var providers = {}; providers['OpenStreetMap_Mapnik'] = { @@ -249,6 +262,15 @@ providers['OpenStreetMap_BlackAndWhite'] = { }) }; +providers['OpenStreetMap_France'] = { + title: 'osm fr', + icon: 'https://a.tile.openstreetmap.fr/osmfr/5/15/11.png', + layer: L.tileLayer('https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png', { + maxZoom: 19, + attribution: '© Openstreetmap France | © OpenStreetMap' + }) +} + providers['OpenStreetMap_DE'] = { title: 'osm de', icon: '{/literal}{$OSM_PATH}{literal}leaflet/icons/openstreetmap_de.png', @@ -258,6 +280,34 @@ providers['OpenStreetMap_DE'] = { }) } +providers['OpenStreetMap_HOT'] = { + title: 'osm HOT', + icon: 'http://a.tile.openstreetmap.fr/hot/5/15/11.png', + layer: L.tileLayer('http://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', { + maxZoom: 19, + attribution: '© OpenStreetMap, Tiles courtesy of Humanitarian OpenStreetMap Team' + }) +} + +providers['MapQuestOpen_OSM'] = { + title: 'MapQuest', + icon: 'http://otile1.mqcdn.com/tiles/1.0.0/map/5/15/11.png', + layer: L.tileLayer('http://otile{s}.mqcdn.com/tiles/1.0.0/map/{z}/{x}/{y}.png', { + maxZoom: 19, + attribution: 'Tiles Courtesy of MapQuest — Map data © OpenStreetMap', + subdomains: '1234' + }) +} + +providers['MapQuestOpen_Aerial'] = { + title: 'MapQuest Aerial', + icon: 'http://otile1.mqcdn.com/tiles/1.0.0/sat/5/15/11.png', + layer: L.tileLayer('http://otile{s}.mqcdn.com/tiles/1.0.0/sat/{z}/{x}/{y}.png', { + attribution: 'Tiles Courtesy of MapQuest — Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency', + subdomains: '1234' + }) +} + providers['Stamen_Toner'] = { title: 'toner', icon: '{/literal}{$OSM_PATH}{literal}leaflet/icons/stamen_toner.png', @@ -340,12 +390,32 @@ providers['CartoDB_Positron'] = { }) }; +{/literal} +{if $default_baselayer == 'custom'} +{literal} + providers['Custom'] = { + title: '{/literal}{$custombaselayer}{literal}', + icon: '{/literal}{$iconbaselayer}{literal}', + layer: L.tileLayer('{/literal}{$custombaselayerurl}{literal}', { + // The following attribution might be wrong + // Please refer to https://leaflet-extras.github.io/leaflet-providers/preview/ + // to get the correct attribution notice. + attribution: '© OpenStreetMap', + maxZoom: 19 + }) + }; +{/literal} +{/if} +{literal} + /* BEGIN Leaflet-IconLayers https://github.com/ScanEx/Leaflet-IconLayers */ var layers = []; for (var providerId in providers) { layers.push(providers[providerId]); // Providers from providers.js } - var ctrl = L.control.iconLayers(layers).addTo(map); + var il = L.control.iconLayers(layers); + il.setActiveLayer(providers[provider_mapping['{/literal}{$default_baselayer}{literal}']].layer); + var ctrl = il.addTo(map); /* END Leaflet-IconLayers */ diff --git a/template/osm-map4.tpl b/template/osm-map4.tpl new file mode 100644 index 0000000..8e18ccb --- /dev/null +++ b/template/osm-map4.tpl @@ -0,0 +1,478 @@ + +{html_head} + + + +{$GALLERY_TITLE} + + + + + + + + + + + + + + + + + + +{html_style} +{literal} +html, body { + height: 100%; + width: 100%; + margin: 0; + padding: 0; +} + +#map { + position: absolute; + top:0; + left:0; + right:0; + bottom:0; +} +/* +.leaflet-bottom { + transition: bottom 0.5s; +} +.leaflet-right { + transition: bottom 0.5s; +} +#leaflet-bar-up a { + //float: right; +} + +#sidebar-up { + //transition: bottom 0.8s ease 0s, height 0.8s ease 0s; + //transition: background-color 0.8s ease; + //background-color: red; + //bottom: 0; + //right: 0; +} +#sidebar-up.visible { + //background-color: green; + //width: 100%; + //height: 100px; + //bottom: 0; + //right: 0; +} + +#sidebar-up.bottom.visible ~ .leaflet-bottom { + height: 190px; +} +#sidebar-up.bottom.visible ~ .leaflet-left { + height: 140px; +} +#sidebar-up.left.visible ~ .leaflet-left { + left: 0px; +} +*/ + +/* Tiny Scrollbar */ +#scrollbar1 +{ + height:150px; + width:100%; + margin:0 0 10px; +} + +#scrollbar1 .viewport +{ + width:236px; + height:125px; + overflow:hidden; + position:relative; +} + +#scrollbar1 .overview +{ + list-style:none; + width:1416px; + padding:0; + margin:0; + position:absolute; + left:0; + top:0; +} + +#scrollbar1 .overview img +{ + float:left; +} + +#scrollbar1 .scrollbar +{ + background:transparent url(plugins/piwigo-openstreetmap/leaflet/images/bg-scrollbar-track-y.png) no-repeat 0 0; + position:relative; + margin:0 0 5px; + clear:both; + height:15px; +} + +#scrollbar1 .track +{ + background:transparent url(plugins/piwigo-openstreetmap/leaflet/images/bg-scrollbar-trackend-y.png) no-repeat 100% 0; + width:100%; + height:15px; + position:relative; +} + +#scrollbar1 .thumb +{ + background:transparent url(plugins/piwigo-openstreetmap/leaflet/images/bg-scrollbar-thumb-y.png) no-repeat 100% 50%; + height:25px; + cursor:pointer; + overflow:hidden; + position:absolute; + left:0; + top:-5px; +} + +#scrollbar1 .thumb .end +{ + background:transparent url(plugins/piwigo-openstreetmap/leaflet/images/bg-scrollbar-thumb-y.png) no-repeat 0 50%; + overflow:hidden; + height:25px; + width:5px; +} + +#scrollbar1 .disable +{ + display:none; +} + +.noSelect +{ + user-select:none; + -o-user-select:none; + -moz-user-select:none; + -khtml-user-select:none; + -webkit-user-select:none; +} + +#dialog { + font-family: Arial,Helvetica,sans-serif; + font-size: 10px; + text-align: center; + text-decoration: none; +} +{/literal}{/html_style}{/html_head} + + + + + + +
    +
    +
    +
    + image 2 + image 2 + image 2 + image 2 + image 2 + image 2 + image 1 + image 1 + image 1 + image 1 + image 1 + image 1 + image 3 + image 3 + image 3 + image 3 + image 3 + image 3 + image 4 + image 4 + image 4 + image 4 + image 4 + image 4 +
    +
    +
    + +
    + +
    +

    Copy and Paste the URL below:

    + +
    + + + + + + + + + + + + From 3548c2d5b7a2103bd6450e91c8ae2c40c34fed05 Mon Sep 17 00:00:00 2001 From: Thomas Feuster Date: Sat, 20 Nov 2021 17:34:04 +0100 Subject: [PATCH 11/11] Update to Piwigo 12 - removed smarty parameter --- picture.inc.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/picture.inc.php b/picture.inc.php index 1551a15..eb0382d 100644 --- a/picture.inc.php +++ b/picture.inc.php @@ -40,7 +40,7 @@ function osm_loc_begin_picture() $template->set_prefilter('picture', 'osm_insert_map'); } -function osm_insert_map($content, &$smarty) +function osm_insert_map($content) { global $conf; load_language('plugin.lang', OSM_PATH); @@ -126,8 +126,7 @@ function osm_render_element_content() $local_conf['center_lng'] = $lon; $local_conf['zoom'] = $zoom; - // TF, 20160102: pass config as parameter - $js_data = osm_get_items($conf, $page); + $js_data = osm_get_items($page); $js = osm_get_js($conf, $local_conf, $js_data);