/// <summary> /// Adds a HeatMap to the map. /// </summary> /// <param name="points">Points for the Heatmap.</param> private void AddHeatMap(List <HeatmapPoint> points) { var polygons = new List <ColorPolygon>(); var max = points.Max(r => r.Mean); var min = points.Min(r => r.Mean); var difference = max - min; foreach (var item in points) { var singlepolygon = (ColorPolygon)MKPolygon.FromCoordinates(ConvertCoordinates(item.BoundingCoordinates)); var red = ((((item.Mean - min) / difference) * 245) + 10) / 255; var color = Color.FromRgb(red, 0, 1 - red); singlepolygon.FillColor = color.ToCGColor(); singlepolygon.DrawOutlines = false; polygons.Add(singlepolygon); } var heatmap = new MultiPolygon(polygons); this.mapView.AddOverlay(heatmap); /* Showing a 'Real' heatmap using just points * current Version is using multiple polygons * TODO Readd LFHeatMap project first * Found at https://github.com/TreeWatch/LFHeatMaps * Code : * var positions = new List<Position>(); * var weights = new List<Double>(); * * foreach (var item in points) * { * * foreach (var pos in item.BoundingCoordinates) { * positions.Add(pos); * weights.Add(item.Mean); * } * } * var view = new UIHeatMapView(positions, weights, mapView); * mapView.AddSubview(view); */ }
/// <summary> /// Adds the fields to the map. /// </summary> private void AddFields() { var connection = new TreeWatchDatabase(); foreach (var field in this.myMap.Fields) { var query = new DBQuery <Field>(connection); var blockPolygons = new List <ColorPolygon>(); query.GetChildren(field); if (field.Blocks.Count != 0) { foreach (var block in field.Blocks) { if (block.BoundingCoordinates.Count != 0 && block.BoundingCoordinates.Count >= 3) { var blockPoints = ConvertCoordinates(block.BoundingCoordinates); var blockPolygon = (ColorPolygon)MKPolygon.FromCoordinates(blockPoints); blockPolygon.FillColor = block.TreeType.ColorProp.ToCGColor(); blockPolygons.Add(blockPolygon); } } var blockMultiPolygon = new MultiPolygon(blockPolygons); this.mapView.AddOverlay(blockMultiPolygon); } if (field.BoundingCoordinates.Count != 0 && field.BoundingCoordinates.Count >= 3) { var points = ConvertCoordinates(field.BoundingCoordinates); var polygon = MKPolygon.FromCoordinates(points); polygon.Title = "Field"; this.mapView.AddOverlay(polygon); } } var query2 = new DBQuery <HeatMap>(connection); var heatmaps = query2.GetAllWithChildren(); var heatmap = heatmaps[0]; this.AddHeatMap(heatmap.Points); }
/// <summary> /// Adds a HeatMap to the map. /// </summary> /// <param name="points">Points for the Heatmap.</param> private void AddHeatMap(List<HeatmapPoint> points) { var polygons = new List<ColorPolygon>(); var max = points.Max(r => r.Mean); var min = points.Min(r => r.Mean); var difference = max - min; foreach (var item in points) { var singlepolygon = (ColorPolygon)MKPolygon.FromCoordinates(ConvertCoordinates(item.BoundingCoordinates)); var red = ((((item.Mean - min) / difference) * 245) + 10) / 255; var color = Color.FromRgb(red, 0, 1 - red); singlepolygon.FillColor = color.ToCGColor(); singlepolygon.DrawOutlines = false; polygons.Add(singlepolygon); } var heatmap = new MultiPolygon(polygons); this.mapView.AddOverlay(heatmap); /* Showing a 'Real' heatmap using just points * current Version is using multiple polygons * TODO Readd LFHeatMap project first * Found at https://github.com/TreeWatch/LFHeatMaps * Code : var positions = new List<Position>(); var weights = new List<Double>(); foreach (var item in points) { foreach (var pos in item.BoundingCoordinates) { positions.Add(pos); weights.Add(item.Mean); } } var view = new UIHeatMapView(positions, weights, mapView); mapView.AddSubview(view); */ }
/// <summary> /// Adds the fields to the map. /// </summary> private void AddFields() { var connection = new TreeWatchDatabase(); foreach (var field in this.myMap.Fields) { var query = new DBQuery<Field>(connection); var blockPolygons = new List<ColorPolygon>(); query.GetChildren(field); if (field.Blocks.Count != 0) { foreach (var block in field.Blocks) { if (block.BoundingCoordinates.Count != 0 && block.BoundingCoordinates.Count >= 3) { var blockPoints = ConvertCoordinates(block.BoundingCoordinates); var blockPolygon = (ColorPolygon)MKPolygon.FromCoordinates(blockPoints); blockPolygon.FillColor = block.TreeType.ColorProp.ToCGColor(); blockPolygons.Add(blockPolygon); } } var blockMultiPolygon = new MultiPolygon(blockPolygons); this.mapView.AddOverlay(blockMultiPolygon); } if (field.BoundingCoordinates.Count != 0 && field.BoundingCoordinates.Count >= 3) { var points = ConvertCoordinates(field.BoundingCoordinates); var polygon = MKPolygon.FromCoordinates(points); polygon.Title = "Field"; this.mapView.AddOverlay(polygon); } } var query2 = new DBQuery<HeatMap>(connection); var heatmaps = query2.GetAllWithChildren(); var heatmap = heatmaps[0]; this.AddHeatMap(heatmap.Points); }