Here's my exact use:
define([
"dojo/_base/declare",
"dijit/_WidgetBase",
"dijit/_TemplatedMixin",
"dojo/text!./templates/PointPickerWidget.html",
"dojo/_base/event",
"utils/menus",
"dojo/query",
"dojo/dom-construct",
"dojo/topic",
"dojo/on",
"esri/geometry/Point",
"esri/geometry/screenUtils",
"esri/geometry/webMercatorUtils",
"dojo/domReady!"
],
function(declare,
_WidgetBase,
_TemplatedMixin,
template,
Event,
menus,
query,
domConstruct,
topic,
on,
Point,
screenUtils,
webMercatorUtils) {
return declare("PointPickerWidget",[_WidgetBase, _TemplatedMixin], {
templateString: template,
widgetsInTemplate: true,
lat:0,
lng:0,
accuracy:'Obtaining GPS Location...',
tryCount:0,
constructor: function() {
},
postMixInProperties: function() {
},
getAccuracy: function() {
var self = this;
var updatedAccuracy;
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(loc) {
if(loc.coords.accuracy >= 30) {
updatedAccuracy = domConstruct.toDom('GPS Accuracy: ' + loc.coords.accuracy);
domConstruct.place(updatedAccuracy, 'location-accuracy', 'only');
} else {
if(self.tryCount < 3) {
self.getAccuracy();
self.tryCount += 1;
} else {
updatedAccuracy = domConstruct.toDom('Unable to obtain GPS location. Please select a point instead.');
domConstruct.place(updatedAccuracy, 'location-accuracy', 'only');
}
}
});
}
},
postCreate: function() {
domConstruct.place(this.domNode, "point-picker", "only");
this.getAccuracy();
},
getCurrentLocation: function() {
if( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(function(location) {
var point = new Point(location.coords.longitude, location.coords.latitude);
map.centerAndZoom(point, 12);
var locationInfo = {
coords:location.coords,
point: point
};
topic.publish('location-picked', locationInfo);
});
} else {
alert("Geolocation not supported!");
}
menus.closePointPicker();
},
pickLocation: function() {
menus.closePointPicker();
menus.showTapAndHoldDialog();
map.disableDoubleClickZoom();
var mapDiv = document.getElementById('map');
var hammertime = Hammer(mapDiv);
hammertime.on("hold", function (evt) {
// convert screen coords to map coords
var x, y, point, mapPoint;
x = evt.gesture.center.pageX;
y = evt.gesture.center.pageY;
point = new Point(x, y);
mapPoint = screenUtils.toMapPoint(
map.extent,
map.width,
map.height,
point
);
var latLng = webMercatorUtils.xyToLngLat(mapPoint.x, mapPoint.y);
var location = {};
coords = {
latitude: latLng[1],
longitude: latLng[0],
accuracy:null,
heading:null
};
var locationInfo = {
coords:coords,
point: mapPoint
};
hammertime.off("hold");
topic.publish('location-picked', locationInfo);
menus.hideTapAndHoldDialog();
});
}
}
);
});