arcgis api for js 지도 기호 사용 (Draw 로 그림 그리 기)

36084 단어 WebGIS
api 에서 지도 에 도형 을 그 리 는 도 구 는 esri/toolbars/draw 모듈 에 있 고 esri/graphic 모듈 과 점, 선, 면 스타일 과 관련 된 모듈 도 조합 해 야 합 니 다.draw 모듈 은 그림 을 그 리 는 데 사 용 됩 니 다. graphic 모듈 을 사용 해 야 하 는 이 유 는 모든 그림 이 Graphic 류 로 맵 의 graphic 그림 층 에 추가 되 기 때 문 입 니 다. 따라서 우 리 는 그 려 진 도형 을 Graphic 대상 으로 구성 해 야 합 니 다. (이 과정 에서 도형 을 그 리 는 스타일 을 설정 할 수 있 습 니 다) 지도 에 추가 할 수 있 습 니 다.
순서
  • 먼저 지 도 를 만 듭 니 다.
  • 이 어 맵 의 load 이벤트 에 도구 막대 대상 toolbar 를 만 드 는 작업 을 추가 합 니 다
  • toolbar 대상 의 draw - end 이 벤트 를 설정 합 니 다. 즉, 그림 이 완 료 된 후에 어떤 조작 을 해 야 하 는 지 입 니 다. 여기 서 우 리 는 그 려 진 기하학 적 모양 과 스타일 을 조합 하여 Graphic 대상 으로 구성 하고 지도의 graphic 그림 층 에 추가 해 야 합 니 다
  • 그리고 관련 단추 의 클릭 이 벤트 를 설정 하여 단 추 를 누 르 면 toolbar (그림 그리 기 도구) 를 활성화 하 는 기능 을 실현 합 니 다
  • 예제 코드 는 다음 과 같다.
    <html>
    <head>
        <meta charset="utf-8">
        <title>     title>
        <link rel="stylesheet" href="http://js.arcgis.com/3.9/js/dojo/dijit/themes/tundra/tundra.css" />
        <link rel="stylesheet" href="http://js.arcgis.com/3.9/js/esri/css/esri.css">
        <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"
            integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
           
        <style type="text/css">
            html, body, #main, #mapDiv{   /* mapDiv      ,          ,dijit           */
                padding: 0;
                margin: 0;
                width: 100%;
                height: 100%;
            }
        style>
        <script src="http://js.arcgis.com/3.9/">script>
        <script>
            var toolbar, map;      
            var sms, sls, sfs;      //  、 、   
            require(["esri/map", 
                    "esri/layers/ArcGISTiledMapServiceLayer", 
                    "esri/toolbars/draw",
                    "esri/graphic",
    
    				//        
                    "esri/symbols/SimpleMarkerSymbol",
                    "esri/symbols/SimpleLineSymbol",
                    "esri/symbols/SimpleFillSymbol",
    				
    				//      dojo  
                    "dojo/parser",
    
                    "dijit/layout/BorderContainer",
                    "dijit/layout/ContentPane",
                    "dojo/domReady!"], 
                function(Map, TiledLayer, Draw, Graphic, MarkerSymbol, LineSymbol, FillSymbol, parser) {
                    parser.parse();   //     
    
                    map = new Map("mapDiv");
                    var url = "http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer";
                    var layer = new TiledLayer(url);
                    map.addLayer(layer);
    				
    				//                
                    map.on("load", create_toolbar); 
                    //           
                    activate_tool();
    
                    //          
                    function activate_tool() {
                        var btns = document.getElementsByClassName('btn-info');
                        for(var i = 0; i < btns.length; ++ i) {
                            var type = btns[i].getAttribute('aria-label');
        
                            //     
                            if(type == "clear") {
                                btns[i].onclick = function() {
                                    map.graphics.clear();
                                }
                                continue;
                            }
        
                            //     
                            btns[i].onclick = function() {
                                var tool = this.getAttribute('aria-label');
                                toolbar.activate(Draw[tool]);
                                map.hideZoomSlider();
                            }
                        }
                    }
    
                    //        
                    function create_toolbar(themap) {
                        toolbar = new Draw(map);
                        //       , add_to_map           
                        toolbar.on('draw-end', add_to_map);
                    }
    
                    //      
                    function add_to_map(evt) {
                        toolbar.deactivate();
                        var symbol = null;
                        switch(evt.geometry.type) {
                            case 'multipoint':
                            case 'point':
                                symbol = new MarkerSymbol();
                                break;
                            case 'polyline':
                                symbol = new LineSymbol();
                                break;
                            default:
                                symbol = new FillSymbol();
                                break;
                        }
                        //   Graphic  
                        var graphic = new Graphic(evt.geometry, symbol);
                        map.graphics.add(graphic);
                        map.showZoomSlider();     //        
                    }
            });
        script>
    head>
    <body class="tundra">
        <div id="main" data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="design:'headline'">
          <div id="top" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region: 'top'" style="width: 100%; height: 40px;">
            <button class="btn btn-info" type="button" aria-label="POINT"> button>
            <button class="btn btn-info" type="button" aria-label="MULTI_POINT">  button>
            <button class="btn btn-info" type="button" aria-label="LINE"> button>
            <button class="btn btn-info" type="button" aria-label="POLYGON">   button>
            <button class="btn btn-info" type="button" aria-label="RECTANGLE">  button>
            <button class="btn btn-info" type="button" aria-label="CIRCLE"> button>
            <button class="btn btn-info" type="button" aria-label="ELLIPSE">  button>
            <button class="btn btn-info" type="button" aria-label="TRIANGLE">   button>
            <button class="btn btn-info" type="button" aria-label="clear">  button>
          div>
          <div id="left" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region: 'left', splitter: true" style="width: 80px;">
                  
          div>
          <div id="center" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region: 'center'">
              <div id="mapDiv">div>
          div>
        div>
    body>
    html>
    

    좋은 웹페이지 즐겨찾기