Select to view content in your preferred language

Measurement tool

2366
11
Jump to solution
09-10-2014 07:39 AM
KeisukeNozaki
Frequent Contributor

I am trying to add measurement tool to my existing code.

What I did was:

1. add "esri/dijit/Measurement" and variable

2. add the following code after loading feature layer

        //dojo.keys.copyKey maps to CTRL on windows and Cmd on Mac., but has wrong code for Chrome on Mac

        var snapManager = map.enableSnapping({

          snapKey: has("mac") ? keys.META : keys.CTRL

        });

        var layerInfos = [{

          layer: parcelsLayer

        }];

        snapManager.setLayerInfos(layerInfos);

        var measurement = new Measurement({

          map: map

        }, dom.byId("measurementDiv"));

        measurement.startup();

3. add <div id="measurementDiv"></div> in the end

However, the measurement tool does not display.

Please let know what is missing.

Thank you.

Keisuke

Tags (1)
0 Kudos
11 Replies
TimWitt2
MVP Alum

I'll take a look tomorrow.

0 Kudos
TimWitt2
MVP Alum

I had to upgrade you to 3.10.

I had to stop your tracking on line 100 and 101.

I removed your legacy code, now your application is AMD.

I added lines 234 to 246.

<!DOCTYPE html>

<html>

  <head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    <!--The viewport meta tag is used to improve the presentation and behavior of the samples

      on iOS devices-->

    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">

    <title>MCD Mobile GIS</title>

    <link rel="stylesheet" href="http://js.arcgis.com/3.10/js/dojo/dijit/themes/claro/claro.css">

    <link rel="stylesheet" href="http://js.arcgis.com/3.10/js/esri/css/esri.css">

    <style>

      html, body {

        height: 100%; width: 100%;

        margin: 0; padding: 0;

      }

      #map{

        padding:0;

        border:solid 1px #343642;

        margin:5px 5px 5px 5px;

      }

      #titlePane{

        width:240px;

      }

        #LocateButton {

      position: absolute;

      top: 95px;

      left: 20px;

      z-index: 50;

            }  

            #top{

        width:20%;

        border-top: solid 1px #343642;

        border-left: solid 1px #343642;

        border-bottom: solid 1px #343642;

                border-right: solid 1px #343642;

        margin:5px 5px 5px 5px;

        color: #343642;

        font:90% Arial,"Arial",Arial,Arial;

        /*letter-spacing: 0.05em;*/

      }

    </style>

<script>

  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i=i||function(){

  (i.q=i.q||[]).push(arguments)},i.l=1*new Date();a=s.createElement(o),

  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-21888440-1', 'wiu.edu');

  ga('send', 'pageview');

</script>

    <script src="http://js.arcgis.com/3.10/"></script>

    <script>

      var map, locator;

      require([

        "esri/map", "esri/tasks/locator", "esri/graphic",

        "esri/dijit/InfoWindowLite", "esri/InfoTemplate", "esri/layers/FeatureLayer", "dojo/dom-construct",

        "esri/InfoTemplate", "esri/symbols/SimpleMarkerSymbol",

        "esri/symbols/Font", "esri/symbols/TextSymbol",

        "dojo/_base/array", "dojo/_base/Color",

        "dojo/number", "dojo/parser", "dojo/dom", "dojo/on", "dijit/registry",

        "esri/layers/ArcGISDynamicMapServiceLayer",

        "esri/layers/ArcGISTiledMapServiceLayer",

                "esri/dijit/LocateButton",

                "esri/dijit/Scalebar",

                "esri/dijit/Measurement",  "esri/geometry/Extent",

        "dijit/form/Button", "dijit/form/Textarea",

        "dijit/layout/BorderContainer", "dijit/layout/ContentPane","dijit/TitlePane", "dojo/domReady!"

      ], function(

        Map, Locator, Graphic,

        InfoWindowLite, InfoTemplate, FeatureLayer, domConstruct,

        InfoTemplate, SimpleMarkerSymbol,

        Font, TextSymbol,

        arrayUtils, Color,

        number, parser, dom, on, registry,

        ArcGISDynamicMapServiceLayer, ArcGISTiledMapServiceLayer, LocateButton, Scalebar, Measurement, Extent

      ) {

        parser.parse();

              

        var initExtent = new Extent({"xmin":-10093755,"ymin":4932648,"xmax":-10093139,"ymax":4933004,"spatialReference":{"wkid":3857}});

              

        var map = new Map("map",{extent:initExtent});

        var basemap2 = new ArcGISTiledMapServiceLayer("http://gis.wiu.edu/arcgis/rest/services/basemap/aerial_cache/MapServer",

                {"opacity" : 0.6});

        map.addLayer(basemap2);

        var basemap = new ArcGISDynamicMapServiceLayer("http://gis.wiu.edu/arcgis/rest/services/mcdonough_mobile/MapServer");

        map.addLayer(basemap);

              

                geoLocate = new LocateButton({

        map: map,

                scale: 2400,

                //tracking: true,

                //useTracking: true

                }, "LocateButton");

                geoLocate.startup();

              

                var scalebar = new Scalebar({

          map: map,

          // "dual" displays both miles and kilmometers

          // "english" is the default, which displays miles

          // use "metric" for kilometers

          scalebarUnit: "dual"

        });

    /*var infoWindow = new InfoWindowLite(null, domConstruct.create("div", null, null, map.root));

    infoWindow.startup();

    map.setInfoWindow(infoWindow);*/

  

    var template = new InfoTemplate();

    template.setTitle("<b>${PARCELID}</b>");

    template.setContent("${owner1_name} <br> ${site_address} <br> <a href =${wedge_url} target='_blank'>PRC Link</a>");

  

    //add a layer to the map

    var featureLayer = new FeatureLayer("http://gis.wiu.edu/arcgis/rest/services/mcdonough_highway/MapServer/21", {

                mode: FeatureLayer.MODE_ONDEMAND,

                maxAllowableOffset: 1000,

        infoTemplate:template,

        outFields: ["PARCELID" , "site_address", "owner1_name", "wedge_url"]

    });

  

    map.addLayer(featureLayer);

  

    map.infoWindow.resize(200, 75);

        //dojo.keys.copyKey maps to CTRL on windows and Cmd on Mac., but has wrong code for Chrome on Mac

      // var snapManager = map.enableSnapping({

          //snapKey: has("mac") ? keys.META : keys.CTRL

        //});

        //var layerInfos = [{

        //  layer: parcelsLayer

        //}];

        //snapManager.setLayerInfos(layerInfos);

        var measurement = new Measurement({

          map: map

        }, dom.byId("measurementDiv"));

        measurement.startup();

      

  on(dom.byId("address"), "keyup", function(event){

      if (event.keyCode == 13 && this.value.length > 0) {

                locate();

      }

        })

      

        locator = new Locator("http://gis.wiu.edu/arcgis/rest/services/mcdonough_structure/GeocodeServer");

        locator.on("address-to-locations-complete", showResults);

        // listen for button click then geocode      

      

        map.infoWindow.resize(200,125);

        on(dom.byId("address"), 'onkeyup', function(event) {

            if (event.keyCode == 13 && this.value.length > 0) {

                locate();

            }

        });

        function locate() {

          map.graphics.clear();

          var address = {

            "Street": dom.byId("address").value

          };

          locator.outSpatialReference = map.spatialReference;

          var options = {

            address: address,

            outFields: ["HouseNum"]

          }

          locator.addressToLocations(options);

        }

        function showResults(evt) {

          var candidate;

          var symbol = new SimpleMarkerSymbol();

          var infoTemplate = new InfoTemplate(

            "Location",

            "Address: ${address}<br />Score: ${score}<br />Source locator: ${locatorName}"

          );

          symbol.setStyle(SimpleMarkerSymbol.STYLE_SQUARE);

          symbol.setSize(10);

          symbol.setColor(new Color("#ffff00"));

          var geom;

          arrayUtils.every(evt.addresses, function(candidate) {

            console.log(candidate.score);

            if (candidate.score > 80) {

              console.log(candidate.location);

              var attributes = {

                address: candidate.address,

                score: candidate.score,

                locatorName: candidate.attributes.StreetName

              };  

              geom = candidate.location;

              var graphic = new Graphic(geom, symbol, attributes, infoTemplate);

              //add a graphic to the map at the geocoded location

              map.graphics.add(graphic);

              //add a text symbol to the map listing the location of the matched address.

              var displayText = candidate.address;

              var font = new Font(

                "12pt",

                Font.STYLE_NORMAL,

                Font.VARIANT_NORMAL,

                Font.WEIGHT_BOLD,

                "Helvetica"

              );

            

              var textSymbol = new TextSymbol(

                displayText,

                font,

                new Color("#ffff00")

              );

              textSymbol.setOffset(0,15);

              map.graphics.add(new Graphic(geom, textSymbol));

              return false; //break out of loop after one candidate with score greater  than 80 is found.

            }

            else{

            alert("No results found, please enter another address");

            }

                        

          });

        

          if ( geom !== undefined ) {

            map.centerAndZoom(geom, 19);

          }

        }

  map.on("mouse-over", windowPop);

  function windowPop(){

  if (measurement.area.checked || measurement.distance.checked || measurement.location.checked){

  map.setInfoWindowOnClick(false);

  } else {

  map.setInfoWindowOnClick(true);

  }

  }

  measurement.on("measure-end", function (){

  map.setInfoWindowOnClick(true);

  });

      });

    </script>

  </head>

  <body class="claro">

    <div id="mainWindow" data-dojo-type="dijit/layout/BorderContainer"

        data-dojo-props="design:'sidebar', gutters:false"

        style="width:100%; height:100%;">

        <div id="top"

          data-dojo-type="dijit/layout/ContentPane"

          data-dojo-props="region:'top'">

        <font size = "3">MCD Mobile</font> <br>

                <font size = "2">WIU GIS Center  <a href="help.html"><b>Help</b></a></font> <br>

        <input type="text" id="address" size="25" autofocus="autofocus"/>

        <br>

      </div>

            <div id="map"

          data-dojo-type="dijit/layout/ContentPane"

          data-dojo-props="region:'center'">

    <div id="LocateButton"></div>

    <div style="position:absolute; right:20px; top:10px; z-Index:999;">

            

              <div id="titlePane" data-dojo-type="dijit/TitlePane" data-dojo-props="title:'Measurement', closable:'false', open:'false'">

            <div id="measurementDiv"></div>

            <span style="font-size:smaller;padding:5px 5px;">Press <b>CTRL</b> to enable snapping.</span>

          </div>

          </div>

  </div>

          

    </div>

  </body>

</html>