当前位置:   article > 正文

leaflet:入门基础(二)之加载图层_leaflet 图层

leaflet 图层

前言

    上一篇 leaflet 入门基础(一) 讲了如何使用 leaflet ,包括加载地图、绘制图层等。

    这一篇将讲解如何加载多种图层,以及如何寻找底图。

底图资源

    这里提供一个底图资源网站:open whatever map

   打开网址,就可以看到丰富的底图资源

    点击喜欢的底图,会弹出一个信息框,把提供的网址复制下来 

    ⭐其他:高德谷歌腾讯天地图地图瓦片url 

加载底图

    leaflet有两种类型的图层:

     (1)base layer:互斥的图层(在地图上同一时间只能有一个图层可见),比如tile layers;

     (2)overlayers:在base layer之上放置的其他东西。

    我们将前面找的图层资源以base layer形式加载,那么我们一次就只能显示其中一个(而overlayers可以同时显示多个),可以通过 layerControl 切换图层

  1. var baseLayers = {
  2. "Mapbox": mapbox,
  3. "OpenStreetMap": osm
  4. };
  5. var overlays = {
  6. "Marker": marker,
  7. "Roads": roadsLayer
  8. };
  9. L.control.layers(baseLayers, overlays).addTo(map);

    以下是选好的四个baseLayer图层(OSM底图通过设置addTo(map)被选为默认加载,即运行后会显示这个图层

  1. var baseLayers = {
  2. 'Sputnik': L.tileLayer('http://{s}.tiles.maps.sputnik.ru/{z}/{x}/{y}.png', {
  3. maxZoom: 18
  4. }),
  5. "CartoDB Positron": L.tileLayer('http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png', {
  6. maxZoom: 18
  7. }),
  8. "OSM": L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
  9. maxZoom: 18
  10. }).addTo(map),
  11. "OpenTopoMap": L.tileLayer('https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', {
  12. maxZoom: 18
  13. }),
  14. };

    layerControl 切换图层工具

  1. var layerControl = L.control.layers(baseLayers, {}, {
  2. position: 'topleft',
  3. collapsed: true
  4. }).addTo(map);

     效果图

     还可以将上一篇博文绘制的多个图形组合成一个整体通过 layerGroup 作为 overlayer 添加上去

  1. var bj = L.marker([39.92,116.46]).bindPopup('这里是北京');
  2. sh = L.marker([31.213,121.445]).bindPopup('这里是上海');
  3. gz = L.marker([23.16,113.23]).bindPopup('这里是广州');
  4. var cities = L.layerGroup([bj, sh, gz]).addTo(map);

完整代码

  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  5. <title>leaflet Demo 2</title>
  6. <style>
  7. html, body, #map { height: 100%; }
  8. </style>
  9. <!-- css文件 -->
  10. <link rel="stylesheet" href="https://unpkg.com/leaflet@1.4.0/dist/leaflet.css"/>
  11. <!-- js文件 -->
  12. <script src="https://unpkg.com/leaflet@1.4.0/dist/leaflet.js"></script>
  13. </head>
  14. <body>
  15. <div id="map"></div>
  16. <script>
  17. var map = new L.Map('map', {
  18. center: new L.LatLng(39.86,116.45),
  19. zoom: 10
  20. });
  21. var baseLayers = {
  22. 'Sputnik': L.tileLayer('http://{s}.tiles.maps.sputnik.ru/{z}/{x}/{y}.png', {
  23. maxZoom: 18,
  24. attribution:"Sputnik Layer"
  25. }),
  26. "CartoDB Positron": L.tileLayer('http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png', {
  27. maxZoom: 18
  28. }),
  29. "OSM": L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
  30. maxZoom: 18
  31. }).addTo(map),
  32. "OpenTopoMap": L.tileLayer('https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', {
  33. maxZoom: 18
  34. }),
  35. };
  36. var layerControl = L.control.layers(baseLayers, {}, {
  37. position: 'topleft',
  38. collapsed: true
  39. }).addTo(map);
  40. var bj = L.marker([39.92,116.46]).bindPopup('这里是北京');
  41. sh = L.marker([31.213,121.445]).bindPopup('这里是上海');
  42. gz = L.marker([23.16,113.23]).bindPopup('这里是广州');
  43. var cities = L.layerGroup([bj, sh, gz]).addTo(map);
  44. </script>
  45. </body>
  46. </html>

    注:Layer 中的 attribution 属性没什么大用,就是在右下角显示

    只要找到地图服务商提供的数据url(符合各服务标准),基本上都能直接加载

"高德矢量": L.tileLayer('http://wprd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}',{})

   

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/234934
推荐阅读
相关标签