예제 #1
0
            private IGeometry ReadLineString(OgrGeometryType type, OgrGeometry geom)
            {
                var count     = geom.GetPointCount();
                var dimension = geom.GetCoordinateDimension();

                var cs = _factory.CoordinateSequenceFactory.Create(count, dimension);

                if (dimension > 2)
                {
                    for (var i = 0; i < cs.Count; i++)
                    {
                        cs.SetOrdinate(i, Ordinate.X, geom.GetX(i));
                        cs.SetOrdinate(i, Ordinate.Y, geom.GetY(i));
                        cs.SetOrdinate(i, Ordinate.Z, geom.GetZ(i));
                    }
                }
                else
                {
                    for (var i = 0; i < cs.Count; i++)
                    {
                        cs.SetOrdinate(i, Ordinate.X, geom.GetX(i));
                        cs.SetOrdinate(i, Ordinate.Y, geom.GetY(i));
                    }
                }

                return(_factory.CreateLineString(cs));
            }
예제 #2
0
            private IGeometry ReadWkb(OgrGeometryType type, OgrGeometry geom)
            {
                var b = new byte[geom.WkbSize()];

                geom.ExportToWkb(b);
                return(Reader.Read(b));
            }
예제 #3
0
        public EditingManager(Layer layer, RS.RSTransform rstransfrom)
        {
            this.layername            = layer.Layername;
            this.EditingFeaturesource = layer.featuresource;
            //featurecollection_finishededit = new FeatureCollection();
            this.editingpoints = new List <PointD>();
            this.lists         = new List <List <PointD> >();

            this.geometrytype = this.EditingFeaturesource.schema.geometryType;
            this.rstransform  = rstransfrom;
        }
예제 #4
0
            private IGeometry ReadPoint(OgrGeometryType type, OgrGeometry geom)
            {
                var c = new Coordinate(geom.GetX(0), geom.GetY(0));

                if ((int)type > 0x1000000)
                {
                    c.Z = geom.GetZ(0);
                }

                return(_factory.CreatePoint(c));
            }
예제 #5
0
        public static string wkbGeometryType2String(OSGeo.OGR.wkbGeometryType type)
        {
            switch (type)
            {
            case OSGeo.OGR.wkbGeometryType.wkbPoint:
                return("POINT");

            case OSGeo.OGR.wkbGeometryType.wkbLineString:
                return("LINESTRING");

            case OSGeo.OGR.wkbGeometryType.wkbPolygon:
                return("POLYGON");

            case OSGeo.OGR.wkbGeometryType.wkbMultiLineString:
                return("MULTILINESTRING");

            default:
                return("MULTIPOLYGON");
            }
        }
예제 #6
0
        /// <summary>
        /// Ogr to DotSpatial at geometry type level
        /// </summary>
        /// <param name="ogrType">Ogr wkbGeometryType</param>
        /// <returns>DotSpatial FeatureType</returns>
        public static DotSpatial.Data.FeatureType Ogr2DSGeometryType(OSGeo.OGR.wkbGeometryType ogrType)
        {
            switch (ogrType)
            {
            case OSGeo.OGR.wkbGeometryType.wkbLineString:
                return(DotSpatial.Data.FeatureType.Line);

            case OSGeo.OGR.wkbGeometryType.wkbPolygon:
                return(DotSpatial.Data.FeatureType.Polygon);

            case OSGeo.OGR.wkbGeometryType.wkbPoint:
                return(DotSpatial.Data.FeatureType.Point);

            case OSGeo.OGR.wkbGeometryType.wkbMultiPoint:
                return(DotSpatial.Data.FeatureType.MultiPoint);

            default:
                return(DotSpatial.Data.FeatureType.Unspecified);
            }
        }
예제 #7
0
        //指定表名读出成一个FeatureSource
        public FeatureSource ReadFromTable(string table)
        {
            string connStr = "Server=" + server + ";Port=" + port + ";UserId=" + user + ";Password="******";Database=" + database + ";";

            try
            {
                //获得图层类型和参考坐标系
                Dictionary <string, string> dt1          = GetSchemePara(table);
                OSGeo.OGR.wkbGeometryType   geometryType = String2Type.String2wkbGeometryType(dt1["type"]);
                ReferenceSystem             rs           = new SRS(new OSGeo.OSR.SpatialReference(Int2SRText(int.Parse(dt1["srid"]))));

                NpgsqlConnection conn = new NpgsqlConnection(connStr);
                conn.Open();
                IDbCommand dbcmd = conn.CreateCommand();
                dbcmd.CommandText = "SELECT *,ST_AsText(geom) AS geom1 FROM \"" + table + "\"";
                IDataReader dr = dbcmd.ExecuteReader();

                Dictionary <string, OSGeo.OGR.FieldDefn> fields = new Dictionary <string, OSGeo.OGR.FieldDefn>();
                string[] fieldNames = new string[dr.FieldCount - 2];
                for (int i = 0; i < dr.FieldCount - 2; i++)
                {
                    OSGeo.OGR.FieldDefn d = GetFieldDefn(dr.GetName(i), dr.GetDataTypeName(i));
                    fields.Add(dr.GetName(i), d);
                    fieldNames[i] = dr.GetName(i);
                }

                Schema schema = new Schema(table, geometryType, rs, fields);

                List <Feature> flst = new List <Feature>();
                while (dr.Read())
                {
                    int featureID = int.Parse(dr[0].ToString());
                    Geometry.Geometry           geometry   = WKT2Feature.WKT2Geometry(dr[dr.FieldCount - 1].ToString());
                    Dictionary <string, Object> attributes = new Dictionary <string, object>();
                    for (int i = 0; i < dr.FieldCount - 2; i++)
                    {
                        Object o;
                        switch (fields[fieldNames[i]].GetFieldType())
                        {
                        case OSGeo.OGR.FieldType.OFTInteger:
                            o = int.Parse(dr[i].ToString());
                            break;

                        case OSGeo.OGR.FieldType.OFTReal:
                            o = double.Parse(dr[i].ToString());
                            break;

                        default:
                            o = dr[i].ToString();
                            break;
                        }
                        attributes.Add(fieldNames[i], o);
                    }
                    Feature feature = new Feature(featureID, schema, geometry, attributes);
                    flst.Add(feature);
                }

                FeatureCollection fc = new FeatureCollection(flst);
                FeatureSource     fs = new FeatureSource(schema, fc);
                return(fs);

                conn.Close();
            }
            catch (Exception e)
            {
                return(null);
            }
        }
예제 #8
0
        public static bool ogr_geo_type_to_esri_geo_type(OSGeo.OGR.wkbGeometryType ogrType,
                                                         out esriGeometryType outGDBType, out bool outHasZ)
        {
            switch (ogrType)
            {
            case OSGeo.OGR.wkbGeometryType.wkbPoint25D:
            {
                outGDBType = esriGeometryType.esriGeometryPoint;
                outHasZ    = true;
                break;
            }

            case OSGeo.OGR.wkbGeometryType.wkbMultiPoint25D:
            {
                outGDBType = esriGeometryType.esriGeometryMultipoint;
                outHasZ    = true;
                break;
            }

            case OSGeo.OGR.wkbGeometryType.wkbLineString25D:
            case OSGeo.OGR.wkbGeometryType.wkbMultiLineString25D:
            {
                outGDBType = esriGeometryType.esriGeometryPolyline;
                outHasZ    = true;
                break;
            }

            case OSGeo.OGR.wkbGeometryType.wkbPolygon25D:
            case OSGeo.OGR.wkbGeometryType.wkbMultiPolygon25D:
            {
                outGDBType = esriGeometryType.esriGeometryPolygon;
                outHasZ    = true;
                break;
            }

            /* 2D forms */
            case OSGeo.OGR.wkbGeometryType.wkbPoint:
            {
                outGDBType = esriGeometryType.esriGeometryPoint;
                outHasZ    = false;
                break;
            }

            case OSGeo.OGR.wkbGeometryType.wkbMultiPoint:
            {
                outGDBType = esriGeometryType.esriGeometryMultipoint;
                outHasZ    = false;
                break;
            }

            case OSGeo.OGR.wkbGeometryType.wkbLineString:
            case OSGeo.OGR.wkbGeometryType.wkbMultiLineString:
            {
                outGDBType = esriGeometryType.esriGeometryPolyline;
                outHasZ    = false;
                break;
            }

            case OSGeo.OGR.wkbGeometryType.wkbPolygon:
            case OSGeo.OGR.wkbGeometryType.wkbMultiPolygon:
            {
                outGDBType = esriGeometryType.esriGeometryPolygon;
                outHasZ    = false;
                break;
            }

            default:
            {
                //CPLError( CE_Failure, CPLE_AppDefined, "Cannot map OGRwkbGeometryType (%s) to ESRI type",
                //          OGRGeometryTypeToName(ogrType));

                outGDBType = esriGeometryType.esriGeometryNull;
                outHasZ    = false;

                return(false);
            }
            }
            return(true);
        }
예제 #9
0
        public Rectangle getEnvelop()
        {
            if (this.count == 0)
            {
                return(new Rectangle(0, 0, 0, 0));
            }
            Rectangle rect = new Rectangle(Utils.double_max, Utils.double_max, Utils.double_min, Utils.double_min);

            foreach (Feature feature in featureList)
            {
                OSGeo.OGR.wkbGeometryType featType = feature.geometry.geometryType;
                switch (featType)
                {
                case OSGeo.OGR.wkbGeometryType.wkbPoint:
                    PointD point = (PointD)feature.geometry;
                    if (point.X < rect.minX)
                    {
                        rect.minX = point.X;
                    }
                    if (point.X > rect.maxX)
                    {
                        rect.maxX = point.X;
                    }
                    if (point.Y < rect.minY)
                    {
                        rect.minY = point.Y;
                    }
                    if (point.Y > rect.maxY)
                    {
                        rect.maxY = point.Y;
                    }
                    break;

                case OSGeo.OGR.wkbGeometryType.wkbLineString:
                    SimplePolyline line = (SimplePolyline)feature.geometry;
                    if (line.minX < rect.minX)
                    {
                        rect.minX = line.minX;
                    }
                    if (line.maxX > rect.maxX)
                    {
                        rect.maxX = line.maxX;
                    }
                    if (line.minY < rect.minY)
                    {
                        rect.minY = line.minY;
                    }
                    if (line.maxY > rect.maxY)
                    {
                        rect.maxY = line.maxY;
                    }
                    break;

                case OSGeo.OGR.wkbGeometryType.wkbMultiLineString:
                    Polyline mline = (Polyline)feature.geometry;
                    if (mline.minX < rect.minX)
                    {
                        rect.minX = mline.minX;
                    }
                    if (mline.maxX > rect.maxX)
                    {
                        rect.maxX = mline.maxX;
                    }
                    if (mline.minY < rect.minY)
                    {
                        rect.minY = mline.minY;
                    }
                    if (mline.maxY > rect.maxY)
                    {
                        rect.maxY = mline.maxY;
                    }
                    break;

                case OSGeo.OGR.wkbGeometryType.wkbPolygon:
                    SimplePolygon polygon = (SimplePolygon)feature.geometry;
                    if (polygon.minX < rect.minX)
                    {
                        rect.minX = polygon.minX;
                    }
                    if (polygon.maxX > rect.maxX)
                    {
                        rect.maxX = polygon.maxX;
                    }
                    if (polygon.minY < rect.minY)
                    {
                        rect.minY = polygon.minY;
                    }
                    if (polygon.maxY > rect.maxY)
                    {
                        rect.maxY = polygon.maxY;
                    }
                    break;

                case OSGeo.OGR.wkbGeometryType.wkbMultiPolygon:
                    Polygon mpolygon = (Polygon)feature.geometry;
                    if (mpolygon.minX < rect.minX)
                    {
                        rect.minX = mpolygon.minX;
                    }
                    if (mpolygon.maxX > rect.maxX)
                    {
                        rect.maxX = mpolygon.maxX;
                    }
                    if (mpolygon.minY < rect.minY)
                    {
                        rect.minY = mpolygon.minY;
                    }
                    if (mpolygon.maxY > rect.maxY)
                    {
                        rect.maxY = mpolygon.maxY;
                    }
                    break;
                }
            }
            return(rect);
        }