Store the track with Geolocation API

3726
1
05-07-2015 08:14 AM
ChristianSailer2
Occasional Contributor

Hi

I'm trying to apply the coordinates of the tracking made by the Geolocation API.

http://tests.christiansailer.ch/omleth_dozent/tripmeter/esri.htm

Unfortunately it doesn't add the records of the Graphic with the function applyEdit in the way I did with Attributes.

Can sb. help?

Thx.

Code is:

function initFunc(map) {
var startPos;
  if( navigator.geolocation ) {
  navigator.geolocation.getCurrentPosition(zoomToLocation, locationError);
  watchId = navigator.geolocation.watchPosition(showLocation, locationError);
  } else {
  alert("Browser doesn't support Geolocation. Visit http://caniuse.com to see browser support for the Geolocation API.");
  }
  }
  function locationError(error) {
  //error occurred so stop watchPosition
  if( navigator.geolocation ) {
  navigator.geolocation.clearWatch(watchId);
  }
  switch (error.code) {
  case error.PERMISSION_DENIED:
  alert("Location not provided");
  break;
  case error.POSITION_UNAVAILABLE:
  alert("Current location not available");
  break;
  case error.TIMEOUT:
  alert("Timeout");
  break;
  default:
  alert("unknown error");
  break;
  }
  }
var positionLayerURL = "http://services1.arcgis.com/i9MtZ1vtgD3gTnyL/arcgis/rest/services/OMLETH_Trackers_20150505/FeatureSe...";
var positionLayer = new FeatureLayer(positionLayerURL,
{mode: FeatureLayer.MODE_ONDEMAND,
outFields: ["*"]
}
);
  function zoomToLocation(location) {
startPos = location;
  var pt = new Point(location.coords.longitude, location.coords.latitude);
dojo.byId("startLat").innerHTML = location.coords.latitude;
  dojo.byId("startLon").innerHTML = location.coords.longitude;
  addGraphic(pt);
  map.centerAndZoom(pt, 12);
  }
  function showLocation(location) {
  //zoom to the users location and add a graphic
  var pt = new Point([location.coords.longitude, location.coords.latitude],new SpatialReference({ wkid:4326 }));
var graphic = new Graphic(pt);
  if ( !graphic ) {
  addGraphic(pt);
  } else { // move the graphic if it already exists
  graphic.setGeometry(pt);
console.log(positionLayer);
console.log(graphic);
console.log(positionLayerURL);
//applyEdits
positionLayer.applyEdits([graphic],null, null, function(){
console.log("updateXY");
}, function(){
alert("An error occured during update.");
});
  }
  map.centerAt(pt);
1 Reply
TomSellsted
MVP Regular Contributor

Christian,

When you create the new graphic, it needs to have a reference to attributes, even if they are blank.  For example:

var att = {};
var graphic = new Graphic(pt,null,att);

Without a reference to an attribute, it will fail.

Regards,

Tom