// Use Api.Instance.TransportApi.CreatePositioner for public construction internal TransportPositioner( TransportApiInternal transportApiInternal, int id, TransportPositionerOptions options) { if (transportApiInternal == null) { throw new ArgumentNullException("transportApiInternal"); } if (id == InvalidId) { throw new ArgumentException("invalid id"); } m_transportApiInternal = transportApiInternal; Id = id; InputLatitudeDegrees = options.InputLatitudeDegrees; InputLongitudeDegrees = options.InputLongitudeDegrees; InputHeadingDegrees = options.InputHeadingDegrees; MaxHeadingDeviationToMatchedPointDegrees = options.MaxHeadingDeviationToMatchedPointDegrees; MaxDistanceToMatchedPointMeters = options.MaxDistanceToMatchedPointMeters; TransportNetworkType = options.TransportNetworkType; HasInputHeading = options.HasHeading; }
public IList <TransportDirectedEdgeId> GetDirectedEdgeIdsForNetwork(TransportNetworkType transportNetwork) { var interopIds = FetchDirectedEdgeIdsForNetwork(transportNetwork); var directedEdgeIds = interopIds.Select(_x => _x.FromInterop()).ToList(); return(directedEdgeIds); }
public IList <TransportWayId> GetWayIdsForNetwork(TransportNetworkType transportNetwork) { var interopIds = FetchWayIdsForNetwork(transportNetwork); var wayIds = interopIds.Select(_x => _x.FromInterop()).ToList(); return(wayIds); }
private void OnTransportNetworkCellRemoved(TransportNetworkType transportNetwork, TransportCellKey cellKey) { var objectKey = MakeObjectKey(transportNetwork, cellKey); RemoveAndDestroyWayMeshes(objectKey); RemoveAndDestroyLinkMeshes(objectKey); }
public void NotifyTransportGraphChanged( TransportNetworkType transportNetworkType, TransportCellKey cellKey, TransportGraphChangeReason transportGraphChangeReason ) { switch (transportGraphChangeReason) { case TransportGraphChangeReason.TransportGraphCellAdded: if (OnTransportNetworkCellAdded != null) { OnTransportNetworkCellAdded(transportNetworkType, cellKey); } break; case TransportGraphChangeReason.TransportGraphCellRemoved: if (OnTransportNetworkCellRemoved != null) { OnTransportNetworkCellRemoved(transportNetworkType, cellKey); } break; case TransportGraphChangeReason.TransportGraphCellUpdated: if (OnTransportNetworkCellUpdated != null) { OnTransportNetworkCellUpdated(transportNetworkType, cellKey); } break; default: throw new System.ArgumentOutOfRangeException("transportGraphChangeReason"); } }
private static void RaiseEvent(TransportNetworkChangedHandler handler, TransportNetworkType networkType, TransportCellKey cellKey) { if (handler != null) { handler(networkType, cellKey); } }
private IList <TransportWay> BuildWaysForCell( TransportNetworkType transportNetworkType, TransportCellKey cellKey ) { var cellKeyInterop = cellKey.ToInterop(); int wayCount = NativeTransportApi_GetWayCountForNetworkInCell(NativePluginRunner.API, transportNetworkType, cellKeyInterop); if (wayCount <= 0) { return(new List <TransportWay>()); } // alloc and pin buffers var wayIdInteropBuffer = new TransportWayIdInterop[wayCount]; var wayIdInteropBufferGCHandle = GCHandle.Alloc(wayIdInteropBuffer, GCHandleType.Pinned); var wayIdInteropBufferPtr = wayIdInteropBufferGCHandle.AddrOfPinnedObject(); // populate buffers from C++ api var waySuccess = NativeTransportApi_TryGetWayIdsForNetworkInCell(NativePluginRunner.API, transportNetworkType, cellKeyInterop, wayCount, wayIdInteropBufferPtr); if (!waySuccess) { throw new System.ArgumentOutOfRangeException("incorrect buffer size passed for way ids"); } var ways = FetchWays(wayIdInteropBuffer); // free buffers wayIdInteropBufferGCHandle.Free(); return(ways); }
private IList <TransportDirectedEdge> BuildDirectedEdgesForCell( TransportNetworkType transportNetworkType, TransportCellKey cellKey ) { var cellKeyInterop = cellKey.ToInterop(); int directedEdgeCount = NativeTransportApi_GetDirectedEdgeCountForNetworkInCell(NativePluginRunner.API, transportNetworkType, cellKeyInterop); if (directedEdgeCount <= 0) { return(new List <TransportDirectedEdge>()); } // alloc and pin buffers var directedEdgeIdInteropBuffer = new TransportDirectedEdgeIdInterop[directedEdgeCount]; var directedEdgeIdInteropBufferGCHandle = GCHandle.Alloc(directedEdgeIdInteropBuffer, GCHandleType.Pinned); var directedEdgeIdInteropBufferPtr = directedEdgeIdInteropBufferGCHandle.AddrOfPinnedObject(); // populate buffers from C++ api var directedEdgeSuccess = NativeTransportApi_TryGetDirectedEdgeIdsForNetworkInCell(NativePluginRunner.API, transportNetworkType, cellKeyInterop, directedEdgeCount, directedEdgeIdInteropBufferPtr); if (!directedEdgeSuccess) { throw new System.ArgumentOutOfRangeException("incorrect buffer size passed for directed edge ids"); } var directedEdges = FetchDirectedEdges(directedEdgeIdInteropBuffer); // free buffer directedEdgeIdInteropBufferGCHandle.Free(); return(directedEdges); }
public IList <TransportWayId> GetWayIdsForNetworkInCell(TransportNetworkType transportNetwork, TransportCellKey cellKey) { var cellKeyInterop = cellKey.ToInterop(); var interopIds = FetchWayIdsForNetworkInCell(transportNetwork, cellKeyInterop); var wayIds = interopIds.Select(_x => _x.FromInterop()).ToList(); return(wayIds); }
private void OnTransportNetworkCellUpdated(TransportNetworkType transportNetwork, TransportCellKey cellKey) { var objectKey = MakeObjectKey(transportNetwork, cellKey); RemoveAndDestroyLinkMeshes(objectKey); var directedEdges = m_transportApi.GetDirectedEdgesForNetworkAndCell(transportNetwork, cellKey); CreateAndAddLinkMeshes(objectKey, directedEdges); }
private void OnTransportNetworkCellRemoved(TransportNetworkType networkType, TransportCellKey cellKey) { if (networkType != NetworkType) { return; } RemoveForCell(cellKey); }
public static void OnTransportGraphChanged( IntPtr transportApiHandle, TransportNetworkType transportNetworkType, MortonKeyInterop cellKeyInterop, TransportGraphChangeReason transportGraphChangeReason) { var transportApiInternal = transportApiHandle.NativeHandleToObject <TransportApiInternal>(); var cellKey = cellKeyInterop.FromInterop(); transportApiInternal.NotifyTransportGraphChanged(transportNetworkType, cellKey, transportGraphChangeReason); }
private void OnTransportNetworkCellUpdated(TransportNetworkType networkType, TransportCellKey cellKey) { if (networkType != NetworkType) { return; } var directedEdgeIds = m_transportApi.GetDirectedEdgeIdsForNetworkInCell(networkType, cellKey); UpdateForCell(cellKey, directedEdgeIds); }
private void OnTransportNetworkCellAdded(TransportNetworkType transportNetwork, TransportCellKey cellKey) { var objectKey = MakeObjectKey(transportNetwork, cellKey); var ways = m_transportApi.GetWaysForNetworkAndCell(transportNetwork, cellKey); CreateAndAddWayMeshes(objectKey, ways); var directedEdges = m_transportApi.GetDirectedEdgesForNetworkAndCell(transportNetwork, cellKey); CreateAndAddLinkMeshes(objectKey, directedEdges); }
private void OnTransportNetworkCellAdded(TransportNetworkType networkType, TransportCellKey cellKey) { if (networkType != NetworkType) { return; } var nodeIds = m_transportApi.GetNodeIdsForNetworkInCell(networkType, cellKey); var directedEdgeIds = m_transportApi.GetDirectedEdgeIdsForNetworkInCell(networkType, cellKey); var wayIds = m_transportApi.GetWayIdsForNetworkInCell(networkType, cellKey); AddForCell(cellKey, nodeIds, directedEdgeIds, wayIds); }
public TransportGraph( TransportNetworkType networkType, TransportApi transportApi ) { this.NetworkType = networkType; this.m_transportApi = transportApi; m_transportApi.OnTransportNetworkCellAdded += OnTransportNetworkCellAdded; m_transportApi.OnTransportNetworkCellRemoved += OnTransportNetworkCellRemoved; m_transportApi.OnTransportNetworkCellUpdated += OnTransportNetworkCellUpdated; }
public TransportPositionerOptions( double inputLatitudeDegrees, double inputLongitudeDegrees, bool hasHeading, double inputHeadingDegrees, double maxDistanceToMatchedPointMeters, double maxHeadingDeviationToMatchedPointDegrees, TransportNetworkType transportNetworkType ) { InputLatitudeDegrees = inputLatitudeDegrees; InputLongitudeDegrees = inputLongitudeDegrees; HasHeading = hasHeading; InputHeadingDegrees = inputHeadingDegrees; MaxDistanceToMatchedPointMeters = maxDistanceToMatchedPointMeters; MaxHeadingDeviationToMatchedPointDegrees = maxHeadingDeviationToMatchedPointDegrees; TransportNetworkType = transportNetworkType; }
private IList <TransportNodeIdInterop> FetchNodeIdsForNetworkInCell(TransportNetworkType transportNetwork, MortonKeyInterop cellKeyInterop) { int nodeCount = NativeTransportApi_GetNodeCountForNetworkInCell(NativePluginRunner.API, transportNetwork, cellKeyInterop); if (nodeCount <= 0) { return(new List <TransportNodeIdInterop>()); } var nodeIdInteropBuffer = new TransportNodeIdInterop[nodeCount]; var nodeIdInteropBufferGCHandle = GCHandle.Alloc(nodeIdInteropBuffer, GCHandleType.Pinned); var nodeIdInteropBufferPtr = nodeIdInteropBufferGCHandle.AddrOfPinnedObject(); if (!NativeTransportApi_TryGetNodeIdsForNetworkInCell(NativePluginRunner.API, transportNetwork, cellKeyInterop, nodeCount, nodeIdInteropBufferPtr)) { throw new System.ArgumentOutOfRangeException("incorrect buffer size passed for node ids"); } nodeIdInteropBufferGCHandle.Free(); return(nodeIdInteropBuffer); }
private IList <TransportWayIdInterop> FetchWayIdsForNetwork(TransportNetworkType transportNetwork) { int wayCount = NativeTransportApi_GetWayCountForNetwork(NativePluginRunner.API, transportNetwork); if (wayCount <= 0) { return(new List <TransportWayIdInterop>()); } var wayIdInteropBuffer = new TransportWayIdInterop[wayCount]; var wayIdInteropBufferGCHandle = GCHandle.Alloc(wayIdInteropBuffer, GCHandleType.Pinned); var wayIdInteropBufferPtr = wayIdInteropBufferGCHandle.AddrOfPinnedObject(); var waySuccess = NativeTransportApi_TryGetWayIdsForNetwork(NativePluginRunner.API, transportNetwork, wayCount, wayIdInteropBufferPtr); if (!waySuccess) { throw new System.ArgumentOutOfRangeException("incorrect buffer size passed for way ids"); } wayIdInteropBufferGCHandle.Free(); return(wayIdInteropBuffer); }
/// <summary> /// Get a collection of TransportWayId keys for all TransportWay objects currently streamed in for the given transport network. /// </summary> /// <param name="transportNetwork">The returned results are filtered to contain only ids for ways belonging to this transport network.</param> /// <returns>An unordered list of TransportNodeId objects.</returns> public IList <TransportWayId> GetWayIdsForNetwork(TransportNetworkType transportNetwork) { return(m_apiInternal.GetWayIdsForNetwork(transportNetwork)); }
/// <summary> /// Get all TransportWay objects currently streamed in for the given transport network and cell. /// </summary> /// <param name="transportApi">TransportApi instance.</param> /// <param name="transportNetwork">The returned results are filtered to contain only objects belonging to this transport network.</param> /// <param name="cellKey">The returned results are filtered to contain only objects belonging to this cell.</param> /// <returns>The list of TransportWay objects for the given network and cell.</returns> static public IList <TransportWay> GetWaysForNetworkAndCell(this TransportApi transportApi, TransportNetworkType transportNetwork, TransportCellKey cellKey) { var wayIds = transportApi.GetWayIdsForNetworkInCell(transportNetwork, cellKey); var ways = new List <TransportWay>(); foreach (var wayId in wayIds) { TransportWay way; if (!transportApi.TryGetWay(wayId, out way)) { throw new System.ArgumentOutOfRangeException("unable to fetch TransportWay"); } ways.Add(way); } return(ways); }
/// <summary> /// Get all TransportDirectedEdge objects currently streamed in for the given transport network and cell. /// </summary> /// <param name="transportApi">TransportApi instance.</param> /// <param name="transportNetwork">The returned results are filtered to contain only objects belonging to this transport network.</param> /// <param name="cellKey">The returned results are filtered to contain only objects belonging to this cell.</param> /// <returns>The list of TransportDirectedEdge objects for the given network and cell.</returns> static public IList <TransportDirectedEdge> GetDirectedEdgesForNetworkAndCell(this TransportApi transportApi, TransportNetworkType transportNetwork, TransportCellKey cellKey) { var directedEdgeIds = transportApi.GetDirectedEdgeIdsForNetworkInCell(transportNetwork, cellKey); var directedEdges = new List <TransportDirectedEdge>(); foreach (var directedEdgeId in directedEdgeIds) { TransportDirectedEdge directedEdge; if (!transportApi.TryGetDirectedEdge(directedEdgeId, out directedEdge)) { throw new System.ArgumentOutOfRangeException("unable to fetch TransportDirectedEdge"); } directedEdges.Add(directedEdge); } return(directedEdges); }
/// <summary> /// Get all TransportNode objects currently streamed in for the given transport network and cell. /// </summary> /// <param name="transportApi">TransportApi instance.</param> /// <param name="transportNetwork">The returned results are filtered to contain only objects belonging to this transport network.</param> /// <param name="cellKey">The returned results are filtered to contain only objects belonging to this cell.</param> /// <returns>The list of TransportNode objects for the given network and cell.</returns> static public IList <TransportNode> GetNodesForNetworkAndCell(this TransportApi transportApi, TransportNetworkType transportNetwork, TransportCellKey cellKey) { var nodeIds = transportApi.GetNodeIdsForNetworkInCell(transportNetwork, cellKey); var nodes = new List <TransportNode>(); foreach (var nodeId in nodeIds) { TransportNode node; if (!transportApi.TryGetNode(nodeId, out node)) { throw new System.ArgumentOutOfRangeException("unable to fetch TransportWay"); } nodes.Add(node); } return(nodes); }
/// <summary> /// TransportGraph factory method. /// </summary> /// <param name="transportApi">TransportApi instance.</param> /// <param name="transportNetwork">The transport network for which the TransportGraph will be created.</param> /// <returns>A TransportGraph instance.</returns> static public TransportGraph CreateTransportGraph(this TransportApi transportApi, TransportNetworkType transportNetwork) { return(new TransportGraph(transportNetwork, transportApi)); }
/// <summary> /// Get a collection of TransportWayId keys for all TransportWay objects currently streamed in for the given transport network and cell. /// </summary> /// <param name="transportNetwork">The returned results are filtered to contain only ids for ways belonging to this transport network.</param> /// <param name="cellKey">The returned results are filtered to contain only ids for ways belonging to this cell.</param> /// <returns>An unordered list of the id of all TransportWay objects currently resident, filtered by transportNetwork and cellKey.</returns> public IList <TransportWayId> GetWayIdsForNetworkInCell(TransportNetworkType transportNetwork, TransportCellKey cellKey) { return(m_apiInternal.GetWayIdsForNetworkInCell(transportNetwork, cellKey)); }
/// <summary> /// Get a collection of TransportDirectedEdgeId keys for all TransportDirectedEdge objects currently streamed in for the given transport network. /// </summary> /// <param name="transportNetwork">The returned results are filtered to contain only ids for directed edges belonging to this transport network.</param> /// <returns>An unordered list of TransportDirectedEdgeId objects.</returns> public IList <TransportDirectedEdgeId> GetDirectedEdgeIdsForNetwork(TransportNetworkType transportNetwork) { return(m_apiInternal.GetDirectedEdgeIdsForNetwork(transportNetwork)); }
private string MakeObjectKey(TransportNetworkType transportNetwork, TransportCellKey cellKey) { return(transportNetwork.ToString() + "_" + m_transportApi.TransportCellKeyToString(cellKey)); }
private static extern bool NativeTransportApi_TryGetDirectedEdgeIdsForNetwork(IntPtr ptr, TransportNetworkType networkType, int bufferElementCount, IntPtr directedEdgeIdInteropBuffer);
private static extern bool NativeTransportApi_TryGetWayIdsForNetworkInCell(IntPtr ptr, TransportNetworkType networkType, MortonKeyInterop cellKeyInterop, int bufferElementCount, IntPtr wayIdInteropBuffer);
/// <summary> /// Set the transport network on which to attempt to find a matching point. /// </summary> /// <param name="transportNetworkType">The transport network on which the resultant TransportPositioner will operate.</param> /// <returns>This object, with the transport network set.</returns> public TransportPositionerOptionsBuilder SetTransportNetworkType(TransportNetworkType transportNetworkType) { m_transportNetworkType = transportNetworkType; return(this); }