示例#1
0
        /// <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
示例#2
0
        /// <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);
             * }*/
        }
示例#3
0
        /// <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));
        }