public void SetUp() { List <Coordinate> coordinates = new List <Coordinate> { new Coordinate(0, 0), new Coordinate(0, 4), new Coordinate(4, 0), new Coordinate(4, 4) }; RasterMapper mapper = RasterMapper.FromCoordinates(RasterMapMode.ValueIsArea, new RasterCoordinate(0, 0, 0, 0), new RasterCoordinate(4, 0, 0, 4), new RasterCoordinate(4, 4, 4, 4), new RasterCoordinate(0, 4, 4, 0)); _sourceRasterMock = new Mock <IRaster>(MockBehavior.Strict); _sourceRasterMock.Setup(raster => raster.Factory).Returns(new RasterFactory()); _sourceRasterMock.Setup(raster => raster.Coordinates).Returns(coordinates); _sourceRasterMock.Setup(raster => raster.IsReadable).Returns(true); _sourceRasterMock.Setup(raster => raster.Dimensions).Returns(new RasterDimensions(4, 4, 1, 8)); _sourceRasterMock.Setup(raster => raster.NumberOfRows).Returns(4); _sourceRasterMock.Setup(raster => raster.NumberOfColumns).Returns(4); _sourceRasterMock.Setup(raster => raster.NumberOfBands).Returns(1); _sourceRasterMock.Setup(raster => raster.RadiometricResolution).Returns(8); _sourceRasterMock.Setup(raster => raster.Mapper).Returns(mapper); _sourceRasterMock.Setup(raster => raster.Format).Returns(RasterFormat.Integer); _sourceRasterMock.Setup(raster => raster.IsMapped).Returns(true); _sourceRasterMock.Setup(raster => raster.GetValue(It.IsInRange(0, 4, Moq.Range.Inclusive), It.IsInRange(0, 4, Moq.Range.Inclusive), It.IsInRange(0, 3, Moq.Range.Inclusive))).Returns(4); _referenceRasterMock = new Mock <IRaster>(MockBehavior.Strict); _referenceRasterMock.Setup(raster => raster.Factory).Returns(new RasterFactory()); _referenceRasterMock.Setup(raster => raster.Coordinates).Returns(coordinates); _referenceRasterMock.Setup(raster => raster.IsReadable).Returns(true); _referenceRasterMock.Setup(raster => raster.Dimensions).Returns(new RasterDimensions(4, 4, 1, 8)); _referenceRasterMock.Setup(raster => raster.NumberOfRows).Returns(4); _referenceRasterMock.Setup(raster => raster.NumberOfColumns).Returns(4); _referenceRasterMock.Setup(raster => raster.NumberOfBands).Returns(1); _referenceRasterMock.Setup(raster => raster.RadiometricResolution).Returns(8); _referenceRasterMock.Setup(raster => raster.Mapper).Returns(mapper); _referenceRasterMock.Setup(raster => raster.Format).Returns(RasterFormat.Integer); _referenceRasterMock.Setup(raster => raster.IsMapped).Returns(true); for (Int32 i = 0; i < 4; i++) { for (Int32 j = 0; j < 4; j++) { if (i == 0 && j == 0) { _referenceRasterMock.Setup(raster => raster.GetValue(0, 0, It.IsInRange(0, 3, Moq.Range.Inclusive))).Returns(10); } else { _referenceRasterMock.Setup(raster => raster.GetValue(i, j, It.IsInRange(0, 3, Moq.Range.Inclusive))).Returns(4); } } } }
/// <summary> /// Reads the raster mapping stored in the metafile stream. /// </summary> /// <returns>The raster mapping.</returns> protected override RasterMapper ReadMappingInternal() { List <RasterCoordinate> coordinates = new List <RasterCoordinate>(4); foreach (XElement vertexElement in _document.Element("Dimap_Document").Element("Dataset_Frame").Elements("Vertex")) { RasterCoordinate coordinate = new RasterCoordinate( Int32.Parse(vertexElement.Element("FRAME_ROW").Value, NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat), Int32.Parse(vertexElement.Element("FRAME_COL").Value, NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat), Double.Parse(vertexElement.Element("FRAME_LAT").Value, NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat), Double.Parse(vertexElement.Element("FRAME_LON").Value, NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat) ); coordinates.Add(coordinate); } return(RasterMapper.FromCoordinates(RasterMapMode.ValueIsArea, coordinates)); }
public void RasterMapperFromCoordinatesTest() { RasterMapper sourceMapper = RasterMapper.FromTransformation(RasterMapMode.ValueIsCoordinate, new Coordinate(300, 1000, 0), new CoordinateVector(10, 3)); RasterMapper mapper = RasterMapper.FromCoordinates(RasterMapMode.ValueIsCoordinate, new RasterCoordinate(0, 0, sourceMapper.MapCoordinate(0, 0)), new RasterCoordinate(100, 0, sourceMapper.MapCoordinate(100, 0)), new RasterCoordinate(100, 100, sourceMapper.MapCoordinate(100, 100)), new RasterCoordinate(0, 100, sourceMapper.MapCoordinate(0, 100)) ); Assert.AreEqual(RasterMapMode.ValueIsCoordinate, mapper.Mode); Assert.AreEqual(sourceMapper.ColumnVector, mapper.ColumnVector); Assert.AreEqual(sourceMapper.RowVector, mapper.RowVector); Assert.AreEqual(sourceMapper.Translation.X, mapper.Translation.X, 0.000001); Assert.AreEqual(sourceMapper.Translation.Y, mapper.Translation.Y, 0.000001); Assert.AreEqual(sourceMapper.Translation.Z, mapper.Translation.Z, 0.000001); // exceptions Assert.Throws <ArgumentNullException>(() => RasterMapper.FromCoordinates(RasterMapMode.ValueIsCoordinate, null)); Assert.Throws <ArgumentException>(() => RasterMapper.FromCoordinates(RasterMapMode.ValueIsCoordinate, new RasterCoordinate(0, 0, sourceMapper.MapCoordinate(0, 0)), new RasterCoordinate(0, 100, sourceMapper.MapCoordinate(0, 100)))); Assert.Throws <ArgumentException>(() => RasterMapper.FromCoordinates(RasterMapMode.ValueIsCoordinate, new RasterCoordinate(0, 0, sourceMapper.MapCoordinate(0, 0)), new RasterCoordinate(100, 0, sourceMapper.MapCoordinate(100, 0)))); }
/// <summary> /// Reads the mapping from model space to raster space. /// </summary> /// <returns>The mapping from model space to raster space.</returns> protected RasterMapper ComputeRasterToModelSpaceMapping() { if (!_currentGeoKeys.ContainsKey(GeoKey.RasterType)) { return(null); } RasterMapMode mode = Convert.ToInt16(_currentGeoKeys[GeoKey.RasterType]) == 1 ? RasterMapMode.ValueIsArea : RasterMapMode.ValueIsCoordinate; Double[] modelTiePointsArray = null; Double[] modelPixelScaleArray = null; Double[] modelTransformationArray = null; // gather information from tags if (_imageFileDirectories[_currentImageIndex].ContainsKey(TiffTag.ModelTiepointTag)) { modelTiePointsArray = _imageFileDirectories[_currentImageIndex][TiffTag.ModelTiepointTag].Select(value => Convert.ToDouble(value)).ToArray(); } if (_imageFileDirectories[_currentImageIndex].ContainsKey(TiffTag.ModelPixelScaleTag)) { modelPixelScaleArray = _imageFileDirectories[_currentImageIndex][TiffTag.ModelPixelScaleTag].Select(value => Convert.ToDouble(value)).ToArray(); } if (_imageFileDirectories[_currentImageIndex].ContainsKey(TiffTag.ModelTransformationTag)) { modelTransformationArray = _imageFileDirectories[_currentImageIndex][TiffTag.ModelTransformationTag].Select(value => Convert.ToDouble(value)).ToArray(); } // for GeoTIFF 0.2, IntergraphMatrixTag (33920) may contain the transformation values if (modelTransformationArray == null && _imageFileDirectories[_currentImageIndex].ContainsKey(TiffTag.IntergraphMatrixTag)) { modelTransformationArray = _imageFileDirectories[_currentImageIndex][TiffTag.IntergraphMatrixTag].Select(value => Convert.ToDouble(value)).ToArray(); } // compute with model tie points if (modelTiePointsArray != null && (modelTiePointsArray.Length > 6 || (modelTiePointsArray.Length == 6 && modelPixelScaleArray.Length == 3))) { if (modelTiePointsArray.Length > 6) // transformation is specified by tie points { RasterCoordinate[] coordinates = new RasterCoordinate[modelTiePointsArray.Length / 6]; for (Int32 i = 0; i < modelTiePointsArray.Length; i += 6) { coordinates[i / 6] = new RasterCoordinate(Convert.ToInt32(modelTiePointsArray[i]), Convert.ToInt32(modelTiePointsArray[i + 1]), new Coordinate(modelTiePointsArray[i + 3], modelTiePointsArray[i + 4], modelTiePointsArray[i + 5])); } return(RasterMapper.FromCoordinates(mode, coordinates)); } else // transformation is specified by single tie point and scale { Coordinate rasterSpaceCoordinate = new Coordinate(modelTiePointsArray[0], modelTiePointsArray[1], modelTiePointsArray[2]); Coordinate modelSpaceCoordinate = new Coordinate(modelTiePointsArray[3], modelTiePointsArray[4], modelTiePointsArray[5]); Double scaleX = modelPixelScaleArray[0]; Double scaleY = -modelPixelScaleArray[1]; Double scaleZ = modelPixelScaleArray[2]; return(RasterMapper.FromTransformation(mode, modelSpaceCoordinate.X - rasterSpaceCoordinate.X * scaleX, modelSpaceCoordinate.Y + rasterSpaceCoordinate.Y * scaleY, modelSpaceCoordinate.Z - rasterSpaceCoordinate.Z * scaleZ, scaleX, scaleY, scaleZ)); } } // compute with transformation values if (modelTransformationArray != null) { Matrix transformation = new Matrix(4, 4); for (Int32 i = 0; i < 4; i++) { for (Int32 j = 0; j < 4; j++) { transformation[i, j] = modelTransformationArray[i * 4 + j]; } } return(RasterMapper.FromTransformation(mode, transformation)); } // nothing is available return(null); }