in Source/Requests/DistanceMatrixRequest.cs [206:261]
public async Task<DistanceMatrix> GetEuclideanDistanceMatrix()
{
if(this.Origins != null && this.Origins.Count > 0)
//Make sure all origins and destinations are geocoded.
await GeocodeWaypoints().ConfigureAwait(false);
var dm = new DistanceMatrix()
{
Origins = this.Origins
};
int cnt = 0;
if (this.Destinations == null || this.Destinations.Count == 0)
{
dm.Destinations = this.Origins;
dm.Results = new DistanceMatrixCell[this.Origins.Count * this.Origins.Count];
for (var i = 0; i < Origins.Count; i++)
{
for (var j = 0; j < Origins.Count; j++)
{
dm.Results[cnt] = new DistanceMatrixCell()
{
OriginIndex = i,
DestinationIndex = j,
TravelDistance = SpatialTools.HaversineDistance(Origins[i].Coordinate, Origins[j].Coordinate, DistanceUnits)
};
cnt++;
}
}
}
else
{
dm.Destinations = this.Destinations;
dm.Results = new DistanceMatrixCell[this.Origins.Count * this.Destinations.Count];
for (var i = 0; i < Origins.Count; i++)
{
for (var j = 0; j < Destinations.Count; j++)
{
dm.Results[cnt] = new DistanceMatrixCell()
{
OriginIndex = i,
DestinationIndex = j,
TravelDistance = SpatialTools.HaversineDistance(Origins[i].Coordinate, Destinations[j].Coordinate, DistanceUnits)
};
cnt++;
}
}
}
return dm;
}