Beispiel #1
0
 public virtual Layer CreateLayer()
 {
     var layer = new Layer();
     layer.FeatureType = this;
     layer.Name = Name;
     return layer;
 }
Beispiel #2
0
		public LayerFailedEventArgs(Layer layer, Exception exception)
			: base(layer)
		{
			Exception = exception;
		}
Beispiel #3
0
        public TreeNode AddLayerNode(TreeNode parent, Layer layer)
		{
            return AddContainterNode(parent, new LayerWrapper(layer), cmnLayer);
		}
Beispiel #4
0
 public virtual IEnumerable<Feature> GetFeatures(FeatureType featureType, Layer layer, Envelope window)
 {
     return new Feature[0];
 }
Beispiel #5
0
		public LayerEventArgs(Layer layer)
		{
			Layer = layer;
		}
Beispiel #6
0
        public TreeNode AddLayerNode(Layer layer)
        {
            return AddContainterNode(FindParentGroup(), new LayerWrapper(layer), cmnLayer);

        }
Beispiel #7
0
 public LayerRenderer(Renderer renderer, Layer layer, IBaseRenderer parent)
     : base(renderer, layer, parent)
 {
     _layer = layer;
 }
Beispiel #8
0
 public abstract FeatureType GetFeatureType(Layer layer);
Beispiel #9
0
		public abstract IEnumerable<Feature> GetFeatures(FeatureType featureType, Layer layer, Envelope window);
Beispiel #10
0
		public LayerWrapper(Layer layer)
            : base(layer)
		{
			Layer = layer;
		}
Beispiel #11
0
        public override IEnumerable<Feature> GetFeatures(FeatureType featureType, Layer layer, Envelope window)
        {
            var cmd = _useCounter > 0 ? CreateCommand(Connection) : GetOrCreateCommand(Connection);
            _useCounter++;

            try
            {

                SetParameters(cmd, window);
                using (var reader = cmd.ExecuteReader())
                {
                    var geomOrdinal = reader.GetOrdinal(GeometryColumn);
                    if (geomOrdinal < 0) throw new Exception("Geometry column not found: " + GeometryColumn);

                    var fidOrdinal = string.IsNullOrEmpty(FidColumn) ? -1 : reader.GetOrdinal(FidColumn);
                    var buffer = new byte[1024];

                    var fieldCount = reader.FieldCount;
                    var values = new object[fieldCount];
                    var geoReader = new GaiaGeoReader();

                    while (reader.Read())
                    {
                        long fid;
                        if (fidOrdinal >= 0)
                        {
                            fid = reader.GetInt64(fidOrdinal);
                            values[fidOrdinal] = fid;
                        }
                        else
                            fid = 0;

                        for (int i = 0; i < fieldCount; i++)
                            if (i != fidOrdinal && i != geomOrdinal)
                                values[i] = reader.GetValue(i);

                        var len = (int)reader.GetBytes(geomOrdinal, 0L, null, 0, 0);
                        if (len > buffer.Length)
                            buffer = new byte[len];

                        reader.GetBytes(geomOrdinal, 0L, buffer, 0, len);

                        IGeometry geom;
                        try
                        {
                            geom = geoReader.Read(buffer, 0, len);
                            if (geom == null) continue;
                        }
                        catch (Exception ex)
                        {
                            Trace.WriteLine(string.Format("Invalid geometry while reading {0} Fid={1}: {2}", ToString(), fid, ex.Message));
                            continue;
                        }

                        //var geom = GeometryReader.ReadBlobGeometry(new MemoryStream(buffer, 0, buffer.Length));
                        values[geomOrdinal] = geom;
                        //featureType.GeometryType = geom.OgcGeometryType;
                        var feature = featureType.NewFeature(fid, values);
                        feature.Geometry = geom;

                        yield return feature;
                    }
                }
            }
            finally
            {
                _useCounter--;
            }
        }