当前位置:   article > 正文

Leaflet-学习_leaflet中文官网

leaflet中文官网

一、官网

英文官网:Leaflet

中文官网:Leaflet

二、介绍

Leaflet 是一个开源并且对移动端友好的交互式地图 JavaScript 库。 它大小仅仅只有39 KB, 并且拥有绝大部分开发者所需要的所有地图特性。

Leaflet 简单、高效并且易用。 它可以高效的运行在桌面和移动平台, 拥有着大量的扩展插件、 优秀的文档、简单易用的API 和完善的案例, 以及可读性较好的 源码 。

三、下载Leaflet

【1】CDN

  1. // html头部引入
  2. <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
  3. <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
  4. // 为避免潜在的安全问题,建议在使用CDN中的Leaflet时启用subresource integrity
  5. <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" integrity="sha512-xodZBNTC5n17Xt2atTPuE1HxjVMSvLVW9ocqUKLsCC5CXdbqCmblAshOMAS6/keqq/sMZMZ19scR4PsZChSR7A==" crossorigin="" />
  6. <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js" integrity="sha512-XQoYMqMTK8LvdxXYG3nZ448hOEQiglfqkJs1NOQV44cWnUrBc8PkAOcXy20w0vlaXaVUearIOBhiXZ5V3ynxwA==" crossorigin=""></script>

【2】下载到本地

版本说明
Leaflet 1.7.1稳定版,于2020年9月3日发布。
Leaflet 1.8-dev开发版,在master分支上开发。
Leaflet 0.7.7旧版,于2013年11月18日发布,最新更新于2015年10月26日。

在从上述链接下载文件到本地,将下载的文件解压到项目目录中,并将其添加到HTML代码的开头

  1. <link rel="stylesheet" href="/leftlet/leaflet.css" />
  2. <script src="/leftlet/leaflet.js"></script>

【3】npm

npm install leaflet

四、简单入门教程(开始使用leafLet)

【1】案例

在 id 为map的 div 中创建一个地图, 选择瓦片数据源, 添加一个标记点并且在弹出层上显示文本

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title></title>
  6. <!--leaflet样式文件-->
  7. <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
  8. <!--leaflet核心JS文件-->
  9. <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
  10. <style>
  11. /*必须指定宽高度*/
  12. #map {
  13. width: 800px;
  14. height: 500px;
  15. }
  16. </style>
  17. </head>
  18. <body>
  19. <div id="map">
  20. </div>
  21. <script>
  22. // 创建一个地图
  23. var map = L.map("map", {
  24. center: [23.127013, 113.366266],
  25. zoom: 8
  26. });
  27. // 选择瓦片数据源
  28. L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map);
  29. // 添加一个标记点并且在弹出层上显示文本
  30. L.marker([23.127013, 113.366266]).addTo(map).bindPopup('我在这里').openPopup();
  31. </script>
  32. </body>
  33. </html>

【2】效果

五、瓦片地图介绍

其实瓦片地图并不是什么特殊的文件,就是最普通的png图片。之所以为地图,就是带有了地理坐标。打开network,查看其请求的的url就能明白其请求的原理了。我们上面看到的地图是由一张张带有地理坐标的图片拼接起来的

 首先我们要明白瓦片地图的请求原理。上面其中一个图片的URL为:https://a.tile.openstreetmap.org/8/209/112.png

主要在于最后三位,含义依次是8级的209行、112列(或者209列、112行)。8就是下图中的level(地图放大缩小层级),而行列号对应每一级level里面的唯一一个瓦片(图片),那么地图框架为我们完成的就是,在对应地图层级,请求对应范围内的瓦片,而这个协议规则一般是通用的谷歌标准(也有其他标准,看框架是否支持),比如第9级中的第一个不会叫9-0-0,而可能是9-1-1(真实可能不是)

 六、 Leaflet加载各种地图  

 Leaflet调用各种地图的功能十分复杂,幸好有leaflet.ChineseTmsProviders 这个插件,此插件源代码如下,你可以直接复制下面代码创建为js文件(可命名为leaflet.ChineseTmsProviders.js),然后引入你的HTML页面便可使用

  1. // this L.CRS.Baidu from https://github.com/muyao1987/leaflet-tileLayer-baidugaode/blob/master/src/tileLayer.baidu.js
  2. if (L.Proj) {
  3. L.CRS.Baidu = new L.Proj.CRS('EPSG:900913', '+proj=merc +a=6378206 +b=6356584.314245179 +lat_ts=0.0 +lon_0=0.0 +x_0=0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs', {
  4. resolutions: function () {
  5. var level = 19
  6. var res = [];
  7. res[0] = Math.pow(2, 18);
  8. for (var i = 1; i < level; i++) {
  9. res[i] = Math.pow(2, (18 - i))
  10. }
  11. return res;
  12. }(),
  13. origin: [0, 0],
  14. bounds: L.bounds([20037508.342789244, 0], [0, 20037508.342789244])
  15. });
  16. }
  17. L.TileLayer.ChinaProvider = L.TileLayer.extend({
  18. initialize: function(type, options) { // (type, Object)
  19. var providers = L.TileLayer.ChinaProvider.providers;
  20. options = options || {}
  21. var parts = type.split('.');
  22. var providerName = parts[0];
  23. var mapName = parts[1];
  24. var mapType = parts[2];
  25. var url = providers[providerName][mapName][mapType];
  26. options.subdomains = providers[providerName].Subdomains;
  27. options.key = options.key || providers[providerName].key;
  28. if ('tms' in providers[providerName]) {
  29. options.tms = providers[providerName]['tms']
  30. }
  31. L.TileLayer.prototype.initialize.call(this, url, options);
  32. }
  33. });
  34. L.TileLayer.ChinaProvider.providers = {
  35. TianDiTu: {
  36. Normal: {
  37. Map: "http://t{s}.tianditu.gov.cn/DataServer?T=vec_w&X={x}&Y={y}&L={z}&tk={key}",
  38. Annotion: "http://t{s}.tianditu.gov.cn/DataServer?T=cva_w&X={x}&Y={y}&L={z}&tk={key}"
  39. },
  40. Satellite: {
  41. Map: "http://t{s}.tianditu.gov.cn/DataServer?T=img_w&X={x}&Y={y}&L={z}&tk={key}",
  42. Annotion: "http://t{s}.tianditu.gov.cn/DataServer?T=cia_w&X={x}&Y={y}&L={z}&tk={key}"
  43. },
  44. Terrain: {
  45. Map: "http://t{s}.tianditu.gov.cn/DataServer?T=ter_w&X={x}&Y={y}&L={z}&tk={key}",
  46. Annotion: "http://t{s}.tianditu.gov.cn/DataServer?T=cta_w&X={x}&Y={y}&L={z}&tk={key}"
  47. },
  48. Subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'],
  49. key: "174705aebfe31b79b3587279e211cb9a"
  50. },
  51. GaoDe: {
  52. Normal: {
  53. Map: 'http://webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}'
  54. },
  55. Satellite: {
  56. Map: 'http://webst0{s}.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}',
  57. Annotion: 'http://webst0{s}.is.autonavi.com/appmaptile?style=8&x={x}&y={y}&z={z}'
  58. },
  59. Subdomains: ["1", "2", "3", "4"]
  60. },
  61. Google: {
  62. Normal: {
  63. Map: "http://www.google.cn/maps/vt?lyrs=m@189&gl=cn&x={x}&y={y}&z={z}"
  64. },
  65. Satellite: {
  66. Map: "http://www.google.cn/maps/vt?lyrs=s@189&gl=cn&x={x}&y={y}&z={z}",
  67. Annotion: "http://www.google.cn/maps/vt?lyrs=y@189&gl=cn&x={x}&y={y}&z={z}"
  68. },
  69. Subdomains: []
  70. },
  71. Geoq: {
  72. Normal: {
  73. Map: "http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer/tile/{z}/{y}/{x}",
  74. PurplishBlue: "http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}",
  75. Gray: "http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetGray/MapServer/tile/{z}/{y}/{x}",
  76. Warm: "http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetWarm/MapServer/tile/{z}/{y}/{x}",
  77. },
  78. Theme: {
  79. Hydro: "http://thematic.geoq.cn/arcgis/rest/services/ThematicMaps/WorldHydroMap/MapServer/tile/{z}/{y}/{x}"
  80. },
  81. Subdomains: []
  82. },
  83. OSM: {
  84. Normal: {
  85. Map: "http://{s}.tile.osm.org/{z}/{x}/{y}.png",
  86. },
  87. Subdomains: ['a', 'b', 'c']
  88. },
  89. Baidu: {
  90. Normal: {
  91. Map: 'http://online{s}.map.bdimg.com/onlinelabel/?qt=tile&x={x}&y={y}&z={z}&styles=pl&scaler=1&p=1'
  92. },
  93. Satellite: {
  94. Map: 'http://shangetu{s}.map.bdimg.com/it/u=x={x};y={y};z={z};v=009;type=sate&fm=46',
  95. Annotion: 'http://online{s}.map.bdimg.com/tile/?qt=tile&x={x}&y={y}&z={z}&styles=sl&v=020'
  96. },
  97. Subdomains: '0123456789',
  98. tms: true
  99. }
  100. };
  101. L.tileLayer.chinaProvider = function(type, options) {
  102. return new L.TileLayer.ChinaProvider(type, options);
  103. };

在HTML页面中引入leaflet.ChineseTmsProviders.js,加载多种瓦片地图

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title></title>
  6. <!--leaflet样式文件-->
  7. <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
  8. <!--leaflet核心JS文件-->
  9. <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
  10. <!-- 引入 ChineseTmsProviders.js文件-->
  11. <script src="./leaflet/leaflet.ChineseTmsProviders.js"></script>
  12. <style>
  13. /*必须指定宽高度*/
  14. #map {
  15. width: 800px;
  16. height: 500px;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <div id="map"></div>
  22. <script>
  23. // 天地图内容
  24. var TianDinormalm = L.tileLayer.chinaProvider('TianDiTu.Normal.Map', {
  25. maxZoom: 18,
  26. minZoom: 5
  27. });
  28. var TianDinormala = L.tileLayer.chinaProvider('TianDiTu.Normal.Annotion', {
  29. maxZoom: 18,
  30. minZoom: 5
  31. });
  32. var TianDiimgm = L.tileLayer.chinaProvider('TianDiTu.Satellite.Map', {
  33. maxZoom: 18,
  34. minZoom: 5
  35. });
  36. var TianDiimga = L.tileLayer.chinaProvider('TianDiTu.Satellite.Annotion', {
  37. maxZoom: 18,
  38. minZoom: 5
  39. });
  40. var TianDi = L.layerGroup([TianDinormalm, TianDinormala]);
  41. var TianDiImage = L.layerGroup([TianDiimgm, TianDiimga]);
  42. // 高德地图
  43. var Gaode = L.tileLayer.chinaProvider('GaoDe.Normal.Map', {
  44. maxZoom: 18,
  45. minZoom: 5
  46. });
  47. var Gaodeimgem = L.tileLayer.chinaProvider('GaoDe.Satellite.Map', {
  48. maxZoom: 18,
  49. minZoom: 5
  50. });
  51. var Gaodeimga = L.tileLayer.chinaProvider('GaoDe.Satellite.Annotion', {
  52. maxZoom: 18,
  53. minZoom: 5
  54. });
  55. var GaodeImage = L.layerGroup([Gaodeimgem, Gaodeimga]);
  56. // 谷歌地图
  57. var Google = L.tileLayer.chinaProvider('Google.Normal.Map', {
  58. maxZoom: 18,
  59. minZoom: 5
  60. })
  61. var Googleimgem = L.tileLayer.chinaProvider('Google.Satellite.Map', {
  62. maxZoom: 18,
  63. minZoom: 5
  64. });
  65. var Googleimga = L.tileLayer.chinaProvider('Google.Satellite.Annotion', {
  66. maxZoom: 18,
  67. minZoom: 5
  68. });
  69. var GoogleImage = L.layerGroup([Googleimgem, Googleimga]);
  70. // OSM地图
  71. var OSM = L.tileLayer.chinaProvider('OSM.Normal.Map', {
  72. maxZoom: 18,
  73. minZoom: 5
  74. });
  75. // 百度地图
  76. var Baidu = L.tileLayer.chinaProvider('Baidu.Normal.Map', {
  77. maxZoom: 18,
  78. minZoom: 5
  79. });
  80. var Baiduimgem = L.tileLayer.chinaProvider('Baidu.Satellite.Map', {
  81. maxZoom: 18,
  82. minZoom: 5
  83. });
  84. var Baiduimga = L.tileLayer.chinaProvider('Baidu.Satellite.Annotion', {
  85. maxZoom: 18,
  86. minZoom: 5
  87. });
  88. var BaiduImage = L.layerGroup([Baiduimgem, Baiduimga]);
  89. // 智图地图
  90. var normalm1 = L.tileLayer.chinaProvider('Geoq.Normal.Map', {
  91. maxZoom: 18,
  92. minZoom: 5
  93. });
  94. var normalm2 = L.tileLayer.chinaProvider('Geoq.Normal.Color', {
  95. maxZoom: 18,
  96. minZoom: 5
  97. });
  98. var normalm3 = L.tileLayer.chinaProvider('Geoq.Normal.PurplishBlue', {
  99. maxZoom: 18,
  100. minZoom: 5
  101. });
  102. var normalm4 = L.tileLayer.chinaProvider('Geoq.Normal.Gray', {
  103. maxZoom: 18,
  104. minZoom: 5
  105. });
  106. var normalm5 = L.tileLayer.chinaProvider('Geoq.Normal.Warm', {
  107. maxZoom: 18,
  108. minZoom: 5
  109. });
  110. var normalm6 = L.tileLayer.chinaProvider('Geoq.Normal.Cold', {
  111. maxZoom: 18,
  112. minZoom: 5
  113. });
  114. var baseLayers = {
  115. "天地图": TianDi,
  116. "天地图影像": TianDiImage,
  117. "高德地图": Gaode,
  118. "高德影像": GaodeImage,
  119. "谷歌地图": Google,
  120. "谷歌影像": GoogleImage,
  121. "OSM地图": OSM,
  122. "百度地图": Baidu,
  123. "百度影像": BaiduImage,
  124. "智图地图": normalm1,
  125. "智图多彩": normalm2,
  126. "智图午夜蓝": normalm3,
  127. "智图灰色": normalm4,
  128. "智图暖色": normalm5,
  129. "智图冷色": normalm6,
  130. }
  131. var map = L.map("map", {
  132. center: [23.127013, 113.366266],
  133. zoom: 8,
  134. layers: [Gaode], // 选择baseLayers的地图
  135. zoomControl: false,
  136. key: 'Your key', // 如果你使用天地图,请添加密钥key
  137. });
  138. L.control.layers(baseLayers, null).addTo(map);
  139. L.control.zoom({
  140. zoomInTitle: '放大',
  141. zoomOutTitle: '缩小'
  142. }).addTo(map);
  143. </script>
  144. </body>
  145. </html>

 七、Leaflet地图小案例

【1】地图事件

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title></title>
  6. <!--leaflet样式文件-->
  7. <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
  8. <!--leaflet核心JS文件-->
  9. <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
  10. <!-- 引入 ChineseTmsProviders.js文件-->
  11. <script src="./leaflet/leaflet.ChineseTmsProviders.js"></script>
  12. <style>
  13. /*必须指定宽高度*/
  14. #map {
  15. width: 800px;
  16. height: 500px;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <div id="map"></div>
  22. <script>
  23. // 高德地图
  24. var Gaode = L.tileLayer.chinaProvider('GaoDe.Normal.Map', {
  25. maxZoom: 18,
  26. minZoom: 5
  27. });
  28. var map = L.map("map", {
  29. center: [23.127013, 113.366266],
  30. zoom: 8,
  31. layers: [Gaode],
  32. zoomControl: false,
  33. });
  34. //地图加载完成
  35. map.once("loadEnd", function () {
  36. console.log("地图加载完成");
  37. });
  38. //地图点击
  39. map.on("click", function (e) {
  40. console.log("你在地图" + e.latlng + "点击了");
  41. });
  42. //地图双击
  43. map.on("dblclick", function (e) {
  44. console.log("你在地图上双击了!");
  45. });
  46. //地图移动
  47. map.on("move", function (e) {
  48. console.log("地图移动了");
  49. });
  50. //地图层级改变
  51. map.on("zoom", function (e) {
  52. console.log("地图层级改变了");
  53. });
  54. </script>
  55. </body>
  56. </html>

【2】 中心点和层级显示

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title></title>
  6. <!--leaflet样式文件-->
  7. <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
  8. <!--leaflet核心JS文件-->
  9. <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
  10. <!-- 引入 ChineseTmsProviders.js文件-->
  11. <script src="./leaflet/leaflet.ChineseTmsProviders.js"></script>
  12. <style>
  13. /*必须指定宽高度*/
  14. #map {
  15. width: 800px;
  16. height: 500px;
  17. }
  18. .info {
  19. padding: 10px;
  20. background-color: #fff;
  21. border-radius: 4px;
  22. }
  23. </style>
  24. </head>
  25. <body>
  26. <div id="map"></div>
  27. <script>
  28. // 高德地图
  29. var Gaode = L.tileLayer.chinaProvider('GaoDe.Normal.Map', {
  30. maxZoom: 18,
  31. minZoom: 5
  32. });
  33. var map = L.map("map", {
  34. center: [23.127013, 113.366266],
  35. zoom: 8,
  36. layers: [Gaode],
  37. zoomControl: true,
  38. });
  39. // 设置地图中心点与缩放级别
  40. map.setView([23.165103, 113.405802], 15);
  41. // 自定义info控件
  42. var info = L.control();
  43. info.onAdd = function (map) {
  44. this.infoDiv = L.DomUtil.create("div", "info"); // 创建一个class为info的div
  45. this.update(map.getZoom(), map.getCenter()); // map.getZoom()获取地图当前层级 map.getCenter()获取地图当前中心点
  46. return this.infoDiv;
  47. };
  48. //根据当前地图状态更新显示信息
  49. info.update = function (zoom, center) {
  50. this.infoDiv.innerHTML =
  51. "<b>当前地图状态</b><br/>" +
  52. "<b>zoom: </b>" + zoom + "<br/>" +
  53. "<b>center: </b>" + center + "";
  54. };
  55. info.addTo(map);
  56. //监听地图状态变化
  57. map.on("move", moveMap);
  58. function moveMap(e) {
  59. info.update(map.getZoom(), map.getCenter());
  60. }
  61. </script>
  62. </body>
  63. </html>

 【3】 获取和设置地图可视范围

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title></title>
  6. <!--leaflet样式文件-->
  7. <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
  8. <!--leaflet核心JS文件-->
  9. <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
  10. <!-- 引入 ChineseTmsProviders.js文件-->
  11. <script src="./leaflet/leaflet.ChineseTmsProviders.js"></script>
  12. <style>
  13. /*必须指定宽高度*/
  14. #map {
  15. width: 800px;
  16. height: 500px;
  17. }
  18. .info {
  19. padding: 10px;
  20. background-color: #fff;
  21. border-radius: 4px;
  22. }
  23. </style>
  24. </head>
  25. <body>
  26. <div id="map"></div>
  27. <script>
  28. // 高德地图
  29. var Gaode = L.tileLayer.chinaProvider('GaoDe.Normal.Map', {
  30. maxZoom: 18,
  31. minZoom: 5
  32. });
  33. var map = L.map("map", {
  34. center: [23.127013, 113.366266],
  35. zoom: 8,
  36. layers: [Gaode],
  37. zoomControl: true,
  38. });
  39. // 设置地图当前显示范围有两种方法:一是用fitBounds(bounds),二是flyToBounds(bounds),
  40. // 区别在于后者有飞行动画效果,前者没有;
  41. // 其中bounds参数可以上一个LatLngBounds对象,也可以是一个包含矩形对角点的数组。
  42. // LatLngBounds对象
  43. var corner1 = L.latLng(30, 106);
  44. var corner2 = L.latLng(28.9, 105.51);
  45. var bounds = L.latLngBounds(corner1, corner2);
  46. // 第一种 fitBounds(bounds) 没有飞行效果
  47. //map.fitBounds(bounds)
  48. // 第二种 flyToBounds(bounds)有飞行效果
  49. map.flyToBounds(bounds);
  50. // 包含矩形对角点的数组
  51. // map.fitBounds([
  52. // [30, 106],
  53. // [28.9, 105.51]
  54. // ]);
  55. // 自定义info控件
  56. var info = L.control();
  57. info.onAdd = function (map) {
  58. this.infoDiv = L.DomUtil.create("div", "info"); // 创建一个class为info的div
  59. this.update(map.getBounds()); // map.getBounds()获取地图可视范围
  60. return this.infoDiv;
  61. };
  62. //根据当前地图状态更新显示信息
  63. info.update = function (bounds) {
  64. this.infoDiv.innerHTML =
  65. "<b>当前地图显示范围</b><br/>" +
  66. "<b>右上角: </b>" + bounds.getNorthEast() + "<br/>" +
  67. "<b>左下角: </b>" + bounds.getSouthWest() + "";
  68. };
  69. info.addTo(map);
  70. //监听地图状态变化
  71. map.on("move", moveMap);
  72. function moveMap(e) {
  73. info.update(map.getBounds());
  74. }
  75. </script>
  76. </body>
  77. </html>

【4】 mark的使用

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title></title>
  6. <!--leaflet样式文件-->
  7. <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
  8. <!--leaflet核心JS文件-->
  9. <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
  10. <!-- 引入 ChineseTmsProviders.js文件-->
  11. <script src="./leaflet/leaflet.ChineseTmsProviders.js"></script>
  12. <style>
  13. /*必须指定宽高度*/
  14. #map {
  15. width: 800px;
  16. height: 500px;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <div id="map"></div>
  22. <script>
  23. // 高德地图
  24. var Gaode = L.tileLayer.chinaProvider('GaoDe.Normal.Map', {
  25. maxZoom: 18,
  26. minZoom: 5
  27. });
  28. var map = L.map("map", {
  29. center: [23.127013, 113.366266],
  30. zoom: 8,
  31. layers: [Gaode],
  32. zoomControl: true,
  33. });
  34. // 添加marker
  35. marker = L.marker([23.127013, 113.366266], {
  36. draggable: true,
  37. autoPan: false
  38. });
  39. // marker添加到地图上
  40. marker.addTo(map);
  41. // marker绑定气泡
  42. marker.bindPopup("我是一个图标");
  43. // marker绑定事件,当拖动完成时触发
  44. marker.on('dragend', function () {
  45. console.log('图标移动完成');
  46. });
  47. </script>
  48. </body>
  49. </html>

【5】 mark自定义icon图片

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title></title>
  6. <!--leaflet样式文件-->
  7. <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
  8. <!--leaflet核心JS文件-->
  9. <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
  10. <!-- 引入 ChineseTmsProviders.js文件-->
  11. <script src="./leaflet/leaflet.ChineseTmsProviders.js"></script>
  12. <style>
  13. /*必须指定宽高度*/
  14. #map {
  15. width: 800px;
  16. height: 500px;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <div id="map"></div>
  22. <script>
  23. // 高德地图
  24. var Gaode = L.tileLayer.chinaProvider('GaoDe.Normal.Map', {
  25. maxZoom: 18,
  26. minZoom: 5
  27. });
  28. var map = L.map("map", {
  29. center: [23.127013, 113.366266],
  30. zoom: 8,
  31. layers: [Gaode],
  32. zoomControl: true,
  33. });
  34. // 自定义图标
  35. var customIcon = L.icon({
  36. iconUrl: './images/like.svg',
  37. iconSize: [55, 55]
  38. });
  39. // 添加marker,并设置图标
  40. marker = L.marker([23.167561, 113.400282], {
  41. draggable: true,
  42. autoPan: false,
  43. icon: customIcon
  44. }).addTo(map);
  45. // marker绑定气泡
  46. marker.bindPopup("我是一个图标");
  47. // marker绑定事件,当拖动完成时触发
  48. marker.on('dragend', function () {
  49. console.log('图标移动完成');
  50. });
  51. </script>
  52. </body>
  53. </html>

 【6】tooltip的使用

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title></title>
  6. <!--leaflet样式文件-->
  7. <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
  8. <!--leaflet核心JS文件-->
  9. <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
  10. <!-- 引入 ChineseTmsProviders.js文件-->
  11. <script src="./leaflet/leaflet.ChineseTmsProviders.js"></script>
  12. <style>
  13. /*必须指定宽高度*/
  14. #map {
  15. width: 800px;
  16. height: 500px;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <div id="map"></div>
  22. <script>
  23. // 高德地图
  24. var Gaode = L.tileLayer.chinaProvider('GaoDe.Normal.Map', {
  25. maxZoom: 18,
  26. minZoom: 5
  27. });
  28. var map = L.map("map", {
  29. center: [23.127013, 113.366266],
  30. zoom: 8,
  31. layers: [Gaode],
  32. zoomControl: true,
  33. });
  34. // 添加marker
  35. marker = L.marker([23.127013, 113.366266], {
  36. draggable: true,
  37. autoPan: false,
  38. }).addTo(map);
  39. // tooltip与marker绑定
  40. var t = marker.bindTooltip("my tooltip text").openTooltip();
  41. // 实现动态修改内容
  42. t.setTooltipContent('<p>动态修改与mark绑定的ToolTip~ </p>')
  43. // 实现单独叠加
  44. L.tooltip().setLatLng([23.129013, 114.366266]).setContent('<p>单独叠加的ToolTip</p>').addTo(map);
  45. </script>
  46. </body>
  47. </html>

 【7】popup的使用

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title></title>
  6. <!--leaflet样式文件-->
  7. <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
  8. <!--leaflet核心JS文件-->
  9. <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
  10. <!-- 引入 ChineseTmsProviders.js文件-->
  11. <script src="./leaflet/leaflet.ChineseTmsProviders.js"></script>
  12. <style>
  13. /*必须指定宽高度*/
  14. #map {
  15. width: 800px;
  16. height: 500px;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <div id="map"></div>
  22. <script>
  23. // 高德地图
  24. var Gaode = L.tileLayer.chinaProvider('GaoDe.Normal.Map', {
  25. maxZoom: 18,
  26. minZoom: 5
  27. });
  28. var map = L.map("map", {
  29. center: [23.127013, 113.366266],
  30. zoom: 8,
  31. layers: [Gaode],
  32. zoomControl: true,
  33. });
  34. // 添加marker
  35. marker = L.marker([23.127013, 113.366266], {
  36. draggable: true,
  37. autoPan: false,
  38. }).addTo(map);
  39. // popup与marker绑定
  40. var t = marker.bindPopup("my popup text")
  41. // 实现动态修改内容
  42. t.setPopupContent('<p>动态修改与mark绑定的popup~ </p>')
  43. // 实现单独叠加
  44. L.popup().setLatLng([23.129013, 114.366266]).setContent('<p>单独叠加的popup</p>').openOn(map);
  45. </script>
  46. </body>
  47. </html>

【8】 线的显示

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title></title>
  6. <!--leaflet样式文件-->
  7. <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
  8. <!--leaflet核心JS文件-->
  9. <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
  10. <!-- 引入 ChineseTmsProviders.js文件-->
  11. <script src="./leaflet/leaflet.ChineseTmsProviders.js"></script>
  12. <style>
  13. /*必须指定宽高度*/
  14. #map {
  15. width: 800px;
  16. height: 500px;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <div id="map"></div>
  22. <script>
  23. // 高德地图
  24. var Gaode = L.tileLayer.chinaProvider('GaoDe.Normal.Map', {
  25. maxZoom: 18,
  26. minZoom: 5
  27. });
  28. var map = L.map("map", {
  29. center: [23.127013, 113.366266],
  30. zoom: 8,
  31. layers: [Gaode],
  32. zoomControl: true,
  33. });
  34. // 从一组坐标点创建红色的线
  35. var latlngs = [
  36. [45.51, -122.68],
  37. [37.77, -122.43],
  38. [34.04, -118.2]
  39. ];
  40. var polyline = L.polyline(latlngs, {
  41. color: 'red',
  42. weight: 8,
  43. dashArray: "5,10,20"
  44. }).addTo(map);
  45. // click操作
  46. polyline.on('click', function () {
  47. console.log('点了线一下')
  48. });
  49. // 地图显示区域为红线所在位置
  50. map.flyToBounds(polyline.getBounds());
  51. </script>
  52. </body>
  53. </html>

 【9】 缩放组件和自定义缩放组件

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title></title>
  6. <!--leaflet样式文件-->
  7. <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
  8. <!--leaflet核心JS文件-->
  9. <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
  10. <!-- 引入 ChineseTmsProviders.js文件-->
  11. <script src="./leaflet/leaflet.ChineseTmsProviders.js"></script>
  12. <style>
  13. /*必须指定宽高度*/
  14. #map {
  15. width: 800px;
  16. height: 500px;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <div id="map"></div>
  22. <script>
  23. // 高德地图
  24. var Gaode = L.tileLayer.chinaProvider('GaoDe.Normal.Map', {
  25. maxZoom: 18,
  26. minZoom: 5
  27. });
  28. var map = L.map("map", {
  29. center: [23.127013, 113.366266],
  30. zoom: 8,
  31. layers: [Gaode],
  32. zoomControl: false,
  33. });
  34. //创建内置缩放组件,将其置于地图的右上角
  35. L.control.zoom({
  36. zoomInText: "
    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/234981
    推荐阅读
    相关标签