zoukankan      html  css  js  c++  java
  • leaflet 领图 一个本地的类似百度地图工具-不连*

    官网:https://leafletjs.com/
    二次开发手册-中文:http://112.91.146.167:9090/api/

    领图(一款给力的开源离线地图解决方案)
    https://blog.csdn.net/weixin_43464964/article/details/106104180

    Leaflet 官方教程 Zoom levels 缩放级别
    https://blog.csdn.net/pyluyuan/article/details/81613130

    二次开发 别人写的一个包demo
    https://github.com/Vhhhhh/leadermap-leaflet
    https://gitee.com/xiaoZ1712/leadermap-leaflet

    如何将图片切割成瓦片图?
    https://blog.csdn.net/STRIVEYe/article/details/88388072

    node实现图片分割
    https://www.cnblogs.com/gating/p/12488443.html


    地图选择器 (这个很重要!!)

    http://datav.aliyun.com/tools/atlas/index.html


    这个帮主文档 也很重要
    https://leafletjs.com/reference-1.7.1.html#path-option


    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Leaflet Map</title>
        <link rel="stylesheet" type="text/css" href="leafletJs/leaflet.css" />
        <script type="text/javascript" src="leafletJs/leaflet-src.js"></script>
        <style>
          html,
          body {
            height: 100%;
            margin: 0;
          }
          #mapId {
            /* height: 100%; */
            height: 600px;
             800px;
          }
        </style>
      </head>
      <body>
        <div id="mapId"></div>
      </body>
      <script type="text/javascript">
        (function (L, undefined) {
          var map;
          var markerId;
          var iconPrefix = "./leafletJs/assets/imageIcons/";
          var polygonToolId;
          var polygonToolArr = [];
    
          function main() {
            createMap(); // 创建地图
            createTileLayer(); // 创建瓦片
            createClickHandle(); // 绑定点击事件
            // polygonPosition1Init();
          }
          main();
    
          function createMap() {
            map = L.map("mapId", {
              maxBounds: [
                // 限制显示区域
                [39.3242059256878, 116.77505493164064],
                [38.949263400347746, 117.64984130859376],
              ],
            }).setView([39.136950954477115, 117.17706441879274], 8); // 初始化中心点,初始化level
          }
    
          function createTileLayer() {
            var url = "http://192.168.76.66:9099/img/{z}/{x}/{y}.png";
            L.tileLayer(url, {
              maxZoom: 15,
              minZoom: 3,
              attribution: "天房科技",
            }).addTo(map);
          }
    
          function createClickHandle() {
            map.on("click", function (e) {
              var latlng = e.latlng;
              console.info(`[${latlng.lat},${latlng.lng}]`);
              // eachLayerConsole();
              // imageMarkerHandle(e);
    
              // polygonTool(e); // 画多边形工具
              // markerHandle(e);
              // showTip(e, "kkk");
            });
          }
    
          function imageMarkerHandle(e) {
            var imageIcon = L.icon({
              iconUrl: iconPrefix + "leaf-green.png",
              shadowUrl: iconPrefix + "leaf-shadow.png",
    
              iconSize: [38, 95], // size of the icon
              shadowSize: [50, 64], // size of the shadow
              iconAnchor: [22, 94], // point of the icon which will correspond to marker's location
              shadowAnchor: [4, 62], // the same for the shadow
              popupAnchor: [-3, -76], // point from which the popup should open relative to the iconAnchor
            });
            markerBaseHandle(function () {
              markerId = L.marker(e.latlng, { icon: imageIcon }).bindPopup(
                "This is Littleton, CO."
              );
            });
          }
    
          function markerHandle(e) {
            markerBaseHandle(function () {
              markerId = L.marker(e.latlng).bindPopup("This is Littleton, CO.");
              markerId.on("click", function (e) {
                // alert("I am marker!");
                console.info("I am marker!");
              });
            });
          }
    
          function markerBaseHandle(callback) {
            map.hasLayer(markerId) && map.removeLayer(markerId);
            callback();
            map.addLayer(markerId);
          }
    
          function showTip(e, txt) {
            L.popup().setLatLng(e.latlng).setContent(txt).openOn(map);
          }
    
          function eachLayerConsole() {
            map.eachLayer(function (layer) {
              console.info("eachLayer =>", layer);
            });
          }
    
          function polygonTool(e) {
            map.hasLayer(polygonToolId) && map.removeLayer(polygonToolId);
            polygonToolArr[polygonToolArr.length] = [e.latlng.lat, e.latlng.lng];
            polygonToolId = L.polygon(polygonToolArr);
            map.addLayer(polygonToolId);
            console.info(
              `var polygon = L.polygon(
                ${JSON.stringify(polygonToolArr)}
                ).bindPopup("提示信息").addTo(map);`
            );
          }
    
          // 开启 polygonTool 函数后 获得此坐标点
          function polygonPosition1Init() {
            var polygon = L.polygon([
    // 坐标点已删除
            ])
              .bindPopup(
                "<div style='250px;'><img src='https://www.baidu.com/img/flexible/logo/pc/result.png' />111</div>"
              ) // 弹框可加图片文字
              .addTo(map);
          }
        })(L);
      </script>
    </html>
    
    

    下面自定义的地图 比较难

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Leaflet Map</title>
        <link rel="stylesheet" type="text/css" href="leafletJs/leaflet.css" />
        <script type="text/javascript" src="leafletJs/leaflet-src.js"></script>
        <script
          type="text/javascript"
          src="leafletJs/assets/geoJson/jquery-1.12.4.js"
        ></script>
        <style>
          html,
          body {
            height: 100%;
            margin: 0;
          }
          #mapId {
            height: 100%;
            background-color: #f2f7f7;
            /* height: 600px;
             800px; */
          }
        </style>
      </head>
      <body>
        <div id="mapId"></div>
      </body>
      <script type="text/javascript">
        (function (L, undefined) {
          var map;
          var markerId;
          var iconPrefix = "./leafletJs/assets/imageIcons/";
          var polygonToolId;
          var polygonToolArr = [];
    
          function main() {
            createMap(); // 创建地图
            // createTileLayer(); // 创建瓦片
            createClickHandle(); // 绑定点击事件
            // polygonPosition1Init();
            getWaikuang();
            getJson(createGeoJson);
          }
          main();
    
          function getWaikuang() {
            $.getJSON(
              "leafletJs/assets/geoJson/100000.json",
              function (data, status) {
                var myStyle = {
                  color: "#666",
                  fillColor: "#fff",
                  weight: 1.5,
                };
                L.geoJSON(data, {
                  style: myStyle,
                }).addTo(map);
              }
            );
          }
    
          function getJson(callback) {
            var addr1 =
              "https://geo.datav.aliyun.com/areas_v3/bound/100000_boundary.json";
            var addr2 = "leafletJs/assets/geoJson/100000_full.json";
            $.getJSON(addr2, function (data, status) {
              console.info("data", data);
              console.info("数据: " + data + "
    状态: " + status);
              callback(data);
            });
          }
    
          function createGeoJson(geoJson1) {
            var myStyle = {
              // className: "dashLines",
              dashArray: "1,6",
              fillColor: "#fff",
              color: "#333",
              weight: 0.5,
              fillOpacity: 0.2,
            };
    
            var geo1 = L.geoJSON(geoJson1, {
              style: myStyle,
            })
              // .bindPopup(function (layer) {
              //   // console.info("layer", layer);
              //   return layer.feature.properties.name;
              // })
              .addTo(map);
            geo1.on("mouseover", function (e) {
              console.info("mouseover e", e);
              var currAdCode = e.layer.feature.properties.adcode;
              map.eachLayer(function (layer) {
                // console.info("eachLayer =>", layer.feature);
                if (
                  layer &&
                  layer.feature &&
                  layer.feature.properties &&
                  layer.feature.properties.adcode === currAdCode
                ) {
                  console.info("layer111", layer);
                  layer.setStyle({ fillColor: "blue" });
                  // L.popup()
                  //   .setLatLng(e.latlng)
                  //   .setContent(layer.feature.properties.name)
                  //   .openOn(map);
                }
              });
            });
            geo1.on("mouseout", function (e) {
              console.info("mouseout e", e);
              var currAdCode = e.layer.feature.properties.adcode;
              map.eachLayer(function (layer) {
                if (
                  layer &&
                  layer.feature &&
                  layer.feature.properties &&
                  layer.feature.properties.adcode === currAdCode
                ) {
                  console.info("222");
                  layer.setStyle({ fillColor: "white" });
                }
              });
            });
            geo1.on("click", function (e) {
              // console.info("click e", e);
            });
          }
    
          function createMap() {
            map = L.map("mapId", {
              maxBounds: [
                // 限制显示区域
                // [39.3242059256878, 116.77505493164064],
                // [38.949263400347746, 117.64984130859376],
              ],
            }).setView([39.136950954477115, 117.17706441879274], 8); // 初始化中心点,初始化level
          }
    
          function createTileLayer() {
            var url = "http://192.168.76.66:9099/img/{z}/{x}/{y}.png";
            L.tileLayer(url, {
              maxZoom: 15,
              minZoom: 3,
              attribution: "天房科技",
            }).addTo(map);
          }
    
          function createClickHandle() {
            map.on("click", function (e) {
              var latlng = e.latlng;
              console.info(`[${latlng.lat},${latlng.lng}]`);
              eachLayerConsole();
              // imageMarkerHandle(e);
    
              // polygonTool(e); // 画多边形工具
              markerHandle(e);
              // showTip(e, "kkk");
            });
          }
    
          function imageMarkerHandle(e) {
            var imageIcon = L.icon({
              iconUrl: iconPrefix + "leaf-green.png",
              shadowUrl: iconPrefix + "leaf-shadow.png",
    
              iconSize: [38, 95], // size of the icon
              shadowSize: [50, 64], // size of the shadow
              iconAnchor: [22, 94], // point of the icon which will correspond to marker's location
              shadowAnchor: [4, 62], // the same for the shadow
              popupAnchor: [-3, -76], // point from which the popup should open relative to the iconAnchor
            });
            markerBaseHandle(function () {
              markerId = L.marker(e.latlng, { icon: imageIcon }).bindPopup(
                "This is Littleton, CO."
              );
            });
          }
    
          function markerHandle(e) {
            markerBaseHandle(function () {
              markerId = L.marker(e.latlng).bindPopup("This is Littleton, CO.");
              markerId.on("click", function (e) {
                // alert("I am marker!");
                console.info("I am marker!");
              });
            });
          }
    
          function markerBaseHandle(callback) {
            map.hasLayer(markerId) && map.removeLayer(markerId);
            callback();
            map.addLayer(markerId);
          }
    
          function showTip(e, txt) {
            L.popup().setLatLng(e.latlng).setContent(txt).openOn(map);
          }
    
          function eachLayerConsole() {
            map.eachLayer(function (layer) {
              console.info("eachLayer =>", layer);
            });
          }
    
          function polygonTool(e) {
            map.hasLayer(polygonToolId) && map.removeLayer(polygonToolId);
            polygonToolArr[polygonToolArr.length] = [e.latlng.lat, e.latlng.lng];
            polygonToolId = L.polygon(polygonToolArr);
            map.addLayer(polygonToolId);
            console.info(
              `var polygon = L.polygon(
                  ${JSON.stringify(polygonToolArr)}
                  ).bindPopup("提示信息").addTo(map);`
            );
          }
    
          // 开启 polygonTool 函数后 获得此坐标点
          function polygonPosition1Init() {
            var polygon = L.polygon([
    // 坐标点已删除
            ])
              .bindPopup(
                "<div style='250px;'><img src='https://www.baidu.com/img/flexible/logo/pc/result.png' />111</div>"
              ) // 弹框可加图片文字
              .addTo(map);
          }
        })(L);
      </script>
    </html>
    
    
    ---------------------------------------------
    生活的意义并不是与他人争高下,而在于享受努力实现目标的过程,结果是对自己行动的嘉奖。
    ↑面的话,越看越不痛快,应该这么说:

    生活的意义就是你自己知道你要做什么,明确目标。没有目标,后面都是瞎扯!
  • 相关阅读:
    [leetcode]259. 3Sum Smaller 三数之和小于目标值
    题型总结之K Sum
    [Leetcode]167. Two Sum II
    题型总结之Sliding Window
    [Leetcode]703. Kth Largest Element in a Stream 数据流中的第 K 大元素
    [Leetcode]307. Range Sum Query
    pycharm同一目录下无法import明明已经存在的.py文件
    python高级特性:迭代器与生成器
    self的含义,为什么类调用方法时需要传参数?
    git三:远程仓库GitHub
  • 原文地址:https://www.cnblogs.com/pengchenggang/p/14958133.html
Copyright © 2011-2022 走看看