private void OnEnable() { m_transportApi = Api.Instance.TransportApi; m_spacesApi = Api.Instance.SpacesApi; m_currentInputSampleIndex = 0; m_time = 0.0; m_prevSampleTime = 0.0; m_currentSampleTime = 0.0; m_nextSampleTime = SamplePeriod; m_needCurrentMatched = false; m_needPathfind = false; m_capsule = CreateCapsule(Color.yellow, 4.0f); m_capsule.SetActive(false); m_prevPointOnGraph = TransportPositionerPointOnGraph.MakeEmpty(); m_currentPointOnGraph = TransportPositionerPointOnGraph.MakeEmpty(); m_pathfindResult = null; m_transportPositioner = m_transportApi.CreatePositioner(new TransportPositionerOptionsBuilder() .SetInputCoordinates(m_inputSamples[0].LatitudeDegrees, m_inputSamples[0].LongitudeDegrees) .Build()); m_transportPositioner.OnPointOnGraphChanged += OnPointOnGraphChanged; SetInputSample(); }
private void OnPointOnGraphChanged() { if (m_needCurrentMatched && m_transportPositioner.IsMatched()) { m_prevSampleTime = m_currentSampleTime; m_currentSampleTime = m_nextSampleTime; m_prevPointOnGraph = new TransportPositionerPointOnGraph(m_currentPointOnGraph); m_currentPointOnGraph = m_transportPositioner.GetPointOnGraph(); m_needCurrentMatched = false; } if (m_needPathfind && m_currentPointOnGraph.IsMatched && m_prevPointOnGraph.IsMatched) { var pathfindResult = m_transportApi.FindShortestPath(new TransportPathfindOptionsBuilder() .SetPointOnGraphA(m_prevPointOnGraph) .SetPointOnGraphB(m_currentPointOnGraph) .Build()); if (pathfindResult.IsPathFound) { m_needPathfind = false; m_pathfindResult = pathfindResult; } } }
private static void LogPathInformation( LatLong inputPositionA, LatLong inputPositionB, TransportPathfindResult pathfindResult, List <TransportWay> pathResultWays, List <TransportNode> pathResultNodes) { Debug.Log(string.Format("Found path from {0} to {1}: distance {2:0.00}m", inputPositionA.ToString(), inputPositionB.ToString(), pathfindResult.DistanceMeters)); foreach (var way in pathResultWays) { Debug.Log(string.Format("Way id [{0}] has classification {1}, length {2:0.00}m, width {3:0.00}m", Api.Instance.TransportApi.WayIdToString(way.Id), way.Classification, way.LengthMeters, way.HalfWidthMeters * 2 )); } foreach (var node in pathResultNodes) { Debug.Log(string.Format("Node id [{0}] at {1} has {2} incident edges", Api.Instance.TransportApi.NodeIdToString(node.Id), LatLongAltitude.FromECEF(node.Point).ToString(), node.IncidentDirectedEdges.Count )); } }
private void OnDisable() { GameObject.Destroy(m_capsule); m_transportPositioner.OnPointOnGraphChanged -= OnPointOnGraphChanged; m_transportPositioner.Discard(); m_transportPositioner = null; m_prevPointOnGraph = null; m_currentPointOnGraph = null; m_pathfindResult = null; }
private static List <TransportDirectedEdge> BuildPathResultDirectedEdges(TransportPathfindResult pathfindResult) { var directedEdges = new List <TransportDirectedEdge>(); foreach (var directedEdgeId in pathfindResult.PathDirectedEdgeIds) { TransportDirectedEdge directedEdge; if (!Api.Instance.TransportApi.TryGetDirectedEdge(directedEdgeId, out directedEdge)) { throw new System.ArgumentOutOfRangeException("unable to fetch TransportDirectedEdge"); } directedEdges.Add(directedEdge); } return(directedEdges); }
private void CreatePathLines(TransportPathfindResult result) { var points = new List <Vector3>(); foreach (var pointEcef in result.PathPoints) { var lla = LatLongAltitude.FromECEF(pointEcef); lla.SetAltitude(lla.GetAltitude() + m_lineVerticalOffsetMeters); var worldPoint = Api.Instance.SpacesApi.GeographicToWorldPoint(lla); points.Add(worldPoint); } #if UNITY_5_6_OR_NEWER m_pathLineRenderer.positionCount = points.Count; #else m_pathLineRenderer.numPositions = points.Count; #endif m_pathLineRenderer.SetPositions(points.ToArray()); }