コード例 #1
0
ファイル: Converter.cs プロジェクト: morkl/fdotoolbox
 /// <summary>
 /// Converts an SharpMap Geometry to a FDO geometry
 /// </summary>
 /// <param name="geom">The SharpMap geometry</param>
 /// <returns></returns>
 public static FdoGeometry ToFdoGeometry(Sm.Geometry geom)
 {
     //Get the WKB form of the geometry
     byte[]        wkb = GeometryToWKB.Write(geom);
     Fdo.IGeometry fg  = FdoGeometryFactory.Instance.CreateGeometryFromWkb(wkb);
     return(new FdoGeometry(fg));
 }
コード例 #2
0
ファイル: Converter.cs プロジェクト: morkl/fdotoolbox
        /// <summary>
        /// Creates the polygon from an envelope.
        /// </summary>
        /// <param name="env">The envelope.</param>
        /// <returns></returns>
        public static Fdo.IPolygon CreatePolygonFromEnvelope(Fdo.IEnvelope env)
        {
            FdoGeometryFactory fact = FdoGeometryFactory.Instance;

            Fdo.IGeometry geom = fact.CreateGeometry(env);
            return((Fdo.IPolygon)geom);
        }
コード例 #3
0
        public static GeoAPI.Geometries.IGeometry ConvertTo(OSGeo.FDO.Geometry.IGeometry geometry)
        {
            //GisSharpBlog.NetTopologySuite.IO.WKTReader wktReader = new GisSharpBlog.NetTopologySuite.IO.WKTReader();
            //GeoAPI.Geometries.IGeometry ntsGeometry = wktReader.Read( geometry.Text );
            //return ntsGeometry;

            GisSharpBlog.NetTopologySuite.IO.WKBReader wkbReader = new GisSharpBlog.NetTopologySuite.IO.WKBReader();
            FgfGeometryFactory geometryFactory = new FgfGeometryFactory();

            GeoAPI.Geometries.IGeometry ntsGeometry = wkbReader.Read(geometryFactory.GetWkb(geometry));
            return(ntsGeometry);
        }
コード例 #4
0
        public SharpMap.Geometries.BoundingBox GetExtents()
        {
            SharpMap.Geometries.BoundingBox bbox = null;
            if (_data == null || _data.Rows.Count == 0 || string.IsNullOrEmpty(_data.GeometryColumn))
            {
                return(new SharpMap.Geometries.BoundingBox(0.0, 0.0, 0.0, 0.0));
            }

            foreach (FdoFeature feat in _data.Rows)
            {
                if (feat[_data.GeometryColumn] != null && feat[_data.GeometryColumn] != DBNull.Value)
                {
                    try
                    {
                        OSGeo.FDO.Geometry.IGeometry geom = (OSGeo.FDO.Geometry.IGeometry)feat[_data.GeometryColumn];
                        if (bbox != null)
                        {
                            if (geom.Envelope.MaxX > bbox.Max.X)
                            {
                                bbox.Max.X = geom.Envelope.MaxX;
                            }
                            if (geom.Envelope.MaxY > bbox.Max.Y)
                            {
                                bbox.Max.Y = geom.Envelope.MaxY;
                            }
                            if (geom.Envelope.MinX < bbox.Min.X)
                            {
                                bbox.Min.X = geom.Envelope.MinX;
                            }
                            if (geom.Envelope.MinY < bbox.Min.Y)
                            {
                                bbox.Min.Y = geom.Envelope.MinY;
                            }
                        }
                        else
                        {
                            bbox = new SharpMap.Geometries.BoundingBox(geom.Envelope.MinX, geom.Envelope.MinY, geom.Envelope.MaxX, geom.Envelope.MaxY);
                        }
                    }
                    catch { }
                }
            }
            if (bbox != null)
            {
                return(bbox);
            }
            else
            {
                return(new SharpMap.Geometries.BoundingBox(0.0, 0.0, 0.0, 0.0));
            }
        }
コード例 #5
0
ファイル: FdoGeometry.cs プロジェクト: nakijun/geosik
        private static void _PopulateSimpleType(IGeometrySink sink, FGeometry.IGeometry geometry)
        {
            sink.BeginGeometry(GeometryTypeUtils.Convert(geometry.DerivedType));

            switch (geometry.DerivedType)
            {
            case FCommon.GeometryType.GeometryType_LineString:
                using (FGeometry.DirectPositionCollection positions = ((FGeometry.ILineString)geometry).Positions)
                    CreateFigure(sink, positions);
                break;

            case FCommon.GeometryType.GeometryType_Point:
                using (FGeometry.DirectPositionCollection positions = new FGeometry.DirectPositionCollection())
                    using (FGeometry.IDirectPosition dp = ((FGeometry.IPoint)geometry).Position)
                    {
                        positions.Add(dp);
                        CreateFigure(sink, positions);
                    }
                break;

            case FCommon.GeometryType.GeometryType_Polygon:
            {
                var polygon = (FGeometry.IPolygon)geometry;
                using (FGeometry.ILinearRing exterior = polygon.ExteriorRing)
                    using (FGeometry.DirectPositionCollection positions = exterior.Positions)
                        CreateFigure(sink, positions);

                for (int i = 0; i < polygon.InteriorRingCount; ++i)
                {
                    using (FGeometry.ILinearRing interior = polygon.GetInteriorRing(i))
                        using (FGeometry.DirectPositionCollection positions = interior.Positions)
                            CreateFigure(sink, positions);
                }
            }
            break;

            default:
                throw new NotSupportedException(
                          string.Format(
                              CultureInfo.CurrentCulture,
                              SR.UnsupportedGeometryTypeException,
                              geometry.DerivedType
                              )
                          );
            }

            sink.EndGeometry();
        }
コード例 #6
0
ファイル: FdoGeometry.cs プロジェクト: nakijun/geosik
        /// <summary>Creates a new instance of the <see cref="FdoGeometry" /> class that encapsulates
        /// a copy of the specified FDO geometry, in the specified coordinate system.</summary>
        /// <param name="geometry">The FDO geometry for which a copy will be encapsulated.</param>
        /// <param name="coordinateSystem">The coordinate system of the encapsulated FDO geometry.</param>
        /// <remarks>
        ///   <para>This instance encapsulates a copy of the specified <paramref name="geometry" />. It is thus
        /// the responsibility of the caller to <see cref="IDisposable.Dispose()" /> the specified <paramref name="geometry" />.</para>
        /// </remarks>
        public FdoGeometry(FGeometry.IGeometry geometry, ICoordinateSystem coordinateSystem)
        {
            Debug.Assert(geometry != null);
            if (geometry == null)
            {
                throw new ArgumentNullException("geometry");
            }
            Debug.Assert(coordinateSystem != null);
            if (coordinateSystem == null)
            {
                throw new ArgumentNullException("coordinateSystem");
            }

            _Geometry         = FdoGeometryBuilder.Factory.CreateGeometry(geometry);
            _CoordinateSystem = coordinateSystem;
        }
コード例 #7
0
ファイル: Converter.cs プロジェクト: morkl/fdotoolbox
 /// <summary>
 /// Converts an FDO Geometry to a SharpMap geometry
 /// </summary>
 /// <param name="geom">The FDO geometry</param>
 /// <returns></returns>
 public static Sm.Geometry FromFdoGeometry(FdoGeometry geom, OSGeo.FDO.Geometry.FgfGeometryFactory geomFactory)
 {
     if (FdoGeometryUtil.Is2D(geom.InternalInstance))
     {
         //Get the WKB form of the geometry
         byte[] wkb = FdoGeometryFactory.Instance.GetWkb(geom.InternalInstance);
         return(GeometryFromWKB.Parse(wkb));
     }
     else
     {
         using (OSGeo.FDO.Geometry.IGeometry flattened = FdoGeometryUtil.Flatten(geom.InternalInstance, geomFactory))
         {
             //Get the WKB form of the geometry
             byte[] wkb = FdoGeometryFactory.Instance.GetWkb(flattened);
             return(GeometryFromWKB.Parse(wkb));
         }
     }
 }
コード例 #8
0
ファイル: FdoGeometry.cs プロジェクト: nakijun/geosik
        /// <summary>Applies a geometry type call sequence to the specified <paramref name="sink" />.</summary>
        /// <param name="sink">The sink to populate.</param>
        /// <remarks>
        ///   <para>The call sequence is a set of figures, lines, and points for geometry types.</para>
        /// </remarks>
        public void Populate(IGeometrySink sink)
        {
            sink.SetCoordinateSystem(CoordinateSystem);

            switch (_Geometry.DerivedType)
            {
            case FCommon.GeometryType.GeometryType_LineString:
            case FCommon.GeometryType.GeometryType_Point:
            case FCommon.GeometryType.GeometryType_Polygon:
                _PopulateSimpleType(sink, _Geometry);
                break;

            case FCommon.GeometryType.GeometryType_MultiLineString:
                sink.BeginGeometry(GeometryTypeUtils.Convert(_Geometry.DerivedType));
                {
                    var multiLineString = (FGeometry.IMultiLineString)_Geometry;
                    for (int i = 0; i < multiLineString.Count; ++i)
                    {
                        using (FGeometry.ILineString lineString = multiLineString[i])
                            _PopulateSimpleType(sink, lineString);
                    }
                }
                sink.EndGeometry();
                break;

            case FCommon.GeometryType.GeometryType_MultiPoint:
                sink.BeginGeometry(GeometryTypeUtils.Convert(_Geometry.DerivedType));
                {
                    var multiPoint = (FGeometry.IMultiPoint)_Geometry;
                    using (FGeometry.DirectPositionCollection positions = new FGeometry.DirectPositionCollection())
                        for (int i = 0; i < multiPoint.Count; ++i)
                        {
                            using (FGeometry.IPoint point = multiPoint[i])
                                _PopulateSimpleType(sink, point);
                        }
                }
                sink.EndGeometry();
                break;

            case FCommon.GeometryType.GeometryType_MultiPolygon:
                sink.BeginGeometry(GeometryTypeUtils.Convert(_Geometry.DerivedType));
                {
                    var multiPolygon = (FGeometry.IMultiPolygon)_Geometry;
                    for (int i = 0; i < multiPolygon.Count; ++i)
                    {
                        using (FGeometry.IPolygon polygon = multiPolygon[i])
                            _PopulateSimpleType(sink, polygon);
                    }
                }
                sink.EndGeometry();
                break;

            case FCommon.GeometryType.GeometryType_MultiGeometry:
                sink.BeginGeometry(GeometryTypeUtils.Convert(_Geometry.DerivedType));
                {
                    var multiGeometry = (FGeometry.IMultiGeometry)_Geometry;
                    for (int i = 0; i < multiGeometry.Count; ++i)
                    {
                        using (FGeometry.IGeometry geometry = multiGeometry[i])
                            _PopulateSimpleType(sink, geometry);
                    }
                }
                sink.EndGeometry();
                break;

            default:
                throw new NotSupportedException(
                          string.Format(
                              CultureInfo.CurrentCulture,
                              SR.UnsupportedGeometryTypeException,
                              _Geometry.DerivedType
                              )
                          );
            }
        }