//void UnityARSessionNativeInterface_ARSessionTrackingChanged(UnityEngine.XR.iOS.UnityARCamera camera) //{ // Unity.Utilities.Console.Instance.Log(string.Format("AR Tracking State Changed: {0}: {1}", camera.trackingState, camera.trackingReason), "silver"); //} void LocationProvider_OnLocationUpdated(Location location) { if (location.IsLocationUpdated) { if (location.Accuracy > _minimumDesiredAccuracy) //With this line, we can control accuracy of Gps updates. { Unity.Utilities.Console.Instance.Log("Gps update ignored due to bad accuracy", "red"); } else { var latitudeLongitude = location.LatitudeLongitude; Unity.Utilities.Console.Instance.Log( string.Format( "Location: {0},{1}\tAccuracy: {2}\tHeading: {3}" , latitudeLongitude.x , latitudeLongitude.y , location.Accuracy, location.Heading ) , "lightblue" ); var position = Conversions.GeoToWorldPosition(latitudeLongitude, _map.CenterMercator, _map.WorldRelativeScale).ToVector3xz(); _synchronizationContext.AddSynchronizationNodes(location, position, _arPositionReference.localPosition); } } }
//void UnityARSessionNativeInterface_ARSessionTrackingChanged(UnityEngine.XR.iOS.UnityARCamera camera) //{ // Unity.Utilities.Console.Instance.Log(string.Format("AR Tracking State Changed: {0}: {1}", camera.trackingState, camera.trackingReason), "silver"); //} void LocationProvider_OnLocationUpdated(Location location) { if (location.IsLocationUpdated || location.IsUserHeadingUpdated) { // With this line, we can control accuracy of Gps updates. // Be aware that we only get location information if it previously met // the conditions of DeviceLocationProvider: // * desired accuarracy in meters // * and update distance in meters if (location.Accuracy > _minimumDesiredAccuracy) { Unity.Utilities.Console.Instance.Log( string.Format( "Gps update ignored due to bad accuracy: {0:0.0} > {1:0.0}" , location.Accuracy , _minimumDesiredAccuracy ) , "red" ); } else { //_kalman.Process( // location.LatitudeLongitude.x // , location.LatitudeLongitude.y // , location.Accuracy // , (long)location.Timestamp //); //location.LatitudeLongitude.x = _kalman.Lat; //location.LatitudeLongitude.y = _kalman.Lng; //location.Accuracy = (int)_kalman.Accuracy; var latitudeLongitude = location.LatitudeLongitude; Unity.Utilities.Console.Instance.Log( string.Format( "Location[{0:yyyyMMdd-HHmmss}]: {1},{2}\tAccuracy: {3}\tHeading: {4}" , UnixTimestampUtils.From(location.Timestamp) , latitudeLongitude.x , latitudeLongitude.y , location.Accuracy , location.UserHeading ) , "lightblue" ); var position = _map.GeoToWorldPosition(latitudeLongitude, false); position.y = _map.Root.position.y; _synchronizationContext.AddSynchronizationNodes(location, position, _arPositionReference.localPosition); } } }
void LocationProvider_OnLocationUpdated(object sender, LocationUpdatedEventArgs e) { Console.Instance.Log(string.Format("Location: {0},{1}\tAccuracy: {2}\tHeading: {3}", e.Location.x, e.Location.y, e.Accuracy, _lastHeading), "lightblue"); var location = new Location(); location.Position = Conversions.GeoToWorldPosition(e.Location, _map.CenterMercator, _map.WorldRelativeScale).ToVector3xz(); location.Accuracy = e.Accuracy; _synchronizationContext.AddSynchronizationNodes(location, _arPositionReference.localPosition); }
//void UnityARSessionNativeInterface_ARSessionTrackingChanged(UnityEngine.XR.iOS.UnityARCamera camera) //{ // Unity.Utilities.Console.Instance.Log(string.Format("AR Tracking State Changed: {0}: {1}", camera.trackingState, camera.trackingReason), "silver"); //} void LocationProvider_OnLocationUpdated(Location location) { if (location.IsLocationUpdated) { var latitudeLongitude = location.LatitudeLongitude; Unity.Utilities.Console.Instance.Log(string.Format("Location: {0},{1}\tAccuracy: {2}\tHeading: {3}", latitudeLongitude.x, latitudeLongitude.y, location.Accuracy, location.Heading), "lightblue"); var position = Conversions.GeoToWorldPosition(latitudeLongitude, _map.CenterMercator, _map.WorldRelativeScale).ToVector3xz(); _synchronizationContext.AddSynchronizationNodes(location, position, _arPositionReference.localPosition); } }
void LocationProvider_OnLocationUpdated(Location location) { if (step == 1) { if (location.IsLocationUpdated) { if (location.Accuracy > _minimumDesiredAccuracy) //With this line, we can control accuracy of Gps updates. { Unity.Utilities.Console.Instance.Log( string.Format( "Gps update ignored due to bad accuracy: {0:0.0} > {1:0.0}" , location.Accuracy , _minimumDesiredAccuracy ) , "red" ); } else { var latitudeLongitude = location.LatitudeLongitude; Unity.Utilities.Console.Instance.Log( string.Format( "Location: {0},{1}\tAccuracy: {2}\tHeading: {3}" , latitudeLongitude.x , latitudeLongitude.y , location.Accuracy, location.UserHeading ) , "lightblue" ); var position = Conversions.GeoToWorldPosition(latitudeLongitude, _map.CenterMercator, _map.WorldRelativeScale).ToVector3xz(); _synchronizationContext.AddSynchronizationNodes(location, position, _arPositionReference.localPosition, firstCompassValue); step = 2;//third step where user is instructed to walk to second target to complete the calibration. //put GPS target further north to make sure that user walks in straight line along its north.This will do the trick target.transform.position = new Vector3(0, 0, 4); //direct user to go to second GPS target. InstructionUXCanvas.Instance.SetInstruction(secondTarget); } } } else if (step == 3) { if (location.IsLocationUpdated) { if (location.Accuracy > _minimumDesiredAccuracy) //With this line, we can control accuracy of Gps updates. { Unity.Utilities.Console.Instance.Log( string.Format( "Gps update ignored due to bad accuracy: {0:0.0} > {1:0.0}" , location.Accuracy , _minimumDesiredAccuracy ) , "red" ); } else { var latitudeLongitude = location.LatitudeLongitude; Unity.Utilities.Console.Instance.Log( string.Format( "Location: {0},{1}\tAccuracy: {2}\tHeading: {3}" , latitudeLongitude.x , latitudeLongitude.y , location.Accuracy, location.UserHeading ) , "lightblue" ); var position = Conversions.GeoToWorldPosition(latitudeLongitude, _map.CenterMercator, _map.WorldRelativeScale).ToVector3xz(); _synchronizationContext.AddSynchronizationNodes(location, position, _arPositionReference.localPosition, firstCompassValue); //destroy gps target since we no longer need it. Destroy(target); //End of calibration InstructionUXCanvas.Instance.SetInstruction(endofCalibration); InstructionUXCanvas.Instance.SetButtonActive(); //change step to 4 so that we do not get any gps updates. //Because calibration with the first two GPS updates are the best calibration we can get in terms of error. //So first aligment is the last known "good" and "only" aligment. After that we rely on manual calibration with taking roads as references. step = 4; } } } }