Leaflet/examples/layers-control.html

184 lines
9.0 KiB
HTML
Raw Normal View History

<!DOCTYPE html>
<html>
<head>
<title>Leaflet - a modern, lightweight JavaScript library for interactive maps by CloudMade - Layers Control Example</title>
2012-02-14 23:02:29 +08:00
<meta charset="utf-8" />
2012-02-14 23:02:29 +08:00
<meta property="og:title" content="Leaflet — an open-source JavaScript library for interactive maps" />
<meta property="og:description" content="Leaflet is a modern, lightweight BSD-licensed JavaScript library for making tile-based interactive maps for both desktop and mobile web browsers, developed by CloudMade to form the core of its next generation JavaScript API." />
2012-02-14 23:02:29 +08:00
<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">A Modern, Lightweight Open-Source JavaScript Library for Interactive Maps by <a href="http://cloudmade.com">CloudMade</a></h3>
2012-02-14 23:02:29 +08:00
<ul class="nav clearfix">
<li><a href="../index.html">Overview</a></li>
2012-02-14 23:02:29 +08:00
<li><a href="../features.html">Features</a></li>
<li><a href="../examples.html">Examples</a></li>
<li><a href="../reference.html">Documentation</a></li>
<li><a href="../download.html">Download</a></li>
<li><a class="twitter-link" href="http://twitter.com/LeafletJS">@LeafletJS</a></li>
2012-02-14 23:02:29 +08:00
<li><a class="github-link" href="http://github.com/CloudMade/Leaflet">GitHub Repo</a></li>
</ul>
2012-02-14 23:02:29 +08:00
<p><a href="../examples.html">&larr; Back to the list of examples</a></p>
<h3>Layer Groups and Layers Control</h3>
2012-02-14 23:02:29 +08:00
<p>This guide will show you how to group several layers into one, and how to use the layers control to allow users to easily switch different layers on your map.</p>
2011-10-28 20:18:03 +08:00
<p>Note: this only works in the latest (master) version of Leaflet.</p>
2012-02-14 23:02:29 +08:00
<div id="map" style="height: 250px; margin-bottom: 18px"></div>
<script>
var littletonMarker = new L.Marker(new L.LatLng(39.61, -105.02)).bindPopup("This is Littleton, CO."),
denverMarker = new L.Marker(new L.LatLng(39.74, -104.99)).bindPopup("This is Denver, CO."),
auroraMarker = new L.Marker(new L.LatLng(39.73, -104.8)).bindPopup("This is Aurora, CO."),
goldenMarker = new L.Marker(new L.LatLng(39.77, -105.23)).bindPopup("This is Golden, CO.");
var citiesLayer = new L.LayerGroup();
citiesLayer.addLayer(littletonMarker);
citiesLayer.addLayer(denverMarker);
citiesLayer.addLayer(auroraMarker);
citiesLayer.addLayer(goldenMarker);
var cloudmadeAttribution = 'Map data &copy; 2011 OpenStreetMap contributors, Imagery &copy; 2011 CloudMade',
2011-10-27 22:30:57 +08:00
cloudmadeOptions = {maxZoom: 18, attribution: cloudmadeAttribution},
cloudmadeUrl = 'http://{s}.tile.cloudmade.com/BC9A493B41014CAABB98F0471D759707/{styleId}/256/{z}/{x}/{y}.png';
2012-02-14 23:02:29 +08:00
2011-10-27 22:30:57 +08:00
var minimal = new L.TileLayer(cloudmadeUrl, cloudmadeOptions, {styleId: 22677}),
midnightCommander = new L.TileLayer(cloudmadeUrl, cloudmadeOptions, {styleId: 999}),
motorways = new L.TileLayer(cloudmadeUrl, cloudmadeOptions, {styleId: 46561});
2012-02-14 23:02:29 +08:00
var map = new L.Map('map', {center: new L.LatLng(39.73, -104.99), zoom: 10, layers: [minimal, motorways, citiesLayer]});
2012-02-14 23:02:29 +08:00
var baseMaps = {
"Minimal": minimal,
"Night View": midnightCommander
};
2012-02-14 23:02:29 +08:00
var overlayMaps = {
"Motorways": motorways,
"Cities": citiesLayer
};
2012-02-14 23:02:29 +08:00
layersControl = new L.Control.Layers(baseMaps, overlayMaps);
2012-02-14 23:02:29 +08:00
map.addControl(layersControl);
</script>
2012-02-14 23:02:29 +08:00
<p><a target="_blank" href="layers-control-example.html">View example on a separate page &rarr;</a></p>
<h3>Layer Groups</h3>
<p>Lets suppose you have a bunch of layers you want to combine into a group to handle them as one in your code:</p>
<pre><code>var littletonMarker = new L.Marker(new L.LatLng(39.61, -105.02)).bindPopup("This is Littleton, CO."),
denverMarker = new L.Marker(new L.LatLng(39.74, -104.99)).bindPopup("This is Denver, CO."),
auroraMarker = new L.Marker(new L.LatLng(39.73, -104.8)).bindPopup("This is Aurora, CO."),
goldenMarker = new L.Marker(new L.LatLng(39.77, -105.23)).bindPopup("This is Golden, CO.");</code></pre>
<p>Instead of adding them directly to the map, you can do the following, using the <a href="http://leaflet.cloudmade.com/reference.html#layergroup">LayerGroup</a> class:</p>
<pre><code>var citiesLayer = new L.LayerGroup();
citiesLayer.addLayer(littletonMarker)
.addLayer(denverMarker)
.addLayer(auroraMarker)
.addLayer(goldenMarker);
map.addLayer(citiesLayer);</code></pre>
<p>Easy enough! Now you have <code>citiesLayer</code> that combines your city markers into one layer you can add or remove from the map at once.</p>
<h3>Layers Control</h3>
<p>Leaflet has a nice little control that allows your users control what layers they want to see on your map. In addition to showing you how to use it, we'll show another handy use for layer groups.</p>
<p>There are two types of layers &mdash; base layers that are mutually exclusive (only one can be visible on your map), e.g. tile layers, and overlays &mdash; all the other stuff you put over the base layers. In this example, we want to have two base layers (minimal and night-style base map) to switch between, and two overlays to switch on and off &mdash; a pink motorways overlay and city markers (those we created earlier). Lets create those layers and add the default ones to the map:</p>
2011-10-27 22:30:57 +08:00
<pre><code>var cloudmadeUrl = 'http://{s}.tile.cloudmade.com/YOUR-API-KEY/{styleId}/256/{z}/{x}/{y}.png',
cloudmadeAttribution = 'Map data &amp;copy; 2011 OpenStreetMap contributors, Imagery &amp;copy; 2011 CloudMade',
cloudmadeOptions = {maxZoom: 18, attribution: cloudmadeAttribution};
2011-10-27 22:30:57 +08:00
var minimal = new L.TileLayer(cloudmadeUrl, cloudmadeOptions, {styleId: 22677}),
midnightCommander = new L.TileLayer(cloudmadeUrl, cloudmadeOptions, {styleId: 999}),
motorways = new L.TileLayer(cloudmadeUrl, cloudmadeOptions, {styleId: 46561});
var map = new L.Map('map', {
center: new L.LatLng(39.73, -104.99),
zoom: 10,
layers: [minimal, motorways, citiesLayer]
});</code></pre>
<p>Next, we'll create two objects. One will contain our base layers and one will contain our overlays. These are just simple objects with key/value pairs. The key is what sets the text for the layer in the control (e.g. "Night View"). The corresponding value is a reference to the layer (e.g. <code>midnightCommander</code>).</p>
2012-02-14 23:02:29 +08:00
<pre><code>var baseMaps = {
"Minimal": minimal,
"Night View": midnightCommander
};
2012-02-14 23:02:29 +08:00
var overlayMaps = {
"Motorways": motorways,
"Cities": citiesLayer
};</code></pre>
2012-02-14 23:02:29 +08:00
<!-- TODO: Link "Layers Control" to the Layers Control docs when they are created -->
<p>Now, all that's left to do is to create a Layers Control and add it to the map. The first argument passed when creating the layers control is the base layers object. The second argument is the overlays object. Both arguments are optional &mdash; for example, you can pass just a base layers object by ommiting the second argument, or just an overlays objects by passing <code>null</code> as the first argument.</p>
2012-02-14 23:02:29 +08:00
<pre><code>var layersControl = new L.Control.Layers(baseMaps, overlayMaps);
2012-02-14 23:02:29 +08:00
map.addControl(layersControl);</code></pre>
<p>Now lets <a target="_blank" href="layers-control-example.html">view the result on a separate page &rarr;</a></p>
<hr />
2012-02-14 23:02:29 +08:00
<p class="quiet">&copy; 2011 <a href="http://cloudmade.com">CloudMade</a>. Map data &copy; 2011 <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>.</p>
</div>
2012-02-14 23:02:29 +08:00
<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>
2012-02-14 23:02:29 +08:00
<script>
hljs.tabReplace = ' ';
hljs.initHighlightingOnLoad();
2012-02-14 23:02:29 +08:00
</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>
</body>
2012-02-14 23:02:29 +08:00
</html>