Карты Azure отклоняют запрос маршрута с помощью почтового индексаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Карты Azure отклоняют запрос маршрута с помощью почтового индекса

Сообщение Anonymous »

Когда я отправляю почтовый индекс в качестве местоположения в AzureMaps, он возвращает неверный запрос.
Моя теория состоит в том, что централизованная точка на почтовом индексе не является точкой навигации по дороге.< /p>
Я пробовал несколько вещей:
-Отклонение
Я добавил в запрос параметр отклонения 2,5 км, но все равно вернул неверный запрос.
-Snaptoroad api
Этот API оказался несуществующим. Возможно я неправильно сформировал URL. Но в любом случае, глядя на документацию, здесь больше говорится о визуальном виде. Единственная цель здесь — вернуть продолжительность поездки по маршруту.
-Обратное геокодирование.
Кто-то предложил, чтобы обратное геокодирование заставило Azure найти ближайший навигационный адрес, что, на мой взгляд, было креативным, но также не сработало.
Я собираюсь снова попробовать Snaptoroad api, но не думаю, что это правильно. Мне также придется попробовать нечеткие входные данные.
Для большего контекста метод принимает HubId и список местоположений. «Местоположения» обычно представляют собой полные или почти полные адреса, но могут быть почтовыми индексами или городами и штатами. Запятые в параметре не допускаются.
Возврат представляет собой простое двойное количество минут маршрута.
Это все в ядре C# asp
ОБНОВЛЕНИЕ:
Нечеткий поиск не работал. Мой метод здесь:

Код: Выделить всё

public async Task HubRouteCalculate(DateTime sDate, TimeSpan sTime, string sHub, List sLocations)
{
// Combine date and time
var localDateTime = sDate.Add(sTime); // Local time
var utcDateTime = TimeZoneInfo.ConvertTimeToUtc(localDateTime, TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"));

// Look up the hub address
if (string.IsNullOrWhiteSpace(sHub) || sLocations == null || sLocations.Count == 0)
{
throw new ArgumentException("Invalid hub or destination addresses.");
}
if(sHub.Substring(0,1) != "H") { sHub = "H" + sHub; }
var hub = _context.ListHubs.FirstOrDefault(m => m.HubId == sHub);
if (hub == null)
{
throw new Exception("Hub not found.");
} //**return error
//var hubCoordinates = await GeocodeAddress(hub.Address);
var hubCoordinates = await FuzzySearchAddressGeoCode(hub.Address);

// Construct waypoints starting and ending at the hub
// Geocode all destination locations
var waypointCoordinates = new List
{
$"{hubCoordinates.lat},{hubCoordinates.lon}" // Starting point (hub)
};

foreach (var location in sLocations)
{
//var coordinates = await GeocodeAddress(location);
//waypointCoordinates.Add($"{coordinates.lat},{coordinates.lon}");
var coordinates = await FuzzySearchAddressGeoCode(location);
waypointCoordinates.Add($"{coordinates.lat},{coordinates.lon}");
}

waypointCoordinates.Add($"{hubCoordinates.lat},{hubCoordinates.lon}"); // Return to hub

// Construct the query parameter with all waypoints
var route = string.Join(":", waypointCoordinates);

// Construct the Azure Maps Routing API URL
var url = $"https://atlas.microsoft.com/route/directions/json?api-version=1.0" +
$"&query={route}" +
$"&minDeviationDistance = 100" +
$"&travelMode=truck" +
$"&routeType=fastest" +
$"&vehicleHeight=3.9" +   // Example vehicle dimensions (meters) 13ft => 3.9
$"&vehicleWidth=2.43" +  //8ft => 2.43
$"&vehicleLength=10.97" + //36ft => 10.97
$"&vehicleWeight=11800" + // Example weight (kg) 26000lbs => 11800
$"&departureTime={Uri.EscapeDataString(utcDateTime.ToString("yyyy-MM-ddTHH:mm:ssZ"))}" +
$"&subscription-key={_azureMapsKey}";

try
{
using (var client = new HttpClient())
{
var response = await client.GetAsync(url);

if (!response.IsSuccessStatusCode)
{
throw new Exception($"Azure Maps API error: {response.StatusCode} - {response.ReasonPhrase}");
}

var content = await response.Content.ReadAsStringAsync();
var routeData = System.Text.Json.JsonSerializer.Deserialize(content);

// Extract total travel time in seconds and convert to minutes
var travelTimeInSeconds = routeData.routes[0].summary.travelTimeInSeconds;
return travelTimeInSeconds / 60.0; // Return travel time in minutes
}
}
catch (Exception ex)
{
throw new Exception($"Error calculating route: {ex.Message}");
}
}
Ошибка здесь:
Ошибка расчета маршрута: Ошибка API Azure Maps: BadRequest — неверный запрос
Запрос здесь:
https://atlas.microsoft.com/route/direc ... onDistance = 100&travelMode=truck&routeType=fastest&vehicleHeight=3.9&vehicleWidth=2.43&vehicleLength=10.97&vehicleWeight=11800&departureTime= 2024-12-23T16%3A00%3A39Z&subscription-key=AHqc5ekSrA5PhfZM9joRnP0THz0ub03uGIuqqsy51GYCV8iUFJOLJQQJ99ALACYeBjFLbQ9fAAAgAZMP1RSB

Подробнее здесь: https://stackoverflow.com/questions/792 ... th-zipcode
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»