Esempio n. 1
0
        public Task <IFeature> NextFeature()
        {
            if (_layer == null)
            {
                return(Task.FromResult <IFeature>(null));
            }

            OSGeo_v1.OGR.Feature ogrfeature = _layer.GetNextFeature();
            if (ogrfeature == null)
            {
                return(Task.FromResult <IFeature>(null));
            }

            Feature feature = new Feature();

            feature.OID = (int)ogrfeature.GetFID();

            OSGeo_v1.OGR.FeatureDefn defn = ogrfeature.GetDefnRef();
            int fieldCount = defn.GetFieldCount();

            for (int i = 0; i < fieldCount; i++)
            {
                OSGeo_v1.OGR.FieldDefn fdefn = defn.GetFieldDefn(i);
                FieldValue             fv    = new FieldValue(fdefn.GetName());

                string fieldType = fdefn.GetFieldTypeName(fdefn.GetFieldType()).ToLower();
                switch (fieldType)
                {
                case "integer":
                    fv.Value = ogrfeature.GetFieldAsInteger(i);
                    break;

                case "real":
                    fv.Value = ogrfeature.GetFieldAsDouble(i);
                    break;

                default:
                    //if (fv.Name == "geom")
                    //{
                    //    var geom = ogrfeature.GetFieldAsString(i).ToByteArray();
                    //    if (geom != null)
                    //    {
                    //        feature.Shape = gView.Framework.OGC.OGC.WKBToGeometry(geom);
                    //    }
                    //}
                    //else
                {
                    fv.Value = ogrfeature.GetFieldAsString(i);
                }
                break;
                }
                feature.Fields.Add(fv);
            }

            if (feature.Shape == null)
            {
                OSGeo_v1.OGR.Geometry geom = ogrfeature.GetGeometryRef();
                if (geom != null)
                {
                    feature.Shape = gView.Framework.OGC.GML.GeometryTranslator.GML2Geometry(geom.ExportToGML(), GmlVersion.v1);
                }
            }

            return(Task.FromResult <IFeature>(feature));
        }
Esempio n. 2
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;
            }
        }