Exemple #1
0
        public FeatureDataSet ExecuteQuery(string query, Geometry filter)
        {
            try
            {
                FeatureDataSet   ds   = new FeatureDataSet();
                FeatureDataTable myDt = new FeatureDataTable();

                Layer results = _OgrDataSource.ExecuteSQL(query, filter, "");

                //reads the column definition of the layer/feature
                ReadColumnDefinition(myDt, results);

                OSGeo.OGR.Feature _OgrFeature;
                results.ResetReading();
                while ((_OgrFeature = results.GetNextFeature()) != null)
                {
                    FeatureDataRow _dr = myDt.NewRow();
                    for (int iField = 0; iField < _OgrFeature.GetFieldCount(); iField++)
                    {
                        if (myDt.Columns[iField].DataType == System.Type.GetType("System.String"))
                        {
                            _dr[iField] = _OgrFeature.GetFieldAsString(iField);
                        }
                        else if (myDt.Columns[iField].GetType() == System.Type.GetType("System.Int32"))
                        {
                            _dr[iField] = _OgrFeature.GetFieldAsInteger(iField);
                        }
                        else if (myDt.Columns[iField].GetType() == System.Type.GetType("System.Double"))
                        {
                            _dr[iField] = _OgrFeature.GetFieldAsDouble(iField);
                        }
                        else
                        {
                            _dr[iField] = _OgrFeature.GetFieldAsString(iField);
                        }
                    }

                    _dr.Geometry = this.ParseOgrGeometry(_OgrFeature.GetGeometryRef());
                    myDt.AddRow(_dr);
                }
                ds.Tables.Add(myDt);
                _OgrDataSource.ReleaseResultSet(results);

                return(ds);
            }
            catch (Exception exc)
            {
                System.Diagnostics.Debug.WriteLine(exc.ToString());
                return(new FeatureDataSet());
            }
        }