Zoom to FilterDelegate results

Topics: Algorithms, CompactFramework, Data Access, General Topics, SharpMap Project, SharpMap v0.9 / v1.x, SharpMap v2.0, WinForms Controls
Jan 26, 2011 at 3:28 PM

Hi

I'm new user SharpMap and i'm trying to do a zoom in results of Filterdelegate.

my code:


SharpMap.Map sharp = new SharpMap.Map(new Size(727, 489));

ShapeFile sf = new ShapeFile(Shapefile, true);

sf.FilterDelegate = delegate(FeatureDataRow row)
{
   return row["cCodQuadra"].Equals("0293");
};

sf.Open();

SharpMap.Layers.VectorLayer testlayer = new SharpMap.Layers.VectorLayer("TestLayer");

testlayer.DataSource = sf;

sharp.Layers.Add(testlayer);

sharp.ZoomToBox(sf.GetExtents());


But Extents of "sf" is all shapefile not only results filterdelegate.

Somebody help me?

Coordinator
Jan 27, 2011 at 7:05 AM

hello heliolima,

you are right, the ShapeFile provider's GetExtents() function always returns the whole extent.

Now if you just want to zoom to that polygon, you can perform:

...
var fds = new FeatureDataSet();
sf.ExecuteIntersectionQuery(sf.GetExtents(), fds);
var bb = new BoundingBox();
foreach(var fdr in fds.Tables[0].Rows)
   bb = bb.Join(fdr.Geometry.BoundingBox);
sharp.ZoomToBox(bb);
...

You also have the choice to add a new GeometryLayer with a GeometryFeatureProvider as datasource with fds.Tables[0] as construction argument. Then you can remove the FilterDelegate from the ShapeFile provider.

Hth FObermaier

Jan 27, 2011 at 9:40 PM

hello FObermaier

thank you for the help.

i got this way:

.......

SharpMap.Data.FeatureDataSet fds = new SharpMap.Data.FeatureDataSet();

sf.ExecuteIntersectionQuery(sf.GetExtents(), fds);

List<SharpMap.Geometries.BoundingBox> listabb = new List<SharpMap.Geometries.BoundingBox>();

SharpMap.Geometries.BoundingBox bb = null;


var teste = (from lista in fds.Tables[0].AsEnumerable()
  select lista).ToList();

foreach (var fdr in teste)
{
     SharpMap.Data.FeatureDataRow dr = fdr as SharpMap.Data.FeatureDataRow;
     listabb.Add(dr.Geometry.GetBoundingBox());
}

bb = new SharpMap.Geometries.BoundingBox(listabb);

sharp.ZoomToBox(bb);

 .....

 Thanks

Helio