• Openlayer 3 删除上一次绘制的图


    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>画图测量面积</title>
        <link rel="stylesheet" href="css/ol.css">
        <script src="js/jquery-1.11.3.js"></script>
        <script src="js/ol.js"></script>
        <style>
            #map{
                width:100%;
                height:100%;
            }
            .tooltip {
                position: relative;
                background: rgba(0, 0, 0, 0.5);
                border-radius: 4px;
                color: white;
                padding: 4px 8px;
                opacity: 0.7;
                white-space: nowrap;
            }
            .tooltip-measure {
                opacity: 1;
                font-weight: bold;
            }
            .tooltip-static {
                background-color: #ffcc33;
                color: black;
                border: 1px solid white;
            }
            .tooltip-measure:before,
            .tooltip-static:before {
                border-top: 6px solid rgba(0, 0, 0, 0.5);
                border-right: 6px solid transparent;
                border-left: 6px solid transparent;
                content: "";
                position: absolute;
                bottom: -6px;
                margin-left: -7px;
                left: 50%;
            }
            .tooltip-static:before {
                border-top-color: #ffcc33;
            }
        </style>
    </head>
    <body>
        <button id="deleteArea">删除上一个面积</button>
        <button id="deletePoint">删除上一个点</button>
        <button id="finishDraw">完成绘制</button>
        <button id="cancelDraw">取消绘制</button>
        <div id="map"></div>
        <script>
            $("#deleteArea").click(function(){
                if(0!==q.length){
                    var t=q.pop().number;//删除的FeatureID
                    var feature=drawing_layer.getSource().getFeatureById(t);
                    drawing_layer.getSource().removeFeature(feature);
                    $("div.tooltip-static").eq(0).remove();
                }
            });
            $("#deletePoint").click(function(){
                polygon_drawing_tool.removeLastPoint();
            });
            $("#cancelDraw").click(function(){
                drawing_layer.getSource().clear();
                i=0,q=[];
                $(".ol-overlay-container").hide();
            });
            $("#finishDraw").click(function(){
                polygon_drawing_tool.finishDrawing();
            });
            var map=new ol.Map({
                target:'map',
                layers:[
                    new ol.layer.Tile({
                        source:new ol.source.OSM()
                    })
                ],
                view:new ol.View({
                    center:[0,0],
                    zoom:2
                })
            });//初始化地图
            var drawing_layer = new ol.layer.Vector({
                source: new ol.source.Vector(),
                style:new ol.style.Style({
                    fill:new ol.style.Fill({
                        color:"rgba(225,225,225,.2)"
                    }),
                    stroke:new ol.style.Stroke({
                        color:"#ffcc33",
                        2
                    }),
                    image:new ol.style.Circle({
                        radius:7,
                        fill:new ol.style.Fill({
                            color:"#ffcc33"
                        })
                    })
                })
            });// 画面积计算的图层
            map.addLayer(drawing_layer);
            var polygon_drawing_tool = new ol.interaction.Draw({
                source: drawing_layer.getSource(),
                type: 'Polygon',
                style: new ol.style.Style({
                    fill: new ol.style.Fill({
                        color: '#ffcc33'
                    }),
                    stroke: new ol.style.Stroke({
                        color: '#ffcc33',
                        lineDash: [10, 10],
                         3
                    }),
                    image: new ol.style.Circle({
                        radius: 5,
                        stroke: new ol.style.Stroke({
                            color: 'rgba(0, 0, 0, 0.7)'
                        }),
                        fill: new ol.style.Fill({
                            color: '#ffcc33'
                        })
                    })
                })
            });//绘图控件对象
            var listener;//绑定交互绘制工具开始绘制事件
            var measureTooltipElement;
            polygon_drawing_tool.on('drawstart',function(evt) {
                sketch = evt.feature;
                var tooltipCoord = evt.coordinate;
                listener = sketch.getGeometry().on('change', function(evt) {
                    var geom = evt.target;
                    var output = formatArea(/** @type {ol.geom.LineString} */ (geom));
                    tooltipCoord = geom.getLastCoordinate();
                    createMeasureTooltip();
                    measureTooltipElement.innerHTML = output;
                    measureTooltip.setPosition(tooltipCoord);
                });
            }, this);
            var i=0,q=[];
            polygon_drawing_tool.on('drawend',function(e) {
                i=q.length+1;
                e.feature.setId(i);
                q.push({number:i});
                measureTooltipElement.className = 'tooltip tooltip-static';
                measureTooltip.setOffset([0, -7]);
                sketch = null;
                measureTooltipElement = null;
                createMeasureTooltip();
                ol.Observable.unByKey(listener);
            }, this);
            var formatArea = function(polygon) {
                var area=polygon.getArea();
                var output;
                if(area>10000){
                    output=(Math.round(area/1000000*100)/100)+' '+'km<sup>2</sup>';
                }else{
                    output=(Math.round(area*100)/100)+' '+'m<sup>2</sup>';
                }
                return output;
            };
            function createMeasureTooltip() {
                if (measureTooltipElement) {
                    measureTooltipElement.parentNode.removeChild(measureTooltipElement);
                }
                measureTooltipElement = document.createElement('div');
                measureTooltipElement.className = 'tooltip tooltip-measure';
                measureTooltip = new ol.Overlay({
                    element: measureTooltipElement,
                    offset: [0, -15],
                    positioning: 'bottom-center'
                });
                map.addOverlay(measureTooltip);
            }
            $(document).ready(function() {
                map.addInteraction(polygon_drawing_tool);
            });
        </script>
    </body>
    </html>

  • 相关阅读:
    基于AJAX的长轮询(longpolling)方式实现简单的聊天室程序
    WPF笔记(1.4 布局)——Hello,WPF!
    WPF笔记(1.10 绘图)——Hello,WPF!
    The description of GameHall and my program experience for interview
    SQL大量数据操作 切身经验总结
    WPF笔记(1.6 数据绑定)——Hello,WPF!
    WPF笔记(1.8 资源与映射)——Hello,WPF!
    WPF笔记(2.3 StackPanel)——Layout
    WPF笔记(2.2 DockPanel)——Layout
    Description of AJAX
  • 原文地址:https://www.cnblogs.com/mina-huojian66/p/6149371.html
Copyright © 2020-2023  润新知