Hide Table of Contents
Analysis
Data Reviewer
Dynamic Layers
Editing
Feature Layers
Feature Table
Graphics
Map
Mobile
Online and Portal
Popups and Info Windows
Query and Select
Renderers, Symbols, Visualization
Search
This example shows how you can use an ArcGIS Server geometry service to measure polygon areas and perimeter lengths in your Web application. When you draw a polygon with the mouse, the Draw toolbar captures the polygon's geometry. This sample passes the geometry to the GeometryService.areasAndLengths() method.
Because this map uses a projected coordinate system that is appropriate for calculating lengths and areas, no projection of the polygon is necessary. If your map is in a geographic coordinate system and you need to project the polygon before measuring, see the sample Measure distances to learn how to perform the projection with the geometry service.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
<title>Measure Polygon Area and Perimeter</title>
<link rel="stylesheet" href="https://js.arcgis.com/3.26/esri/css/esri.css">
<style>
html, body, #mapDiv {
height: 100%;
margin: 0;
padding: 0;
width: 100%;
}
#info {
bottom: 20px;
color: #444;
height: auto;
font-family: arial;
left: 20px;
margin: 5px;
padding: 10px;
position: absolute;
text-align: left;
width: 200px;
z-index: 40;
}
.label {
display: inline-block;
width: 4em;
}
</style>
<script src="https://js.arcgis.com/3.26/"></script>
<script>
require(["dojo/dom",
"dojo/_base/lang",
"dojo/json",
"esri/config",
"esri/map",
"esri/graphic",
"esri/geometry/Geometry",
"esri/geometry/Extent",
"esri/SpatialReference",
"esri/tasks/GeometryService",
"esri/tasks/AreasAndLengthsParameters",
"esri/toolbars/draw",
"esri/symbols/SimpleFillSymbol"],
function(dom, lang, json, esriConfig, Map, Graphic, Geometry, Extent, SpatialReference, GeometryService, AreasAndLengthsParameters, Draw, SimpleFillSymbol){
//identify proxy page to use if the toJson payload to the geometry service is greater than 2000 characters.
//If this null or not available the project and lengths operation will not work. Otherwise it will do a http post to the proxy.
esriConfig.defaults.io.proxyUrl = "/proxy/";
esriConfig.defaults.io.alwaysUseProxy = false;
var map = new Map("mapDiv", {
basemap: "topo",
center: [-122.778, 45.483],
zoom: 15
});
map.on("load", function() {
var tb = new Draw(map);
tb.on("draw-end", lang.hitch(map, getAreaAndLength));
tb.activate(Draw.FREEHAND_POLYGON);
});
var geometryService = new GeometryService("https://sampleserver6.arcgisonline.com/arcgis/rest/services/Utilities/Geometry/GeometryServer");
geometryService.on("areas-and-lengths-complete", outputAreaAndLength);
function getAreaAndLength(evtObj) {
var map = this,
geometry = evtObj.geometry;
map.graphics.clear();
var graphic = map.graphics.add(new Graphic(geometry, new SimpleFillSymbol()));
//setup the parameters for the areas and lengths operation
var areasAndLengthParams = new AreasAndLengthsParameters();
areasAndLengthParams.lengthUnit = GeometryService.UNIT_FOOT;
areasAndLengthParams.areaUnit = GeometryService.UNIT_ACRES;
areasAndLengthParams.calculationType = "geodesic";
geometryService.simplify([geometry], function(simplifiedGeometries) {
areasAndLengthParams.polygons = simplifiedGeometries;
geometryService.areasAndLengths(areasAndLengthParams);
});
}
function outputAreaAndLength(evtObj) {
var result = evtObj.result;
console.log(json.stringify(result));
dom.byId("area").innerHTML = result.areas[0].toFixed(3) + " acres";
dom.byId("length").innerHTML = result.lengths[0].toFixed(3) + " feet";
}
});
</script>
</head>
<body>
<div id="mapDiv"></div>
<div id="info" class="esriSimpleSlider">
Draw a polygon to be used as input to the geometryService's areasAndLengths() operation.
<br><br>
<span class="label">Area:</span> <span id="area"></span>
<br>
<span class="label">Length:</span> <span id="length"></span>
</div>
</body>
</html>