zoukankan      html  css  js  c++  java
  • 添加底图、图层标注、工具(点,面,线等)

    效果图

    代码如下:

    <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="utf-8" />
        <title>缓冲区分析划线画图。。。</title>
        <link rel="stylesheet" href="http://localhost/arcgis_js_v413_api/4.13/esri/css/main.css" />
        <script type="text/javascript" src="http://localhost/arcgis_js_v413_api/4.13/init.js"></script>
    
        <style>
            html,
            body,
            #viewDiv {
                padding: 0;
                margin: 0;
                height: 100%;
                width: 100%;
            }
        </style>
    </head>
    
    <body>
        <div id="viewDiv">
            <div id="line-button" class="esri-widget esri-widget--button esri-interactive" title="画线">
                <span class="esri-icon-polyline"></span>
            </div>
            <div id="area-button" class="esri-widget esri-widget--button esri-interactive" title="画面">
                <span class="esri-icon-polygon"></span>
            </div>
            <div id="point-button" class="esri-widget esri-widget--button esri-interactive" title="画点">
                <span class="esri-icon-radio-checked"></span>
            </div>
            <div id="circle-button" class="esri-widget esri-widget--button esri-interactive" title="画圆">
                <span class="esri-icon-radio-unchecked"></span>
            </div>
            <div id="rectangle-button" class="esri-widget esri-widget--button esri-interactive" title="画矩形">
                <span class="esri-icon-checkbox-unchecked"></span>
            </div>
        </div>
        <script>
            require([
                "esri/Map",
                "esri/views/MapView",
                "esri/views/2d/draw/Draw",
                "esri/Graphic",
                "esri/geometry/Polyline",
                "esri/geometry/Polygon",
                "esri/geometry/Point",
                "esri/geometry/Circle",
                "esri/geometry/geometryEngine",
                "dojo/domReady!"
            ], function (
                Map, MapView,
                Draw, Graphic,
                Polyline, Polygon, Point, Circle, geometryEngine
            ) {
                var map = new Map({
                    basemap: "osm"
                });
    
                //二维视图
                var view = new MapView({
                    map: map,
                    container: "viewDiv",
                    logo: false,
                    center: [98.01, 33.80],
                    zoom: 4,
    
                });
    
                //添加图层标注
                let image = {
                    type: 'picture-marker',
                    url: 'http://172.16.0.27:8090/QQ.png',
                     '32px',
                    height: '32px'
                };
                //设置点的位置
                let position = {
                    type: 'point',
                    longitude: 98.01,
                    latitude: 33.80
                };
                //将点的样式和位置放在Graphic里面
                let Graphic1 = new Graphic({
                    geometry: position,
                    symbol: image
                });
                //显示图标
                view.graphics.add(Graphic1);
    
    
                //添加工具(点面线等)
                var highlight;
                view.on("click", function (event) {
                    if (highlight) {
                        highlight.remove();
                    }
                    view.hitTest(event)
                        .then(function(response) {
                            if (response.results[0]) {
                                var graphic = response.results[0].graphic;
                                console.log(graphic);
                                view.whenLayerView(graphic.layer)
                                    .then(function(lyrView) {
                                        highlight = lyrView.highlight(graphic);
                                    });
                            }
                        });
                });
    
                view.ui.add("line-button", "top-left");//添加绘制线按钮,自定义UI
                view.ui.add("area-button", "top-left");//添加绘制面按钮,自定义UI
                view.ui.add("point-button", "top-left");//添加绘制面按钮,自定义UI
                view.ui.add("circle-button", "top-left");//添加绘制面按钮,自定义UI
                view.ui.add("rectangle-button", "top-left");//添加绘制面按钮,自定义UI
                // view.ui.remove("attribution");//移除底部ESRI logo
                var polySym = {
                    type: "simple-fill", // autocasts as new SimpleFillSymbol()
                    color: [140, 140, 222, 0.5],
                    outline: {
                        color: [0, 0, 0, 0.5],
                         2
                    }
                };
                view.when(function () {
                    var draw = new Draw({
                        view: view
                    });
                    //绑定线按钮绘制事件
                    var drawLineButton = document.getElementById("line-button");
                    drawLineButton.onclick = function () {
                        view.graphics.removeAll();//清楚之前的绘制
                        enableCreateLine(draw, view);
                    };
                    //绑定面按钮绘制事件
                    var drawAreaButton = document.getElementById("area-button");
                    drawAreaButton.onclick = function () {
                        view.graphics.removeAll();//清楚之前的绘制
                        enableCreateArea(draw, view);
                    };
                    //绑定面按钮绘制事件
                    var drawPointButton = document.getElementById("point-button");
                    drawPointButton.onclick = function () {
                        enableCreatePoint(draw, view);
                    };
                    //绑定面按钮绘制事件
                    var drawCircleButton = document.getElementById("circle-button");
                    drawCircleButton.onclick = function () {
                        enableCreateCircle(draw, view);
                    };
                    //绑定面按钮绘制事件
                    var drawRectangleButton = document.getElementById("rectangle-button");
                    drawRectangleButton.onclick = function () {
                        enableCreateRectangle(draw, view);
                    };
                });
                //开始监听画线
                function enableCreateLine(draw, view) {
                    var action = draw.create("polyline", {
                        mode: "click"
                    });
                    // 获取焦点
                    view.focus();
    
                    // 顶点添加事件
                    action.on("vertex-add", createPolyline);
    
                    //顶点移除事件
                    action.on("vertex-remove", createPolyline);
    
                    // 鼠标移动事件
                    action.on("cursor-update", createPolyline);
    
                    // 绘制完成事件
                    action.on("draw-complete", createPolyline);
    
                }
                //开始监听画面
                function enableCreateArea(draw, view) {
                    var action = draw.create("polygon", {
                        mode: "click"//点击方式加点
                    });
                    // 获取焦点
                    view.focus();
    
                    // 顶点添加事件
                    action.on("vertex-add", createPolygon);
    
                    //顶点移除事件
                    action.on("vertex-remove", createPolygon);
    
                    // 鼠标移动事件
                    action.on("cursor-update", createPolygon);
    
                    // 绘制完成事件
                    action.on("draw-complete", createPolygon);
    
    
                }
                //开始监听画点
                function enableCreatePoint(draw, view) {
                    var action = draw.create("point", {
                        mode: "click"//点击方式加点
                    });
                    // 获取焦点
                    view.focus();
    
                    // 顶点添加事件
                    action.on("vertex-add", createPoint);
    
                    //顶点移除事件
                    action.on("vertex-remove", createPoint);
    
                    // 绘制完成事件
                    action.on("draw-complete", createPoint);
    
                }
                //开始监听画圆
                function enableCreateCircle(draw, view) {
                    var action = draw.create("circle", {
                        mode: "click"//点击方式加点
                    });
                    // 获取焦点
                    view.focus();
                    //顶点移除事件
                    action.on("vertex-remove", createCircle);
                    // 鼠标移动事件
                    action.on("cursor-update", createCircle);
                    // 绘制完成事件
                    action.on("draw-complete", createCircle);
                }
                //开始监听画矩形
                function enableCreateRectangle(draw, view) {
                    var action = draw.create("rectangle", {
                        mode: "click"//点击方式加点
                    });
                    // 获取焦点
                    view.focus();
    
                    //顶点移除事件
                    action.on("vertex-remove", createRectangle);
                    // 鼠标移动事件
                    action.on("cursor-update", createRectangle);
                    // 绘制完成事件
                    action.on("draw-complete", createRectangle);
    
                }
                //根据点坐标生成新的线
                function createPolyline(event) {
                    //获取所有顶点
                    var vertices = event.vertices;
                    //清除之前绘制
                    view.graphics.removeAll();
                    var line = new Polyline({
                        paths: vertices,
                        spatialReference: view.spatialReference
                    });
                    // 生成绘制的图形
                    var graphic = new Graphic({
                        geometry: line,
                        symbol: {
                            type: "simple-line", // autocasts as new SimpleFillSymbol
                            color: [4, 90, 141],
                             4,
                            cap: "round",
                            join: "round"
                        }
                    });
                    // 将绘制的图形添加到view
                    view.graphics.add(graphic);
                    if (event.type == "draw-complete") {
                        createBuffer(line);
                    }
                }
                //根据点坐标生成新的线
                function createPolygon(event) {
                    //获取所有顶点
                    var vertices = event.vertices;
                    //清除之前绘制
                    view.graphics.removeAll();
                    var polygon = new Polygon({
                        hasZ: false,
                        hasM: false,
                        rings: [vertices],
                        spatialReference: view.spatialReference
                    });
                    // 生成绘制的图形
                    var graphic = new Graphic({
                        geometry: polygon,
                        symbol: {
                            type: "simple-fill",  // autocasts as new SimpleFillSymbol()
                            color: [51, 51, 204, 0.9],
                            style: "solid",
                            outline: {  // autocasts as new SimpleLineSymbol()
                                color: "white",
                                 1
                            }
                        }
                    });
                    // 将绘制的图形添加到view
                    view.graphics.add(graphic);
                    if (event.type == "draw-complete") {
                        createBuffer(polygon);
                    }
                }
    
                //根据点坐标生成新的线
                function createPoint(event) {
                    //获取所有顶点
                    var coordinates = event.coordinates;
                    var point = new Point({
                        hasZ: false,
                        hasM: false,
                        x: coordinates[0],
                        y: coordinates[1],
                        spatialReference: view.spatialReference
                    });
                    //生成绘制的图形
                    var graphic = new Graphic({
                        geometry: point,
                        symbol: {
                            type: "simple-marker",  // autocasts as new SimpleMarkerSymbol()
                            style: "square",
                            color: "blue",
                            size: "8px",  // pixels
                            outline: {  // autocasts as new SimpleLineSymbol()
                                color: [255, 255, 0],
                                 3  // points
                            }
                        }
                    });
                    // 将绘制的图形添加到view
                    view.graphics.add(graphic);
                    if (event.type == "draw-complete") {
                        createBuffer(point);
                    }
                }
                //根据点坐标生成新的线
                function createCircle(event) {
                    //获取所有顶点
                    var vertices = event.vertices;
                    //少于一个点无法展示圆
                    if (vertices.length < 2) {
                        return;
                    }
                    //清除之前绘制
                    view.graphics.removeAll();
                    //生成绘制的图形,两点画圆
                    var center = new Point({
                        hasZ: false,
                        hasM: false,
                        x: vertices[0][0],
                        y: vertices[0][1],
                        spatialReference: view.spatialReference
                    });
                    var dis = center.distance(new Point({
                        hasZ: false,
                        hasM: false,
                        x: vertices[1][0],
                        y: vertices[1][1],
                        spatialReference: view.spatialReference
                    }));
                    var circle = new Circle({
                        hasZ: false,
                        hasM: false,
                        center: center,
                        radius: dis,
                        spatialReference: view.spatialReference
                    });
                    var graphic = new Graphic({
                        geometry: circle,
                        symbol: {
                            type: "simple-fill",  // autocasts as new SimpleFillSymbol()
                            color: [51, 51, 204, 0.9],
                            style: "solid",
                            outline: {  // autocasts as new SimpleLineSymbol()
                                color: "white",
                                 1
                            }
                        }
                    });
                    // 将绘制的图形添加到view
                    view.graphics.add(graphic);
                    if (event.type == "draw-complete") {
                        createBuffer(circle);
                    }
                }
                function createRectangle(event) {
                    //获取所有顶点
                    var vertices = event.vertices;
    
                    //两点画矩形
                    if (vertices.length < 2) {
                        return
                    }
                    var rings = [vertices[0], [vertices[0][0], vertices[1][1]], vertices[1], [vertices[1][0], vertices[0][1]]];
                    //清除之前绘制
                    view.graphics.removeAll();
                    var polygon = new Polygon({
                        hasZ: false,
                        hasM: false,
                        rings: [rings],
                        spatialReference: view.spatialReference
                    });
                    // 生成绘制的图形
                    var graphic = new Graphic({
                        geometry: polygon,
                        symbol: {
                            type: "simple-fill",  // autocasts as new SimpleFillSymbol()
                            color: [51, 51, 204, 0.9],
                            style: "solid",
                            outline: {  // autocasts as new SimpleLineSymbol()
                                color: "white",
                                 1
                            }
                        }
                    });
                    // 将绘制的图形添加到view
                    view.graphics.add(graphic);
                    console.log(event);
                    if (event.type == "draw-complete") {
                        createBuffer(polygon);
                    }
                }
    
                /**
                 * 根据geometry生成缓冲区
                 * @param geometry 生成的geometry
                 */
                function createBuffer(geometry) {
                    // var buffer=geometryEngine.geodesicBuffer(geometry,150,"kilometers",false);
                    var buffer = geometryEngine.buffer(geometry, 150, "kilometers", false);
                    view.graphics.add((new Graphic({
                        geometry: buffer,
                        symbol: polySym
                    })));
                }
            })
        </script>
    </body>
    </html>
  • 相关阅读:
    一般删除网页数据和jquery下使用Ajax删除数据的区别
    JavaScript 局部刷新
    ASP.net 网站开发知识点总结
    deque
    DHCP协议
    IP分类以及特殊IP
    重载运算符函数及其注意事项
    linux gdb基本概念
    std::vector 源代码
    iterator 的设计原则和traits
  • 原文地址:https://www.cnblogs.com/leebokeyuan/p/12175996.html
Copyright © 2011-2022 走看看