示例#1
0
    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();
    }
示例#2
0
    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
                                    ));
        }
    }
示例#4
0
 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());
    }