• ArcGIS API for js 实现点、线、面等图形的绘画


    今天总算敲定实习的事,也不知道未来等待我的将是什么,但是我知道我既然选择了就要把它做好,选择就不要后悔,走下去====开车开车

    一、实现的思路

    首先声明一个GraphicLayer的图层,(该图层是客户端类型图层,与ArcGIS Server发布的图层没有任何联系,绘画的对象也在客户端完成)然后生命工具类 Draw,根据点选的不同进行绘画,然后将绘画的图形进行渲染即可。

    二、HTML布局

        <div id="info">
            <sapn>点击你所要绘画的图形</span>
            <button id="Point">Point</button>
            <button id="Multipoint">Multipoint</button>
            <button id="Line">Line</button>
            <button id="Polyline">Polyline</button>
            <button id="FreehandPolyline">Freehand Polyline</button>
            <button id="Triangle">Triangle</button>
            <button id="Extent">Rectangle</button>
            <button id="Circle">Circle</button>
            <button id="Ellipse">Ellipse</button>
            <button id="Polygon">Polygon</button>
            <button id="FreehandPolygon">Freehand Polygon</button>
        </div>
    
        <div id="mapDiv"></div>
    

    三、主要的代码

    1、引用的类库

          var map, tb;
          require([
            "esri/map",
            "esri/toolbars/draw",
            "esri/symbols/SimpleMarkerSymbol",
            "esri/symbols/SimpleLineSymbol",
            "esri/symbols/PictureFillSymbol",
            "esri/symbols/CartographicLineSymbol",
            "esri/graphic",
            "esri/Color",
            "dojo/dom",
            "dojo/on",
            "dojo/domReady!"
          ], function(
            Map, Draw,
            SimpleMarkerSymbol, SimpleLineSymbol,
            PictureFillSymbol, CartographicLineSymbol,
            Graphic,
            Color, dom, on
          ) {
            map = new Map("mapDiv", {
              basemap: "streets",
              center: [-25.312, 34.307],
              zoom: 3
            });

    2、初始化绘图工具

    map.on("load", initToolbar);

    3、绘图工具函数的封装

    function initToolbar() {
              tb = new Draw(map);
              tb.on("draw-end", addGraphic);
              on(dom.byId("info"), "click", function(evt) {
                if ( evt.target.id === "info" ) {
                  return;
                }
                var tool = evt.target.id.toLowerCase();//转换为小写
                map.disableMapNavigation();
                //激活绘图工具
                tb.activate(tool);
              });
            }

    4、填充的声明

    //设置点的填充样式
    var markerSymbol = new SimpleMarkerSymbol();
    markerSymbol.setColor(new Color("#00FFFF"));
    //设置线的填充样式
            var lineSymbol = new CartographicLineSymbol(
              CartographicLineSymbol.STYLE_SOLID,
              new Color([255,0,0]), 10,
              CartographicLineSymbol.CAP_ROUND,
              CartographicLineSymbol.JOIN_MITER, 5
            );
    //设置面的填充样式
            var fillSymbol = new PictureFillSymbol(
              "/Imaage/timg.jpg",
              new SimpleLineSymbol(
                SimpleLineSymbol.STYLE_SOLID,
                new Color('#000'),
                1
              ),
              42,
              42
            );
    

    推荐一个画图js开源插件http://raphaeljs.com/icons/#talkq

    5、添加到GraphicLayer的函数封装

    function addGraphic(evt) {
              //关闭绘图工具
              tb.deactivate();
               //禁用导航
              map.enableMapNavigation();
              var symbol;
              if ( evt.geometry.type === "point" || evt.geometry.type === "multipoint") {
                symbol = markerSymbol;
              } else if ( evt.geometry.type === "line" || evt.geometry.type === "polyline") {
                symbol = lineSymbol;
              }
              else {
                symbol = fillSymbol;
              }
              map.graphics.add(new Graphic(evt.geometry, symbol));
            }

    四、总结

    代码很简单,但是这是一个ArcGIS API For JS 最基本的应用

  • 相关阅读:
    Qt 字符串QString arg()用法总结
    Qt子窗口QMidSubwindow全屏出现的问题总结
    QString介绍
    Qt控制台输出QString
    汽车辐射监测系统-Qt开发[转]发
    Eclipse Qt开发环境的建立
    串口调节工具
    QT 多线程程序设计 -互斥
    ArcGIS Spatial Query
    IQueryFielter接口
  • 原文地址:https://www.cnblogs.com/tuboshu/p/10752366.html
Copyright © 2020-2023  润新知