This project has moved. For the latest updates, please go here.

Shapefile Filter Delegate

Topics: General Topics
Sep 13, 2006 at 8:57 PM
Hey Everyone,

I'm trying to set the extent of a map based of the features of a layer that has a filter delegate.

Here's the code:

Imports SharpMap
Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim FilterLayer As New Layers.VectorLayer("EXTENT")
Dim ShapeFile As Data.Providers.ShapeFile
ShapeFile = New Data.Providers.ShapeFile("D:\Data\ThematicMap\Shapes\US_COUNTIES.shp")
ShapeFile.FilterDelegate = AddressOf FilterByIDs
FilterLayer.DataSource = ShapeFile

Dim fMap As New SharpMap.Map
End Sub
Private Function FilterByIDs(ByVal dr As Data.FeatureDataRow) As Boolean
If dr("FIPS").ToString.ToUpper = "40001".ToUpper Then
Return True
End If
Return False
End Function
End Class

I've set a breakpoint in the delegate and it doesnt ever seem to get called. And, I guess I'm not sure from the documentation where I should go looking for the extent / envelope once it does get called. Will I need to ZoomToExtents once the layer is filtered and then grab map.envelope?

Any help is appreciated.

Dave Lowther
Sep 14, 2006 at 5:46 AM
The FilterDelegates is only applied in the renderingstep, and thus not a part of the envelope.
You can use one of the database providers and apply the DefinitionQuery as a filter instead. Using this will also effect the envelope of the dataset.
Sep 14, 2006 at 8:02 PM
So, if I want to get the extent of several features and the data is in a shapefile the way to go about this is to open up the file and grab the geometry's envelope?