MapboxApi.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. using UnityEngine;
  2. using UnityEngine.Networking;
  3. using System;
  4. using System.Collections;
  5. namespace ARLocation.MapboxRoutes
  6. {
  7. using Vendor.SimpleJSON;
  8. [System.Serializable]
  9. public class MapboxApi
  10. {
  11. public string AccessToken;
  12. private RouteResponse queryRouteResult;
  13. public RouteResponse QueryRouteResult => queryRouteResult;
  14. private GeocodingResponse queryLocalResult;
  15. public GeocodingResponse QueryLocalResult => queryLocalResult;
  16. public string errorMessage;
  17. public string ErrorMessage => errorMessage;
  18. public MapboxApi(string token)
  19. {
  20. AccessToken = token;
  21. }
  22. public IEnumerator QueryLocal(string text, bool verbose = false)
  23. {
  24. var term = text;
  25. var url = Uri.EscapeUriString($"https://api.mapbox.com/geocoding/v5/mapbox.places/{term}.json?access_token={AccessToken}");
  26. errorMessage = null;
  27. queryLocalResult = null;
  28. if (verbose)
  29. {
  30. Debug.Log($"[MapboxApi#QueryLocal]: {url}");
  31. }
  32. using (var req = UnityWebRequest.Get(url))
  33. {
  34. yield return req.SendWebRequest();
  35. if (Utils.Misc.WebRequestResultIsError(req))
  36. {
  37. if (verbose)
  38. {
  39. Debug.LogError("[MapboxApi#QueryLocal]: Error -> " + req.error);
  40. }
  41. errorMessage = req.error;
  42. }
  43. else
  44. {
  45. if (req.responseCode != 200)
  46. {
  47. if (verbose)
  48. {
  49. Debug.LogError("[MapboxApi#QueryLocal]: Error -> " + req.downloadHandler.text);
  50. var node = JSON.Parse(req.downloadHandler.text);
  51. errorMessage = node["message"].Value; //req.downloadHandler.text;
  52. queryLocalResult = null;
  53. }
  54. }
  55. else
  56. {
  57. if (verbose)
  58. {
  59. Debug.Log("[MapboxApi#QueryLocal]: Success -> " + req.downloadHandler.text);
  60. }
  61. queryLocalResult = GeocodingResponse.Parse(req.downloadHandler.text);
  62. }
  63. }
  64. }
  65. }
  66. public IEnumerator QueryRoute(Location from, Location to, bool alternatives = false, bool verbose = false)
  67. {
  68. string alt = alternatives ? "true" : "false";
  69. string url = $"https://api.mapbox.com/directions/v5/mapbox/walking/{from.Longitude}%2C{from.Latitude}%3B{to.Longitude}%2C{to.Latitude}?alternatives={alt}&geometries=geojson&steps=true&access_token={AccessToken}";
  70. errorMessage = null;
  71. queryRouteResult = null;
  72. if (verbose)
  73. {
  74. Debug.Log($"[MapboxApi#QueryRoute]: {url}");
  75. }
  76. using (var req = UnityWebRequest.Get(url))
  77. {
  78. yield return req.SendWebRequest();
  79. if (Utils.Misc.WebRequestResultIsError(req))
  80. {
  81. if (verbose)
  82. {
  83. Debug.LogError("[MapboxApi#QueryRoute]: Error -> " + req.error);
  84. }
  85. errorMessage = req.error;
  86. }
  87. else
  88. {
  89. if (verbose)
  90. {
  91. Debug.Log("[MapboxApi#QueryRoute]: Success -> " + req.downloadHandler.text);
  92. Debug.Log("[MapboxApi#QueryRoute]: Success -> " + req.responseCode);
  93. }
  94. queryRouteResult = RouteResponse.Parse(req.downloadHandler.text);
  95. if (queryRouteResult.Code != "Ok")
  96. {
  97. errorMessage = queryRouteResult.Code;
  98. queryRouteResult = null;
  99. }
  100. else
  101. {
  102. if (verbose)
  103. {
  104. Debug.Log("[MapboxApi#QueryRoute]: Parsed result -> " + queryRouteResult);
  105. }
  106. }
  107. }
  108. }
  109. }
  110. }
  111. }