示例#1
0
        internal ShapeDatasetElement(SHPFile file, IDataset dataset, IIndexTree tree)
        {
            _file      = file;
            this.Title = _file.Title;

            _class = new ShapeFeatureClass(_file, dataset, tree);
        }
示例#2
0
        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();
        }
示例#4
0
        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;
             * }*/
        }