Google Map Road API не интерполирует путь и не дает гладкого маршрута

Я пытаюсь получить плавный маршрут для маршрута ниже маршрута, используя API-интерфейс дороги в Инспекторе дорог, но не получаю гладкий маршрут. API-интерфейс дороги Google не может обеспечить плавный маршрут. Некоторая часть маршрута не является гладкой с фактическим автомобильным маршрутом, например, на поворотах, на мостах и ​​т. Д. Пожалуйста, посмотрите ниже маршрут маршрута и предоставить решение, чтобы получить плавный маршрут / более точный маршрут вдоль фактической дороги.

Точки:

42.04144333333333,-88.060575|42.04123666666667,-88.06014333333333|42.04119166666667,-88.06017166666666|42.040835,-88.05990166666666|42.03982666666667,-88.05242333333334|42.03903666666667,-88.04572333333333|42.03903833333333,-88.04572|42.038495,-88.04141833333334|42.03774666666666,-88.03593833333333|42.037683333333334,-88.03549|42.034861666666664,-88.03204166666667|42.02808,-88.031215|42.02045666666667,-88.03131166666667|42.012881666666665,-88.02988833333333|42.00522333333333,-88.02747666666667|41.997353333333336,-88.02500333333333|41.98961333333333,-88.02349333333333|41.982191666666665,-88.02351333333333|41.97412833333333,-88.02447333333333|41.96599,-88.02588166666666|41.95825833333333,-88.027075|41.952605,-88.03345|41.945281666666666,-88.0377|41.937595,-88.03779333333334|41.92935,-88.037845|41.92084333333333,-88.03799166666667|41.91231,-88.038075|41.90379,-88.038145|41.89564,-88.03784166666667|41.887255,-88.036495|41.87881,-88.03291666666667|41.87096833333333,-88.03694333333334|41.863101666666665,-88.04085166666667|41.85484833333334,-88.04049166666667|41.848978333333335,-88.03315166666667|41.842145,-88.02940833333334|41.83407,-88.02922|41.826135,-88.029025|41.820256666666666,-88.02674333333333|41.813515,-88.02884833333333|41.80965333333333,-88.03722166666667|41.810065,-88.04824833333333|41.8104,-88.06018333333333|41.81016666666667,-88.07216833333334|41.80704166666666,-88.08223833333334|41.80573666666667,-88.09275|41.80591166666667,-88.10409166666666|41.80608,-88.11518333333333|41.80625166666667,-88.12632166666667|41.806415,-88.13737333333333|41.80649666666667,-88.14849166666667|41.80653,-88.15959333333333|41.80652666666667,-88.17042666666667|41.805715,-88.181295|41.80482833333333,-88.19194333333333|41.803918333333336,-88.202765|41.80304666666667,-88.212815|41.802146666666665,-88.22354833333333|41.801383333333334,-88.23485666666667|41.80068833333333,-88.24686666666666|41.8,-88.25845333333334|41.799368333333334,-88.26976833333333|41.798743333333334,-88.28041666666667|41.80003166666667,-88.28312833333334|41.795566666666666,-88.28211666666667|41.79022,-88.28205833333334|41.785465,-88.28198|41.784135,-88.28193833333333|41.782473333333336,-88.283865|41.78230833333333,-88.28874666666667|41.782226666666666,-88.288225|41.781863333333334,-88.287305|41.78176833333333,-88.28751333333334|41.78176833333333,-88.28751333333334

очки в "инспектор"

2 ответа

Ваши очки не похожи на полный вывод GPS-трекера (сценарий использования, для которого разработан этот API), и, таким образом, у вас есть участки, которые слишком далеко друг от друга. Пожалуйста, увеличьте разрешение вашей записи GPS, чтобы получить лучший вывод.

Карты Google, кажется, не фиксируют дальние точки (если расстояние между ними превышает 300- 400 м).

В качестве решения я добавил несколько поддельных точек между точками, которые слишком далеко друг от друга.

И теперь Google Maps привязывает мой маршрут правильно.

List<LatLon> extendedPointsList = new List<LatLon>();
var lastLatLon = OrigionalRoute[0];
extendedPointsList.Add(lastLatLon);
indexesBeforeAddingPoints.Add(0);

for (int i = 1; i < OrigionalRoute.Count; i++)
{
    var currentLatlon = OrigionalRoute[i];
    double estimatedDistance = 
    getEstimatedDistanceBetweenPoints(currentLatlon, lastLatLon);

    //estimated 400 meters
    if (estimatedDistance > 0.004)
    {
        //estimated 340 meters
        int countOfPoints = (int)Math.Round(estimatedDistance / 0.0034); 


        if (countOfPoints > 1)
        {
            var latDiff = (currentLatlon.Lat - lastLatLon.Lat) / countOfPoints;
            var lonDiff = (currentLatlon.Lon - lastLatLon.Lon) / countOfPoints;

            for (int j = 1; j < countOfPoints; j++)
            {
                var aveLat = lastLatLon.Lat + (latDiff * j);
                var aveLon = lastLatLon.Lon + (lonDiff * j);

                indexesBeforeAddingPoints.Add(i - 1);
                extendedPointsList.Add(new LatLon(aveLat, aveLon));
            }
        }
    }

    indexesBeforeAddingPoints.Add(i);
    extendedPointsList.Add(currentLatlon);

    lastLatLon = currentLatlon;
}

OrigionalRoute = extendedPointsList;

Метод оценки расстояния (я проигнорировал земную сферу и проекцию).

private static double getEstimatedDistanceBetweenPoints(LatLon pointA, LatLon pointB)
{
    return Math.Sqrt(Math.Pow((pointA.Lat - pointB.Lat), 2) + Math.Pow((pointA.Lon - pointB.Lon), 2));
}
Другие вопросы по тегам