public AttributeLayer ImportujAtrybuty(LayerSchema _schema)
        {
            string _fileName = _geometryLayer.FileName;

            AttributeLayer atrybuty = new AttributeLayer(_schema, _fileName);

            atrybuty.ImportujExcel();

            foreach (var atr in atrybuty.Attributes)
            {
                if (atr.ContainsName("X") && atr.ContainsName("Y"))
                {
                    string          x = atr["X"], y = atr["Y"];
                    string          wkt         = string.Format("POINT ({0} {1})", y, x);
                    Geometry        geometry    = Geometry.CreateFromWkt(wkt);
                    string          image       = atr[_schema.AttribKey];
                    GeometryFeature geomFeature = new GeometryFeature {
                        Geometry = geometry, Name = "name", Value = image
                    };
                    _geometryLayer.AddFeature(geomFeature);
                }
            }

            return(atrybuty);
        }
        public void ImportujAtrybutyWarstwy(AttributeLayer layer)
        {
            foreach (KeyValuePair <string, GeometryFeature> kv in _features)
            {
                GeometryFeature gf        = kv.Value;
                string          geomValue = kv.Key;

                if (layer.ContainsKey(geomValue))
                {
                    FeatureAttributes attributes = layer[geomValue];

                    gf.Attributes = attributes;
                }
                else
                {
                    throw new Exception("Brak atrybutów dla zasięgu: " + geomValue);
                }
            }
        }
        public override void Importuj()
        {
            using (StreamReader reader = new StreamReader(_geometryLayer.FileName, Encoding.GetEncoding(1250)))
            {
                string wiersz = null;
                string photo = null, image_id = null;
                char[] separator = new char[] { ' ', '\t' };

                while ((wiersz = reader.ReadLine()) != null)
                {
                    if (wiersz.StartsWith("begin photo_parameters"))
                    {
                        string[] cols = wiersz.Split(separator);
                        photo = cols[2];
                    }
                    else if (wiersz.StartsWith(" image_id:"))
                    {
                        string[] cols = wiersz.Trim().Split(separator);
                        image_id = cols[1];
                    }
                    else if (wiersz.StartsWith(" footprint:"))
                    {
                        string[] cols = wiersz.Trim().Split(separator);

                        string wkt = string.Format("POLYGON (({0} {1},{2} {3},{4} {5},{6} {7},{0} {1}))",
                                                   cols[1], cols[2], cols[3], cols[4], cols[5], cols[6], cols[7], cols[8]);
                        Geometry geometry = Geometry.CreateFromWkt(wkt);

                        geometry = GeometryFeature.GeometryToEnvelope(geometry);

                        string[] imageName = photo.Split('_');
                        string   image     = imageName[imageName.Length - 1];

                        GeometryFeature geomFeature = new GeometryFeature {
                            Geometry = geometry, Name = "name", Value = image
                        };

                        _geometryLayer.AddFeature(geomFeature);
                    }
                }
            }
        }
        public bool AddFeature(GeometryFeature gf)
        {
            if (gf.Name == null)
            {
                _invalidFeatures.Add(gf);
                return(false);
            }
            else
            {
                if (_features.ContainsKey(gf.Value))
                {
                    _invalidFeatures.Add(gf);
                    return(false);
                }
                else
                {
                    _features.Add(gf.Value, gf);
                }
            }

            return(true);
        }
Exemple #5
0
        private void WczytajOgrLayer(Layer layer)
        {
            List <GeometryFeature> poligony = new List <GeometryFeature>();
            List <GeometryFeature> teksty   = new List <GeometryFeature>();

            FeatureDefn layerDef = layer.GetLayerDefn();
            Feature     feat     = null;

            while ((feat = layer.GetNextFeature()) != null)
            {
                Geometry    featGeom = feat.GetGeometryRef();
                FeatureDefn featDef  = feat.GetDefnRef();

                string name  = null;
                string value = null;

                //pierwsze pole tekstowe
                for (int i = 0; i < feat.GetFieldCount(); i++)
                {
                    FieldDefn fdef = featDef.GetFieldDefn(i);

                    if (feat.IsFieldSet(i))
                    {
                        if (fdef.GetFieldType() == FieldType.OFTString)
                        {
                            name  = fdef.GetNameRef();
                            value = feat.GetFieldAsString(i);
                            break;
                        }
                    }
                }

                switch (featGeom.GetGeometryType())
                {
                case wkbGeometryType.wkbPolygon:
                case wkbGeometryType.wkbPolygon25D:
                {
                    GeometryFeature geomFeature = new GeometryFeature {
                        Geometry = featGeom.Clone(), Name = name, Value = value
                    };
                    poligony.Add(geomFeature);
                }
                break;

                case wkbGeometryType.wkbPoint:
                case wkbGeometryType.wkbPoint25D:
                {
                    GeometryFeature geomFeature = new GeometryFeature {
                        Geometry = featGeom.Clone(), Name = name, Value = value
                    };
                    teksty.Add(geomFeature);
                }
                break;
                }

                feat.Dispose();
            }

            //przypisanie tekstów do poligonów
            foreach (GeometryFeature gf in poligony)
            {
                //przypisz pierwszy tekst zawarty w poligonie
                foreach (GeometryFeature tf in teksty)
                {
                    if (gf.Geometry.Contains(tf.Geometry))
                    {
                        gf.Name  = tf.Name;
                        gf.Value = tf.Value;
                        break;
                    }
                }

                _geometryLayer.AddFeature(gf);
            }
        }