• Leaflet个人封装笔记


    <!DOCTYPE html>
    <html>
    <head>
    <link href="style/leaflet.css" type="text/css" rel="stylesheet"/>
    <link href="style/GISindex.css" type="text/css" rel="stylesheet"/>
    <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
    <script src="script/leaflet-src.js"></script>
    <script src="script/Label.js"></script>
    <script src="script/BaseMarkerMethods.js"></script>
    <script src="script/CircleMarker.Label.js"></script>
    <script src="script/Map.Label.js"></script>
    <script src="script/leaflet.js"></script>
    <script src="script/proj4.js"></script>
    <script src="script/proj4leaflet.js"></script>
    <script src="script/icon.js"></script>
    </head>
    <body>
    <div class="tree">树状图</div>
    <div id="map"></div>
    <div id="banner">
    <button id="pointleSel" > 标点 </button>
    <button id="rectangleSel" > 矩形 </button>
    <button id="cycleSel" > 圆形 </button>
    <button id="polygonleSel" > 多边形 </button>
    <button id="lineleSel" > 折线 </button>
    <button id="clear" > 清空图层 </button>
    </div>
    <script>
    var crs = 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',
    {
    resolutions: function () {
    level = 19;
    var res = [];
    res[0] = Math.pow(2, 18);
    for (var i = 1; i < level; i++) {
    res[i] = Math.pow(2, (18 - i))
    }
    return res;
    }(),
    origin: [0,0],
    bounds: L.bounds([20037508.342789244, 0], [0, 20037508.342789244])
    }),

    map = L.map('map', {
    crs: crs,
    center: [30, 100],
    zoom: 8,
    doubleClickZoom:false,
    crollWheelZoom:true,
    load:null
    });
    new L.TileLayer('http://online{s}.map.bdimg.com/tile/?qt=tile&x={x}&y={y}&z={z}&styles=pl&udt=20150518', {
    subdomains: [0,1,2],
    tms: true
    }).addTo(map);
    map.setView([32.055,118.810], 10);

    $(function(){
    DrewPoint(32.055,118.810,3);
    $("#pointleSel").unbind('click').bind('click',function(){
    map.on('mousedown', pointMeasure.mousedown).on('mouseup', pointMeasure.mouseup);
    });
    $("#rectangleSel").unbind('click').bind('click',function(){
    map.on('mousedown', rectangleMeasure.mousedown).on('mouseup', rectangleMeasure.mouseup);
    });
    $("#cycleSel").unbind('click').bind('click',function(){
    map.on('mousedown', cycleMeasure.mousedown).on('mouseup', cycleMeasure.mouseup);
    });
    $("#polygonleSel").unbind('click').bind('click',function(){
    map.on('mousedown', polygonMeasure.mousedown).on('mouseup', polygonMeasure.mouseup);
    });
    $("#lineleSel").unbind('click').bind('click',function(){
    map.on('mousedown', lineMeasure.mousedown).on('mouseup', lineMeasure.mouseup);
    });
    $("#clear").unbind('click').bind('click',function(){
    clear();
    });
    });

    //标点绘制
    var pointMeasure = {
    point: null,
    tips:null,
    layer: L.layerGroup(),
    color: "#0D82D7",

    addTips:function(msg){
    pointMeasure.point.bindPopup(msg).openPopup();
    },
    mousedown: function(e){
    pointMeasure.point=new L.marker(e.latlng,{icon: icon.normalIcon})
    pointMeasure.addTips("坐标:["+e.latlng.lat.toFixed(3)+","+e.latlng.lng.toFixed(3)+"]");
    map.addLayer(pointMeasure.point)
    },
    mouseup: function(e){
    map.dragging.enable();
    map.off('mousedown',pointMeasure.mousedown);
    }
    }
    //矩形绘制
    var rectangleMeasure = {
    startPoint: null,
    endPoint: null,
    rectangle:null,
    area:0,
    layer: L.layerGroup(),
    color: "#0D82D7",
    addRectangle:function(){
    rectangleMeasure.destory();
    var bounds = [];
    bounds.push(rectangleMeasure.startPoint);
    bounds.push(rectangleMeasure.endPoint);
    rectangleMeasure.rectangle = L.rectangle(bounds, {color: rectangleMeasure.color, weight: 1});
    rectangleMeasure.rectangle.addTo(rectangleMeasure.layer);
    var northWestPoint = rectangleMeasure.rectangle.getBounds().getNorthWest(),
    northEastPoint = rectangleMeasure.rectangle.getBounds().getNorthEast(),
    southEastPoint = rectangleMeasure.rectangle.getBounds().getSouthEast();
    var width = northWestPoint.distanceTo(northEastPoint)/1000,
    height = northEastPoint.distanceTo(southEastPoint)/1000;
    area = Number(width) * Number(height);
    rectangleMeasure.layer.addTo(map);
    // rectangleMeasure.addTips("面积:"+area.toFixed(3)+"平方公里");
    },
    addTips:function(msg){
    //msg内可以直接写html内容,样式自调
    rectangleMeasure.rectangle.bindPopup(msg).openPopup();
    },
    close:function(){
    },
    mousedown: function(e){
    rectangleMeasure.rectangle = null;
    rectangleMeasure.tips = null;
    map.dragging.disable();
    rectangleMeasure.startPoint = e.latlng;
    map.on('mousemove',rectangleMeasure.mousemove)
    },
    mousemove:function(e){
    rectangleMeasure.endPoint = e.latlng;
    rectangleMeasure.addRectangle();
    map.off('mousedown ', rectangleMeasure.mousedown).on('mouseup', rectangleMeasure.mouseup);
    },
    mouseup: function(e){
    map.dragging.enable();
    rectangleMeasure.addRectangle();
    rectangleMeasure.addTips("面积:"+area.toFixed(3)+"平方公里");
    map.off('mousemove',rectangleMeasure.mousemove).off('mouseup', rectangleMeasure.mouseup).off('mousedown', rectangleMeasure.mousedown);
    map.on('mouseover', rectangleMeasure.mouseover);

    },
    /**
    * 这个移入事件不知道为什么不是很敏感,暂时没有进行处理
    * @return {[type]} [description]
    */
    mouseover:function(){
    $(".tree").append("移入一次");
    },
    destory:function(){
    if(rectangleMeasure.rectangle)
    rectangleMeasure.layer.removeLayer(rectangleMeasure.rectangle);
    }
    }
    //圆形绘制
    var cycleMeasure = {
    startPoint: null,
    endPoint: null,
    circle:null,
    tips:null,
    color: "#0D82D7",
    fillOpacity:0.2,
    radius:null,
    addTips:function(msg){
    cycleMeasure.circle.bindPopup(msg).openPopup();
    },
    mousedown: function(e){
    cycleMeasure.circle = new L.circle();
    cycleMeasure.tips = null;
    map.dragging.disable();
    cycleMeasure.startPoint = e.latlng;
    map.on('mousemove',cycleMeasure.mousemove)
    },
    mousemove:function(e){
    if(cycleMeasure.startPoint) {
    cycleMeasure.radius = L.latLng(e.latlng).distanceTo(cycleMeasure.startPoint);
    cycleMeasure.circle.setLatLng(cycleMeasure.startPoint);
    cycleMeasure.circle.setRadius(cycleMeasure.radius);
    cycleMeasure.circle.setStyle({color: cycleMeasure.color, weight: 1});
    // cycleMeasure.circle.setOpacity({fillOpacity:cycleMeasure.fillOpacity});
    map.addLayer(cycleMeasure.circle);
    }
    },
    mouseup: function(e){
    cycleMeasure.radius = L.latLng(e.latlng).distanceTo(cycleMeasure.startPoint);
    cycleMeasure.radius = L.latLng(e.latlng).distanceTo(cycleMeasure.startPoint);
    cycleMeasure.circle.setLatLng(cycleMeasure.startPoint);
    cycleMeasure.circle.setRadius(cycleMeasure.radius);
    cycleMeasure.circle.setStyle({color: cycleMeasure.color, weight: 1});
    map.addLayer(cycleMeasure.circle);
    var area = Number(cycleMeasure.radius)/1000 * Number(cycleMeasure.radius)/1000*Math.PI;
    cycleMeasure.addTips("面积:"+area.toFixed(3)+"平方公里");
    map.dragging.enable();
    map.off('mousemove',cycleMeasure.mousemove).off('mouseup', cycleMeasure.mouseup).off('mousedown', cycleMeasure.mousedown);
    }
    }
    //多边形形绘制
    var polygonMeasure = {
    polygons:new L.polyline([]),
    tips:null,
    color: "#0D82D7",
    points:[],
    fillOpacity:0.2,
    polygonsEnd:new L.polyline([]),
    lines:new L.polyline([]),
    addTips:function(msg){
    polygonMeasure.polygonsEnd.bindPopup(msg).openPopup();
    },

    mousedown: function(e){
    polygonMeasure.points.push([e.latlng.lat,e.latlng.lng])
    polygonMeasure.lines.addLatLng(e.latlng)
    map.addLayer(polygonMeasure.lines)
    map.addLayer(L.circle(e.latlng,{color:polygonMeasure.color,fillOpacity:polygonMeasure.fillOpacity}))
    map.on('mousemove',polygonMeasure.mousemove).on('dblclick',polygonMeasure.dblclick)
    },
    mousemove:function(e){
    if(polygonMeasure.points.length>0) {
    ls=[polygonMeasure.points[polygonMeasure.points.length-1],[e.latlng.lat,e.latlng.lng]]
    polygonMeasure.polygons.setLatLngs(ls)
    polygonMeasure.polygons.setStyle({color:polygonMeasure.color,fillOpacity:polygonMeasure.fillOpacity})
    map.addLayer(polygonMeasure.polygons)

    }
    map.on('dblclick',polygonMeasure.dblclick)

    },
    mouseup: function(e){
    map.on('mousemove',polygonMeasure.mousemove).on('dblclick',polygonMeasure.dblclick)
    },
    dblclick:function(e)
    {
    polygonMeasure.polygonsEnd = L.polygon([polygonMeasure.points],{color:polygonMeasure.color,fillOpacity:polygonMeasure.fillOpacity})
    map.addLayer(polygonMeasure.polygonsEnd)
    var area = GetArea(polygonMeasure.points);
    polygonMeasure.addTips("面积:"+area.toFixed(3)+"平方公里");
    polygonMeasure.points=[];
    polygonMeasure.lines=new L.polyline([])
    polygonMeasure.polygons=new L.polyline([])
    map.off('mousemove',polygonMeasure.mousemove).off('mouseup', polygonMeasure.mouseup).off('mousedown', polygonMeasure.mousedown).off('dblclick',polygonMeasure.dblclick);
    }
    }
    //折线绘制
    var lineMeasure = {
    tempLines:new L.polyline([]),
    tempLinesEnd:new L.polyline([]),
    tips:null,
    color: "#0D82D7",
    points:[],
    length:0,
    fillOpacity:0.2,
    lines:null,
    addTips:function(msg){
    lineMeasure.tempLinesEnd.bindPopup(msg).openPopup();
    },
    mousedown: function(e){
    lineMeasure.lines = new L.polyline(lineMeasure.points,{color:lineMeasure.color,fillOpacity:lineMeasure.fillOpacity});
    lineMeasure.points.push([e.latlng.lat,e.latlng.lng])
    lineMeasure.lines.addLatLng(e.latlng)
    map.addLayer(lineMeasure.lines)
    map.addLayer(L.circle(e.latlng,{color:lineMeasure.color,fillOpacity:lineMeasure.fillOpacity}))
    map.on('mousemove',lineMeasure.mousemove).on('dblclick',lineMeasure.dblclick)
    },
    mousemove:function(e){

    if(lineMeasure.points.length>0) {
    ls=[lineMeasure.points[lineMeasure.points.length-1],[e.latlng.lat,e.latlng.lng]]
    lineMeasure.length += L.latLng(e.latlng).distanceTo(lineMeasure.points[lineMeasure.points.length-1])/1000;
    lineMeasure.tempLines.setLatLngs(ls)
    map.addLayer(lineMeasure.tempLines,{color:lineMeasure.color,fillOpacity:lineMeasure.fillOpacity})
    }
    map.on('dblclick',lineMeasure.dblclick)
    },
    mouseup: function(e){
    map.on('mousemove',lineMeasure.mousemove).on('dblclick',lineMeasure.dblclick)
    },
    dblclick:function(e)
    {
    lineMeasure.tempLinesEnd=L.polyline(lineMeasure.points,{color:lineMeasure.color,fillOpacity:lineMeasure.fillOpacity})
    map.addLayer(lineMeasure.tempLinesEnd)
    lineMeasure.addTips("总长度:"+lineMeasure.length.toFixed(3)+"公里");
    lineMeasure.points=[];
    lineMeasure.tempLines = new L.polyline([]);
    lineMeasure.length=0;
    map.off('mousemove',lineMeasure.mousemove).off('mouseup', lineMeasure.mouseup).off('mousedown', lineMeasure.mousedown).off('dblclick',lineMeasure.dblclick);
    }
    }
    //清除图层
    function clear(){
    //清除图层
    $("svg").children("g").children("path").remove();
    //清除提示
    $(".leaflet-label-tffq").remove();
    //清除标点
    $(".leaflet-marker-pane").children("img").remove();
    //提示信息
    $(".leaflet-popup-pane").children(".leaflet-zoom-animated").children("div").remove();
    $(".leaflet-shadow-pane").children("img").remove();
    }
    //画点
    function DrewPoint(x,y,type)
    {
    switch(type)
    {
    case 1:
    L.marker([x,y],{icon:icon.pwqyIcon}).addTo(map).bindPopup("坐标:["+x.toFixed(3)+","+y.toFixed(3)+"]").openPopup();
    break;
    case 2:
    L.marker([x,y],{icon:icon.pkIcon}).addTo(map).bindPopup("坐标:["+x.toFixed(3)+","+y.toFixed(3)+"]").openPopup();
    break;
    default:
    L.marker([x,y],{icon:icon.normalIcon}).addTo(map).bindPopup("坐标:["+x.toFixed(3)+","+y.toFixed(3)+"]").openPopup();
    break;
    }
    }
    //使用海伦公式获取多边形面积
    function GetArea(pointArray)
    {
    console.log(pointArray[0][0]);
    var a,b,c;
    var result=0;
    var p;//
    for(var i=2;i<pointArray.length-1;i++)
    {
    a=L.latLng(pointArray[i-1]).distanceTo(pointArray[0])/1000;
    b=L.latLng(pointArray[i]).distanceTo(pointArray[0])/1000;
    c=L.latLng(pointArray[i-1]).distanceTo(pointArray[i])/1000;
    p=(a+b+c)/2;
    result+=Math.sqrt(p*(p-a)*(p-b)*(p-c));//海伦公式
    }
    return result;
    }
    </script>
    </body>
    </html>

  • 相关阅读:
    Python 循环嵌套
    python 通过序列索引迭代
    Python for 循环语句
    python 无限循环
    Python 循环语句
    Python 条件语句
    Python运算符优先级
    Python身份运算符
    Python成员运算符
    Python逻辑运算符
  • 原文地址:https://www.cnblogs.com/yuchenghao/p/9378299.html
Copyright © 2020-2023  润新知