Example #1
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);
            }
        }
Example #2
0
 public OSGeo.OGR.FieldDefn GetFieldDefn(string fieldName, string type)
 {
     return(new OSGeo.OGR.FieldDefn(fieldName, String2Type.String2OGRFiledType(type)));
 }