internal ShapeDatasetElement(SHPFile file, IDataset dataset, IIndexTree tree) { _file = file; this.Title = _file.Title; _class = new ShapeFeatureClass(_file, dataset, tree); }
public ShapeFeatureClass(SHPFile file, IDataset dataset, IIndexTree tree) { if (file == null) { return; } _file = file; _dataset = dataset; _tree = tree; _envelope = new Envelope(_file.Header.Xmin, _file.Header.Ymin, _file.Header.Xmax, _file.Header.Ymax); ISpatialReference sRef = null; if (file.PRJ_Exists) { StreamReader sr = new StreamReader(file.PRJ_Filename); string esriWKT = sr.ReadToEnd(); sRef = gView.Framework.Geometry.SpatialReference.FromWKT(esriWKT); sr.Close(); } switch (_file.Header.ShapeType) { case ShapeType.Point: case ShapeType.PointM: case ShapeType.PointZ: case ShapeType.MultiPoint: case ShapeType.MultiPointM: case ShapeType.MultiPointZ: _geomDef = new GeometryDef(geometryType.Point, sRef); break; case ShapeType.PolyLine: case ShapeType.PolyLineM: case ShapeType.PolyLineZ: _geomDef = new GeometryDef(geometryType.Polyline, sRef); break; case ShapeType.Polygon: case ShapeType.PolygonM: case ShapeType.PolygonZ: _geomDef = new GeometryDef(geometryType.Polygon, sRef); break; case ShapeType.MultiPatch: _geomDef = new GeometryDef(geometryType.Aggregate, sRef); break; default: _geomDef = new GeometryDef(geometryType.Unknown, sRef); break; } }
/// <summary> /// 集合 /// </summary> /// <param name="database">集合所属数据库</param> /// <param name="settings">集合配置</param> protected MagpieCollection(MagpieDatabase database, MagpieCollectionSettings settings) { if (database == null) { throw new ArgumentNullException("database"); } if (settings == null) { throw new ArgumentNullException("settings"); } if (!database.IsCollectionNameValid(settings.CollectionName)) { throw new ArgumentException("Invalid collection name."); } _database = database; _settings = settings; _name = settings.CollectionName; _tree = GetIndexTree(); _tree.Commit(); }
public ShapeFeatureCursor(IFeatureClass fc, SHPFile file, IQueryFilter filter, IIndexTree tree) : base((fc != null) ? fc.SpatialReference : null, (filter != null) ? filter.FeatureSpatialReference : null) { base.KnowsFunctions = false; if (file == null) { return; } _file = new SHPFile(file); _filter = filter; if (filter is ISpatialFilter) { IEnvelope env = ((ISpatialFilter)filter).Geometry.Envelope; if (tree != null) { _IDs = tree.FindShapeIds(env); _IDs.Sort(); } //_IDs = tree.FindShapeIds(env); _bounds = new Envelope(env); _spatialFilter = filter as ISpatialFilter; _queryGeometry = ((ISpatialFilter)filter).Geometry; _queryShape = true; } else { foreach (string fname in filter.SubFields.Split(' ')) { if (fname == "SHAPE" || fname == "*") { _queryShape = true; break; } } } if (filter.WhereClause != "" && _filter.SubFields != "*" && !(filter is IRowIDFilter)) { //StringBuilder sb = new StringBuilder(); //sb.Append("FID"); QueryFilter f = new QueryFilter(); f.SubFields = _filter.SubFields; foreach (IField field in _file.Fields.ToEnumerable()) { if (field.name == "FID") { continue; } if (filter.WhereClause.IndexOf(" " + field.name + " ") != -1 || filter.WhereClause.IndexOf("(" + field.name + " ") != -1 || filter.WhereClause.IndexOf(" " + field.name + "=") != -1 || filter.WhereClause.IndexOf("(" + field.name + "=") != -1 || filter.WhereClause.IndexOf(" " + field.name + "<") != -1 || filter.WhereClause.IndexOf("(" + field.name + "<") != -1 || filter.WhereClause.IndexOf(" " + field.name + ">") != -1 || filter.WhereClause.IndexOf("(" + field.name + ">") != -1 || filter.WhereClause.IndexOf("[" + field.name + "]") != -1 || filter.WhereClause.IndexOf(field.name + " ") == 0 || filter.WhereClause.IndexOf(field.name + "=") == 0 || filter.WhereClause.IndexOf(field.name + "<") == 0 || filter.WhereClause.IndexOf(field.name + ">") == 0 ) { f.AddField(field.name); } } /* * _dataReader = _file.DBFDataReader(sb.ToString()); * for (uint i = 1; i <= _file.Entities; i++) * _dataReader.AddRecord(i); * * DataRow [] rows=_dataReader.Table.Select(_filter.WhereClause); * * _IDs = new ArrayList(); * foreach (DataRow row in rows) * { * uint id=_file.GetIndexFromRecNumber((uint)row["FID"]); * _IDs.Add((int)id); * } * _dataReader.Dispose(); */ _dataReader = _file.DBFDataReader(f.SubFields.Replace(" ", ",").Replace("DISTINCT(", "").Replace(")", "")); } else { _dataReader = _file.DBFDataReader(filter.SubFields.Replace(" ", ",").Replace("DISTINCT(", "").Replace(")", "")); } if (_filter is IDistinctFilter) { _unique = new List <object>(); _uniqueField = _filter.SubFields.Replace("DISTINCT(", "").Replace(")", ""); } if (_filter is FunctionFilter) { } /* * if (!(filter is ISpatialFilter)) * { * DataTable tab = _dataReader.AllRecords; * tab = null; * }*/ }