コード例 #1
0
        /// <summary>
        /// Tests execution for multiple graphs.
        /// </summary>
        /// <param name="metadataPreservation">Indicates whether the metadata should be preserved.</param>
        private void TestExecuteForGraphs(Boolean metadataPreservation)
        {
            // empty graph

            IGeometryGraph sourceGraph = new GeometryFactory(ProjectedCoordinateReferenceSystems.HD72_EOV).CreateGraph();

            IDictionary <OperationParameter, Object> parameters = new Dictionary <OperationParameter, Object>();

            parameters.Add(ReferenceOperationParameters.TargetReferenceSystem, ProjectedCoordinateReferenceSystems.WGS84_WorldMercator);
            parameters.Add(CommonOperationParameters.MetadataPreservation, metadataPreservation);

            GraphReferenceTransformation transformation = new GraphReferenceTransformation(sourceGraph, parameters);

            transformation.Execute();

            IGeometryGraph resultGraph = transformation.Result as IGeometryGraph;

            Assert.AreEqual(0, resultGraph.VertexCount);
            Assert.AreEqual(0, resultGraph.EdgeCount);
            Assert.AreEqual(sourceGraph.Metadata, resultGraph.Metadata);


            // graph with points and edges

            Coordinate[] coordinates = new Coordinate[] { new Coordinate(10, 10), new Coordinate(20, 20), new Coordinate(30, 30) };

            sourceGraph = new GeometryFactory(ProjectedCoordinateReferenceSystems.HD72_EOV).CreateGraph();
            IGraphVertex[] vertices = coordinates.Select(coordinate => sourceGraph.AddVertex(coordinate)).ToArray();

            sourceGraph.AddEdge(vertices[0], vertices[1]);
            sourceGraph.AddEdge(vertices[1], vertices[2]);

            transformation = new GraphReferenceTransformation(sourceGraph, parameters);
            transformation.Execute();

            resultGraph = transformation.Result as IGeometryGraph;

            Assert.AreEqual(3, resultGraph.VertexCount);
            Assert.AreEqual(2, resultGraph.EdgeCount);
            Assert.AreEqual(1, resultGraph.OutEdges(resultGraph.Vertices[0]).Count);
            Assert.AreEqual(resultGraph.Vertices[1], resultGraph.OutEdges(resultGraph.Vertices[0]).First().Target);
            Assert.AreEqual(1, resultGraph.OutEdges(resultGraph.Vertices[1]).Count);
            Assert.AreEqual(resultGraph.Vertices[2], resultGraph.OutEdges(resultGraph.Vertices[1]).First().Target);

            for (Int32 vertexIndex = 0; vertexIndex < resultGraph.VertexCount; vertexIndex++)
            {
                GeoCoordinate sourceGeoCoordinate   = ProjectedCoordinateReferenceSystems.HD72_EOV.Projection.Reverse(coordinates[vertexIndex]);
                GeoCoordinate expectedGeoCoordinate = GeographicTransformations.HD72_WGS84_V1.Forward(sourceGeoCoordinate);
                Coordinate    expectedCoordinate    = ProjectedCoordinateReferenceSystems.WGS84_WorldMercator.Projection.Forward(expectedGeoCoordinate);

                Assert.AreEqual(expectedCoordinate, resultGraph.Vertices[vertexIndex].Coordinate);
            }


            // not supported geometry

            Mock <IGeometry> geometryMock = new Mock <IGeometry>(MockBehavior.Loose);

            geometryMock.Setup(geometry => geometry.Factory).Returns(() => new GeometryFactory(ProjectedCoordinateReferenceSystems.HD72_EOV));
            geometryMock.Setup(geometry => geometry.ReferenceSystem).Returns(() => ProjectedCoordinateReferenceSystems.HD72_EOV);

            transformation = new GraphReferenceTransformation(geometryMock.Object, parameters);
            Assert.Throws <InvalidOperationException>(() => transformation.Execute());
        }