//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);
                }
            }
        }
示例#3
0
        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);
        }
示例#4
0
        //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);
            }
        }
示例#5
0
        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;
                    }
                }
            }
        }