/// <summary> /// Calculates distance between this and another <see cref="GeoCoordinate"/> value. /// Base on the <see cref="EPSG3857"/> reference system. /// </summary> /// <param name="other">Other <see cref="GeoCoordinate"/>.</param> /// <returns>Distance between two <see cref="GeoCoordinate"/> values.</returns> public double Distance(GeoCoordinate other) { CoordinateReferenceSystem referenceSystem = new EPSG3857(); return(Distance(other, referenceSystem)); }
private InverseDistanceWeightingFunction GetIDWFunction(ContourQuery contourQuery, List<TrendingDataLocation> locations = null) { CoordinateReferenceSystem crs = new EPSG3857(); List<double> xList = new List<double>(); List<double> yList = new List<double>(); List<double> valueList = new List<double>(); if ((object)locations == null) locations = GetFrameFromDailySummary(contourQuery); locations .Select(location => { GeoCoordinate Coordinate = new GeoCoordinate(location.Latitude, location.Longitude); double? Value = (contourQuery.DataType == "Average") ? location.Average : (contourQuery.DataType == "Minimum") ? location.Minimum : (contourQuery.DataType == "Maximum") ? location.Maximum : null; return new { Coordinate, Value }; }) .Where(obj => (object)obj.Value != null) .ToList() .ForEach(obj => { xList.Add(obj.Coordinate.Longitude); yList.Add(obj.Coordinate.Latitude); valueList.Add(obj.Value.GetValueOrDefault()); }); if (valueList.Count == 0) { xList.Add(0.0D); yList.Add(0.0D); using (AdoDataConnection connection = new AdoDataConnection(connectionstring, typeof(SqlConnection), typeof(SqlDataAdapter))) { valueList.Add(connection.ExecuteScalar<double>("SELECT NominalValue FROM ContourColorScale WHERE Name = {0}", contourQuery.ColorScaleName)); } } return new InverseDistanceWeightingFunction() .SetXCoordinates(xList.ToArray()) .SetYCoordinates(yList.ToArray()) .SetValues(valueList.ToArray()) .SetDistanceFunction((x1, y1, x2, y2) => { GeoCoordinate coordinate1 = new GeoCoordinate(y1, x1); GeoCoordinate coordinate2 = new GeoCoordinate(y2, x2); return crs.Distance(coordinate1, coordinate2); }); }
private InverseDistanceWeightingFunction GetIDWFunction(ContourQuery contourQuery, List<TrendingDataLocation> locations = null) { CoordinateReferenceSystem crs = new EPSG3857(); List<double> xList = new List<double>(); List<double> yList = new List<double>(); List<double> valueList = new List<double>(); if ((object)locations == null) locations = GetFrameFromDailySummary(contourQuery); locations .Select(location => { GeoCoordinate Coordinate = new GeoCoordinate(location.Latitude, location.Longitude); double? Value = (contourQuery.DataType == "Average") ? location.Average : (contourQuery.DataType == "Minimum") ? location.Minimum : (contourQuery.DataType == "Maximum") ? location.Maximum : null; return new { Coordinate, Value }; }) .Where(obj => (object)obj.Value != null) .ToList() .ForEach(obj => { xList.Add(obj.Coordinate.Longitude); yList.Add(obj.Coordinate.Latitude); valueList.Add(obj.Value.GetValueOrDefault()); }); return new InverseDistanceWeightingFunction() .SetXCoordinates(xList.ToArray()) .SetYCoordinates(yList.ToArray()) .SetValues(valueList.ToArray()) .SetDistanceFunction((x1, y1, x2, y2) => { GeoCoordinate coordinate1 = new GeoCoordinate(y1, x1); GeoCoordinate coordinate2 = new GeoCoordinate(y2, x2); return crs.Distance(coordinate1, coordinate2); }); }