/// <summary> /// Projects a geometry using the given transformation. /// </summary> /// <param name="coordinateTransform">The transformation to use.</param> /// <returns>A projected point object.</returns> public override Geometry Project(ICoordinateTransformation coordinateTransform) { if (coordinateTransform == null) { throw new ArgumentNullException("coordinateTransform"); } if (!(coordinateTransform.MathTransform is Geotools.CoordinateTransformations.MapProjection)) { throw new ArgumentException("transform must be a MapProjection."); } int sourceSRID = int.Parse(coordinateTransform.SourceCS.AuthorityCode); int targetSRID = int.Parse(coordinateTransform.TargetCS.AuthorityCode); MapProjection projection = (MapProjection)coordinateTransform.MathTransform; int newSRID = GetNewSRID(coordinateTransform); double x = 0.0; double y = 0.0; Coordinate external = _geometryFactory.PrecisionModel.ToExternal(new Coordinate(this._coordinate)); if (this.GetSRID() == sourceSRID) { projection.MetersToDegrees(external.X, external.Y, out x, out y); } else if (this.GetSRID() == targetSRID) { projection.DegreesToMeters(external.X, external.Y, out x, out y); } Coordinate projectedCoordinate = _geometryFactory.PrecisionModel.ToInternal(new Coordinate(x, y)); return(new Point(projectedCoordinate, this.PrecisionModel, newSRID)); } // public override IGeometry Project(OGC.CoordinateTransformations.CT_Coordinat
/// <summary> /// Applies the projection to the coordinates. /// </summary> /// <param name="geometry">The geometry object to apply the filter to.</param> public void Filter(Geometry geometry) { /*if (geometry is Polygon) * { * Polygon polygon = (Polygon)geometry; * Filter(polygon.Shell); * foreach(LinearRing linearring in polygon.Holes) * { * Filter(linearring); * } * }*/ if (geometry is LinearRing || geometry is LineString || geometry is Point) { int sourceSRID = int.Parse(_coordinateTransform.SourceCS.AuthorityCode); int targetSRID = int.Parse(_coordinateTransform.TargetCS.AuthorityCode); MapProjection projection = (MapProjection)_coordinateTransform.MathTransform; Coordinates projectedCoordinates = new Coordinates(); double x = 0.0; double y = 0.0; Coordinate coordinate; for (int i = 0; i < geometry.GetCoordinates().Count; i++) { coordinate = geometry.GetCoordinates()[i]; if (geometry.GetSRID() == sourceSRID) { projection.MetersToDegrees(coordinate.X, coordinate.Y, out x, out y); } else if (geometry.GetSRID() == targetSRID) { projection.DegreesToMeters(coordinate.X, coordinate.Y, out x, out y); } coordinate.X = x; coordinate.Y = y; } } /*else * { * throw new NotSupportedException(geometry.GetType().Name); * }*/ }
/// <summary> /// Projects a geometry using the given transformation. /// </summary> /// <param name="coordinateTransform">The transformation to use.</param> /// <returns>A projected line string object.</returns> public override Geometry Project(ICoordinateTransformation coordinateTransform) { if (coordinateTransform == null) { throw new ArgumentNullException("coordinateTransform"); } if (!(coordinateTransform.MathTransform is Geotools.CoordinateTransformations.MapProjection)) { throw new ArgumentException("coordinateTransform must be a MapProjection."); } int sourceSRID = int.Parse(coordinateTransform.SourceCS.AuthorityCode); int targetSRID = int.Parse(coordinateTransform.TargetCS.AuthorityCode); MapProjection projection = (MapProjection)coordinateTransform.MathTransform; int newSRID = GetNewSRID(coordinateTransform); Coordinates projectedCoordinates = new Coordinates(); double x = 0.0; double y = 0.0; Coordinate projectedCoordinate; Coordinate external; Coordinate coordinate; for (int i = 0; i < _points.Count; i++) { coordinate = _points[i]; external = _geometryFactory.PrecisionModel.ToExternal(coordinate); if (this._SRID == sourceSRID) { projection.MetersToDegrees(external.X, external.Y, out x, out y); } else if (this._SRID == targetSRID) { projection.DegreesToMeters(external.X, external.Y, out x, out y); } projectedCoordinate = _geometryFactory.PrecisionModel.ToInternal(new Coordinate(x, y)); projectedCoordinates.Add(projectedCoordinate); } return(new LineString(projectedCoordinates, this.PrecisionModel, newSRID)); }