Index: Core/Components/src/Core.Components.DotSpatial/Converter/MapPointDataConverter.cs =================================================================== diff -u -rd6a913bdd073dce236a3f18d34bf415f41b54a00 -r39b0ea19fee7f9373ca435ceed191355713d6749 --- Core/Components/src/Core.Components.DotSpatial/Converter/MapPointDataConverter.cs (.../MapPointDataConverter.cs) (revision d6a913bdd073dce236a3f18d34bf415f41b54a00) +++ Core/Components/src/Core.Components.DotSpatial/Converter/MapPointDataConverter.cs (.../MapPointDataConverter.cs) (revision 39b0ea19fee7f9373ca435ceed191355713d6749) @@ -41,15 +41,23 @@ { var featureSet = new FeatureSet(FeatureType.Point); - foreach (Coordinate coordinate in GetAllPointCoordinates(data)) + foreach (var ringtoetsMapFeature in data.Features) { - featureSet.Features.Add(coordinate); + foreach (var feature in GetAllMapFeatureCoordinates(ringtoetsMapFeature) + .Select(c => new Feature(new Point(c.X, c.Y), featureSet))) + { + AddMetaDataAsAttributes(ringtoetsMapFeature, featureSet, feature); + } } + featureSet.InitializeVertices(); + var layer = new MapPointLayer(featureSet) { IsVisible = data.IsVisible, - Name = data.Name + Name = data.Name, + ShowLabels = true, + LabelLayer = GetLabelLayer(featureSet) }; CreateStyle(layer, data.Style); @@ -60,18 +68,39 @@ }; } - private static IEnumerable GetAllPointCoordinates(FeatureBasedMapData data) + private static MapLabelLayer GetLabelLayer(FeatureSet featureSet) { - return data.Features.SelectMany(GetAllMapFeatureCoordinates); + var labelLayer = new MapLabelLayer(); + + if (featureSet.DataTable.Columns.Count > 0) + { + labelLayer.Symbology.Categories[0].Symbolizer.PriorityField = "ID"; + labelLayer.Symbology.Categories[0].Expression = "[name]"; + } + + return labelLayer; } - private static IEnumerable GetAllMapFeatureCoordinates(MapFeature features) + private static void AddMetaDataAsAttributes(MapFeature ringtoetsMapFeature, FeatureSet featureSet, Feature feature) { - return features.MapGeometries.SelectMany(mapGeometry => ConvertPoint2DElementsToCoordinates(mapGeometry.PointCollections.First())); + foreach (var attribute in ringtoetsMapFeature.MetaData) + { + if (!featureSet.DataTable.Columns.Contains(attribute.Key)) + { + featureSet.DataTable.Columns.Add(attribute.Key, typeof(string)); + } + + feature.DataRow[attribute.Key] = attribute.Value; + } } - private void CreateStyle(MapPointLayer layer, PointStyle style) + private static IEnumerable GetAllMapFeatureCoordinates(MapFeature feature) { + return feature.MapGeometries.SelectMany(mapGeometry => ConvertPoint2DElementsToCoordinates(mapGeometry.PointCollections.First())); + } + + private static void CreateStyle(MapPointLayer layer, PointStyle style) + { if (style != null) { layer.Symbolizer = new PointSymbolizer(style.Color, MapDataHelper.Convert(style.Symbol), style.Size); Index: Core/Components/src/Core.Components.DotSpatial/Core.Components.DotSpatial.csproj =================================================================== diff -u -r1795be9025cb0e054dca86a5275203966c0a9b2a -r39b0ea19fee7f9373ca435ceed191355713d6749 --- Core/Components/src/Core.Components.DotSpatial/Core.Components.DotSpatial.csproj (.../Core.Components.DotSpatial.csproj) (revision 1795be9025cb0e054dca86a5275203966c0a9b2a) +++ Core/Components/src/Core.Components.DotSpatial/Core.Components.DotSpatial.csproj (.../Core.Components.DotSpatial.csproj) (revision 39b0ea19fee7f9373ca435ceed191355713d6749) @@ -54,8 +54,10 @@ + + Index: Core/Components/test/Core.Components.DotSpatial.Test/Converter/MapPointDataConverterTest.cs =================================================================== diff -u -rce31448a066c084f755439f3e7d453bfb042b291 -r39b0ea19fee7f9373ca435ceed191355713d6749 --- Core/Components/test/Core.Components.DotSpatial.Test/Converter/MapPointDataConverterTest.cs (.../MapPointDataConverterTest.cs) (revision ce31448a066c084f755439f3e7d453bfb042b291) +++ Core/Components/test/Core.Components.DotSpatial.Test/Converter/MapPointDataConverterTest.cs (.../MapPointDataConverterTest.cs) (revision 39b0ea19fee7f9373ca435ceed191355713d6749) @@ -21,6 +21,7 @@ using System; using System.Collections.Generic; +using System.Data; using System.Drawing; using System.Linq; using Core.Common.Base.Geometry; @@ -94,7 +95,7 @@ } [Test] - public void Convert_RandomPointData_ReturnsNewMapPointLayerList() + public void Convert_RandomPointDataWithoutAttributes_ReturnsNewMapPointLayerListWithDefaultLabelLayer() { // Setup var converter = new MapPointDataConverter(); @@ -132,8 +133,69 @@ Assert.IsInstanceOf(layer); Assert.AreEqual(FeatureType.Point, layer.DataSet.FeatureType); CollectionAssert.AreNotEqual(pointData.Features.First().MapGeometries.First().PointCollections, layer.DataSet.Features[0].Coordinates); + Assert.IsTrue(layer.ShowLabels); + CollectionAssert.IsEmpty(layer.DataSet.GetColumns()); + + Assert.IsNotNull(layer.LabelLayer); + Assert.AreEqual("FID", layer.LabelLayer.Symbology.Categories[0].Symbolizer.PriorityField); + Assert.IsNull(layer.LabelLayer.Symbology.Categories[0].Expression); } + + [Test] + public void Convert_RandomPointDataWithAttributes_ReturnsNewMapPointLayerListWithCustomLabelLayer() + { + // Setup + var converter = new MapPointDataConverter(); + var random = new Random(21); + var randomCount = random.Next(5, 10); + var features = new List(); + for (var i = 0; i < randomCount; i++) + { + var mapFeature = new MapFeature(new[] + { + new MapGeometry(new[] + { + new[] + { + new Point2D(random.NextDouble(), random.NextDouble()) + } + }) + }); + mapFeature.MetaData["ID"] = random.NextDouble(); + mapFeature.MetaData["Name"] = string.Format("feature [{0}]", i); + + features.Add(mapFeature); + } + + var pointData = new MapPointData("test data") + { + Features = features.ToArray() + }; + + // Call + IList mapLayers = converter.Convert(pointData); + + // Assert + Assert.IsInstanceOf>(mapLayers); + IMapFeatureLayer layer = mapLayers[0]; + + Assert.AreEqual(pointData.Features.ToArray().Length, layer.DataSet.Features.Count); + Assert.IsInstanceOf(layer); + Assert.AreEqual(FeatureType.Point, layer.DataSet.FeatureType); + CollectionAssert.AreNotEqual(pointData.Features.First().MapGeometries.First().PointCollections, layer.DataSet.Features[0].Coordinates); + Assert.IsTrue(layer.ShowLabels); + + DataColumn[] dataColumns = layer.DataSet.GetColumns(); + Assert.AreEqual(2, dataColumns.Length); + Assert.AreEqual("ID", dataColumns[0].ColumnName); + Assert.AreEqual("Name", dataColumns[1].ColumnName); + + Assert.IsNotNull(layer.LabelLayer); + Assert.AreEqual("ID", layer.LabelLayer.Symbology.Categories[0].Symbolizer.PriorityField); + Assert.AreEqual("[name]", layer.LabelLayer.Symbology.Categories[0].Expression); + } + [Test] public void Convert_MultipleFeatures_ReturnsAllFeaturesWithOneGeometry() { @@ -324,7 +386,11 @@ // Assert var layer = (MapPointLayer) layers.First(); - PointShape expectedPointShape = pointStyle == PointSymbol.Circle ? PointShape.Ellipse : pointStyle == PointSymbol.Square ? PointShape.Rectangle : PointShape.Triangle; + PointShape expectedPointShape = pointStyle == PointSymbol.Circle + ? PointShape.Ellipse + : pointStyle == PointSymbol.Square + ? PointShape.Rectangle + : PointShape.Triangle; AssertAreEqual(new PointSymbolizer(Color.AliceBlue, expectedPointShape, 3), layer.Symbolizer); } Index: Core/Components/test/Core.Components.DotSpatial.Test/Core.Components.DotSpatial.Test.csproj =================================================================== diff -u -r2d5e2d09b0cb1a7f48e1b0a067d332347c89d4a8 -r39b0ea19fee7f9373ca435ceed191355713d6749 --- Core/Components/test/Core.Components.DotSpatial.Test/Core.Components.DotSpatial.Test.csproj (.../Core.Components.DotSpatial.Test.csproj) (revision 2d5e2d09b0cb1a7f48e1b0a067d332347c89d4a8) +++ Core/Components/test/Core.Components.DotSpatial.Test/Core.Components.DotSpatial.Test.csproj (.../Core.Components.DotSpatial.Test.csproj) (revision 39b0ea19fee7f9373ca435ceed191355713d6749) @@ -70,6 +70,7 @@ +