update leaflet.js
This commit is contained in:
parent
b35238a8cb
commit
3d5e605357
2 changed files with 147 additions and 103 deletions
5
src/static/leaflet/leaflet.css
vendored
5
src/static/leaflet/leaflet.css
vendored
|
@ -374,6 +374,11 @@
|
|||
margin: 5px -10px 5px -6px;
|
||||
}
|
||||
|
||||
/* Default icon URLs */
|
||||
.leaflet-default-icon-path {
|
||||
background-image: url(images/marker-icon.png);
|
||||
}
|
||||
|
||||
|
||||
/* attribution and scale controls */
|
||||
|
||||
|
|
227
src/static/leaflet/leaflet.js
vendored
227
src/static/leaflet/leaflet.js
vendored
|
@ -1,10 +1,10 @@
|
|||
/*
|
||||
Leaflet 1.0.0-rc.3+27f05a2, a JS library for interactive maps. http://leafletjs.com
|
||||
(c) 2010-2015 Vladimir Agafonkin, (c) 2010-2011 CloudMade
|
||||
Leaflet 1.0.1+ffcfcc1, a JS library for interactive maps. http://leafletjs.com
|
||||
(c) 2010-2016 Vladimir Agafonkin, (c) 2010-2011 CloudMade
|
||||
*/
|
||||
(function (window, document, undefined) {
|
||||
var L = {
|
||||
version: "1.0.0-rc.3+27f05a2"
|
||||
version: "1.0.1+ffcfcc1"
|
||||
};
|
||||
|
||||
function expose() {
|
||||
|
@ -497,10 +497,7 @@ L.Evented = L.Class.extend({
|
|||
/* get/init listeners for type */
|
||||
var typeListeners = this._events[type];
|
||||
if (!typeListeners) {
|
||||
typeListeners = {
|
||||
listeners: [],
|
||||
count: 0
|
||||
};
|
||||
typeListeners = [];
|
||||
this._events[type] = typeListeners;
|
||||
}
|
||||
|
||||
|
@ -509,7 +506,7 @@ L.Evented = L.Class.extend({
|
|||
context = undefined;
|
||||
}
|
||||
var newListener = {fn: fn, ctx: context},
|
||||
listeners = typeListeners.listeners;
|
||||
listeners = typeListeners;
|
||||
|
||||
// check if fn already there
|
||||
for (var i = 0, len = listeners.length; i < len; i++) {
|
||||
|
@ -523,21 +520,18 @@ L.Evented = L.Class.extend({
|
|||
},
|
||||
|
||||
_off: function (type, fn, context) {
|
||||
var typeListeners,
|
||||
listeners,
|
||||
var listeners,
|
||||
i,
|
||||
len;
|
||||
|
||||
if (!this._events) { return; }
|
||||
|
||||
typeListeners = this._events[type];
|
||||
listeners = this._events[type];
|
||||
|
||||
if (!typeListeners) {
|
||||
if (!listeners) {
|
||||
return;
|
||||
}
|
||||
|
||||
listeners = typeListeners.listeners;
|
||||
|
||||
if (!fn) {
|
||||
// Set all removed listeners to noop so they are not called if remove happens in fire
|
||||
for (i = 0, len = listeners.length; i < len; i++) {
|
||||
|
@ -548,7 +542,6 @@ L.Evented = L.Class.extend({
|
|||
return;
|
||||
}
|
||||
|
||||
|
||||
if (context === this) {
|
||||
context = undefined;
|
||||
}
|
||||
|
@ -563,11 +556,10 @@ L.Evented = L.Class.extend({
|
|||
|
||||
// set the removed listener to noop so that's not called if remove happens in fire
|
||||
l.fn = L.Util.falseFn;
|
||||
typeListeners.count--;
|
||||
|
||||
if (this._isFiring) {
|
||||
if (this._firingCount) {
|
||||
/* copy array in case events are being fired */
|
||||
listeners = listeners.slice();
|
||||
this._events[type] = listeners = listeners.slice();
|
||||
}
|
||||
listeners.splice(i, 1);
|
||||
|
||||
|
@ -587,17 +579,16 @@ L.Evented = L.Class.extend({
|
|||
var event = L.Util.extend({}, data, {type: type, target: this});
|
||||
|
||||
if (this._events) {
|
||||
var typeListeners = this._events[type];
|
||||
var listeners = this._events[type];
|
||||
|
||||
if (typeListeners) {
|
||||
this._isFiring = true;
|
||||
var listeners = typeListeners.listeners;
|
||||
if (listeners) {
|
||||
this._firingCount = (this._firingCount + 1) || 1;
|
||||
for (var i = 0, len = listeners.length; i < len; i++) {
|
||||
var l = listeners[i];
|
||||
l.fn.call(l.ctx || this, event);
|
||||
}
|
||||
|
||||
this._isFiring = false;
|
||||
this._firingCount--;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -612,8 +603,8 @@ L.Evented = L.Class.extend({
|
|||
// @method listens(type: String): Boolean
|
||||
// Returns `true` if a particular event type has any listeners attached to it.
|
||||
listens: function (type, propagate) {
|
||||
var typeListeners = this._events && this._events[type];
|
||||
if (typeListeners && typeListeners.count) { return true; }
|
||||
var listeners = this._events && this._events[type];
|
||||
if (listeners && listeners.length) { return true; }
|
||||
|
||||
if (propagate) {
|
||||
// also check parents for listeners if event propagates
|
||||
|
@ -2100,7 +2091,7 @@ L.CRS = {
|
|||
return Math.log(scale / 256) / Math.LN2;
|
||||
},
|
||||
|
||||
// @method getProjectedBounds(zoom): Bounds
|
||||
// @method getProjectedBounds(zoom: Number): Bounds
|
||||
// Returns the projection's bounds scaled and transformed for the provided `zoom`.
|
||||
getProjectedBounds: function (zoom) {
|
||||
if (this.infinite) { return null; }
|
||||
|
@ -2113,7 +2104,7 @@ L.CRS = {
|
|||
return L.bounds(min, max);
|
||||
},
|
||||
|
||||
// @method distance(latlng1: LatLng, latlng1: LatLng): Number
|
||||
// @method distance(latlng1: LatLng, latlng2: LatLng): Number
|
||||
// Returns the distance between two geographical coordinates.
|
||||
|
||||
// @property code: String
|
||||
|
@ -2661,11 +2652,19 @@ L.Map = L.Evented.extend({
|
|||
|
||||
this._initEvents(true);
|
||||
|
||||
if (this._containerId !== this._container._leaflet_id) {
|
||||
throw new Error('Map container is being reused by another instance');
|
||||
}
|
||||
|
||||
try {
|
||||
// throws error in IE6-8
|
||||
delete this._container._leaflet;
|
||||
delete this._container._leaflet_id;
|
||||
delete this._containerId;
|
||||
} catch (e) {
|
||||
this._container._leaflet = undefined;
|
||||
/*eslint-disable */
|
||||
this._container._leaflet_id = undefined;
|
||||
/*eslint-enable */
|
||||
this._containerId = undefined;
|
||||
}
|
||||
|
||||
L.DomUtil.remove(this._mapPane);
|
||||
|
@ -2857,7 +2856,8 @@ L.Map = L.Evented.extend({
|
|||
getScaleZoom: function (scale, fromZoom) {
|
||||
var crs = this.options.crs;
|
||||
fromZoom = fromZoom === undefined ? this._zoom : fromZoom;
|
||||
return crs.zoom(scale * crs.scale(fromZoom));
|
||||
var zoom = crs.zoom(scale * crs.scale(fromZoom));
|
||||
return isNaN(zoom) ? Infinity : zoom;
|
||||
},
|
||||
|
||||
// @method project(latlng: LatLng, zoom: Number): Point
|
||||
|
@ -2968,12 +2968,12 @@ L.Map = L.Evented.extend({
|
|||
|
||||
if (!container) {
|
||||
throw new Error('Map container not found.');
|
||||
} else if (container._leaflet) {
|
||||
} else if (container._leaflet_id) {
|
||||
throw new Error('Map container is already initialized.');
|
||||
}
|
||||
|
||||
L.DomEvent.addListener(container, 'scroll', this._onScroll, this);
|
||||
container._leaflet = true;
|
||||
this._containerId = L.Util.stamp(container);
|
||||
},
|
||||
|
||||
_initLayout: function () {
|
||||
|
@ -3099,14 +3099,14 @@ L.Map = L.Evented.extend({
|
|||
this._pixelOrigin = this._getNewPixelOrigin(center);
|
||||
|
||||
// @event zoom: Event
|
||||
// Fired repeteadly during any change in zoom level, including zoom
|
||||
// Fired repeatedly during any change in zoom level, including zoom
|
||||
// and fly animations.
|
||||
if (zoomChanged || (data && data.pinch)) { // Always fire 'zoom' if pinching because #3530
|
||||
this.fire('zoom', data);
|
||||
}
|
||||
|
||||
// @event move: Event
|
||||
// Fired repeteadly during any movement of the map, including pan and
|
||||
// Fired repeatedly during any movement of the map, including pan and
|
||||
// fly animations.
|
||||
return this.fire('move', data);
|
||||
},
|
||||
|
@ -3182,7 +3182,7 @@ L.Map = L.Evented.extend({
|
|||
// default browser context menu from showing if there are listeners on
|
||||
// this event. Also fired on mobile when the user holds a single touch
|
||||
// for a second (also called long press).
|
||||
// @event keypress: Event
|
||||
// @event keypress: KeyboardEvent
|
||||
// Fired when the user presses a key from the keyboard while the map is focused.
|
||||
L.DomEvent[onOff](this._container, 'click dblclick mousedown mouseup ' +
|
||||
'mouseover mouseout mousemove contextmenu keypress', this._handleDOMEvent, this);
|
||||
|
@ -3899,7 +3899,7 @@ L.GridLayer = L.Layer.extend({
|
|||
},
|
||||
|
||||
initialize: function (options) {
|
||||
options = L.setOptions(this, options);
|
||||
L.setOptions(this, options);
|
||||
},
|
||||
|
||||
onAdd: function () {
|
||||
|
@ -3950,7 +3950,7 @@ L.GridLayer = L.Layer.extend({
|
|||
return this.options.attribution;
|
||||
},
|
||||
|
||||
// @method getContainer: String
|
||||
// @method getContainer: HTMLElement
|
||||
// Returns the HTML element that contains the tiles for this layer.
|
||||
getContainer: function () {
|
||||
return this._container;
|
||||
|
@ -4409,7 +4409,7 @@ L.GridLayer = L.Layer.extend({
|
|||
});
|
||||
|
||||
if (queue.length !== 0) {
|
||||
// if its the first batch of tiles to load
|
||||
// if it's the first batch of tiles to load
|
||||
if (!this._loading) {
|
||||
this._loading = true;
|
||||
// @event loading: Event
|
||||
|
@ -4458,8 +4458,13 @@ L.GridLayer = L.Layer.extend({
|
|||
nwPoint = coords.scaleBy(tileSize),
|
||||
sePoint = nwPoint.add(tileSize),
|
||||
|
||||
nw = map.wrapLatLng(map.unproject(nwPoint, coords.z)),
|
||||
se = map.wrapLatLng(map.unproject(sePoint, coords.z));
|
||||
nw = map.unproject(nwPoint, coords.z),
|
||||
se = map.unproject(sePoint, coords.z);
|
||||
|
||||
if (!this.options.noWrap) {
|
||||
nw = map.wrapLatLng(nw);
|
||||
se = map.wrapLatLng(se);
|
||||
}
|
||||
|
||||
return new L.LatLngBounds(nw, se);
|
||||
},
|
||||
|
@ -4576,6 +4581,7 @@ L.GridLayer = L.Layer.extend({
|
|||
this._pruneTiles();
|
||||
}
|
||||
|
||||
if (!err) {
|
||||
L.DomUtil.addClass(tile.el, 'leaflet-tile-loaded');
|
||||
|
||||
// @event tileload: TileEvent
|
||||
|
@ -4584,6 +4590,7 @@ L.GridLayer = L.Layer.extend({
|
|||
tile: tile.el,
|
||||
coords: coords
|
||||
});
|
||||
}
|
||||
|
||||
if (this._noTilesToLoad()) {
|
||||
this._loading = false;
|
||||
|
@ -5095,7 +5102,7 @@ L.ImageOverlay = L.Layer.extend({
|
|||
}
|
||||
},
|
||||
|
||||
// @method setOpacity(): this
|
||||
// @method setOpacity(opacity: Number): this
|
||||
// Sets the opacity of the overlay.
|
||||
setOpacity: function (opacity) {
|
||||
this.options.opacity = opacity;
|
||||
|
@ -5374,12 +5381,24 @@ L.icon = function (options) {
|
|||
|
||||
|
||||
/*
|
||||
* L.Icon.Default is the blue marker icon used by default in Leaflet.
|
||||
* @miniclass Icon.Default (Icon)
|
||||
* @aka L.Icon.Default
|
||||
* @section
|
||||
*
|
||||
* A trivial subclass of `Icon`, represents the icon to use in `Marker`s when
|
||||
* no icon is specified. Points to the blue marker image distributed with Leaflet
|
||||
* releases.
|
||||
*
|
||||
* In order to change the default icon, just change the properties of `L.Icon.Default.prototype.options`
|
||||
* (which is a set of `Icon options`).
|
||||
*/
|
||||
|
||||
L.Icon.Default = L.Icon.extend({
|
||||
|
||||
options: {
|
||||
iconUrl: 'marker-icon.png',
|
||||
iconRetinaUrl: 'marker-icon-2x.png',
|
||||
shadowUrl: 'marker-shadow.png',
|
||||
iconSize: [25, 41],
|
||||
iconAnchor: [12, 41],
|
||||
popupAnchor: [1, -34],
|
||||
|
@ -5388,38 +5407,29 @@ L.Icon.Default = L.Icon.extend({
|
|||
},
|
||||
|
||||
_getIconUrl: function (name) {
|
||||
var key = name + 'Url';
|
||||
|
||||
if (this.options[key]) {
|
||||
return this.options[key];
|
||||
if (!L.Icon.Default.imagePath) { // Deprecated, backwards-compatibility only
|
||||
L.Icon.Default.imagePath = this._detectIconPath();
|
||||
}
|
||||
|
||||
var path = L.Icon.Default.imagePath;
|
||||
// @option imagePath: String
|
||||
// `L.Icon.Default` will try to auto-detect the absolute location of the
|
||||
// blue icon images. If you are placing these images in a non-standard
|
||||
// way, set this option to point to the right absolute path.
|
||||
return (this.options.imagePath || L.Icon.Default.imagePath) + L.Icon.prototype._getIconUrl.call(this, name);
|
||||
},
|
||||
|
||||
if (!path) {
|
||||
throw new Error('Couldn\'t autodetect L.Icon.Default.imagePath, set it manually.');
|
||||
}
|
||||
_detectIconPath: function () {
|
||||
var el = L.DomUtil.create('div', 'leaflet-default-icon-path', document.body);
|
||||
var path = L.DomUtil.getStyle(el, 'background-image') ||
|
||||
L.DomUtil.getStyle(el, 'backgroundImage'); // IE8
|
||||
|
||||
return path + '/marker-' + name + (L.Browser.retina && name === 'icon' ? '-2x' : '') + '.png';
|
||||
document.body.removeChild(el);
|
||||
|
||||
return path.indexOf('url') === 0 ?
|
||||
path.replace(/^url\([\"\']?/, '').replace(/marker-icon\.png[\"\']?\)$/, '') : '';
|
||||
}
|
||||
});
|
||||
|
||||
L.Icon.Default.imagePath = (function () {
|
||||
var scripts = document.getElementsByTagName('script'),
|
||||
leafletRe = /[\/^]leaflet[\-\._]?([\w\-\._]*)\.js\??/;
|
||||
|
||||
var i, len, src, path;
|
||||
|
||||
for (i = 0, len = scripts.length; i < len; i++) {
|
||||
src = scripts[i].src || '';
|
||||
|
||||
if (src.match(leafletRe)) {
|
||||
path = src.split(leafletRe)[0];
|
||||
return (path ? path + '/' : '') + 'images';
|
||||
}
|
||||
}
|
||||
}());
|
||||
|
||||
|
||||
|
||||
/*
|
||||
|
@ -5441,7 +5451,7 @@ L.Marker = L.Layer.extend({
|
|||
// @aka Marker options
|
||||
options: {
|
||||
// @option icon: Icon = *
|
||||
// Icon class to use for rendering the marker. See [Icon documentation](#L.Icon) for details on how to customize the marker icon. Set to new `L.Icon.Default()` by default.
|
||||
// Icon class to use for rendering the marker. See [Icon documentation](#L.Icon) for details on how to customize the marker icon. If not specified, a new `L.Icon.Default` is used.
|
||||
icon: new L.Icon.Default(),
|
||||
|
||||
// Option inherited from "Interactive layer" abstract class
|
||||
|
@ -5843,11 +5853,6 @@ L.DivOverlay = L.Layer.extend({
|
|||
// of the popup when opening it on some overlays.
|
||||
offset: [0, 7],
|
||||
|
||||
// @option zoomAnimation: Boolean = true
|
||||
// Whether to animate the popup on zoom. Disable it if you have
|
||||
// problems with Flash content inside popups.
|
||||
zoomAnimation: true,
|
||||
|
||||
// @option className: String = ''
|
||||
// A custom CSS class name to assign to the popup.
|
||||
className: '',
|
||||
|
@ -5864,7 +5869,7 @@ L.DivOverlay = L.Layer.extend({
|
|||
},
|
||||
|
||||
onAdd: function (map) {
|
||||
this._zoomAnimated = this._zoomAnimated && this.options.zoomAnimation;
|
||||
this._zoomAnimated = map._zoomAnimated;
|
||||
|
||||
if (!this._container) {
|
||||
this._initLayout();
|
||||
|
@ -6108,7 +6113,11 @@ L.Popup = L.DivOverlay.extend({
|
|||
// Set it to `false` if you want to override the default behavior of
|
||||
// the popup closing when user clicks the map (set globally by
|
||||
// the Map's [closePopupOnClick](#map-closepopuponclick) option).
|
||||
autoClose: true
|
||||
autoClose: true,
|
||||
|
||||
// @option className: String = ''
|
||||
// A custom CSS class name to assign to the popup.
|
||||
className: ''
|
||||
},
|
||||
|
||||
// @namespace Popup
|
||||
|
@ -6187,7 +6196,7 @@ L.Popup = L.DivOverlay.extend({
|
|||
var prefix = 'leaflet-popup',
|
||||
container = this._container = L.DomUtil.create('div',
|
||||
prefix + ' ' + (this.options.className || '') +
|
||||
' leaflet-zoom-' + (this._zoomAnimated ? 'animated' : 'hide'));
|
||||
' leaflet-zoom-animated');
|
||||
|
||||
if (this.options.closeButton) {
|
||||
var closeButton = this._closeButton = L.DomUtil.create('a', prefix + '-close-button', container);
|
||||
|
@ -6254,9 +6263,7 @@ L.Popup = L.DivOverlay.extend({
|
|||
containerWidth = this._containerWidth,
|
||||
layerPos = new L.Point(this._containerLeft, -containerHeight - this._containerBottom);
|
||||
|
||||
if (this._zoomAnimated) {
|
||||
layerPos._add(L.DomUtil.getPosition(this._container));
|
||||
}
|
||||
|
||||
var containerPos = map.layerPointToContainerPoint(layerPos),
|
||||
padding = L.point(this.options.autoPanPadding),
|
||||
|
@ -6728,7 +6735,7 @@ L.Tooltip = L.DivOverlay.extend({
|
|||
|
||||
_getAnchor: function () {
|
||||
// Where should we anchor the tooltip on the source layer?
|
||||
return L.point(this._source._getTooltipAnchor && !this.options.sticky ? this._source._getTooltipAnchor() : [0, 0]);
|
||||
return L.point(this._source && this._source._getTooltipAnchor && !this.options.sticky ? this._source._getTooltipAnchor() : [0, 0]);
|
||||
}
|
||||
|
||||
});
|
||||
|
@ -6901,7 +6908,7 @@ L.Layer.include({
|
|||
closeTooltip: function () {
|
||||
if (this._tooltip) {
|
||||
this._tooltip._close();
|
||||
if (this._tooltip.options.interactive) {
|
||||
if (this._tooltip.options.interactive && this._tooltip._container) {
|
||||
L.DomUtil.removeClass(this._tooltip._container, 'leaflet-clickable');
|
||||
this.removeInteractiveTarget(this._tooltip._container);
|
||||
}
|
||||
|
@ -7144,14 +7151,19 @@ L.layerGroup = function (layers) {
|
|||
* @aka L.FeatureGroup
|
||||
* @inherits LayerGroup
|
||||
*
|
||||
* Extended `LayerGroup` that also has mouse events (propagated from members of the group) and a shared bindPopup method.
|
||||
* Extended `LayerGroup` that makes it easier to do the same thing to all its member layers:
|
||||
* * [`bindPopup`](#layer-bindpopup) binds a popup to all of the layers at once (likewise with [`bindTooltip`](#layer-bindtooltip))
|
||||
* * Events are propagated to the `FeatureGroup`, so if the group has an event
|
||||
* handler, it will handle events from any of the layers. This includes mouse events
|
||||
* and custom events.
|
||||
* * Has `layeradd` and `layerremove` events
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* ```js
|
||||
* L.featureGroup([marker1, marker2, polyline])
|
||||
* .bindPopup('Hello world!')
|
||||
* .on('click', function() { alert('Clicked on a group!'); })
|
||||
* .on('click', function() { alert('Clicked on a member of the group!'); })
|
||||
* .addTo(map);
|
||||
* ```
|
||||
*/
|
||||
|
@ -7167,6 +7179,8 @@ L.FeatureGroup = L.LayerGroup.extend({
|
|||
|
||||
L.LayerGroup.prototype.addLayer.call(this, layer);
|
||||
|
||||
// @event layeradd: LayerEvent
|
||||
// Fired when a layer is added to this `FeatureGroup`
|
||||
return this.fire('layeradd', {layer: layer});
|
||||
},
|
||||
|
||||
|
@ -7182,6 +7196,8 @@ L.FeatureGroup = L.LayerGroup.extend({
|
|||
|
||||
L.LayerGroup.prototype.removeLayer.call(this, layer);
|
||||
|
||||
// @event layerremove: LayerEvent
|
||||
// Fired when a layer is removed from this `FeatureGroup`
|
||||
return this.fire('layerremove', {layer: layer});
|
||||
},
|
||||
|
||||
|
@ -7239,6 +7255,9 @@ L.featureGroup = function (layers) {
|
|||
*
|
||||
* Do not use this class directly, use `SVG` and `Canvas` instead.
|
||||
*
|
||||
* @event update: Event
|
||||
* Fired when the renderer updates its bounds, center and zoom, for example when
|
||||
* its map has moved
|
||||
*/
|
||||
|
||||
L.Renderer = L.Layer.extend({
|
||||
|
@ -7317,7 +7336,8 @@ L.Renderer = L.Layer.extend({
|
|||
},
|
||||
|
||||
_update: function () {
|
||||
// update pixel bounds of renderer container (for positioning/sizing/clipping later)
|
||||
// Update pixel bounds of renderer container (for positioning/sizing/clipping later)
|
||||
// Subclasses are responsible of firing the 'update' event.
|
||||
var p = this.options.padding,
|
||||
size = this._map.getSize(),
|
||||
min = this._map.containerPointToLayerPoint(size.multiplyBy(-p)).round();
|
||||
|
@ -7448,16 +7468,17 @@ L.Path = L.Layer.extend({
|
|||
this._renderer._initPath(this);
|
||||
this._reset();
|
||||
this._renderer._addPath(this);
|
||||
this._renderer.on('update', this._update, this);
|
||||
},
|
||||
|
||||
onRemove: function () {
|
||||
this._renderer._removePath(this);
|
||||
this._renderer.off('update', this._update, this);
|
||||
},
|
||||
|
||||
getEvents: function () {
|
||||
return {
|
||||
zoomend: this._project,
|
||||
moveend: this._update,
|
||||
viewreset: this._reset
|
||||
};
|
||||
},
|
||||
|
@ -7855,6 +7876,11 @@ L.Polyline = L.Path.extend({
|
|||
// @method getCenter(): LatLng
|
||||
// Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the polyline.
|
||||
getCenter: function () {
|
||||
// throws error when not yet added to map as this center calculation requires projected coordinates
|
||||
if (!this._map) {
|
||||
throw new Error('Must add layer to map before using getCenter()');
|
||||
}
|
||||
|
||||
var i, halfDist, segDist, dist, p1, p2, ratio,
|
||||
points = this._rings[0],
|
||||
len = points.length;
|
||||
|
@ -8159,6 +8185,11 @@ L.Polygon = L.Polyline.extend({
|
|||
},
|
||||
|
||||
getCenter: function () {
|
||||
// throws error when not yet added to map as this center calculation requires projected coordinates
|
||||
if (!this._map) {
|
||||
throw new Error('Must add layer to map before using getCenter()');
|
||||
}
|
||||
|
||||
var i, j, p1, p2, f, area, x, y, center,
|
||||
points = this._rings[0],
|
||||
len = points.length;
|
||||
|
@ -8417,7 +8448,7 @@ L.circleMarker = function (latlng, options) {
|
|||
* @example
|
||||
*
|
||||
* ```js
|
||||
* L.circle([50.5, 30.5], 200).addTo(map);
|
||||
* L.circle([50.5, 30.5], {radius: 200}).addTo(map);
|
||||
* ```
|
||||
*/
|
||||
|
||||
|
@ -8535,7 +8566,7 @@ L.circle = function (latlng, options, legacyOptions) {
|
|||
*
|
||||
* ```js
|
||||
* var map = L.map('map', {
|
||||
* renderer: L.svg();
|
||||
* renderer: L.svg()
|
||||
* });
|
||||
* ```
|
||||
*
|
||||
|
@ -8593,6 +8624,8 @@ L.SVG = L.Renderer.extend({
|
|||
// movement: update container viewBox so that we don't have to change coordinates of individual layers
|
||||
L.DomUtil.setPosition(container, b.min);
|
||||
container.setAttribute('viewBox', [b.min.x, b.min.y, size.x, size.y].join(' '));
|
||||
|
||||
this.fire('update');
|
||||
},
|
||||
|
||||
// methods below are called by vector layers implementations
|
||||
|
@ -8789,6 +8822,7 @@ L.SVG.include(!L.Browser.vml ? {} : {
|
|||
_update: function () {
|
||||
if (this._map._animatingZoom) { return; }
|
||||
L.Renderer.prototype._update.call(this);
|
||||
this.fire('update');
|
||||
},
|
||||
|
||||
_initPath: function (layer) {
|
||||
|
@ -8923,7 +8957,7 @@ if (L.Browser.vml) {
|
|||
*
|
||||
* ```js
|
||||
* var map = L.map('map', {
|
||||
* renderer: L.canvas();
|
||||
* renderer: L.canvas()
|
||||
* });
|
||||
* ```
|
||||
*
|
||||
|
@ -8986,6 +9020,9 @@ L.Canvas = L.Renderer.extend({
|
|||
|
||||
// translate so we use the same path coordinates after canvas element moves
|
||||
this._ctx.translate(-b.min.x, -b.min.y);
|
||||
|
||||
// Tell paths to redraw themselves
|
||||
this.fire('update');
|
||||
},
|
||||
|
||||
_initPath: function (layer) {
|
||||
|
@ -9291,7 +9328,7 @@ L.CircleMarker.prototype._containsPoint = function (p) {
|
|||
* @example
|
||||
*
|
||||
* ```js
|
||||
* L.geoJson(data, {
|
||||
* L.geoJSON(data, {
|
||||
* style: function (feature) {
|
||||
* return {color: feature.properties.color};
|
||||
* }
|
||||
|
@ -9335,13 +9372,15 @@ L.GeoJSON = L.FeatureGroup.extend({
|
|||
* ```
|
||||
*
|
||||
* @option filter: Function = *
|
||||
* A `Function` that will be used to decide whether to show a feature or not.
|
||||
* The default is to show all features:
|
||||
* A `Function` that will be used to decide whether to include a feature or not.
|
||||
* The default is to include all features:
|
||||
* ```js
|
||||
* function (geoJsonFeature) {
|
||||
* return true;
|
||||
* }
|
||||
* ```
|
||||
* Note: dynamically changing the `filter` option will have effect only on newly
|
||||
* added data. It will _not_ re-evaluate already included features.
|
||||
*
|
||||
* @option coordsToLatLng: Function = *
|
||||
* A `Function` that will be used for converting GeoJSON coordinates to `LatLng`s.
|
||||
|
@ -9358,7 +9397,7 @@ L.GeoJSON = L.FeatureGroup.extend({
|
|||
}
|
||||
},
|
||||
|
||||
// @function addData( <GeoJSON> data ): Layer
|
||||
// @method addData( <GeoJSON> data ): Layer
|
||||
// Adds a GeoJSON object to the layer.
|
||||
addData: function (geojson) {
|
||||
var features = L.Util.isArray(geojson) ? geojson : geojson.features,
|
||||
|
@ -9395,7 +9434,7 @@ L.GeoJSON = L.FeatureGroup.extend({
|
|||
return this.addLayer(layer);
|
||||
},
|
||||
|
||||
// @function resetStyle( <Path> layer ): Layer
|
||||
// @method resetStyle( <Path> layer ): Layer
|
||||
// Resets the given vector layer's style to the original GeoJSON style, useful for resetting style after hover events.
|
||||
resetStyle: function (layer) {
|
||||
// reset any custom styles
|
||||
|
@ -9404,7 +9443,7 @@ L.GeoJSON = L.FeatureGroup.extend({
|
|||
return this;
|
||||
},
|
||||
|
||||
// @function setStyle( <Function> style ): Layer
|
||||
// @method setStyle( <Function> style ): Layer
|
||||
// Changes styles of GeoJSON vector layers with the given style function.
|
||||
setStyle: function (style) {
|
||||
return this.eachLayer(function (layer) {
|
||||
|
@ -12794,7 +12833,7 @@ L.Map.include(!zoomAnimated ? {} : {
|
|||
// @section Methods for modifying map state
|
||||
L.Map.include({
|
||||
|
||||
// @method flyTo(latlng: LatLng, zoom?: Number, options?: Zoom/Pan options): this
|
||||
// @method flyTo(latlng: LatLng, zoom?: Number, options?: Zoom/pan options): this
|
||||
// Sets the view of the map (geographical center and zoom) performing a smooth
|
||||
// pan-zoom animation.
|
||||
flyTo: function (targetCenter, targetZoom, options) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue