Leaflet/reference.html

3580 lines
135 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<title>Leaflet - a JavaScript library for mobile-friendly interactive maps by CloudMade - Documentation</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="docs/images/favicon.png" />
<!-- Blueprint -->
<link rel="stylesheet" href="docs/css/blueprint/screen.css" media="screen, projection">
<link rel="stylesheet" href="docs/css/blueprint/print.css" media="print">
<!--[if lt IE 8]><link rel="stylesheet" href="docs/css/blueprint/ie.css" media="screen, projection"><![endif]-->
<link rel="stylesheet" href="docs/css/screen.css" media="screen, projection" />
<script src="docs/highlight/highlight.pack.js"></script>
<link rel="stylesheet" href="docs/highlight/styles/github.css" />
<!-- Leaflet -->
<link rel="stylesheet" href="dist/leaflet.css" />
<!--[if lte IE 8]><link rel="stylesheet" href="dist/leaflet.ie.css" /><![endif]-->
<script src="dist/leaflet.js"></script>
</head>
<body>
<div class="container">
<h1>Leaflet</h1>
<h3 class="alt">An Open-Source JavaScript Library for Mobile-Friendly Interactive Maps by <a href="http://cloudmade.com">CloudMade</a></h3>
<ul class="nav clearfix">
<li><a href="index.html">Overview</a></li>
<li><a href="features.html">Features</a></li>
<li><a href="examples.html">Tutorials</a></li>
<li><span>Documentation</span></li>
<li><a href="download.html">Download</a></li>
<li><a class="twitter-link" href="http://twitter.com/LeafletJS">Twitter</a></li>
<li><a class="github-link" href="http://github.com/CloudMade/Leaflet">GitHub</a></li>
</ul>
<div class="social-buttons">
<iframe src="http://markdotto.github.com/github-buttons/github-btn.html?user=CloudMade&amp;repo=Leaflet&amp;type=watch&amp;count=true" allowtransparency="true" frameborder="0" scrolling="0" width="113px" height="20px"></iframe>
<iframe src="http://markdotto.github.com/github-buttons/github-btn.html?user=CloudMade&amp;repo=Leaflet&amp;type=fork&amp;count=true" allowtransparency="true" frameborder="0" scrolling="0" width="96px" height="20px"></iframe>
<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://leaflet.cloudmade.com" data-text="Leaflet — an open-source JavaScript library for mobile-friendly interactive maps by @cloudmade" data-via="LeafletJS" data-related="CloudMade">Tweet</a>
<a href="https://twitter.com/LeafletJS" class="twitter-follow-button" data-show-count="true" data-show-screen-name="false">Follow @LeafletJS</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="http://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fleaflet.cloudmade.com&amp;layout=button_count&amp;show_faces=false&amp;width=430&amp;action=like&amp;font=arial&amp;colorscheme=light&amp;height=35" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:87px; height:20px;" allowTransparency="true"></iframe>
<div class="g-plusone" data-size="medium" data-href="http://leaflet.cloudmade.com/"></div>
<script type="text/javascript">
(function() {
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
po.src = 'https://apis.google.com/js/plusone.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
})();
</script>
</div>
<hr />
<div id="toc" class="clearfix">
<div class="span-4 colborder">
<h4>Map</h4>
<ul>
<li><a href="#map-usage">Usage example</a></li>
<li><a href="#map-constructor">Constructor</a></li>
<li><a href="#map-options">Options</a></li>
<li><a href="#map-events">Events</a></li>
</ul>
<h4>Map methods</h4>
<ul>
<li><a href="#map-set-methods">For modifying map state</a></li>
<li><a href="#map-get-methods">For getting map state</a></li>
<li><a href="#map-stuff-methods">For layers and controls</a></li>
<li><a href="#map-conversion-methods">Conversion methods</a></li>
<li><a href="#map-misc-methods">Other methods</a></li>
</ul>
<h4>Map misc.</h4>
<ul>
<li><a href="#map-properties">Properties</a></li>
<li><a href="#map-projections">Projections</a></li>
<li><a href="#map-panes">Panes</a></li>
</ul>
</div>
<div class="span-3">
<h4>UI layers</h4>
<ul>
<li><a href="#marker">Marker</a></li>
<li><a href="#popup">Popup</a></li>
</ul>
<h4>Raster layers</h4>
<ul>
<li><a href="#tilelayer">TileLayer</a></li>
<li><a href="#tilelayer-wms">TileLayer.WMS</a></li>
<li><a href="#tilelayer-canvas">TileLayer.Canvas</a></li>
<li><a href="#imageoverlay">ImageOverlay</a></li>
</ul>
<h4>Vector layers</h4>
<ul>
<li><a href="#path">Path</a></li>
<li><a href="#polyline">Polyline</a></li>
<li><a href="#multipolyline">MultiPolyline</a></li>
<li><a href="#polygon">Polygon</a></li>
<li><a href="#multipolygon">MultiPolygon</a></li>
<li><a href="#rectangle">Rectangle</a></li>
<li><a href="#circle">Circle</a></li>
<li><a href="#circlemarker">CircleMarker</a></li>
</ul>
</div>
<div class="span-3">
<h4>Other layers</h4>
<ul>
<li><a href="#layergroup">LayerGroup</a></li>
<li><a href="#featuregroup">FeatureGroup</a></li>
<li><a href="#geojson">GeoJSON</a></li>
</ul>
<h4>Basic types</h4>
<ul>
<li><a href="#latlng">LatLng</a></li>
<li><a href="#latlngbounds">LatLngBounds</a></li>
<li><a href="#point">Point</a></li>
<li><a href="#bounds">Bounds</a></li>
<li><a href="#icon">Icon</a></li>
</ul>
<h4>Controls</h4>
<ul>
<li><a href="#control-zoom">Zoom</a></li>
<li><a href="#control-attribution">Attribution</a></li>
<li><a href="#control-layers">Layers</a></li>
<li><a class="nodocs" href="#control-scale">Scale</a></li>
</ul>
</div>
<div class="span-3">
<h4>Events</h4>
<ul>
<li><a href="#events">Events methods</a></li>
<li><a href="#event-objects">Event objects</a></li>
</ul>
<h4>Utility</h4>
<ul>
<li><a href="#class">Class</a></li>
<li><a href="#browser">Browser</a></li>
<li><a href="#util">Util</a></li>
<li><a class="nodocs" href="#">Transformation</a></li>
<li><a class="nodocs" href="#">LineUtil</a></li>
<li><a class="nodocs" href="#">PolyUtil</a></li>
</ul>
<h4>DOM utility</h4>
<ul>
<li><a class="nodocs" href="#">DomEvent</a></li>
<li><a href="#domutil">DomUtil</a></li>
<li><a class="nodocs" href="#">Transition</a></li>
<li><a class="nodocs" href="#">Draggable</a></li>
</ul>
</div>
<div class="span-3 last">
<h4>Interfaces</h4>
<ul>
<li><a href="#ihandler">IHandler</a></li>
<li><a class="nodocs" href="#">ILayer</a></li>
<li><a class="nodocs" href="#">IFeature</a></li>
<li><a class="nodocs" href="#">IControl</a></li>
<li><a class="nodocs" href="#">IProjection</a></li>
<li><a class="nodocs" href="#">ICRS</a></li>
</ul>
<h4>Misc</h4>
<ul>
<li><a href="#version">version</a></li>
<li><a href="#noconflict">noConflict</a></li>
</ul>
</div>
</div>
<hr />
<p>This reference reflects Leaflet 0.4. You can find docs for the in-progress master version in <code>reference.html</code> of <a href="https://github.com/CloudMade/Leaflet/zipball/gh-pages-master">gh-pages-master branch</a>.<br />Grayed out things are not yet documented but planned to be.</p>
<h2 id="map-class">L.Map</h2>
<p>The central class of the API &mdash; it is used to create a map on a page and manipulate it.</p>
<h3 id="map-usage">Usage example</h3>
<pre><code class="javascript">// initialize the map on the "map" div with a given center and zoom
var map = L.map('map', {
center: [51.505, -0.09],
zoom: 13
});</code></pre>
<h3 id="map-constructor" class="left">Constructor</h3>
<table>
<tr>
<th>Constructor</th>
<th>Usage</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.Map</b>( <nobr>&lt;HTMLElement|String&gt; <i>id</i>,</nobr> <nobr>&lt;<a href="#map-options">Map options</a>&gt; <i>options?</i> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.Map(<span class="comment">&hellip;</span>)</code><br />
<code>L.map(<span class="comment">&hellip;</span>)</code>
</td>
<td>Instantiates a map object given a div element (or its id) and optionally an object literal with map options described below.</td>
</tr>
</table>
<h3 id="map-options">Options</h3>
<table>
<tr>
<th>Option</th>
<th>Type</th>
<th>Default</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>center</b></code></td>
<td><code><a href="#latlng">LatLng</a></code></td>
<td><code><span class="literal">null</span></code></td>
<td>Initial geographical center of the map.</td>
</tr>
<tr>
<td><code><b>zoom</b></code></td>
<td><code>Number</code></td>
<td><code><span class="literal">null</span></code></td>
<td>Initial map zoom.</td>
</tr>
<tr>
<td><code><b>layers</b></code></td>
<td><code>ILayer[]</code></td>
<td><code>[]</code></td>
<td>Layers that will be added to the map initially.</td>
</tr>
<tr>
<td><code><b>minZoom</b></code></td>
<td><code>Number</code></td>
<td><code><span class="number">0</span></code></td>
<td>Minimum zoom level of the map. Overrides any <code>minZoom</code> set on map layers.</td>
</tr>
<tr>
<td><code><b>maxZoom</b></code></td>
<td><code>Number</code></td>
<td><code><span class="number">18</span></code></td>
<td>Maximum zoom level of the map. This overrides any <code>maxZoom</code> set on map layers.</td>
</tr>
<tr id="map-maxbounds">
<td><code><b>maxBounds</b></code></td>
<td><code><a href="#latlngbounds">LatLngBounds</a></code></td>
<td><code><span class="literal">null</span></code></td>
<td>When this option is set, the map restricts the view to the given geographical bounds, bouncing the user back when he tries to pan outside the view, and also not allowing to zoom out to a view that's larger than the given bounds (depending on the map size). To set the restriction dynamically, use <a href="#map-setmaxbounds">setMaxBounds</a> method</td>
</tr>
<tr>
<td><code><b>crs</b></code></td>
<td><code><a href="#map-projections">CRS</a></code></td>
<td><code>L.CRS.<br/>EPSG3857</code></td>
<td>Coordinate Reference System to use. Don't change this if you're not sure what it means.</td>
</tr>
<tr>
<td><code><b>dragging</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">true</span></code></td>
<td>Whether the map be draggable with mouse/touch or not.</td>
</tr>
<tr>
<td><code><b>touchZoom</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">true</span></code></td>
<td>Whether the map can be zoomed by touch-dragging with two fingers.</td>
</tr>
<tr>
<td><code><b>scrollWheelZoom</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">true</span></code></td>
<td>Whether the map can be zoomed by using the mouse wheel.</td>
</tr>
<tr>
<td><code><b>doubleClickZoom</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">true</span></code></td>
<td>Whether the map can be zoomed in by double clicking on it.</td>
</tr>
<tr>
<td><code><b>boxZoom</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">true</span></code></td>
<td>Whether the map can be zoomed to a rectangular area specified by dragging the mouse while pressing shift.</td>
</tr>
<tr>
<td><code><b>zoomControl</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">true</span></code></td>
<td>Whether the <a href="#control-zoom">zoom control</a> is added to the map by default.</td>
</tr>
<tr>
<td><code><b>attributionControl</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">true</span></code></td>
<td>Whether the <a href="#control-attribution">attribution control</a> is added to the map by default.</td>
</tr>
<tr>
<td><code><b>trackResize</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">true</span></code></td>
<td>Whether the map automatically handles browser window resize to update itself.</td>
</tr>
<tr>
<td><code><b>fadeAnimation</b></code></td>
<td><code>Boolean</code></td>
<td>depends</td>
<td>Whether the tile fade animation is enabled. By default it's enabled in all browsers that support CSS3 Transitions except Android.</td>
</tr>
<tr>
<td><code><b>zoomAnimation</b></code></td>
<td><code>Boolean</code></td>
<td>depends</td>
<td>Whether the tile zoom animation is enabled. By default it's enabled in all browsers that support CSS3 Transitions except Android.</td>
</tr>
<tr>
<td><code><b>markerZoomAnimation</b></code></td>
<td><code>Boolean</code></td>
<td>depends</td>
<td>Whether markers animate their zoom with the zoom animation, if disabled they will disappear for the length of the animation. By default it's enabled in all browsers that support CSS3 Transitions except Android.</td>
</tr>
<tr>
<td><code><b>closePopupOnClick</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">true</span></code></td>
<td>Set it to <code>false</code> if you don't want popups to close when user clicks the map.</td>
</tr>
<tr>
<td><code><b>worldCopyJump</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">true</span></code></td>
<td>With this option enabled, the map tracks when you pan to another "copy" of the world and moves all overlays like markers and vector layers there.</td>
</tr>
</table>
<h3 id="map-events">Events</h3>
<p>You can subscribe to the following events using <a href="#events">these methods</a>.</p>
<table>
<tr>
<th>Event</th>
<th>Data</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>click</b></code></td>
<td><code><a href="#mouse-event">MouseEvent</a></code>
<td>Fired when the user clicks (or taps) the map.</td>
</tr>
<tr>
<td><code><b>dblclick</b></code></td>
<td><code><a href="#mouse-event">MouseEvent</a></code>
<td>Fired when the user double-clicks (or double-taps) the map.</td>
</tr>
<tr>
<td><code><b>mousedown</b></code></td>
<td><code><a href="#mouse-event">MouseEvent</a></code>
<td>Fired when the user pushes the mouse button on the map.</td>
</tr>
<tr>
<td><code><b>mouseenter</b></code></td>
<td><code><a href="#mouse-event">MouseEvent</a></code>
<td>Fired when the mouse enters the map.</td>
</tr>
<tr>
<td><code><b>mouseleave</b></code></td>
<td><code><a href="#mouse-event">MouseEvent</a></code>
<td>Fired when the mouse leaves the map.</td>
</tr>
<tr>
<td><code><b>mousemove</b></code></td>
<td><code><a href="#mouse-event">MouseEvent</a></code>
<td>Fired while the mouse moves over the map.</td>
</tr>
<tr>
<td><code><b>contextmenu</b></code></td>
<td><code><a href="#mouse-event">MouseEvent</a></code>
<td>Fired when the user pushes the right mouse button on the map.</td>
</tr>
<tr>
<td><code><b>preclick</b></code></td>
<td><code><a href="#mouse-event">MouseEvent</a></code>
<td>Fired before mouse click on the map (sometimes useful when you want something to happen on click before any existing click handlers start running).</td>
</tr>
<tr>
<td><code><b>load</b></code></td>
<td><code><a href="#event">Event</a></code>
<td>Fired when the map is initialized (when its center and zoom are set for the first time).</td>
</tr>
<tr>
<td><code><b>viewreset</b></code></td>
<td><code><a href="#event">Event</a></code>
<td>Fired when the map needs to redraw its content (this usually happens on map zoom or load). Very useful for creating custom overlays.</td>
</tr>
<tr>
<td><code><b>movestart</b></code></td>
<td><code><a href="#event">Event</a></code>
<td>Fired when the view of the map starts changing (e.g. user starts dragging the map).</td>
</tr>
<tr>
<td><code><b>move</b></code></td>
<td><code><a href="#event">Event</a></code>
<td>Fired on any movement of the map view.</td>
</tr>
<tr>
<td><code><b>moveend</b></code></td>
<td><code><a href="#event">Event</a></code>
<td>Fired when the view of the map ends changed (e.g. user stopped dragging the map).</td>
</tr>
<tr>
<td><code><b>dragstart</b></code></td>
<td><code><a href="#event">Event</a></code>
<td>Fired when the user starts dragging the map.</td>
</tr>
<tr>
<td><code><b>drag</b></code></td>
<td><code><a href="#event">Event</a></code>
<td>Fired repeatedly while the user drags the map.</td>
</tr>
<tr>
<td><code><b>dragend</b></code></td>
<td><code><a href="#event">Event</a></code>
<td>Fired when the user stops dragging the map.</td>
</tr>
<tr>
<td><code><b>zoomstart</b></code></td>
<td><code><a href="#event">Event</a></code>
<td>Fired when the map zoom is about to change (e.g. before zoom animation).</td>
</tr>
<tr>
<td><code><b>zoomend</b></code></td>
<td><code><a href="#event">Event</a></code>
<td>Fired when the map zoom changes.</td>
</tr>
<tr>
<td><code><b>layeradd</b></code></td>
<td><code><a href="#layer-event">LayerEvent</a></code>
<td>Fired when a new layer is added to the map.</td>
</tr>
<tr>
<td><code><b>layerremove</b></code></td>
<td><code><a href="#layer-event">LayerEvent</a></code>
<td>Fired when some layer is removed from the map.</td>
</tr>
<tr>
<td><code><b>locationfound</b></code></td>
<td><code><a href="#location-event">LocationEvent</a></code>
<td>Fired when geolocation (using <code>locate</code> or <code>locateAndSetView</code> method) went successfully.</td>
</tr>
<tr>
<td><code><b>locationerror</b></code></td>
<td><code><a href="#error-event">ErrorEvent</a></code>
<td>Fired when geolocation (using <code>locate</code> or <code>locateAndSetView</code> method) failed.</td>
</tr>
<tr>
<td><code><b>popupopen</b></code></td>
<td><code><a href="#popup-event">PopupEvent</a></code>
<td>Fired when a popup is opened (using <code>openPopup</code> method).</td>
</tr>
<tr>
<td><code><b>popupclose</b></code></td>
<td><code><a href="#popup-event">PopupEvent</a></code>
<td>Fired when a popup is closed (using <code>closePopup</code> method).</td>
</tr>
</table>
<h3 id="map-set-methods">Methods that modify map state</h3>
<table>
<tr>
<th>Method</th>
<th>Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>setView</b>( <nobr>&lt;<a href="#latlng">LatLng</a>&gt; <i>center</i>,</nobr> <nobr>&lt;Number&gt; <i>zoom</i>,</nobr> <nobr>&lt;Boolean&gt; <i>forceReset?</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Sets the view of the map (geographical center and zoom). If <code>forceReset</code> is set to <code>true</code>, the map is reloaded even if it's eligible for pan or zoom animation (<code>false</code> by default).</td>
</tr>
<tr>
<td><code><b>setZoom</b>( <nobr>&lt;Number&gt; <i>zoom</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Sets the zoom of the map.</td>
</tr>
<tr>
<td><code><b>zoomIn</b>()</code></td>
<td><code>this</code></td>
<td>Increases the zoom of the map by 1.</td>
</tr>
<tr>
<td><code><b>zoomOut</b>()</code></td>
<td><code>this</code></td>
<td>Decreases the zoom of the map by 1.</td>
</tr>
<tr id="map-fitbounds">
<td><code><b>fitBounds</b>( <nobr>&lt;<a href="#latlngbounds">LatLngBounds</a>&gt; <i>bounds</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Sets a map view that contains the given geographical bounds with the maximum zoom level possible.</td>
</tr>
<tr id="map-fitworld">
<td><code><b>fitWorld</b>()</code></td>
<td><code>this</code></td>
<td>Sets a map view that mostly contains the whole world with the maximum zoom level possible.</td>
</tr>
<tr>
<td><code><b>panTo</b>( <nobr>&lt;<a href="#latlng">LatLng</a>&gt; <i>latlng</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Pans the map to a given center. Makes an animated pan if new center is not more than one screen away from the current one.</td>
</tr>
<tr id="map-paninsidebounds">
<td><code><b>panInsideBounds</b>( <nobr>&lt;<a href="#latlngbounds">LatLngBounds</a>&gt; <i>bounds</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Pans the map to the closest view that would lie inside the given bounds (if it's not already).</td>
</tr>
<tr>
<td><code><b>panBy</b>( <nobr>&lt;<a href="#point">Point</a>&gt; <i>point</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Pans the map by a given number of pixels (animated).</td>
</tr>
<tr>
<td><code><b>invalidateSize</b>()</code></td>
<td><code>this</code></td>
<td>Checks if the map container size changed and updates the map if so &mdash; call it after you've changed the map size dynamically.</td>
</tr>
<tr id="map-setmaxbounds">
<td><code><b>setMaxBounds</b>( <nobr>&lt;<a href="#latlngbounds">LatLngBounds</a>&gt; <i>bounds</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Restricts the map view to the given bounds (see <a href="#map-maxbounds">map maxBounds</a> option).</td>
</tr>
<tr>
<td><code><b>locate</b>( <nobr>&lt;<a href="#map-locate-options">Locate options</a>&gt; <i>options?</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Tries to locate the user using Geolocation API, firing <code>locationfound</code> event with location data on success or <code>locationerror</code> event on failure. See <a href="#map-locate-options">Locate options</a> for more details.</td>
</tr>
<tr>
<td><code><b>locateAndSetView</b>( <nobr>&lt;Number&gt; <i>maxZoom?</i>,</nobr> <nobr>&lt;<a href="#map-locate-options">Locate options</a>&gt; <i>options?</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Automatically sets the map view to the user location with respect to detection accuracy (or to the world view if geolocation failed). A shortcut for <code><b>map.locate</b>({setView: true, maxZoom: maxZoom});</code>.</td>
</tr>
<tr>
<td><code><b>stopLocate</b>()</code></td>
<td><code>this</code></td>
<td>Stops watching location previously initiated by <code><b>map.locate</b>({watch: true})</code>.</td>
</tr>
</table>
<h3 id="map-get-methods">Methods that get map state</h3>
<table>
<tr>
<th>Method</th>
<th>Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>getCenter</b>()</code></td>
<td><code><a href="#latlng">LatLng</a></code></td>
<td>Returns the geographical center of the map view.</td>
</tr>
<tr>
<td><code><b>getZoom</b>()</code></td>
<td><code>Number</code></td>
<td>Returns the current zoom of the map view.</td>
</tr>
<tr>
<td><code><b>getMinZoom</b>()</code></td>
<td><code>Number</code></td>
<td>Returns the minimum zoom level of the map.</td>
</tr>
<tr>
<td><code><b>getMaxZoom</b>()</code></td>
<td><code>Number</code></td>
<td>Returns the maximum zoom level of the map.</td>
</tr>
<tr>
<td><code><b>getBounds</b>()</code></td>
<td><code><a href="#latlngbounds">LatLngBounds</a></code></td>
<td>Returns the LatLngBounds of the current map view.</td>
</tr>
<tr>
<td><code><b>getBoundsZoom</b>( <nobr>&lt;<a href="#latlngbounds">LatLngBounds</a>&gt; <i>bounds</i>,</nobr> <nobr>&lt;Boolean&gt; <i>inside?</i> )</nobr></code></td>
<td><code>Number</code></td>
<td>Returns the maximum zoom level on which the given bounds fit to the map view in its entirety. If <code>inside</code> (optional) is set to <code>true</code>, the method instead returns the minimum zoom level on which the map view fits into the given bounds in its entirety.</td>
</tr>
<tr>
<td><code><b>getSize</b>()</code></td>
<td><code><a href="#point">Point</a></code></td>
<td>Returns the current size of the map container.</td>
</tr>
<tr>
<td><code><b>getPixelBounds</b>()</code></td>
<td><code>Bounds</code></td>
<td>Returns the bounds of the current map view in projected pixel coordinates (sometimes useful in layer and overlay implementations).</td>
</tr>
<tr>
<td><code><b>getPixelOrigin</b>()</code></td>
<td><code><a href="#point">Point</a></code></td>
<td>Returns the projected pixel coordinates of the top left point of the map layer (useful in custom layer and overlay implementations).</td>
</tr>
</table>
<h3 id="map-stuff-methods">Methods for layers and controls</h3>
<table>
<tr>
<th>Method</th>
<th>Returns</th>
<th>Description</th>
</tr>
<tr id="map-addlayer">
<td><code><b>addLayer</b>( <nobr>&lt;ILayer&gt; <i>layer</i>,</nobr> <nobr>&lt;Boolean&gt; <i>insertAtTheBottom?</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Adds the given layer to the map. If optional <code>insertAtTheBottom</code> is set to <code>true</code>, the layer is inserted under all others (useful when switching base tile layers).</td>
</tr>
<tr>
<td><code><b>removeLayer</b>( <nobr>&lt;ILayer&gt; <i>layer</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Removes the given layer from the map.</td>
</tr>
<tr>
<td><code><b>hasLayer</b>( <nobr>&lt;ILayer&gt; <i>layer</i> )</nobr></code></td>
<td><code>Boolean</code></td>
<td>Returns <code>true</code> if the given layer is currently added to the map.</td>
</tr>
<tr id="map-openpopup">
<td><code><b>openPopup</b>( <nobr>&lt;<a href="#popup">Popup</a>&gt; <i>popup</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Opens the specified popup while closing the previously opened (to make sure only one is opened at one time for usability).</td>
</tr>
<tr id="map-closepopup">
<td><code><b>closePopup</b>()</code></td>
<td><code>this</code></td>
<td>Closes the popup opened with <a href="#map-openpopup">openPopup</a>.</td>
</tr>
<tr id="map-addcontrol">
<td><code><b>addControl</b>( <nobr>&lt;<a href="#icontrol">IControl</a>&gt; <i>control</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Adds the given control to the map.</td>
</tr>
<tr>
<td><code><b>removeControl</b>( <nobr>&lt;<a href="#icontrol">IControl</a>&gt; <i>control</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Removes the given control from the map.</td>
</tr>
</table>
<h3 id="map-conversion-methods">Conversion methods</h3>
<table>
<tr>
<th class="width200">Method</th>
<th>Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>latLngToLayerPoint</b>( <nobr>&lt;<a href="#latlng">LatLng</a>&gt; <i>latlng</i> )</nobr></code></td>
<td><code><a href="#point">Point</a></code></td>
<td>Returns the map layer point that corresponds to the given geographical coordinates (useful for placing overlays on the map).</td>
</tr>
<tr>
<td><code><b>layerPointToLatLng</b>( <nobr>&lt;<a href="#point">Point</a>&gt; <i>point</i> )</nobr></code></td>
<td><code><a href="#latlng">LatLng</a></code></td>
<td>Returns the geographical coordinates of a given map layer point.</td>
</tr>
<tr>
<td><code><b>containerPointToLayerPoint</b>( <nobr>&lt;<a href="#point">Point</a>&gt; <i>point</i> )</nobr></code></td>
<td><code><a href="#point">Point</a></code></td>
<td>Converts the point relative to the map container to a point relative to the map layer.</td>
</tr>
<tr>
<td><code><b>layerPointToContainerPoint</b>( <nobr>&lt;<a href="#point">Point</a>&gt; <i>point</i> )</nobr></code></td>
<td><code><a href="#point">Point</a></code></td>
<td>Converts the point relative to the map layer to a point relative to the map container.</td>
</tr>
<tr>
<td><code><b>project</b>( <nobr>&lt;<a href="#latlng">LatLng</a>&gt; <i>latlng</i>,</nobr> <nobr>&lt;Number&gt; <i>zoom?</i> )</nobr></code></td>
<td><code><a href="#point">Point</a></code></td>
<td>Projects the given geographical coordinates to absolute pixel coordinates for the given zoom level (current zoom level by default).</td>
</tr>
<tr>
<td><code><b>unproject</b>( <nobr>&lt;<a href="#point">Point</a>&gt; <i>point</i>,</nobr> <nobr>&lt;Number&gt; <i>zoom?</i> )</nobr></code></td>
<td><code><a href="#latlng">LatLng</a></code></td>
<td>Projects the given absolute pixel coordinates to geographical coordinates for the given zoom level (current zoom level by default).</td>
</tr>
<tr>
<td><code><b>mouseEventToContainerPoint</b>( <nobr>&lt;MouseEvent&gt; <i>event</i> )</nobr></code></td>
<td><code><a href="#point">Point</a></code></td>
<td>Returns the pixel coordinates of a mouse click (relative to the top left corner of the map) given its event object.</td>
</tr>
<tr>
<td><code><b>mouseEventToLayerPoint</b>( <nobr>&lt;MouseEvent&gt; <i>event</i> )</nobr></code></td>
<td><code><a href="#point">Point</a></code></td>
<td>Returns the pixel coordinates of a mouse click relative to the map layer given its event object.
</tr>
<tr>
<td><code><b>mouseEventToLatLng</b>( <nobr>&lt;MouseEvent&gt; <i>event</i> )</nobr></code></td>
<td><code><a href="#latlng">LatLng</a></code></td>
<td>Returns the geographical coordinates of the point the mouse clicked on given the click's event object.</td>
</tr>
</table>
<h3 id="map-misc-methods">Other methods</h3>
<table>
<tr>
<th>Method</th>
<th>Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>getContainer</b>()</code></td>
<td><code>HTMLElement</code></td>
<td>Returns the container element of the map.</td>
</tr>
<tr id="map-getpanes">
<td><code><b>getPanes</b>()</code></td>
<td><code><a href="#map-panes">MapPanes</a></code></td>
<td>Returns an object with different map panes (to render overlays in).</td>
</tr>
</table>
<h3 id="map-locate-options">Locate options</h3>
<table>
<tr>
<th>Option</th>
<th>Type</th>
<th>Default</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>watch</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">false</span></code></td>
<td>If <code>true</code>, starts continous watching of location changes (instead of detecting it once) using W3C <code>watchPosition</code> method. You can later stop watching using <code><b>map.stopLocate</b>()</code> method.</td>
</tr>
<tr>
<td><code><b>setView</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">false</span></code></td>
<td>If <code>true</code>, automatically sets the map view to the user location with respect to detection accuracy.</td>
</tr>
<tr>
<td><code><b>maxZoom</b></code></td>
<td><code>Number</code></td>
<td><code><span class="number">Infinity</span></code></td>
<td>The maximum zoom for automatic view setting when using `setView` option.</td>
</tr>
<tr>
<td><code><b>timeout</b></code></td>
<td><code>Number</code></td>
<td><code><span class="number">10000</span></code></td>
<td>Number of millisecond to wait for a response from geolocation before firing a <code>locationerror</code> event.</td>
</tr>
<tr>
<td><code><b>maximumAge</b></code></td>
<td><code>Number</code></td>
<td><code><span class="number">0</span></code></td>
<td>Maximum age of detected location. If less than this amount of milliseconds passed since last geolocation response, <code>locate</code> will return a cached location.</td>
</tr>
<tr>
<td><code><b>enableHighAccuracy</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">false</span></code></td>
<td>Enables high accuracy, see <a href="http://dev.w3.org/geo/api/spec-source.html#high-accuracy">description in the W3C spec</a>.</td>
</tr>
</table>
<h3 id="map-properties">Properties</h3>
<p>Map properties include interaction handlers that allow you to control interaction behavior in runtime, enabling or disabling certain features such as dragging or touch zoom (see <a href="#ihandler">IHandler</a> methods). Example:</p>
<pre><code class="javascript">map.doubleClickZoom.disable();</code></pre>
<p>You can also access default map controls like attribution control through map properties:</p>
<pre><code class="javascript">map.attributionControl.addAttribution("Earthquake data &amp;copy; GeoNames");</code></pre>
<table>
<tr>
<th class="minwidth">Property</th>
<th class="minwidth">Type</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>dragging</b></code></td>
<td><a href="#ihandler"><code>IHandler</code></a></td>
<td>Map dragging handler (by both mouse and touch).</td>
</tr>
<tr>
<td><code><b>touchZoom</b></code></td>
<td><a href="#ihandler"><code>IHandler</code></a></td>
<td>Touch zoom handler.</td>
</tr>
<tr>
<td><code><b>doubleClickZoom</b></code></td>
<td><a href="#ihandler"><code>IHandler</code></a></td>
<td>Double click zoom handler.</td>
</tr>
<tr>
<td><code><b>scrollWheelZoom</b></code></td>
<td><a href="#ihandler"><code>IHandler</code></a></td>
<td>Scroll wheel zoom handler.</td>
</tr>
<tr>
<td><code><b>boxZoom</b></code></td>
<td><a href="#ihandler"><code>IHandler</code></a></td>
<td>Box (shift-drag with mouse) zoom handler.</td>
</tr>
<tr>
<td><code><b>zoomControl</b></code></td>
<td><a href="#control-zoom"><code>Control.Zoom</code></a></td>
<td>Zoom control.</td>
</tr>
<tr>
<td><code><b>attributionControl</b></code></td>
<td><a href="#control-attribution"><code>Control.Attribution</code></a></td>
<td>Attribution control.</td>
</tr>
</table>
<h3 id="map-projections">Projections</h3>
<p>You can specify different CRS for map to use through its <code>crs</code> option. Here's the list of available CRS:</p>
<table>
<tr>
<th>CRS</th>
<th>Data</th>
</tr>
<tr>
<td><code>L.CRS.EPSG3857</code></td>
<td>EPSG:3857 (Spherical Mercator), used by most of commercial map providers (CloudMade, Google, Yahoo, Bing, etc.).</td>
</tr>
<tr>
<td><code>L.CRS.EPSG4326</code></td>
<td>EPSG:4326 (Plate Carree), very popular among GIS enthusiasts.</td>
</tr>
<tr>
<td><code>L.CRS.EPSG3395</code></td>
<td>EPSG:3395 (True Mercator), used by some map providers.</td>
</tr>
</table>
<h3 id="map-panes">Map panes</h3>
<p>An object literal (returned by <a href="#map-getpanes">map.getPanes</a></code>) that contains different map panes that you can use to put your custom overlays in. The difference is mostly in zIndex order that such overlays get.</p>
<table>
<tr>
<th class="width100">Property</th>
<th class="width100">Type</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>mapPane</b></code></td>
<td><code>HTMLElement</code></td>
<td>Pane that contains all other map panes.</td>
</tr>
<tr>
<td><code><b>tilePane</b></code></td>
<td><code>HTMLElement</code></td>
<td>Pane for tile layers.</td>
</tr>
<tr>
<td><code><b>objectsPane</b></code></td>
<td><code>HTMLElement</code></td>
<td>Pane that contains all the panes except tile pane.</td>
</tr>
<tr>
<td><code><b>shadowPane</b></code></td>
<td><code>HTMLElement</code></td>
<td>Pane for overlay shadows (e.g. marker shadows).</td>
</tr>
<tr>
<td><code><b>overlayPane</b></code></td>
<td><code>HTMLElement</code></td>
<td>Pane for overlays like polylines and polygons.</td>
</tr>
<tr>
<td><code><b>markerPane</b></code></td>
<td><code>HTMLElement</code></td>
<td>Pane for marker icons.</td>
</tr>
<tr>
<td><code><b>popupPane</b></code></td>
<td><code>HTMLElement</code></td>
<td>Pane for popups.</td>
</tr>
</table>
<h2 id="marker">L.Marker</h2>
<p>Used to put markers on the map.</p>
<pre><code class="javascript">L.marker([50.5, 30.5]).addTo(map);</code></pre>
<h3>Constructor</h3>
<table>
<tr>
<th class="width200">Constructor</th>
<th>Usage</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.Marker</b>( <nobr>&lt;<a href="#latlng">LatLng</a>&gt; <i>latlng</i>,</nobr> <nobr>&lt;<a href="#marker-options">Marker options</a>&gt; <i>options?</i> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.Marker(<span class="comment">&hellip;</span>)</code><br />
<code>L.marker(<span class="comment">&hellip;</span>)</code>
</td>
<td>Instantiates a Marker object given a geographical point and optionally an options object.</td>
</tr>
</table>
<h3 id="marker-options">Options</h3>
<table>
<tr>
<th>Option</th>
<th>Type</th>
<th>Default</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>icon</b></code></td>
<td><code><a href="#icon">L.Icon</a></code></td>
<td>*</td>
<td>Icon class to use for rendering the marker. See <a href="#icon">Icon documentation</a> for details on how to customize the marker icon. Set to <code>new L.Icon.Default()</code> by default.</td>
</tr>
<tr>
<td><code><b>clickable</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">true</span></code></td>
<td>If <code>false</code>, the marker will not emit mouse events and will act as a part of the underlying map.</td>
</tr>
<tr>
<td><code><b>draggable</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">false</span></code></td>
<td>Whether the marker is draggable with mouse/touch or not.</td>
</tr>
<tr>
<td><code><b>title</b></code></td>
<td><code>String</code></td>
<td><code><span class="string">''</span></code></td>
<td>Text for the browser tooltip that appear on marker hover (no tooltip by default).</td>
</tr>
<tr id="marker-zindexoffset">
<td><code><b>zIndexOffset</b></code></td>
<td><code>Number</code></td>
<td><code><span class="number">0</span></code></td>
<td>By default, marker images zIndex is set automatically based on its latitude. You this option if you want to put the marker on top of all others (or below), specifying a high value like <code>1000</code> (or high negative value, respectively).</td>
</tr>
</table>
<h3>Events</h3>
<p>You can subscribe to the following events using <a href="#events">these methods</a>.</p>
<table>
<tr>
<th class="width100">Event</th>
<th class="width100">Data</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>click</b></code></td>
<td><code><a href="#mouse-event">MouseEvent</a></code>
<td>Fired when the user clicks (or taps) the marker.</td>
</tr>
<tr>
<td><code><b>dblclick</b></code></td>
<td><code><a href="#mouse-event">MouseEvent</a></code>
<td>Fired when the user double-clicks (or double-taps) the marker.</td>
</tr>
<tr>
<td><code><b>mousedown</b></code></td>
<td><code><a href="#mouse-event">MouseEvent</a></code>
<td>Fired when the user pushes the mouse button on the marker.</td>
</tr>
<tr>
<td><code><b>mouseover</b></code></td>
<td><code><a href="#mouse-event">MouseEvent</a></code>
<td>Fired when the mouse enters the marker.</td>
</tr>
<tr>
<td><code><b>mouseout</b></code></td>
<td><code><a href="#mouse-event">MouseEvent</a></code>
<td>Fired when the mouse leaves the marker.</td>
</tr>
<tr>
<td><code><b>dragstart</b></code></td>
<td><code><a href="#event">Event</a></code>
<td>Fired when the user starts dragging the marker.</td>
</tr>
<tr>
<td><code><b>drag</b></code></td>
<td><code><a href="#event">Event</a></code>
<td>Fired repeatedly while the user drags the marker.</td>
</tr>
<tr>
<td><code><b>dragend</b></code></td>
<td><code><a href="#event">Event</a></code>
<td>Fired when the user stops dragging the marker.</td>
</tr>
</table>
<h3>Methods</h3>
<table>
<tr>
<th>Method</th>
<th>Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>getLatLng</b>()</code></td>
<td><code><a href="#latlng">LatLng</a></code></td>
<td>Returns the current geographical position of the marker.</td>
</tr>
<tr>
<td><code><b>setLatLng</b>( <nobr>&lt;<a href="#latlng">LatLng</a>&gt; <i>latlng</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Changes the marker position to the given point.</td>
</tr>
<tr>
<td><code><b>setIcon</b>( <nobr>&lt;<a href="#icon">Icon</a>&gt; <i>icon</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Changes the marker icon.</td>
</tr>
<tr>
<td><code><b>setZIndexOffset</b>( <nobr>&lt;Number&gt; <i>offset</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Changes the <a href="#marker-zindexoffset">zIndex offset</a> of the marker.</td>
</tr>
<tr id="#marker-bindpopup">
<td><code><b>bindPopup</b>( <nobr>&lt;String&gt; <i>htmlContent</i>,</nobr> <nobr>&lt;<a href="#popup-options">Popup options</a>&gt; <i>options?</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Binds a popup with a particular HTML content to a click on this marker. You can also open the bound popup with the Marker <a href="#marker-openpopup">openPopup</a> method.</td>
</tr>
<tr id="#marker-unbindpopup">
<td><code><b>unbindPopup</b>()</code></td>
<td><code>this</code></td>
<td>Unbinds the popup previously bound to the marker with <code>bindPopup</code>.</td>
</tr>
<tr id="#marker-openpopup">
<td><code><b>openPopup</b>()</code></td>
<td><code>this</code></td>
<td>Opens the popup previously bound by the <a href="#marker-bindpopup">bindPopup</a> method.</td>
</tr>
<tr id="#marker-closepopup">
<td><code><b>closePopup</b>()</code></td>
<td><code>this</code></td>
<td>Closes the bound popup of the marker if it's opened.</td>
</tr>
</table>
<h3 id="marker-interaction-handlers">Interaction handlers</h3>
<p>Interaction handlers are properties of a marker instance that allow you to control interaction behavior in runtime, enabling or disabling certain features such as dragging (see <a href="#ihandler">IHandler</a> methods). Example:</p>
<pre><code class="javascript">marker.dragging.disable();</code></pre>
<table>
<tr>
<th class="width100">Property</th>
<th class="width100">Type</th>
<th>Description</th>
</tr>
<tr>
<td>dragging</td>
<td><a href="#ihandler"><code>IHandler</code></a></td>
<td>Marker dragging handler (by both mouse and touch).</td>
</tr>
</table>
<h2 id="popup">L.Popup</h2>
<p>Used to open popups in certain places of the map. Use <a href="#map-openpopup">Map#openPopup</a> to open popups while making sure that only one popup is open at one time (recommended for usability), or use <a href="#map-addlayer">Map#addLayer</a> to open as many as you want.</p>
<h3>Usage example</h3>
<p>If you want to just bind a popup to marker click and then open it, it's really easy:</p>
<pre><code class="javascript">marker.bindPopup(popupContent).openPopup();</code></pre>
<p>Path overlays like polylines also have a <code>bindPopup</code> method. Here's a more complicated way to open a popup on a map:</p>
<pre><code class="javascript">var popup = L.popup()
.setLatLng(latlng)
.setContent('&lt;p&gt;Hello world!&lt;br /&gt;This is a nice popup.&lt;/p&gt;')
.openOn(map);</code></pre>
<h3>Constructor</h3>
<table>
<tr>
<th>Constructor</th>
<th>Usage</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.Popup</b>( <nobr>&lt;<a href="#popup-options">Popup options</a>&gt; <i>options?</i>,</nobr> <nobr>&lt;object&gt; <i>source?</i> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.Popup(<span class="comment">&hellip;</span>)</code><br />
<code>L.popup(<span class="comment">&hellip;</span>)</code>
</td>
<td>Instantiates a Popup object given an optional options object that describes its appearance and location and an optional object that is used to tag the popup with a reference to the source object to which it refers.</td>
</tr>
</table>
<h3 id="popup-options">Options</h3>
<table>
<tr>
<th>Option</th>
<th>Type</th>
<th>Default</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>maxWidth</b></code></td>
<td><code>Number</code></td>
<td><code><span class="number">300</span></code></td>
<td>Max width of the popup.</td>
</tr>
<tr>
<td><code><b>minWidth</b></code></td>
<td><code>Number</code></td>
<td><code><span class="number">50</span></code></td>
<td>Min width of the popup.</td>
</tr>
<tr>
<td><code><b>autoPan</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">true</span></code></td>
<td>Set it to <code>false</code> if you don't want the map to do panning animation to fit the opened popup.</td>
</tr>
<tr>
<td><code><b>closeButton</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">true</span></code></td>
<td>Controls the presense of a close button in the popup.</td>
</tr>
<tr>
<td><code><b>offset</b></code></td>
<td><code><a href="#point">Point</a></code></td>
<td><code><nobr>Point(<span class="number">0</span>, <span class="number">0</span>)</nobr></code></td>
<td>The offset of the popup position. Useful to control the anchor of the popup when opening it on some overlays.</td>
</tr>
<tr>
<td><code><b>autoPanPadding</b></code></td>
<td><code><a href="#point">Point</a></code></td>
<td><code><nobr>Point(<span class="number">5</span>, <span class="number">5</span>)</nobr></code></td>
<td>The margin between the popup and the edges of the map view after autopanning was performed.</td>
</tr>
</table>
<h3>Methods</h3>
<table>
<tr>
<th class="width250">Method</th>
<th class="minwidth">Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>setLatLng</b>( <nobr>&lt;<a href="#latlng">LatLng</a>&gt; <i>latlng</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Sets the geographical point where the popup will open.</td>
</tr>
<tr>
<td><code><b>setContent</b>( <nobr>&lt;String&gt; <i>htmlContent</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Sets the HTML content of the popup.</td>
</tr>
</table>
<h2 id="tilelayer">L.TileLayer</h2>
<p>Used to load and display tile layers on the map, implements <a href="#ilayer">ILayer</a> interface.</p>
<h3>Usage example</h3>
<pre><code class="javascript">L.tileLayer('http://{s}.tile.cloudmade.com/{key}/{styleId}/256/{z}/{x}/{y}.png', {
key: 'API-key',
styleId: 997
}).addTo(map);</code></pre>
<h3>Constructor</h3>
<table>
<tr>
<th class="width250">Constructor</th>
<th>Usage</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.TileLayer</b>( <nobr>&lt;String&gt; <i><a href="#url-template">urlTemplate</a></i>,</nobr> <nobr>&lt;<a href="#tilelayer-options">TileLayer options</a>&gt; <i>options?</i> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.TileLayer(<span class="comment">&hellip;</span>)</code><br />
<code>L.tileLayer(<span class="comment">&hellip;</span>)</code>
</td>
<td>Instantiates a tile layer object given a <a href="#url-template">URL template</a> and optionally an options object.</td>
</tr>
</table>
<h3 id="url-template">URL template</h3>
<p>A string of the following form:</p>
<pre><code class="javascript">'http://{s}.somedomain.com/blabla/{z}/{x}/{y}.png'</code></pre>
<p><code>{s}</code> means one of the randomly chosen subdomains (their range is specified in options; <code>a</code>, <code>b</code> or <code>c</code> by default, can be omitted), <code>{z}</code> &mdash; zoom level, <code>{x}</code> and <code>{y}</code> &mdash; tile coordinates.</p>
<p>You can use custom keys in the template, which will be evaluated from TileLayer options, like this:</p>
<pre><code class="javascript">L.tileLayer('http://{s}.somedomain.com/{foo}/{z}/{x}/{y}.png', {foo: 'bar'});</code></pre>
<h3 id="tilelayer-options">Options</h3>
<table>
<tr>
<th>Option</th>
<th>Type</th>
<th>Default</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>minZoom</b></code></td>
<td><code>Number</code></td>
<td><code><span class="number">0</span></code></td>
<td>Minimum zoom number.</td>
</tr>
<tr>
<td><code><b>maxZoom</b></code></td>
<td><code>Number</code></td>
<td><code><span class="number">18</span></code></td>
<td>Maximum zoom number.</td>
</tr>
<tr>
<td><code><b>tileSize</b></code></td>
<td><code>Number</code></td>
<td><code><span class="number">256</span></code></td>
<td>Tile size (width and height in pixels, assuming tiles are square).</td>
</tr>
<tr>
<td><code><b>subdomains</b></code></td>
<td><code>String</code> or <code>String[]</code></td>
<td><code><span class="string">'abc'</span></code></td>
<td>Subdomains of the tile service. Can be passed in the form of one string (where each letter is a subdomain name) or an array of strings.</td>
</tr>
<tr>
<td><code><b>errorTileUrl</b></code></td>
<td><code>String</code></td>
<td><code><span class="string">''</span></code></td>
<td>URL to the tile image to show in place of the tile that failed to load.</td>
</tr>
<tr>
<td><code><b>attribution</b></code></td>
<td><code>String</code></td>
<td><code><span class="string">''</span></code></td>
<td>e.g. "&copy; CloudMade" &mdash; the string used by the attribution control, describes the layer data.</td>
</tr>
<tr>
<td><code><b>tms</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">false</span></code></td>
<td>If <code>true</code>, inverses Y axis numbering for tiles (turn this on for TMS services).</td>
</tr>
<tr>
<td><code><b>continuousWorld</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">false</span></code></td>
<td>If set to <code>true</code>, the tile coordinates won't be wrapped by world width (-180 to 180 longitude) or clamped to lie within world height (-90 to 90). Use this if you use Leaflet for maps that don't reflect the real world (e.g. game, indoor or photo maps).</td>
</tr>
<tr>
<td><code><b>noWrap</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">false</span></code></td>
<td>If set to <code>true</code>, the tiles just won't load outside the world width (-180 to 180 longitude) instead of repeating.</td>
</tr>
<tr>
<td><code><b>zoomOffset</b></code></td>
<td><code>Number</code></td>
<td><code><span class="number">0</span></code></td>
<td>The zoom number used in tile URLs will be offset with this value.</td>
</tr>
<tr>
<td><code><b>zoomReverse</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">false</span></code></td>
<td>If set to <code>true</code>, the zoom number used in tile URLs will be reversed (<code>maxZoom - zoom</code> instead of <code>zoom</code>)</td>
</tr>
<tr>
<td><code><b>opacity</b></code></td>
<td><code>Number</code></td>
<td><code><span class="number">1.0</span></code></td>
<td>The opacity of the tile layer.</td>
</tr>
<tr>
<td><code><b>unloadInvisibleTiles</b></code></td>
<td><code>Boolean</code></td>
<td>depends</td>
<td>If <code>true</code>, all the tiles that are not visible after panning are removed (for better performance). <code>true</code> by default on mobile WebKit, otherwise <code>false</code>.</td>
</tr>
<tr>
<td><code><b>updateWhenIdle</b></code></td>
<td><code>Boolean</code></td>
<td>depends</td>
<td>If <code>false</code>, new tiles are loaded during panning, otherwise only after it (for better performance). <code>true</code> by default on mobile WebKit, otherwise <code>false</code>.</td>
</tr>
<tr>
<td><code><b>reuseTiles</b></code></td>
<td><code><code>Boolean</code></code></td>
<td><code><span class="literal">false</span></code></td>
<td>If <code>true</code>, all the tiles that are not visible after panning are placed in a reuse queue from which they will be fetched when new tiles become visible (as opposed to dynamically creating new ones). This will in theory keep memory usage low and eliminate the need for reserving new memory whenever a new tile is needed.</td>
</tr>
</table>
<h3>Methods</h3>
<table>
<tr>
<th>Method</th>
<th>Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>setOpacity</b>( <nobr>&lt;Number&gt; <i>opacity</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Changes the opacity of the tile layer.</td>
</tr>
<tr>
<td><code><b>redraw</b>()</code></td>
<td>-</td>
<td>Calling <code>redraw</code> will cause the <code>drawTile</code> method to be called for all tiles. May be used for updating dynamic content drawn on the Canvas</td>
</tr>
</table>
<h2 id="tilelayer-wms">L.TileLayer.WMS</h2>
<p>Used to display WMS services as tile layers on the map. Extends <a href="#tilelayer">TileLayer</a>, implements <a href="#ilayer">ILayer</a> interface.</p>
<h3>Usage example</h3>
<pre><code class="javascript">var nexrad = L.tileLayer.wms("http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi", {
layers: 'nexrad-n0r-900913',
format: 'image/png',
transparent: true,
attribution: "Weather data &copy; 2012 IEM Nexrad"
});</code></pre>
<h3>Constructor</h3>
<table>
<tr>
<th class="width250">Constructor</th>
<th>Usage</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.TileLayer.WMS</b>( <nobr>&lt;String&gt; <i>baseUrl</i></nobr>, <nobr>&lt;<a href="#tilelayer-wms-options">TileLayer.WMS options</a>&gt; <i>options</i> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.TileLayer.WMS(<span class="comment">&hellip;</span>)</code><br />
<code>L.tileLayer.wms(<span class="comment">&hellip;</span>)</code>
</td>
<td>Instantiates a WMS tile layer object given a base URL of the WMS service and a WMS parameters/options object.</td>
</tr>
</table>
<h3 id="tilelayer-wms-options">Options</h3>
<p>Includes all <a href="#tilelayer-options">TileLayer options</a> and additionally:</p>
<table>
<tr>
<th class="width100">Option</th>
<th class="width100">Type</th>
<th class="width100">Default</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>layers</b></code></td>
<td><code>String</code></td>
<td><code><span class="string">''</span></code></td>
<td><b>(required)</b> Comma-separated list of WMS layers to show.</td>
</tr>
<tr>
<td><code><b>styles</b></code></td>
<td><code>String</code></td>
<td><code><span class="string">''</span></code></td>
<td>Comma-separated list of WMS styles.</td>
</tr>
<tr>
<td><code><b>format</b></code></td>
<td><code>String</code></td>
<td><code><span class="string">'image/jpeg'</span></code></td>
<td>WMS image format (use <code><span class="string">'image/png'</span></code> for layers with transparency).</td>
</tr>
<tr>
<td><code><b>transparent</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">false</span></code></td>
<td>If <code>true</code>, the WMS service will return images with transparency.</td>
</tr>
<tr>
<td><code><b>version</b></code></td>
<td><code>String</code></td>
<td><code><span class="string">'1.1.1'</span></code></td>
<td>Version of the WMS service to use.</td>
</tr>
</table>
<h2 id="tilelayer-canvas">L.TileLayer.Canvas</h2>
<p>Used to create Canvas-based tile layers where tiles get drawn on the browser side. Extends <a href="#tilelayer">TileLayer</a>, implements <a href="#ilayer">ILayer</a> interface.</p>
<h3>Usage example</h3>
<pre><code class="javascript">var canvasTiles = L.tileLayer.canvas();
canvasTiles.drawTile = function(canvas, tilePoint, zoom) {
var ctx = canvas.getContext('2d');
// draw something on the tile canvas
}</code></pre>
<h3>Constructor</h3>
<table>
<tr>
<th class="width200">Constructor</th>
<th>Usage</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.TileLayer.Canvas</b>( <nobr>&lt;<a href="#tilelayer-options">TileLayer options</a>&gt; <i>options?</i> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.TileLayer.Canvas(<span class="comment">&hellip;</span>)</code><br />
<code>L.tileLayer.canvas(<span class="comment">&hellip;</span>)</code>
</td>
<td>Instantiates a Canvas tile layer object given an options object (optionally).</td>
</tr>
</table>
<h3>Methods</h3>
<table>
<tr>
<th class="width200">Method</th>
<th>Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>drawTile</b>( <nobr>&lt;HTMLCanvasElement&gt; <i>canvas</i></nobr>, <nobr>&lt;<a href="#point">Point</a>&gt; <i>tilePoint</i></nobr>, <nobr>&lt;Number&gt; <i>zoom</i> )</nobr></code></td>
<td><code>this</code></td>
<td>You need to define this method after creating the instance to draw tiles; <code>canvas</code> is the actual canvas tile on which you can draw, <code>tilePoint</code> represents the tile numbers, and <code>zoom</code> is the current zoom.</td>
</tr>
<tr>
<td><code><b>redraw</b>()</code></td>
<td>-</td>
<td>Calling <code>redraw</code> will cause the <code>drawTile</code> method to be called for all tiles. May be used for updating dynamic content drawn on the Canvas</td>
</tr>
</table>
<h2 id="imageoverlay">L.ImageOverlay</h2>
<p>Used to load and display a single image over specific bounds of the map, implements <a href="#ilayer">ILayer</a> interface.</p>
<h3>Usage example</h3>
<pre><code class="javascript">var imageUrl = 'http://www.lib.utexas.edu/maps/historical/newark_nj_1922.jpg',
imageBounds = [[40.712216, -74.22655], [40.773941, -74.12544]];
L.imageOverlay(imageUrl, imageBounds).addTo(map);</code></pre>
<h3>Constructor</h3>
<table>
<tr>
<th class="width250">Constructor</th>
<th>Usage</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.ImageOverlay</b>( <nobr>&lt;String&gt; <i>imageUrl</i></nobr>, <nobr>&lt;<a href="#latlngbounds">LatLngBounds</a>&gt; <i>bounds</i><!--</nobr>, <nobr>&lt;<a href="#imageoverlay-options">ImageOverlay options</a>&gt; <i>options?</i>--> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.ImageOverlay(<span class="comment">&hellip;</span>)</code><br />
<code>L.imageOverlay(<span class="comment">&hellip;</span>)</code>
</td>
<td>Instantiates an image overlay object given the URL of the image and the geographical bounds it is tied to.</td>
</tr>
</table>
<h2 id="path">L.Path</h2>
<p>An abstract class that contains options and constants shared between vector overlays (Polygon, Polyline, Circle). Do not use it directly.
<h3 id="path-options">Options</h3>
<table>
<tr>
<th>Option</th>
<th>Type</th>
<th class="minwidth">Default</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>stroke</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">true</span></code></td>
<td>Whether to draw stroke along the path. Set it to <code>false</code> to disable borders on polygons or circles.</td>
</tr>
<tr>
<td><code><b>color</b></code></td>
<td><code>String</code></td>
<td><code><span class="string">'#03f'</span></code></td>
<td>Stroke color.</td>
</tr>
<tr>
<td><code><b>weight</b></code></td>
<td><code>Number</code></td>
<td><code><span class="number">5</span></code></td>
<td>Stroke width in pixels.</td>
</tr>
<tr>
<td><code><b>opacity</b></code></td>
<td><code>Number</code></td>
<td><code><span class="number">0.5</span></code></td>
<td>Stroke opacity.</td>
</tr>
<tr>
<td><code><b>fill</b></code></td>
<td><code>Boolean</code></td>
<td>depends</td>
<td>Whether to fill the path with color. Set it to <code>false</code> to disable filling on polygons or circles.</td>
</tr>
<tr>
<td><code><b>fillColor</b></code></td>
<td><code>String</code></td>
<td>same as color</td>
<td>Fill color.</td>
</tr>
<tr>
<td><code><b>fillOpacity</b></code></td>
<td><code>Number</code></td>
<td><code><span class="number">0.2</span></code></td>
<td>Fill opacity.</td>
</tr>
<tr>
<td><code><b>clickable</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">true</span></code></td>
<td>If <code>false</code>, the vector will not emit mouse events and will act as a part of the underlying map.</td>
</tr>
</table>
<h3>Events</h3>
<p>You can subscribe to the following events using <a href="#events">these methods</a>.</p>
<table>
<tr>
<th class="width100">Event</th>
<th class="width100">Data</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>click</b></code></td>
<td><code><a href="#mouse-event">MouseEvent</a></code>
<td>Fired when the user clicks (or taps) the object.</td>
</tr>
<tr>
<td><code><b>dblclick</b></code></td>
<td><code><a href="#mouse-event">MouseEvent</a></code>
<td>Fired when the user double-clicks (or double-taps) the object.</td>
</tr>
<tr>
<td><code><b>mousedown</b></code></td>
<td><code><a href="#mouse-event">MouseEvent</a></code>
<td>Fired when the user pushes the mouse button on the object.</td>
</tr>
<tr>
<td><code><b>mouseover</b></code></td>
<td><code><a href="#mouse-event">MouseEvent</a></code>
<td>Fired when the mouse enters the object.</td>
</tr>
<tr>
<td><code><b>mouseout</b></code></td>
<td><code><a href="#mouse-event">MouseEvent</a></code>
<td>Fired when the mouse leaves the object.</td>
</tr>
</table>
<h3>Static properties</h3>
<table>
<tr>
<th>Constant</th>
<th>Type</th>
<th>Value</th>
<th>Description</th>
</tr>
<tr>
<td><code>SVG</code></td>
<td><code>Boolean</code></td>
<td>depends</td>
<td>True if SVG is used for vector rendering (true for most modern browsers).</td>
</tr>
<tr>
<td><code>VML</code></td>
<td><code>Boolean</code></td>
<td>depends</td>
<td>True if VML is used for vector rendering (IE 6-8).</td>
</tr>
<tr>
<td><code>CANVAS</code></td>
<td><code>Boolean</code></td>
<td>depends</td>
<td>True if Canvas is used for vector rendering (Android 2). You can also force this by setting global variable <code>L_PREFER_CANVAS</code> to <code>true</code> <em>before</em> the Leaflet include on your page — sometimes it can increase performance dramatically when rendering thousands of circle markers, but currently suffers from a bug that causes removing such layers to be extremely slow.</td>
</tr>
<tr>
<td><code>CLIP_PADDING</code></td>
<td><code>Number</code></td>
<td><nobr><code><span class="number">0.5</span></code> for SVG</nobr><br /><nobr><code><span class="number">0.02</span></code> for VML</nobr></td>
<td>How much to extend the clip area around the map view (relative to its size, e.g. 0.5 is half the screen in each direction). Smaller values mean that you will see clipped ends of paths while you're dragging the map, and bigger values decrease drawing performance.</td>
</tr>
</table>
<h3 id="path-methods">Methods</h3>
<table>
<tr>
<th class="width250">Method</th>
<th>Returns</th>
<th>Description</th>
</tr>
<tr id="path-bindpopup">
<td><code><b>bindPopup</b>( <nobr>&lt;String&gt; <i>htmlContent</i></nobr>, <nobr>&lt;<a href="#popup-options">Popup options</a>&gt; <i>options?</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Binds a popup with a particular HTML content to a click on this path.</td>
</tr>
<tr id="path-setstyle">
<td><code><b>setStyle</b>( <nobr>&lt;<a href="#path-options">Path options</a>&gt; <i>object</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Changes the appearance of a Path based on the options in the <a href="#path-options">Path options</a> object.</td>
</tr>
<tr id="path-getbounds">
<td><code><b>getBounds</b>()</code></td>
<td><code><a href="#latlngbounds">LatLngBounds</a></code></td>
<td>Returns the LatLngBounds of the path.</td>
</tr>
</table>
<h2 id="polyline">L.Polyline</h2>
<p>A class for drawing polyline overlays on a map. Extends <a href="#path">Path</a>. Use <a href="#map-addlayer">Map#addLayer</a> to add it to the map.</p>
<h3>Usage example</h3>
<pre><code class="javascript">// create a red polyline from an arrays of LatLng points
var polyline = L.polyline(latlngs, {color: 'red'}).addTo(map);
// zoom the map to the polyline
map.fitBounds(polyline.getBounds());</code></pre>
<h3>Constructor</h3>
<table>
<tr>
<th class="width250">Constructor</th>
<th>Usage</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.Polyline</b>( <nobr>&lt;<a href="#latlng">LatLng</a>[]&gt; <i>latlngs</i></nobr>, <nobr>&lt;<a href="#polyline-options">Polyline options</a>&gt; <i>options?</i> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.Polyline(<span class="comment">&hellip;</span>)</code><br />
<code>L.polyline(<span class="comment">&hellip;</span>)</code>
</td>
<td>Instantiates a polyline object given an array of geographical points and optionally an options object.</td>
</tr>
</table>
<h3 id="polyline-options">Options</h3>
<p>You can use <a href="#path-options">Path options</a> and additionally the following options:</p>
<table>
<tr>
<th>Option</th>
<th>Type</th>
<th>Default</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>smoothFactor</b></code></td>
<td><code>Number</code></td>
<td><code><span class="number">1.0</span></code></td>
<td>How much to simplify the polyline on each zoom level. More means better performance and smoother look, and less means more accurate representation.</td>
</tr>
<tr>
<td><code><b>noClip</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">false</span></code></td>
<td>Disabled polyline clipping.</td>
</tr>
</table>
<h3>Methods</h3>
<p>You can use <a href="#path-methods">Path methods</a> and additionally the following methods:</p>
<table>
<tr>
<th class="width250">Method</th>
<th>Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>addLatLng</b>( <nobr>&lt;<a href="#latlng">LatLng</a>&gt; <i>latlng</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Adds a given point to the polyline.</td>
</tr>
<tr>
<td><code><b>setLatLngs</b>( <nobr>&lt;<a href="#latlng">LatLng</a>[]&gt; <i>latlngs</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Replaces all the points in the polyline with the given array of geographical points.</td>
</tr>
<tr>
<td><code><b>getLatLngs</b>()</code></td>
<td><code><a href="#latlng">LatLng</a>[]</code></td>
<td>Returns an array of the points in the path.</td>
</tr>
<tr>
<td><code><b>spliceLatLngs</b>( <nobr>&lt;Number&gt; <i>index</i></nobr>, <nobr>&lt;Number&gt; <i>pointsToRemove</i></nobr>, <nobr>&lt;<a href="#latlng">LatLng</a>&gt; <i>latlng?</i>, &hellip; )</nobr></code></td>
<td><code><a href="#latlng">LatLng</a>[]</code></td>
<td>Allows adding, removing or replacing points in the polyline. Syntax is the same as in <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice">Array#splice</a>. Returns the array of removed points (if any).</td>
</tr>
<tr id="#path-getbounds">
<td><code><b>getBounds</b>()</code></td>
<td><code><a href="#latlngbounds">LatLngBounds</a></code></td>
<td>Returns the LatLngBounds of the polyline.</td>
</tr>
</table>
<h2 id="multipolyline">L.MultiPolyline</h2>
<p>Extends <a href="#featuregroup">FeatureGroup</a> to allow creating multi-polylines (single layer that consists of several polylines that share styling/popup).</p>
<h3>Constructor</h3>
<table>
<tr>
<th>Constructor</th>
<th>Usage</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.MultiPolyline</b>( <nobr>&lt;<a href="#latlng">LatLng</a>[][]&gt; <i>latlngs</i></nobr>, <nobr>&lt;<a href="#polyline-options">Polyline options</a>&gt; <i>options?</i> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.MultiPolyline(<span class="comment">&hellip;</span>)</code><br />
<code>L.multiPolyline(<span class="comment">&hellip;</span>)</code>
</td>
<td>Instantiates a multi-polyline object given an array of arrays of geographical points (one for each individual polyline) and optionally an options object.</td>
</tr>
</table>
<h2 id="polygon">L.Polygon</h2>
<p>A class for drawing polygon overlays on a map. Extends <a href="#polyline">Polyline</a>. Use <a href="#map-addlayer">Map#addLayer</a> to add it to the map.</p>
<p>Note that points you pass when creating a polygon shouldn't have an additional last point equal to the first one &mdash; it's better to filter out such points.</p>
<h3>Constructor</h3>
<table>
<tr>
<th>Constructor</th>
<th>Usage</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.Polygon</b>( <nobr>&lt;<a href="#latlng">LatLng</a>[]&gt; <i>latlngs</i></nobr>, <nobr>&lt;<a href="#polyline-options">Polyline options</a>&gt; <i>options?</i> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.Polygon(<span class="comment">&hellip;</span>)</code><br />
<code>L.polygon(<span class="comment">&hellip;</span>)</code>
</td>
<td>Instantiates a polygon object given an array of geographical points and optionally an options object (the same as for Polyline). You can also create a polygon with holes by passing an array of arrays of latlngs, with the first latlngs array representing the exterior ring while the remaining represent the holes inside.</td>
</tr>
</table>
<p>Polygon the same options and methods as Polyline.</p>
<h2 id="multipolygon">L.MultiPolygon</h2>
<p>Extends <a href="#featuregroup">FeatureGroup</a> to allow creating multi-polygons (single layer that consists of several polygons that share styling/popup).</p>
<h3>Constructor</h3>
<table>
<tr>
<th>Constructor</th>
<th>Usage</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.MultiPolygon</b>( <nobr>&lt;<a href="#latlng">LatLng</a>[][]&gt; <i>latlngs</i></nobr>, <nobr>&lt;<a href="#polyline-options">Polyline options</a>&gt; <i>options?</i> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.MultiPolygon(<span class="comment">&hellip;</span>)</code><br />
<code>L.multiPolygon(<span class="comment">&hellip;</span>)</code>
</td>
<td>Instantiates a multi-polyline object given an array of latlngs arrays (one for each individual polygon) and optionally an options object (the same as for MultiPolyline).</td>
</tr>
</table>
<h2 id="rectangle">L.Rectangle</h2>
<p>A class for drawing rectangle overlays on a map. Extends <a href="#polygon">Polygon</a>. Use <a href="#map-addlayer">Map#addLayer</a> to add it to the map.</p>
<h3>Usage example</h3>
<pre><code class="javascript">// define rectangle geographical bounds
var bounds = [[54.559322, -5.767822], [56.1210604, -3.021240]];
// create an orange rectangle
L.rectangle(bounds, {color: "#ff7800", weight: 1}).addTo(map);
// zoom the map to the rectangle bounds
map.fitBounds(bounds);</code></pre>
<h3>Constructor</h3>
<table>
<tr>
<th class="width250">Constructor</th>
<th>Usage</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.Rectangle</b>( <nobr>&lt;<a href="#latlngbounds">LatLngBounds</a>&gt; <i>bounds</i></nobr>, <nobr>&lt;<a href="#path-options">Path options</a>&gt; <i>options?</i> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.Rectangle(<span class="comment">&hellip;</span>)</code><br />
<code>L.rectangle(<span class="comment">&hellip;</span>)</code>
</td>
<td>Instantiates a rectangle object with the given geographical bounds and optionally an options object.</td>
</tr>
</table>
<h3>Methods</h3>
<p>You can use <a href="#path-methods">Path methods</a> and additionally the following methods:</p>
<table>
<tr>
<th class="width250">Method</th>
<th>Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>setBounds</b>( <nobr>&lt;<a href="#latlngbounds">LatLngBounds</a>&gt; <i>bounds</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Redraws the rectangle with the passed bounds.</td>
</tr>
</table>
<h2 id="circle">L.Circle</h2>
<p>A class for drawing circle overlays on a map. Extends <a href="#path">Path</a>. Use <a href="#map-addlayer">Map#addLayer</a> to add it to the map.</p>
<pre><code class="javascript">L.circle([50.5, 30.5], 200).addTo(map);</pre></code>
<h3>Constructor</h3>
<table>
<tr>
<th>Constructor</th>
<th>Usage</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.Circle</b>( <nobr>&lt;<a href="#latlng">LatLng</a>&gt; <i>latlng</i></nobr>, <nobr>&lt;Number&gt; <i>radius</i></nobr>, <nobr>&lt;<a href="#path-options">Path options</a>&gt; <i>options?</i> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.Circle(<span class="comment">&hellip;</span>)</code><br />
<code>L.circle(<span class="comment">&hellip;</span>)</code>
</td>
<td>Instantiates a circle object given a geographical point, a radius in meters and optionally an options object.</td>
</tr>
</table>
<h3>Methods</h3>
<table>
<tr>
<th class="width200">Method</th>
<th class="minwidth">Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>getLatLng</b>()</code></td>
<td><code><a href="#latlng">LatLng</a></code></td>
<td>Returns the current geographical position of the circle.</td>
</tr>
<tr>
<td><code><b>getRadius</b>()</code></td>
<td><code>Number</code></td>
<td>Returns the current radius of a circle. Units are in meters.</td>
</tr>
<tr>
<td><code><b>setLatLng</b>( <nobr>&lt;<a href="#latlng">LatLng</a>&gt; <i>latlng</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Sets the position of a circle to a new location.</td>
</tr>
<tr>
<td><code><b>setRadius</b>( <nobr>&lt;Number&gt; <i>radius</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Sets the radius of a circle. Units are in meters.</td>
</tr>
</table>
<h2 id="circlemarker">L.CircleMarker</h2>
<p>A circle of a fixed size with radius specified in pixels. Extends <a href="#circle">Circle</a>. Use <a href="#map-addlayer">Map#addLayer</a> to add it to the map.</p>
<h3>Constructor</h3>
<table>
<tr>
<th class="width200">Constructor</th>
<th>Usage</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.CircleMarker</b>( <nobr>&lt;<a href="#latlng">LatLng</a>&gt; <i>latlng</i></nobr>, <nobr>&lt;<a href="#path-options">Path options</a>&gt; <i>options?</i> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.CircleMarker(<span class="comment">&hellip;</span>)</code><br />
<code>L.circleMarker(<span class="comment">&hellip;</span>)</code>
</td>
<td>Instantiates a circle marker given a geographical point and optionally an options object. The default radius is 10 and can be altered by passing a "radius" member in the path options object.</td>
</tr>
</table>
<h3>Methods</h3>
<table>
<tr>
<th class="width200">Method</th>
<th class="minwidth">Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>setLatLng</b>( <nobr>&lt;<a href="#latlng">LatLng</a>&gt; <i>latlng</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Sets the position of a circle marker to a new location.</td>
</tr>
<tr>
<td><code><b>setRadius</b>( <nobr>&lt;Number&gt; <i>radius</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Sets the radius of a circle marker. Units are in pixels.</td>
</tr>
</table>
<h2 id="layergroup">L.LayerGroup</h2>
<p>Used to group several layers and handle them as one. If you add it to the map, any layers added or removed from the group will be added/removed on the map as well. Implements <a href="#ilayer">ILayer</a> interface.</p>
<pre><code class="javascript">L.layerGroup([marker1, marker2])
.addLayer(polyline)
.addTo(map);</code></pre>
<h3>Constructor</h3>
<table>
<tr>
<th class="width250">Constructor</th>
<th>Usage</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.LayerGroup</b>( <nobr>&lt;<a href="#ilayer">ILayer</a>[]&gt; <i>layers?</i> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.LayerGroup(<span class="comment">&hellip;</span>)</code><br />
<code>L.layerGroup(<span class="comment">&hellip;</span>)</code>
</td>
<td>Create a layer group, optionally given an initial set of layers.</td>
</tr>
</table>
<h3>Methods</h3>
<table>
<tr>
<th class="width200">Method</th>
<th class="minwidth">Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>addLayer</b>( <nobr>&lt;<a href="#ilayer">ILayer</a>&gt; <i>layer</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Adds a given layer to the group.</td>
</tr>
<tr>
<td><code><b>removeLayer</b>( <nobr>&lt;<a href="#ilayer">ILayer</a>&gt; <i>layer</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Removes a given layer from the group.</td>
</tr>
<tr>
<td><code><b>clearLayers</b>()</code></td>
<td><code>this</code></td>
<td>Removes all the layers from the group.</td>
</tr>
</table>
<h2 id="featuregroup">L.FeatureGroup</h2>
<p>Extended <a href="#layergroup">LayerGroup</a> that also has mouse events (propagated from members of the group) and a shared bindPopup method. Implements <a href="#ilayer">IFeature</a> interface.</p>
<pre><code class="javascript">L.featureGroup([marker1, marker2, polyline])
.bindPopup('Hello world!')
.on('click', function() { alert('Clicked on a group!'); })
.addTo(map);</code></pre>
<h3>Constructor</h3>
<table>
<tr>
<th class="width300">Constructor</th>
<th>Usage</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.FeatureGroup</b>( <nobr>&lt;<a href="#ilayer">IFeature</a>[]&gt; <i>layers?</i> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.FeatureGroup(<span class="comment">&hellip;</span>)</code><br />
<code>L.featureGroup(<span class="comment">&hellip;</span>)</code>
</td>
<td>Create a layer group, optionally given an initial set of layers.</td>
</tr>
</table>
<h3>Methods</h3>
<p>Has all <a href="#layergroup">LayerGroup</a> methods and additionally:</p>
<table>
<tr>
<th class="width250">Method</th>
<th>Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>bindPopup</b>( <nobr>&lt;String&gt; <i>htmlContent</i></nobr>, <nobr>&lt;<a href="#popup-options">Popup options</a>&gt; <i>options?</i></nobr> )</code></td>
<td><code>this</code></td>
<td>Binds a popup with a particular HTML content to a click on any layer from the group.</td>
</tr>
<tr>
<td><code><b>getBounds</b>()</code></td>
<td><code><a href="#latlngbounds">LatLngBounds</a></code></td>
<td>Returns the LatLngBounds of the Feature Group.</td>
</tr>
</table>
<h3>Events</h3>
<p>You can subscribe to the following events using <a href="#events">these methods</a>.</p>
<table>
<tr>
<th class="width100">Event</th>
<th class="width100">Data</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>click</b></code></td>
<td><code><a href="#mouse-event">MouseEvent</a></code>
<td>Fired when the user clicks (or taps) the group.</td>
</tr>
<tr>
<td><code><b>dblclick</b></code></td>
<td><code><a href="#mouse-event">MouseEvent</a></code>
<td>Fired when the user double-clicks (or double-taps) the group.</td>
</tr>
<tr>
<td><code><b>mouseover</b></code></td>
<td><code><a href="#mouse-event">MouseEvent</a></code>
<td>Fired when the mouse enters the group.</td>
</tr>
<tr>
<td><code><b>mouseout</b></code></td>
<td><code><a href="#mouse-event">MouseEvent</a></code>
<td>Fired when the mouse leaves the group.</td>
</tr>
</table>
<h2 id="geojson">L.GeoJSON</h2>
<p>Represents a <a href="http://geojson.org/geojson-spec.html">GeoJSON</a> layer. Allows you to parse GeoJSON data and display it on the map. Extends <a href="#featuregroup">FeatureGroup</a>.</p>
<pre><code class="javascript">L.geoJson(data, {
style: function (feature) {
return {color: feature.properties.color};
},
onEachFeature: function (feature, layer) {
layer.bindPopup(feature.properties.description);
}
}).addTo(map);</code></pre>
<h3>Constructor</h3>
<table>
<tr>
<th>Constructor</th>
<th>Usage</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.GeoJSON</b>( <nobr>&lt;Object&gt; <i>geojson?</i></nobr>, <nobr>&lt;<a href="#geojson-options">GeoJSON options</a>&gt; <i>options?</i> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.GeoJSON(<span class="comment">&hellip;</span>)</code><br />
<code>L.geoJson(<span class="comment">&hellip;</span>)</code>
</td>
<td>Creates a GeoJSON layer. Optionally accepts an object in <a href="http://geojson.org/geojson-spec.html">GeoJSON format</a> to display on the map (you can alternatively add it later with <code>addData</code> method) and an options object.</td>
</tr>
</table>
<h3 id="geojson-options">Options</h3>
<table>
<tr>
<th>Option</th>
<th>Description</th>
</tr>
<tr id="geojson-pointtolayer">
<td><code><b>pointToLayer</b>( <nobr>&lt;GeoJSON&gt; <i>featureData</i></nobr>, <nobr>&lt;<a href="#latlng">LatLng</a>&gt; <i>latlng</i> )</nobr></code></td>
<td>Function that will be used for creating layers for GeoJSON points (if not specified, simple markers will be created).</td>
</tr>
<tr id="geojson-style">
<td><code><b>style</b>( <nobr>&lt;GeoJSON&gt; <i>featureData</i> )</nobr></code></td>
<td>Function that will be used to get style options for vector layers created for GeoJSON features.</td>
</tr>
<tr id="geojson-oneachfeature">
<td><code><b>onEachFeature</b>( <nobr>&lt;GeoJSON&gt; <i>featureData</i></nobr>, <nobr>&lt;<a href="#ilayer">ILayer</a>&gt; <i>layer</i> )</nobr></code></td>
<td>Function that will be called on each created feature layer. Useful for attaching events and popups to features.</td>
</tr>
<tr id="geojson-filter">
<td><code><b>filter</b>( <nobr>&lt;GeoJSON&gt; <i>featureData</i></nobr>, <nobr>&lt;<a href="#ilayer">ILayer</a>&gt; <i>layer</i> )</nobr></code></td>
<td>Function that will be used to decide whether to show a feature or not.</td>
</tr>
</table>
<h3>Methods</h3>
<table>
<tr>
<th class="width250">Method</th>
<th class="minwidth">Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>addData</b>( <nobr>&lt;GeoJSON&gt; <i>data</i> )</nobr></code></td>
<td><code>Boolean</code></td>
<td>Adds a GeoJSON object to the layer.</td>
</tr>
</table>
<h3>Static methods</h3>
<table>
<tr>
<th>Method</th>
<th>Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>geometryToLayer</b>( <nobr>&lt;GeoJSON&gt; <i>featureData</i></nobr>, <nobr>&lt;<a href="#geojson-pointtolayer">Function</a>&gt; <i>pointToLayer?</i> )</nobr></code></td>
<td><code>ILayer</code></td>
<td>Creates a layer from a given GeoJSON feature.</td>
</tr>
<tr>
<td><code><b>coordsToLatlng</b>( <nobr>&lt;Array&gt; <i>coords</i></nobr>, <nobr>&lt;Boolean&gt; <i>reverse?</i> )</nobr></code></td>
<td><code><a href="#latlng">LatLng</a></code></td>
<td>Creates a LatLng object from an array of 2 numbers (latitude, longitude) used in GeoJSON for points. If <code>reverse</code> is set to <code>true</code>, the numbers will be interpreted as (longitude, latitude).</td>
</tr>
<tr>
<td><code><b>coordsToLatlngs</b>( <nobr>&lt;Array&gt; <i>coords</i></nobr>, <nobr>&lt;Number&gt; <i>levelsDeep?</i></nobr>, <nobr>&lt;Boolean&gt; <i>reverse?</i> )</nobr></code></td>
<td><code>Array</code></td>
<td>Creates a multidimensional array of LatLng objects from a GeoJSON coordinates array. <code>levelsDeep</code> specifies the nesting level (0 is for an array of points, 1 for an array of arrays of points, etc., 0 by default). If <code>reverse</code> is set to <code>true</code>, the numbers will be interpreted as (longitude, latitude).</td>
</tr>
</table>
<h2 id="latlng">L.LatLng</h2>
<p>Represents a geographical point with a certain latitude and longitude.</p>
<pre><code class="javascript">var latlng = new L.LatLng(50.5, 30.5);</code></pre>
<p>All Leaflet methods that accept LatLng objects also accept them in a simple Array form (unless noted otherwise), so these lines are equivalent:</p>
<pre><code>map.panTo([50, 30]);
map.panTo(new L.LatLng(50, 30));</code></pre>
<h3>Constructor</h3>
<table>
<tr>
<th class="width200">Constructor</th>
<th>Usage</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.LatLng</b>( <nobr>&lt;Number&gt; <i>latitude</i></nobr>, <nobr>&lt;Number&gt; <i>longitude</i></nobr>, <nobr>&lt;Boolean&gt; <i>noWrap?</i> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.LatLng(<span class="comment">&hellip;</span>)</code><br />
<code>L.latLng(<span class="comment">&hellip;</span>)</code><br />
<code>L.latLng([<span class="comment">&hellip;</span>])</code>
</td>
<td>Creates an object representing a geographical point with the given latitude and longitude. Wraps longitude to lie between <code>-180</code> and <code>180</code> and clamps longitude between <code>-90</code> and <code>90</code> by default &mdash; you can disable this with the <code>noWrap</code> argument.</td>
</tr>
</table>
<h3>Properties</h3>
<table>
<tr>
<th class="width100">Property</th>
<th class="width100">Type</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>lat</b></code></td>
<td><code>Number</code></td>
<td>Latitude in degrees.</td>
</tr>
<tr>
<td><code><b>lng</b></code></td>
<td><code>Number</code></td>
<td>Longitude in degrees.</td>
</tr>
</table>
<h3>Methods</h3>
<table>
<tr>
<th>Method</th>
<th>Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>distanceTo</b>( <nobr>&lt;<a href="#latlng">LatLng</a>&gt; <i>otherLatlng</i> )</nobr></code></td>
<td><code>Number</code></td>
<td>Returns the distance (in meters) to the given LatLng calculated using the Haversine formula. See <a href="http://en.wikipedia.org/wiki/Haversine_formula">description on wikipedia</a></td>
</tr>
<tr>
<td><code><b>equals</b>( <nobr>&lt;<a href="#latlng">LatLng</a>&gt; <i>otherLatlng</i> )</nobr></code></td>
<td><code>Boolean</code></td>
<td>Returns <code>true</code> if the given LatLng point is at the same position (within a small margin of error).</td>
</tr>
<tr>
<td><code><b>toString</b>()</code></td>
<td><code>String</code></td>
<td>Returns a string representation of the point (for debugging purposes).</td>
</tr>
</table>
<h3>Constants</h3>
<table>
<tr>
<th class="width100">Constant</th>
<th class="width100">Type</th>
<th class="width100">Value</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>DEG_TO_RAD</b></code></td>
<td><code>Number</code></td>
<td><code>Math.PI / <span class="number">180</span></code></td>
<td>A multiplier for converting degrees into radians.</td>
</tr>
<tr>
<td><code><b>RAD_TO_DEG</b></code></td>
<td><code>Number</code></td>
<td><code><span class="number">180</span> / Math.PI</code></td>
<td>A multiplier for converting radians into degrees.</td>
</tr>
<tr>
<td><code><b>MAX_MARGIN</b></code></td>
<td><code>Number</code></td>
<td><code><span class="number">1.0E-9</span></code></td>
<td>Max margin of error for the equality check.</td>
</tr>
</table>
<h2 id="latlngbounds">L.LatLngBounds</h2>
<p>Represents a rectangular geographical area on a map.</p>
<pre><code class="javascript">var southWest = new L.LatLng(40.712, -74.227),
northEast = new L.LatLng(40.774, -74.125),
bounds = new L.LatLngBounds(southWest, northEast);</code></pre>
<p>All Leaflet methods that accept LatLngBounds objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:</p>
<pre><code class="javascript">map.fitBounds([
[40.712, -74.227],
[40.774, -74.125]
]);</code></pre>
<h3>Constructor</h3>
<table>
<tr>
<th class="width250">Constructor</th>
<th>Usage</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.LatLngBounds</b>( <nobr>&lt;<a href="#latlng">LatLng</a>&gt; <i>southWest</i></nobr>, <nobr>&lt;<a href="#latlng">LatLng</a>&gt; <i>northEast</i></nobr> )</code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.LatLngBounds(<span class="comment">&hellip;</span>)</code><br />
<code>L.latLngBounds(<span class="comment">&hellip;</span>)</code><br />
<code>L.latLngBounds([<span class="comment">&hellip;</span>])</code>
</td>
<td>Creates a LatLngBounds object by defining south-west and north-east corners of the rectangle.</td>
</tr>
<tr>
<td><code><b>L.LatLngBounds</b>( <nobr>&lt;<a href="#latlng">LatLng</a>[]&gt; <i>latlngs</i> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.LatLngBounds(<span class="comment">&hellip;</span>)</code><br />
<code>L.latLngBounds(<span class="comment">&hellip;</span>)</code>
</td>
<td>Creates a LatLngBounds object defined by the geographical points it contains. Very useful for zooming the map to fit a particular set of locations with <a href="#map-fitbounds">fitBounds</a>.</td>
</tr>
</table>
<h3>Methods</h3>
<table>
<tr>
<th class="width300">Method</th>
<th>Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>extend</b>( <nobr>&lt;<a href="#latlng">LatLng</a>|<a href="#latlngbounds">LatLngBounds</a>&gt; <i>latlng</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Extends the bounds to contain the given point or bounds.</td>
</tr>
<tr>
<td><code><b>getSouthWest</b>()</code></td>
<td><code><a href="#latlng">LatLng</a></code></td>
<td>Returns the south-west point of the bounds.</td>
</tr>
<tr>
<td><code><b>getNorthEast</b>()</code></td>
<td><code><a href="#latlng">LatLng</a></code></td>
<td>Returns the north-east point of the bounds.</td>
</tr>
<tr>
<td><code><b>getNorthWest</b>()</code></td>
<td><code><a href="#latlng">LatLng</a></code></td>
<td>Returns the north-west point of the bounds.</td>
</tr>
<tr>
<td><code><b>getSouthEast</b>()</code></td>
<td><code><a href="#latlng">LatLng</a></code></td>
<td>Returns the south-east point of the bounds.</td>
</tr>
<tr>
<td><code><b>getCenter</b>()</code></td>
<td><code><a href="#latlng">LatLng</a></code></td>
<td>Returns the center point of the bounds.</td>
</tr>
<tr>
<td><code><b>contains</b>( <nobr>&lt;<a href="#latlngbounds">LatLngBounds</a>&gt; <i>otherBounds</i> )</nobr></code></td>
<td><code>Boolean</code></td>
<td>Returns <code>true</code> if the rectangle contains the given one.</td>
</tr>
<tr>
<td><code><b>contains</b>( <nobr>&lt;<a href="#latlng">LatLng</a>&gt; <i>latlng</i> )</nobr></code></td>
<td><code>Boolean</code></td>
<td>Returns <code>true</code> if the rectangle contains the given point.</td>
</tr>
<tr>
<td><code><b>intersects</b>( <nobr>&lt;<a href="#latlngbounds">LatLngBounds</a>&gt; <i>otherBounds</i> )</nobr></code></td>
<td><code>Boolean</code></td>
<td>Returns <code>true</code> if the rectangle intersects the given bounds.</td>
</tr>
<tr>
<td><code><b>equals</b>( <nobr>&lt;<a href="#latlngbounds">LatLngBounds</a>&gt; <i>otherBounds</i> )</nobr></code></td>
<td><code>Boolean</code></td>
<td>Returns <code>true</code> if the rectangle is equivalent (within a small margin of error) to the given bounds.</td>
</tr>
<tr>
<td><code><b>toBBoxString</b>()</code></td>
<td><code>String</code></td>
<td>Returns a string with bounding box coordinates in a <code><span class="string">'southwest_lng,southwest_lat,northeast_lng,northeast_lat'</span></code> format. Useful for sending requests to web services that return geo data.</td>
</tr>
</table>
<h2 id="point">L.Point</h2>
<p>Represents a point with x and y coordinates in pixels.</p>
<pre><code>var point = new L.Point(200, 300);</code></pre>
<p>All Leaflet methods and options that accept Point objects also accept them in a simple Array form (unless noted otherwise), so these lines are equivalent:</p>
<pre><code>map.panBy([200, 300]);
map.panBy(new L.Point(200, 300));</code></pre>
<h3>Constructor</h3>
<table>
<tr>
<th class="width250">Constructor</th>
<th>Usage</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.Point</b>( <nobr>&lt;Number&gt; <i>x</i>, &lt;Number&gt; <i>y</i></nobr>, <nobr>&lt;Boolean&gt; <i>round?</i> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.Point(<span class="comment">&hellip;</span>)</code><br />
<code>L.point(<span class="comment">&hellip;</span>)</code><br />
<code>L.point([<span class="comment">&hellip;</span>])</code>
</td>
<td>Creates a Point object with the given <code>x</code> and <code>y</code> coordinates. If optional <code>round</code> is set to <code>true</code>, rounds the <code>x</code> and <code>y</code> values.</td>
</tr>
</table>
<h3>Properties</h3>
<table>
<tr>
<th class="width100">Property</th>
<th class="width100">Type</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>x</b></code></td>
<td><code>Number</code></td>
<td>The x coordinate.</td>
</tr>
<tr>
<td><code><b>y</b></code></td>
<td><code>Number</code></td>
<td>The y coordinate.</td>
</tr>
</table>
<h3>Methods</h3>
<table>
<tr>
<th>Method</th>
<th>Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>add</b>( <nobr>&lt;<a href="#point">Point</a>&gt; <i>otherPoint</i> )</nobr></code></td>
<td><code><a href="#point">Point</a></code></td>
<td>Returns the result of addition of the current and the given points.</td>
</tr>
<tr>
<td><code><b>subtract</b>( <nobr>&lt;<a href="#point">Point</a>&gt; <i>otherPoint</i> )</nobr></code></td>
<td><code><a href="#point">Point</a></code></td>
<td>Returns the result of subtraction of the given point from the current.</td>
</tr>
<tr>
<td><code><b>multiplyBy</b>( <nobr>&lt;Number&gt; <i>number</i> )</nobr></code></td>
<td><code><a href="#point">Point</a></code></td>
<td>Returns the result of multiplication of the current point by the given number.</td>
</tr>
<tr>
<td><code><b>divideBy</b>( <nobr>&lt;Number&gt; <i>number</i></nobr>, <nobr>&lt;Boolean&gt; <i>round?</i> )</nobr></code></td>
<td><code><a href="#point">Point</a></code></td>
<td>Returns the result of division of the current point by the given number. If optional <code>round</code> is set to <code>true</code>, returns a rounded result.</td>
</tr>
<tr>
<td><code><b>distanceTo</b>( <nobr>&lt;<a href="#point">Point</a>&gt; <i>otherPoint</i> )</nobr></code></td>
<td><code>Number</code></td>
<td>Returns the distance between the current and the given points.</td>
</tr>
<tr>
<td><code><b>clone</b>()</code></td>
<td><code><a href="#point">Point</a></code></td>
<td>Returns a copy of the current point.</td>
</tr>
<tr>
<td><code><b>round</b>()</code></td>
<td><code><a href="#point">Point</a></code></td>
<td>Returns a copy of the current point with rounded coordinates.</td>
</tr>
<tr>
<td><code><b>toString</b>()</code></td>
<td><code>String</code></td>
<td>Returns a string representation of the point for debugging purposes.</td>
</tr>
</table>
<h2 id="bounds">L.Bounds</h2>
<p>Represents a rectangular area in pixel coordinates.</p>
<pre><code class="javascript">var p1 = new L.Point(10, 10),
p2 = new L.Point(40, 60),
bounds = new L.Bounds(p1, p2);</code></pre>
<p>All Leaflet methods that accept Bounds objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:</p>
<pre><code class="javascript">otherBounds.intersects([[10, 10], [40, 60]]);</code></pre>
<h3>Constructor</h3>
<table>
<tr>
<th class="width250">Constructor</th>
<th>Usage</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.Bounds</b>( <nobr>&lt;<a href="#point">Point</a>&gt; <i>topLeft</i></nobr>, <nobr>&lt;<a href="#point">Point</a>&gt; <i>bottomRight</i> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.Bounds(<span class="comment">&hellip;</span>)</code><br />
<code>L.bounds(<span class="comment">&hellip;</span>)</code><br />
<code>L.bounds([<span class="comment">&hellip;</span>])</code>
</td>
<td>Creates a Bounds object from two coordinates (usually top-left and bottom-right corners).</td>
</tr>
<tr>
<td><code><b>L.LatLngBounds</b>( <nobr>&lt;<a href="#point">Point</a>[]&gt; <i>points</i> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.Bounds(<span class="comment">&hellip;</span>)</code><br />
<code>L.bounds(<span class="comment">&hellip;</span>)</code>
</td>
<td>Creates a Bounds object defined by the points it contains.</td>
</tr>
</table>
<h3>Properties</h3>
<table>
<tr>
<th class="width100">Property</th>
<th class="width100">Type</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>min</b></code></td>
<td><code><a href="#point">Point</a></code>
<td>The top left corner of the rectangle.</td>
</tr>
<tr>
<td><code><b>max</b></code></td>
<td><code><a href="#point">Point</a></code>
<td>The bottom right corner of the rectangle.</td>
</tr>
</table>
<h3>Methods</h3>
<table>
<tr>
<th class="width250">Method</th>
<th>Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>extend</b>( <nobr>&lt;<a href="#point">Point</a>&gt; <i>point</i> )</nobr></code></td>
<td>-</td>
<td>Extends the bounds to contain the given point.</td>
</tr>
<tr>
<td><code><b>getCenter</b>()</code></td>
<td><code><a href="#point">Point</a></code></td>
<td>Returns the center point of the bounds.</td>
</tr>
<tr>
<td><code><b>contains</b>( <nobr>&lt;<a href="#bounds">Bounds</a>&gt; <i>otherBounds</i> )</nobr></code></td>
<td><code>Boolean</code></td>
<td>Returns <code>true</code> if the rectangle contains the given one.</td>
</tr>
<tr>
<td><code><b>contains</b>( <nobr>&lt;<a href="#point">Point</a>&gt; <i>point</i> )</nobr></code></td>
<td><code>Boolean</code></td>
<td>Returns <code>true</code> if the rectangle contains the given point.</td>
</tr>
<tr>
<td><code><b>intersects</b>( <nobr>&lt;<a href="#bounds">Bounds</a>&gt; <i>otherBounds</i> )</nobr></code></td>
<td><code>Boolean</code></td>
<td>Returns <code>true</code> if the rectangle intersects the given bounds.</td>
</tr>
</table>
<h2 id="icon">L.Icon</h2>
<p>Represents an icon to provide when creating a marker.</p>
<pre><code class="javascript">var myIcon = L.icon({
iconUrl: 'my-icon.png',
shadowUrl: 'my-icon-shadow.png',
iconSize: [38, 95],
shadowSize: [68, 95],
iconAnchor: [22, 94],
popupAnchor: [-3, -76]
});
L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);</code></pre>
<p><code>L.Icon.Default</code> extends <code>L.Icon</code> and is the blue icon Leaflet uses for markers by default.</p>
<h3>Constructor</h3>
<table>
<tr>
<th class="width250">Constructor</th>
<th>Usage</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.Icon</b>( <nobr>&lt;<a href="#icon-properties">Icon properties</a>&gt; <i>props</i> )</nobr></code></td>
<td class="factory-usage">
<code><span class='keyword'>new</span> L.Icon(<span class="comment">&hellip;</span>)</code><br />
<code>L.icon(<span class="comment">&hellip;</span>)</code>
</td>
<td>Creates an icon instance with the given properties.</td>
</tr>
</table>
<h3 id="icon-properties">Properties</h3>
<table>
<tr>
<th>Property</th>
<th>Type</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>iconUrl</b></code></td>
<td><code>String</code>
<td>(required) The URL to the icon image (absolute or relative to your script path).</td>
</tr>
<tr>
<td><code><b>iconSize</b></code></td>
<td><code><a href="#point">Point</a></code>
<td>Size of the icon image in pixels.</td>
</tr>
<tr>
<td><code><b>iconAnchor</b></code></td>
<td><code><a href="#point">Point</a></code>
<td>The coordinates of the "tip" of the icon (relative to its top left corner). The icon will be aligned so that this point is at the marker's geographical location.</td>
</tr>
<tr>
<td><code><b>shadowUrl</b></code></td>
<td><code>String</code>
<td>The URL to the icon shadow image. If <code>shadowUrl</code> is <code>null</code> then no shadow image will be created.</td>
</tr>
<tr>
<td><code><b>shadowSize</b></code></td>
<td><code><a href="#point">Point</a></code>
<td>Size of the shadow image in pixels.</td>
</tr>
<tr>
<td><code><b>shadowOffset</b></code></td>
<td><code><a href="#point">Point</a></code>
<td>Position of the shadow relative to the icon (<code>(0, 0)</code> by default)</td>
</tr>
<tr>
<td><code><b>popupAnchor</b></code></td>
<td><code><a href="#point">Point</a></code>
<td>The point from which the marker popup opens, relative to the anchor point.</td>
</tr>
</table>
<h2 id="control-zoom">L.Control.Zoom</h2>
<p>A basic zoom control with two buttons (zoom in and zoom out). It is put on the map by default unless you set its <code>zoomControl</code> option to <code>false</code>. Implements <a href="#icontrol">IControl</a> interface.</p>
<h3>Constructor</h3>
<table>
<tr>
<th class="width200">Constructor</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.Control.Zoom</b>()</code></td>
<td>Creates a zoom control.</td>
</tr>
</table>
<h2 id="control-attribution">L.Control.Attribution</h2>
<p>The attribution control allows you to display attribution data in a small text box on a map. It is put on the map by default unless you set its <code>attributionControl</code> option to <code>false</code>, and it fetches attribution texts from layers with <code>getAttribution</code> method automatically. Implements <a href="#icontrol">IControl</a> interface.</p>
<h3>Constructor</h3>
<table>
<tr>
<th class="width200">Constructor</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.Control.Attribution</b>()</code></td>
<td>Creates an attribution control.</td>
</tr>
</table>
<h3>Methods</h3>
<table>
<tr>
<th>Method</th>
<th>Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>setPrefix</b>( <nobr>&lt;String&gt; <i>prefix</i> )</nobr></code></td>
<td>-</td>
<td>Sets the string before the attributions ("Powered by Leaflet" by default).</td>
</tr>
<tr>
<td><code><b>addAttribution</b>( <nobr>&lt;String&gt; <i>text</i> )</nobr></code></td>
<td>-</td>
<td>Adds an attribution text (e.g. "Vector data &amp;copy; CloudMade").</td>
</tr>
<tr>
<td><code><b>removeAttribution</b>( <nobr>&lt;String&gt; <i>text</i> )</nobr></code></td>
<td>-</td>
<td>Removes an attribution text.</td>
</tr>
</table>
<h2 id="control-layers">L.Control.Layers</h2>
<p>The layers control gives users the ability to switch between different base layers and switch overlays on/off (check out the <a href="examples/layers-control.html">detailed example</a>). It should be created and added explicitly to the map using <a href=="#map-addcontrol">Map#addControl</a> method. Implements <a href="#icontrol">IControl</a> interface.</p>
<pre><code>var baseLayers = {
"CloudMade": cloudmade,
"OpenStreetMap": osm
};
var overlays = {
"Marker": marker,
"Roads": roadsLayer
};
layersControl = new L.Control.Layers(baseLayers, overlays);
map.addControl(layersControl);</code></pre>
<h3>Constructor</h3>
<table>
<tr>
<th>Constructor</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>L.Control.Layers</b>( <nobr>&lt;<a href="#control-layers-config">Layer Config</a>&gt; <i>baseLayers?</i></nobr>, <nobr>&lt;<a href="#control-layers-config">Layer Config</a>&gt; <i>overlays?</i></nobr>, <nobr>&lt;<a href="#control-layers-options">Control.Layers options</a>&gt; <i>options?</i> )</nobr></code></td>
<td>Creates an attribution control with the given layers. Base layers will be switched with radio buttons, while overlays will be switched with checkboxes.</td>
</tr>
</table>
<h3>Methods</h3>
<table>
<tr>
<th>Method</th>
<th>Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>addBaseLayer</b>( <nobr>&lt;<a href="#ilayer">ILayer</a>&gt; <i>layer</i></nobr>, <nobr>&lt;String&gt; <i>name</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Adds a base layer (radio button entry) with the given name to the control.</td>
</tr>
<tr>
<td><code><b>addOverlay</b>( <nobr>&lt;<a href="#ilayer">ILayer</a>&gt; <i>layer</i></nobr>, <nobr>&lt;String&gt; <i>name</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Adds an overlay (checkbox entry) with the given name to the control.</td>
</tr>
<tr>
<td><code><b>removeLayer</b>( <nobr>&lt;<a href="#ilayer">ILayer</a>&gt; <i>layer</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Remove the given layer from the control.</td>
</tr>
</table>
<h3 id="control-layers-options">Options</h3>
<table>
<tr>
<th>Option</th>
<th>Type</th>
<th>Default</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>collapsed</b></code></td>
<td><code>Boolean</code></td>
<td><code><span class="literal">true</span></code></td>
<td>If <code>true</code>, the control will be collapsed into an icon and expanded on mouse hover or touch.</td>
</tr>
</table>
<h3 id="control-layers-config">Layer Config</h3>
<p>An object literal with layer names as keys and layer objects as values:</p>
<pre><code>{
"&lt;someName1&gt;": layer1,
"&lt;someName2&gt;": layer2
}</code></pre>
<h2 id="events">Events methods</h2>
<p>A set of methods shared between event-powered classes (like Map). Generally, events allow you to execute some function when something happens with an object (e.g. the user clicks on the map, causing the map <code><span class="string">'fire'</span></code> event).</p>
<h3>Example</h3>
<pre><code class="javascript">map.on('click', function(e) {
alert(e.latlng);
});</code></pre>
<p>Leaflet deals with event listeners by reference, so if you want to add a listener and then remove it, define it as a function:</p>
<pre><code>function onClick(e) { ... }
map.on('click', onClick);
map.off('click', onClick);</code></pre>
<h3>Methods</h3>
<table>
<tr>
<th>Method</th>
<th>Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>addEventListener</b>( <nobr>&lt;String&gt; <i>type</i></nobr>, <nobr>&lt;Function&gt; <i>fn</i></nobr>, <nobr>&lt;Object&gt; <i>context?</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Adds a listener function (<code>fn</code>) to a particular event type of the object. You can optionally specify the context of the listener (object the <code>this</code> keyword will point to).</td>
</tr>
<tr>
<td><code><b>removeEventListener</b>( <nobr>&lt;String&gt; <i>type</i></nobr>, <nobr>&lt;Function&gt; <i>fn</i></nobr>, <nobr>&lt;Object&gt; <i>context?</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Removes a previously added listener function.</td>
</tr>
<tr>
<td><code><b>on</b>( &hellip; )</code></td>
<td><code>this</code></td>
<td>Alias to <code>addEventListener</code>.</td>
</tr>
<tr>
<td><code><b>off</b>( &hellip; )</code></td>
<td><code>this</code></td>
<td>Alias to <code>removeEventListener</code>.</td>
</tr>
<tr>
<td><code><b>hasEventListeners</b>( <nobr>&lt;String&gt; <i>type</i> )</nobr></code></td>
<td><code>Boolean</code></td>
<td>Returns <code>true</code> if a particular event type has some listeners attached to it.</td>
</tr>
<tr>
<td><code><b>fireEvent</b>( <nobr>&lt;String&gt; <i>type</i></nobr>, <nobr>&lt;Object&gt; <i>data?</i> )</nobr></code></td>
<td><code>this</code></td>
<td>Fires an event of the specified type. You can optionally provide an data object &mdash; the first argument of the listener function will contain its properties.</td>
</tr>
<tr>
<td><code><b>fire</b>( &hellip; )</code></td>
<td><code>this</code></td>
<td>Alias to <code>fireEvent</code>.</td>
</tr>
</table>
<h2 id="event-objects">Event objects</h2>
<p>Event object is an object that you recieve as an argument in a listener function when some event is fired, containing useful information about that event. For example:</p>
<pre><code class="javascript">map.on('click', function(e) {
alert(e.latlng); // e is an event object (MouseEvent in this case)
});</code></pre>
<h3 id="event">Event</h3>
<p>The base event object. All other event objects contain these properties too.</p>
<table>
<tr>
<th class="width100">property</th>
<th class="width100">type</th>
<th>description</th>
</tr>
<tr>
<td><code><b>type</b></code></td>
<td><code>String</code></td>
<td>The event type (e.g. <code><span class="string">'click'</span></code>).</td>
</tr>
<tr>
<td><code><b>target</b></code></td>
<td><code>Object</code></td>
<td>The object that fired the event.</td>
</tr>
</table>
<h3 id="mouse-event">MouseEvent</h3>
<table>
<tr>
<th class="width100">property</th>
<th>type</th>
<th>description</th>
</tr>
<tr>
<td><code><b>latlng</b></code></td>
<td><code><a href="#latlng">LatLng</a></code></td>
<td>The geographical point where the mouse event occured.</td>
</tr>
<tr>
<td><code><b>layerPoint</b></code></td>
<td><code><a href="#point">Point</a></code></td>
<td>Pixel coordinates of the point where the mouse event occured relative to the map layer.</td>
</tr>
</table>
<h3 id="location-event">LocationEvent</h3>
<table>
<tr>
<th class="width100">property</th>
<th>type</th>
<th>description</th>
</tr>
<tr>
<td><code><b>latlng</b></code></td>
<td><code><a href="#latlng">LatLng</a></code></td>
<td>Detected geographical location of the user.</td>
</tr>
<tr>
<td><code><b>bounds</b></code></td>
<td><code><a href="#latlngbounds">LatLngBounds</a></code></td>
<td>Geographical bounds of the area user is located in (with respect to the accuracy of location).</td>
</tr>
<tr>
<td><code><b>accuracy</b></code></td>
<td><code>Number</code></td>
<td>Accuracy of location in meters.</td>
</tr>
</table>
<h3 id="error-event">ErrorEvent</h3>
<table>
<tr>
<th class="width100">property</th>
<th class="width100">type</th>
<th>description</th>
</tr>
<tr>
<td><code><b>message</b></code></td>
<td><code>String</code></td>
<td>Error message.</td>
</tr>
<tr>
<td><code><b>code</b></code></td>
<td><code>Number</code></td>
<td>Error code (if applicable).</td>
</tr>
</table>
<h3 id="layer-event">LayerEvent</h3>
<table>
<tr>
<th class="width100">property</th>
<th class="width100">type</th>
<th>description</th>
</tr>
<tr>
<td><code><b>layer</b></code></td>
<td><code><a href="#ilayer">ILayer</a></code></td>
<td>The layer that was added or removed.</td>
</tr>
</table>
<h3 id="geojson-event">GeoJSON event</h3>
<table>
<tr>
<th class="width100">property</th>
<th class="width100">type</th>
<th>description</th>
</tr>
<tr>
<td><code><b>layer</b></code></td>
<td><code><a href="#ilayer">ILayer</a></code></td>
<td>The layer for the GeoJSON feature that is being added to the map.</td>
</tr>
<tr>
<td><code><b>properties</b></code></td>
<td><code>Object</code></td>
<td>GeoJSON properties of the feature.</td>
</tr>
<tr>
<td><code><b>geometryType</b></code></td>
<td><code>String</code></td>
<td>GeoJSON geometry type of the feature.</td>
</tr>
<tr>
<td><code><b>id</b></code></td>
<td><code>String</code></td>
<td>GeoJSON ID of the feature (if present).</td>
</tr>
</table>
<h3 id="popup-event">Popup event</h3>
<table>
<tr>
<th class="width100">property</th>
<th class="width100">type</th>
<th>description</th>
</tr>
<tr>
<td><code><b>popup</b></code></td>
<td><code><a href="#popup">Popup</a></code></td>
<td>The popup that was opened or closed.</td>
</tr>
</table>
<!-- <h3>TileEvent</h3> -->
<h2 id="class">L.Class</h2>
<p><code>L.Class</code> powers the OOP facilities of Leaflet and is used to create almost all of the Leaflet classes documented here.</p>
<p>In addition to implementing a simple classical inheritance model, it introduces several special properties for convenient code organization &mdash; <code>options</code>, <code>includes</code> and <code>statics</code>.</p>
<pre><code>var MyClass = L.Class.extend({
initialize: function (greeter) {
this.greeter = greeter;
// class constructor
},
greet: function (name) {
alert(this.greeter + ', ' + name)
}
});
// create instance of MyClass, passing "Hello" to the constructor
var a = new MyClass("Hello");
// call greet method, alerting "Hello, World"
a.greet("World");
</code></pre>
<h3>Inheritance</h3>
<p>You use <code>L.Class.extend</code> to define new classes, but you can use the same method on any class to inherit from it:</p>
<pre><code>var MyChildClass = MyClass.extend({
// ... new properties and methods
});</code></pre>
<p>This will create a class that inherits all methods and properties of the parent class (through a proper prototype chain), adding or overriding the ones you pass to <code>extend</code>. It will also properly react to <code>instanceof</code>:</p>
<pre><code>var a = new MyChildClass();
a instanceof MyChildClass; // true
a instanceof MyClass; // true
</code></pre>
<p>You can call parent methods (including constructor) from corresponding child ones (as you do with <code>super</code> calls in other languages) by accessing parent class prototype and using JavaScript's <code>call</code> or <code>apply</code>:</p>
<pre><code>var MyChildClass = MyClass.extend({
initialize: function () {
MyClass.prototype.initialize.call("Yo");
},
greet: function (name) {
MyClass.prototype.greet.call(this, 'bro ' + name + '!');
}
});
var a = new MyChildClass();
a.greet('Jason'); // alerts "Yo, bro Jason!"</code></pre>
<h3 id="class-options">Options</h3>
<p><code>options</code> is a special property that unlike other objects that you pass to <code>extend</code> will be merged with the parent one instead of overriding it completely, which makes managing configuration of objects and default values convenient:</p>
<pre><code>var MyClass = L.Class.extend({
options: {
myOption1: 'foo',
myOption2: 'bar'
}
});
var MyChildClass = L.Class.extend({
options: {
myOption1: 'baz',
myOption3: 5
}
});
var a = new MyChildClass();
a.options.myOption1; // 'baz'
a.options.myOption2; // 'bar'
a.options.myOption3; // 5</code></pre>
<p>There's also <code>L.Util.setOptions</code>, a method for conveniently merging options passed to constructor with the defauls defines in the class:</p>
<pre><code>var MyClass = L.Class.extend({
options: {
foo: 'bar',
bla: 5
},
initialize: function (options) {
L.Util.setOptions(this, options);
...
}
});
var a = new MyClass({bla: 10});
a.options; // {foo: 'bar', bla: 10}</code></pre>
<h3>Includes</h3>
<p><code>includes</code> is a special class property that merges all specified objects into the class (such objects are called mixins). A good example of this is <code>L.Mixin.Events</code> that <a href="#events">event-related methods</a> like <code>on</code>, <code>off</code> and <code>fire</code> to the class.</p>
<pre><code> var MyMixin = {
foo: function () { ... },
bar: 5
};
var MyClass = L.Class.extend({
includes: MyMixin
});
var a = new MyClass();
a.foo();</code></pre>
<p>You can also do such includes in runtime with the <code>include</code> method:</p>
<pre><code><b>MyClass.include</b>(MyMixin);</code></pre>
<h3>Statics</h3>
<p><code>statics</code> is just a convenience property that injects specified object properties as the static properties of the class, useful for defining constants:</p>
<pre><code>var MyClass = L.Class.extend({
statics: {
FOO: 'bar',
BLA: 5
}
});
MyClass.FOO; // 'bar'</code></pre>
<h2 id="browser">L.Browser</h2>
<p>A namespace with properties for browser/feature detection used by Leaflet internally.</p>
<pre><code>if (L.Browser.ie6) {
alert('Upgrade your browser, dude!');
}</code></pre>
<table>
<tr>
<th class="width100">property</th>
<th class="width100">type</th>
<th>description</th>
</tr>
<tr>
<td><code><b>ie</b></code></td>
<td><code>Boolean</code></td>
<td><code>true</code> for all Internet Explorer versions.</td>
</tr>
<tr>
<td><code><b>ie6</b></code></td>
<td><code>Boolean</code></td>
<td><code>true</code> for Internet Explorer 6.</td>
</tr>
<tr>
<td><code><b>webkit</b></code></td>
<td><code>Boolean</code></td>
<td><code>true</code> for webkit-based browsers like Chrome and Safari (including mobile versions).</td>
</tr>
<tr>
<td><code><b>webkit3d</b></code></td>
<td><code>Boolean</code></td>
<td><code>true</code> for webkit-based browsers that support CSS 3D transformations.</td>
</tr>
<tr>
<td><code><b>gecko</b></code></td>
<td><code>Boolean</code></td>
<td><code>true</code> for Gecko-based browsers like Firefox and Mozilla.</td>
</tr>
<tr>
<td><code><b>opera</b></code></td>
<td><code>Boolean</code></td>
<td><code>true</code> for Opera.</td>
</tr>
<tr>
<td><code><b>android</b></code></td>
<td><code>Boolean</code></td>
<td><code>true</code> for Android mobile browser.</td>
</tr>
<tr>
<td><code><b>mobile</b></code></td>
<td><code>Boolean</code></td>
<td><code>true</code> for modern mobile browsers (including iOS Safari and different Android browsers).</td>
</tr>
<tr>
<td><code><b>mobileWebkit</b></code></td>
<td><code>Boolean</code></td>
<td><code>true</code> for mobile webkit-based browsers.</td>
</tr>
<tr>
<td><code><b>mobileOpera</b></code></td>
<td><code>Boolean</code></td>
<td><code>true</code> for mobile Opera.</td>
</tr>
<tr>
<td><code><b>touch</b></code></td>
<td><code>Boolean</code></td>
<td><code>true</code> for all browsers on touch devices.</td>
</tr>
</table>
<h2 id="util">L.Util</h2>
<p>Various utility functions, used by Leaflet internally.</p>
<h3>Methods</h3>
<table>
<tr>
<th>Method</th>
<th>Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>extend</b>( <nobr>&lt;Object&gt; <i>dest</i></nobr>, <nobr>&lt;Object&gt; <i>src?..</i> )</nobr></code></td>
<td><code>Object</code></td>
<td>Merges the properties of the <code>src</code> object (or multiple objects) into <code>dest</code> object and returns the latter.</td>
</tr>
<tr>
<td><code><b>bind</b>( <nobr>&lt;Function&gt; <i>fn</i></nobr>, <nobr>&lt;Object&gt; <i>obj</i> )</nobr></code></td>
<td><code>Function</code></td>
<td>Returns a function which executes function <code>fn</code> with the given scope <code>obj</code> (so that <code>this</code> keyword refers to <code>obj</code> inside the function code).</td>
</tr>
<tr>
<td><code><b>stamp</b>( &lt;Object&gt; obj</nobr> )<nobr></code></td>
<td><code>String</code></td>
<td>Applies a unique key to the object and returns that key.</td>
</tr>
<!-- TODO Commented out for the time being:
https://github.com/CloudMade/Leaflet/pull/793#discussion_r1134904
<tr>
<td><code><b>requestAnimFrame</b>()</code></td>
<td></td>
<td></td>
</tr>
<tr>
<td><code><b>cancelAnimFrame</b>()</code></td>
<td></td>
<td></td>
</tr>
-->
<tr>
<td><code><b>limitExecByInterval</b>( <nobr>&lt;Function&gt; <i>fn</i></nobr>, <nobr>&lt;Number&gt; <i>time</i></nobr>, <nobr>&lt;Object&gt; <i>context?</i> )</nobr></code></td>
<td><code>Function</code></td>
<td>Returns a wrapper around the function <code>fn</code> that makes sure it's called not more often than a certain time interval <code>time</code>, but as fast as possible otherwise (for example, it is used for checking and requesting new tiles while dragging the map), optionally passing the scope (<code>context</code>) in which the function will be called.</td>
</tr>
<tr>
<td><code><b>falseFn</b>()</code></td>
<td><code>Function</code></td>
<td>Returns a function which always returns <code>false</code>.</td>
</tr>
<tr>
<td><code><b>formatNum</b>( <nobr>&lt;Number&gt; <i>num</i></nobr>, <nobr>&lt;Number&gt; <i>digits</i> )</nobr></code></td>
<td><code>Number</code></td>
<td>Returns the number <code>num</code> rounded to <code>digits</code> decimals.</td>
</tr>
<tr>
<td><code><b>splitWords</b>( <nobr>&lt;String&gt; <i>str</i> )</nobr></code></td>
<td><code>String[]</code></td>
<td>Trims and splits the string on whitespace and returns the array of parts.</code></td>
</tr>
<tr>
<td><code><b>setOptions</b>( <nobr>&lt;Object&gt; <i>obj</i></nobr>, &lt;Object&gt; <i>options</i> )</nobr></code></td>
<td><code>Object</code></td>
<td>Merges the given properties to the <code>options</code> of the <code>obj</code> object, returning the resulting options. See <a href="#class-options">Class options</a>.</td>
</tr>
<tr>
<td><code><b>getParamString</b>( <nobr>&lt;Object&gt; <i>obj</i> )</nobr></code></td>
<td><code>String</code></td>
<td>Converts an object into a parameter URL string, e.g. <nobr><code>{a: "foo", b: "bar"}</code></nobr> translates to <code><span class="string">'?a=foo&amp;b=bar'</span></code>.</td>
</tr>
<tr>
<td><code><b>template</b>( <nobr>&lt;String&gt; <i>str</i>, &lt;Object&gt; <i>data</i> )</nobr></code></td>
<td><code>String</code></td>
<td>Simple templating facility, creates a string by applying the values of the <code>data</code> object of a form <code>{a: 'foo', b: 'bar', &hellip;}</code> to a template string of the form <code><span class="string">'Hello {a}, {b}'</span></code> &mdash; in this example you will get <code><span class="string">'Hello foo, bar'</span></code>.</td>
</tr>
</table>
<h3>Properties</h3>
<table>
<tr>
<th>Property</th>
<th>Type</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>emptyImageUrl</b></code></td>
<td><code>String</code></td>
<td>Data URI string containing a base64-encoded empty GIF image. Used as a hack to free memory from unused images on WebKit-powered mobile devices (by setting image <code>src</code> to this string).</td>
</tr>
</table>
<h2 id="domutil">L.DomUtil</h2>
<p>Utility functions to work with the DOM tree, used by Leaflet internally.</p>
<h3>Methods</h3>
<table>
<tr>
<th>Method</th>
<th>Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>get</b>( <nobr>&lt;String or HTMLElement&gt; <i>id</i> )</nobr></code></td>
<td><code>HTMLElement</code></td>
<td>Returns an element with the given id if a string was passed, or just returns the element if it was passed directly.</td>
</tr>
<tr>
<td><code><b>getStyle</b>( <nobr>&lt;HTMLElement&gt; <i>el</i></nobr>, <nobr>&lt;String&gt; <i>style</i> )</nobr></code></td>
<td><code>String</code></td>
<td>Returns the value for a certain style attribute on an element, including computed values or values set through CSS.</td>
</tr>
<tr>
<td><code><b>getViewportOffset</b>( <nobr>&lt;HTMLElement&gt; <i>el</i> )</nobr></code></td>
<td><a href="#point"><code>Point</code></a></td>
<td>Returns the offset to the viewport for the requested element.</td>
</tr>
<tr>
<td><code><b>create</b>( <nobr>&lt;String&gt; <i>tagName</i></nobr>, <nobr>&lt;String&gt; <i>className</i></nobr>, <nobr>&lt;HTMLElement&gt; <i>container?</i> )</nobr></code></td>
<td><code>HTMLElement</code></td>
<td>Creates an element with <code>tagName</code>, sets the <code>className</code>, and optionally appends it to <code>container</code> element.</td>
</tr>
<tr>
<td><code><b>disableTextSelection</b>()</code></td>
<td>-</td>
<td>Makes sure text cannot be selected, for example during dragging.</td>
</tr>
<tr>
<td><code><b>enableTextSelection</b>()</code></td>
<td>-</td>
<td>Makes text selection possible again.</td>
</tr>
<tr>
<td><code><b>hasClass</b>( <nobr>&lt;HTMLElement&gt; <i>el</i></nobr>, <nobr>&lt;String&gt; <i>name</i> )</nobr></code></td>
<td><code>Boolean</code></td>
<td>Returns <code>true</code> if the element class attribute contains <code>name</code>.</td>
</tr>
<tr>
<td><code><b>addClass</b>( <nobr>&lt;HTMLElement&gt; <i>el</i></nobr>, <nobr>&lt;String&gt; <i>name</i> )</nobr></code></td>
<td>-</td>
<td>Adds <code>name</code> to the element's class attribute.</td>
</tr>
<tr>
<td><code><b>removeClass</b>( <nobr>&lt;HTMLElement&gt; <i>el</i></nobr>, <nobr>&lt;String&gt; <i>name</i> )</nobr></code></td>
<td>-</td>
<td>Removes <code>name</code> from the element's class attribute.</td>
</tr>
<tr>
<td><code><b>setOpacity</b>( <nobr>&lt;HTMLElement&gt; <i>el</i></nobr>, <nobr>&lt;Number&gt; <i>value</i> )</nobr></code></td>
<td>-</td>
<td>Set the opacity of an element (including old IE support). Value must be from <code>0</code> to <code>1</code>.</td>
</tr>
<tr>
<td><code><b>testProp</b>( <nobr>&lt;String[]&gt; <i>props</i> )</nobr></code></td>
<td><code>String</code> or <code><span class="literal">false</span></code></td>
<td>Goes through the array of style names and returns the first name that is a valid style name for an element. If no such name is found, it returns <code>false</code>. Useful for vendor-prefixed styles like <code>transform</code>.</td>
</tr>
<tr>
<td><code><b>getTranslateString</b>( <nobr>&lt;<a href="#point">Point</a>&gt; <i>point</i> )</nobr></code></td>
<td><code>String</code></td>
<td>Returns a CSS transform string to move an element by the offset provided in the given point. Uses 3D translate on WebKit for hardware-accelerated transforms and 2D on other browsers.</td>
</tr>
<tr>
<td><code><b>getScaleString</b>( <nobr>&lt;Number&gt; <i>scale</i></nobr>, <nobr>&lt;<a href="#point">Point</a>&gt; <i>origin</i> )</nobr></code></td>
<td><code>String</code></td>
<td>Returns a CSS transform string to scale an element (with the given scale origin).</td>
</tr>
<tr>
<td><code><b>setPosition</b>( <nobr>&lt;HTMLElement&gt; <i>el</i></nobr>, <nobr>&lt;<a href="#point">Point</a>&gt; <i>point</i></nobr>, <nobr>&lt;Boolean&gt; <i>disable3D?</i> )</nobr></code></td>
<td>-</td>
<td>Sets the position of an element to coordinates specified by <code>point</code>, using CSS translate or top/left positioning depending on the browser (used by Leaflet internally to position its layers). Forces top/left positioning if <code>disable3D</code> is <code>true</code>.</td>
</tr>
<tr>
<td><code><b>getPosition</b>( <nobr>&lt;HTMLElement&gt; <i>el</i> )</nobr></code></td>
<td><a href="#point">Point</a></td>
<td>Returns the coordinates of an element previously positioned with <code>setPosition</code>.</td>
</tr>
</table>
<h3>Properties</h3>
<table>
<tr>
<th>Property</th>
<th>Type</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>TRANSITION</b></nobr></code></td>
<td><code>String</code></td>
<td>Vendor-prefixed transition style name (e.g. <code><span class="string">'webkitTransition'</span></code> for WebKit).</td>
</tr>
<tr>
<td><code><b>TRANSFORM</b></nobr></code></td>
<td><code>String</code></td>
<td>Vendor-prefixed transform style name.</td>
</tr>
</table>
<h2 id="ihandler">IHandler</h2>
<p>An interface implemented by <a href="#map-interaction-handlers">interaction handlers</a>.</p>
<table>
<tr>
<th class="width100">Method</th>
<th class="width100">Returns</th>
<th>Description</th>
</tr>
<tr>
<td><code><b>enable</b>()</code></td>
<td>-</td>
<td>Enables the handler.</td>
</tr>
<tr>
<td><code><b>disable</b>()</code></td>
<td>-</td>
<td>Disables the handler.</td>
</tr>
<tr>
<td><code><b>enabled</b>()</code></td>
<td><code>Boolean</code></td>
<td>Returns <code>true</code> if the handler is enabled.</td>
</tr>
</table>
<h2 id="version">L.version</h2>
<p>A constant that represents the Leaflet version in use.<p>
<pre><code>L.version // returns "0.4" (or whatever version is currently in use)</code></pre>
<h2 id="noconflict">L.noConflict()</h2>
<p>This method restores the L global variale to the original value it had before Leaflet inclusion, and returns the real Leaflet namespace so you can put it elsewhere, like this:<p>
<pre><code>// L points to some other library
...
// you include Leaflet, it replaces the L variable to Leaflet namespace
var Leaflet = L.noConflict();
// now L points to that other library again, and you can use Leaflet.Map etc.</code></pre>
<hr />
<p class="quiet">&copy; 2012 <a href="http://cloudmade.com">CloudMade</a>. Map data &copy; 2012 <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>.</p>
</div>
<a href="http://github.com/CloudMade/Leaflet"><img id="forkme" src="http://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub" /></a>
<script>
hljs.tabReplace = ' ';
hljs.initHighlightingOnLoad();
</script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push([ '_setAccount', 'UA-4147697-4' ]);
_gaq.push([ '_trackPageview' ]);
(function() {
var ga = document.createElement('script');
ga.type = 'text/javascript';
ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl'
: 'http://www')
+ '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
})();
</script>
<script type="text/javascript">
var uvOptions = {};
(function() {
var uv = document.createElement('script'); uv.type = 'text/javascript'; uv.async = true;
uv.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'widget.uservoice.com/ygv5CFpu3yBQFTFPOAdFg.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(uv, s);
})();
</script>
</body>
</html>