Google Map Road API not interpolating path and not

2019-06-09 04:07发布

I am trying to get smooth route for below route path using road API in Roads Inspector but not getting smooth route.Google road api failing to provide smooth route.Some portion of route is not smooth with actual road route e.g at turns, at bridges etc. Please have look for below route path and provide solution to get smooth route/more accurate route along actual road.

Points:

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

points in the "inspector"

2条回答
劫难
2楼-- · 2019-06-09 04:32

Google maps seems not to snap far points, (if the distance between is longer than 300m - 400m).

As a solution I added some fake points between points that too far apart.

And now Google Maps snapping my route correctly.

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;

The method to estimate distance (I ignored earth's sphere and projection).

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));
}
查看更多
不美不萌又怎样
3楼-- · 2019-06-09 04:43

Your points don't look like the full output of a GPS tracker (the use case for which this API is designed), and thus you have stretches that are too far apart. Please increase the resolution of your GPS recording to get better output.

查看更多
登录 后发表回答