Ejemplo n.º 1
0
        public FeatureCursorV1(OSGeo_v1.OGR.Layer layer, IQueryFilter filter)
        {
            if (layer == null)
            {
                return;
            }

            _layer = layer;
            _layer.ResetReading();

            if (filter is ISpatialFilter)
            {
                IEnvelope env = ((ISpatialFilter)filter).Geometry.Envelope;
                _layer.SetSpatialFilterRect(env.minx, env.miny, env.maxx, env.maxy);
                if (String.IsNullOrEmpty(filter.WhereClause))
                {
                    _layer.SetAttributeFilter(null);
                }
                else
                {
                    _layer.SetAttributeFilter(filter.WhereClause);
                }
            }
            else
            {
                string where = filter.WhereClause;
                if (String.IsNullOrEmpty(where))
                {
                    where = null;
                }

                _layer.SetAttributeFilter(where);
                _layer.SetSpatialFilter(null);
            }
        }
Ejemplo n.º 2
0
        public static int Polygonize(Band srcBand, Band maskBand, OSGeo_v1.OGR.Layer outLayer, int iPixValField, string[] options, Gdal.GDALProgressFuncDelegate callback, string callback_data)
        {
            int ret = GdalPINVOKE.Polygonize(Band.getCPtr(srcBand), Band.getCPtr(maskBand), OSGeo_v1.OGR.Layer.getCPtr(outLayer), iPixValField, (options != null)? new GdalPINVOKE.StringListMarshal(options)._ar : null, callback, callback_data);

            if (GdalPINVOKE.SWIGPendingException.Pending)
            {
                throw GdalPINVOKE.SWIGPendingException.Retrieve();
            }
            return(ret);
        }
Ejemplo n.º 3
0
        public Task <List <IDatasetElement> > Elements()
        {
            if (_elements != null && _elements.Count > 0)
            {
                return(Task.FromResult(_elements));
            }

            _elements = new List <IDatasetElement>();

            if (_state != DatasetState.opened)
            {
                return(Task.FromResult(_elements));
            }

            if (OSGeo.Initializer.InstalledVersion == OSGeo.GdalVersion.V1)
            {
                using (var dataSourceV1 = OSGeo_v1.OGR.Ogr.Open(_connectionString, 0))
                {
                    var layerCount = dataSourceV1.GetLayerCount();

                    for (int i = 0; i < layerCount; i++)
                    {
                        OSGeo_v1.OGR.Layer ogrLayerV1 = dataSourceV1?.GetLayerByIndex(i);

                        if (ogrLayerV1 != null)
                        {
                            _elements.Add(new DatasetElement(new FeatureClassV1(this, ogrLayerV1)));
                        }
                    }
                }
            }
            else if (OSGeo.Initializer.InstalledVersion == OSGeo.GdalVersion.V3)
            {
                using (var dataSourceV3 = OSGeo_v3.OGR.Ogr.Open(_connectionString, 0))
                {
                    var layerCount = dataSourceV3.GetLayerCount();

                    for (int i = 0; i < layerCount; i++)
                    {
                        using (var ogrLayerV3 = dataSourceV3.GetLayerByIndex(i))
                        {
                            if (ogrLayerV3 != null)
                            {
                                _elements.Add(new DatasetElement(new FeatureClassV3(this, ogrLayerV3.GetName())));
                            }
                        }
                    }
                }
            }

            return(Task.FromResult(_elements));
        }
Ejemplo n.º 4
0
        private void btnTestConnecton_Click(object sender, EventArgs e)
        {
            OSGeo.Initializer.RegisterAll();

            if (OSGeo.Initializer.InstalledVersion == OSGeo.GdalVersion.V1)
            {
                OSGeo_v1.OGR.DataSource dataSource = OSGeo_v1.OGR.Ogr.Open(this.ConnectionString, 0);
                if (dataSource != null)
                {
                    StringBuilder sb = new StringBuilder();
                    for (int i = 0; i < Math.Min(dataSource.GetLayerCount(), 20); i++)
                    {
                        OSGeo_v1.OGR.Layer ogrLayer = dataSource.GetLayerByIndex(i);
                        if (ogrLayer == null)
                        {
                            continue;
                        }

                        sb.Append("\n" + ogrLayer.GetName());
                    }
                    MessageBox.Show("Connection succeeded...\n" + sb.ToString(), "Test Connection", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    MessageBox.Show("Connection failed...", "Test Connection", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (OSGeo.Initializer.InstalledVersion == OSGeo.GdalVersion.V3)
            {
                OSGeo_v3.OGR.DataSource dataSource = OSGeo_v3.OGR.Ogr.Open(this.ConnectionString, 0);
                if (dataSource != null)
                {
                    StringBuilder sb = new StringBuilder();
                    for (int i = 0; i < Math.Min(dataSource.GetLayerCount(), 20); i++)
                    {
                        OSGeo_v3.OGR.Layer ogrLayer = dataSource.GetLayerByIndex(i);
                        if (ogrLayer == null)
                        {
                            continue;
                        }

                        sb.Append("\n" + ogrLayer.GetName());
                    }
                    MessageBox.Show("Connection succeeded...\n" + sb.ToString(), "Test Connection", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    MessageBox.Show("Connection failed...", "Test Connection", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
Ejemplo n.º 5
0
        public void Dispose()
        {
            try
            {
                if (_layer == null)
                {
                    return;
                }

                _layer.ResetReading();
                _layer = null;
            }
            catch { }
        }
Ejemplo n.º 6
0
        public static int ContourGenerate(Band srcBand, double contourInterval, double contourBase, int fixedLevelCount, SWIGTYPE_p_double fixedLevels, int useNoData, double noDataValue, OSGeo_v1.OGR.Layer dstLayer, int idField, int elevField, Gdal.GDALProgressFuncDelegate callback, string callback_data)
        {
            int ret = GdalPINVOKE.ContourGenerate(Band.getCPtr(srcBand), contourInterval, contourBase, fixedLevelCount, SWIGTYPE_p_double.getCPtr(fixedLevels), useNoData, noDataValue, OSGeo_v1.OGR.Layer.getCPtr(dstLayer), idField, elevField, callback, callback_data);

            if (GdalPINVOKE.SWIGPendingException.Pending)
            {
                throw GdalPINVOKE.SWIGPendingException.Retrieve();
            }
            return(ret);
        }
Ejemplo n.º 7
0
        public static int RasterizeLayer(Dataset dataset, int bands, SWIGTYPE_p_int band_list, OSGeo_v1.OGR.Layer layer, SWIGTYPE_p_void pfnTransformer, SWIGTYPE_p_void pTransformArg, int burn_values, SWIGTYPE_p_double burn_values_list, string[] options, Gdal.GDALProgressFuncDelegate callback, string callback_data)
        {
            int ret = GdalPINVOKE.RasterizeLayer(Dataset.getCPtr(dataset), bands, SWIGTYPE_p_int.getCPtr(band_list), OSGeo_v1.OGR.Layer.getCPtr(layer), SWIGTYPE_p_void.getCPtr(pfnTransformer), SWIGTYPE_p_void.getCPtr(pTransformArg), burn_values, SWIGTYPE_p_double.getCPtr(burn_values_list), (options != null)? new GdalPINVOKE.StringListMarshal(options)._ar : null, callback, callback_data);

            if (GdalPINVOKE.SWIGPendingException.Pending)
            {
                throw GdalPINVOKE.SWIGPendingException.Retrieve();
            }
            return(ret);
        }
Ejemplo n.º 8
0
        public Task AppendElement(string elementName)
        {
            if (_elements == null)
            {
                _elements = new List <IDatasetElement>();
            }

            foreach (IDatasetElement e in _elements)
            {
                if (e.Title == elementName)
                {
                    return(Task.CompletedTask);
                }
            }

            if (_state == DatasetState.opened)
            {
                if (OSGeo.Initializer.InstalledVersion == OSGeo.GdalVersion.V1)
                {
                    using (var dataSourceV1 = OSGeo_v1.OGR.Ogr.Open(_connectionString, 0))
                    {
                        var layerCount = dataSourceV1.GetLayerCount();

                        for (int i = 0; i < layerCount; i++)
                        {
                            string ogrLayerName = dataSourceV1.GetLayerByIndex(i)?.GetName();
                            if (ogrLayerName == elementName)
                            {
                                OSGeo_v1.OGR.Layer ogrLayerV1 = dataSourceV1.GetLayerByIndex(i);
                                if (ogrLayerV1 != null)
                                {
                                    _elements.Add(new DatasetElement(new FeatureClassV1(this, ogrLayerV1)));
                                }
                            }
                        }
                    }
                }
                else if (OSGeo.Initializer.InstalledVersion == OSGeo.GdalVersion.V3)
                {
                    using (var dataSourceV3 = OSGeo_v3.OGR.Ogr.Open(_connectionString, 0))
                    {
                        var layerCount = dataSourceV3.GetLayerCount();

                        for (int i = 0; i < layerCount; i++)
                        {
                            string ogrLayerName = dataSourceV3.GetLayerByIndex(i)?.GetName();
                            if (ogrLayerName == elementName)
                            {
                                using (var ogrLayerV3 = dataSourceV3.GetLayerByIndex(i))
                                {
                                    if (ogrLayerV3 != null)
                                    {
                                        _elements.Add(new DatasetElement(new FeatureClassV3(this, ogrLayerV3.GetName())));
                                    }
                                }
                            }
                        }
                    }
                }
            }

            return(Task.CompletedTask);
        }
Ejemplo n.º 9
0
        public FeatureClassV1(Dataset dataset, OSGeo_v1.OGR.Layer layer)
        {
            _dataset  = dataset;
            _ogrLayer = layer;

            OSGeo_v1.OGR.FeatureDefn defn = layer.GetLayerDefn();
            _name = defn.GetName();
            if (dataset.ConnectionString.ToLower().EndsWith(".dxf"))
            {
                try
                {
                    System.IO.FileInfo fi = new System.IO.FileInfo(dataset.ConnectionString);
                    _name = fi.Name;
                }
                catch { }
            }
            _fields = new Fields();
            for (int i = 0; i < defn.GetFieldCount(); i++)
            {
                OSGeo_v1.OGR.FieldDefn fdefn = defn.GetFieldDefn(i);
                Field field = new Field(fdefn.GetName());

                switch (fdefn.GetFieldTypeName(fdefn.GetFieldType()).ToLower())
                {
                case "integer":
                    if (_idFieldName == String.Empty)
                    {
                        _idFieldName = field.name;
                    }
                    field.type = FieldType.integer;
                    break;

                case "real":
                    field.type = FieldType.Double;
                    break;

                case "string":
                    field.type = FieldType.String;
                    field.size = fdefn.GetWidth();
                    break;
                }
                _fields.Add(field);
            }

            _countFeatures = (int)layer.GetFeatureCount(1);
            OSGeo_v1.OGR.Envelope env = new OSGeo_v1.OGR.Envelope();
            layer.GetExtent(env, 1);
            _envelope = new Envelope(env.MinX, env.MinY, env.MaxX, env.MaxY);

            switch (defn.GetGeomType())
            {
            case OSGeo_v1.OGR.wkbGeometryType.wkbPoint:
                _geomType = geometryType.Point;
                break;

            case OSGeo_v1.OGR.wkbGeometryType.wkbLineString:
            case OSGeo_v1.OGR.wkbGeometryType.wkbMultiLineString:
                _geomType = geometryType.Polyline;
                break;

            case OSGeo_v1.OGR.wkbGeometryType.wkbPolygon:
            case OSGeo_v1.OGR.wkbGeometryType.wkbMultiPolygon:
                _geomType = geometryType.Polygon;
                break;
            }
        }