Brett,
I have updated several things in your code (changed your mixture of Legacy and AMD to just AMD coding style), updated your map infowindow stuff to be included in your identify deferred (this was your main issue), changed the way you were using arrays, etc:
define(['dojo/_base/declare', 'jimu/BaseWidget', 'esri/tasks/IdentifyTask',
'esri/tasks/IdentifyParameters', 'esri/tasks/GeometryService', 'esri/geometry/Polyline',
'esri/geometry/webMercatorUtils', 'esri/geometry/geodesicUtils', 'esri/units', 'dojo/_base/lang'
],
function(declare, BaseWidget, IdentifyTask, IdentifyParameters, GeometryService,
Polyline, webMercatorUtils, geodesicUtils, Units, lang) {
return declare([BaseWidget], {
baseClass: 'Dimension',
postCreate: function() {
this.inherited(arguments);
console.log('Dimension::postCreate');
this.own(this.map.on("click", lang.hitch(this, function(evt) {
identifyTask = new IdentifyTask("*/arcgis/rest/services/Merafong/Merafong_base/MapServer");
identifyParams = new IdentifyParameters();
identifyParams.tolerance = 3;
identifyParams.returnGeometry = true;
identifyParams.layerIds = [43];
identifyParams.layerOption = IdentifyParameters.LAYER_OPTION_VISIBLE;
identifyParams.width = this.map.width;
identifyParams.height = this.map.height;
identifyParams.geometry = evt.mapPoint;
identifyParams.mapExtent = this.map.extent;
var results = [];
var currentClick = evt.mapPoint;
identifyTask.execute(identifyParams, lang.hitch(this, function(idResults) {
len = idResults[0].feature.geometry.rings[0].length;
for (var i = 0; i < len; i++) {
var p1 = idResults[0].feature.geometry.rings[0][i]
if (i == len - 1) {
var p2 = idResults[0].feature.geometry.rings[0][0]
} else {
var p2 = idResults[0].feature.geometry.rings[0][i + 1]
}
var polyline = {
"paths": [
[p1, p2]
],
"spatialReference": {
"wkid": idResults[0].feature.geometry.spatialReference.wkid
}
};
polyline = new Polyline(polyline);
polyline = webMercatorUtils.webMercatorToGeographic(polyline, true);
results.push(geodesicUtils.geodesicLengths([polyline], Units.METERS));
console.log(results[i]);
}
this.map.infoWindow.setTitle("Dimension Results");
var content = "<table border='1'><th><td>Erf Dimensions (Meter) </td></th>";
for (var i = 0; i < results.length - 1; i++) {
content += "<tr><td>" + results[i] + "</td></tr>";
}
content += "</table>";
this.map.infoWindow.setContent(content);
this.map.infoWindow.show(currentClick);
}));
})));
}
});
});