public List GetElevationCoordinates()

in Source/Requests/ElevationRequest.cs [282:367]


        public List<Coordinate> GetElevationCoordinates()
        {            
            if (Points != null && Points.Count > 0)
            {
                if (GetGeoidOffset || samples == 0)
                {
                    return Points;                    
                }
                else
                {
                    //Calculate distance of polyline
                    double totalDistance = 0;
                    for (int i = 0; i < Points.Count - 1; i++)
                    {
                        totalDistance += SpatialTools.HaversineDistance(Points[i], Points[i + 1], DistanceUnitType.Kilometers);
                    }

                    double segementLength = totalDistance / samples;

                    var coords = new List<Coordinate>(samples);
                    coords.Add(Points[0]);

                    int idx = 0;

                    //Calculate equally spaced coordinates along polyline
                    for(var s = 0; s < samples; s++)
                    {
                        double dist = 0;
                        double travel = segementLength * s;
                        double dx = travel;

                        for (var i = 0; i < Points.Count - 1; i++)
                        {
                            dist += SpatialTools.HaversineDistance(Points[i], Points[i + 1], DistanceUnitType.Kilometers);
                            
                            if (dist >= travel)
                            {
                                idx = i;
                                break;
                            }

                            dx = travel - dist;
                        }

                        if (dx != 0 && idx < Points.Count - 1)
                        {
                            var bearing = SpatialTools.CalculateBearing(Points[idx], Points[idx + 1]);
                            coords.Add(SpatialTools.CalculateCoord(Points[idx], bearing, dx, DistanceUnitType.Kilometers));
                        }
                    }

                    return coords;
                }
            }
            else if (Bounds != null)
            {
                double dLat = Math.Abs(Bounds.NorthLatitude - Bounds.SouthLatitude) / row;
                double dLon = Math.Abs(Bounds.WestLongitude - Bounds.EastLongitude) / col;

                double x, y;

                var coords = new Coordinate[row * col];
                //The elevation values are ordered starting with the southwest corner, and then proceed west to east and south to north.
                for (int r = 0; r < row; r++)
                {
                    y = Bounds.SouthLatitude + (dLat * r);

                    for (int c = 0; c < col; c++)
                    {
                        x = Bounds.WestLongitude + (dLon * c);

                        int idx = r * row + c;

                        coords[idx] = new Coordinate()
                        {
                            Latitude = y,
                            Longitude = x
                        };
                    }
                }

                return new List<Coordinate>(coords);
            }

            return null;
        }