You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							74 lines
						
					
					
						
							2.4 KiB
						
					
					
				
			
		
		
	
	
							74 lines
						
					
					
						
							2.4 KiB
						
					
					
				| //-----------------------------------------------------------------------
 | |
| // <copyright file="MapMatcher.cs" company="Mapbox">
 | |
| //     Copyright (c) 2017 Mapbox. All rights reserved.
 | |
| // </copyright>
 | |
| //-----------------------------------------------------------------------
 | |
| 
 | |
| namespace Mapbox.MapMatching
 | |
| {
 | |
| 	using System;
 | |
| 	using System.Text;
 | |
| 	using Mapbox.Json;
 | |
| 	using Mapbox.Platform;
 | |
| 	using Mapbox.Utils.JsonConverters;
 | |
| 
 | |
| 	/// <summary>
 | |
| 	///     Wrapper around the <see href="https://www.mapbox.com/api-documentation/navigation/#map-matching">
 | |
| 	///     Mapbox Map Matching API</see>.
 | |
| 	/// </summary>
 | |
| 	public class MapMatcher
 | |
| 	{
 | |
| 		private readonly IFileSource _fileSource;
 | |
| 		private int _timeout;
 | |
| 
 | |
| 		/// <summary> Initializes a new instance of the <see cref="MapMatcher" /> class. </summary>
 | |
| 		/// <param name="fileSource"> Network access abstraction. </param>
 | |
| 		public MapMatcher(IFileSource fileSource, int timeout)
 | |
| 		{
 | |
| 			_fileSource = fileSource;
 | |
| 			_timeout = timeout;
 | |
| 		}
 | |
| 
 | |
| 		/// <summary> Performs asynchronously a geocoding lookup. </summary>
 | |
| 		/// <param name="geocode"> Geocode resource. </param>
 | |
| 		/// <param name="callback"> Callback to be called after the request is completed. </param>
 | |
| 		/// <typeparam name="T"> String or LngLat. Should be automatically inferred. </typeparam>
 | |
| 		/// <returns>
 | |
| 		///     Returns a <see cref="IAsyncRequest" /> that can be used for canceling a pending
 | |
| 		///     request. This handle can be completely ignored if there is no intention of ever
 | |
| 		///     canceling the request.
 | |
| 		/// </returns>
 | |
| 		public IAsyncRequest Match(MapMatchingResource match, Action<MapMatchingResponse> callback)
 | |
| 		{
 | |
| 			string url = match.GetUrl();
 | |
| 			return _fileSource.Request(
 | |
| 				url,
 | |
| 				(Response response) =>
 | |
| 				{
 | |
| 					var str = Encoding.UTF8.GetString(response.Data);
 | |
| 					var data = Deserialize<MapMatchingResponse>(str);
 | |
| 
 | |
| 					if (response.HasError)
 | |
| 					{
 | |
| 						data.SetRequestExceptions(response.Exceptions);
 | |
| 					}
 | |
| 
 | |
| 					callback(data);
 | |
| 				},
 | |
| 				_timeout
 | |
| 				);
 | |
| 		}
 | |
| 
 | |
| 
 | |
| 		/// <summary>
 | |
| 		/// Deserialize the map match response string into a <see cref="MapMatchingResponse"/>.
 | |
| 		/// </summary>
 | |
| 		/// <param name="str">JSON String.</param>
 | |
| 		/// <returns>A <see cref="MapMatchingResponse"/>.</returns>
 | |
| 		/// <typeparam name="T">Map Matcher. </typeparam>
 | |
| 		internal T Deserialize<T>(string str)
 | |
| 		{
 | |
| 			return JsonConvert.DeserializeObject<T>(str, JsonConverters.Converters);
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 |