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

Creating Feature Data silent error?

Topics: Data Access, SharpMap Project, SharpMap v0.9 / v1.x
May 3, 2010 at 8:03 AM

I am trying to create a vector layer with points on it that I can click on and return some feature data.


I got this code from elsewhere in the forums and it works with my shapefile

Private Sub PictureBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseUp
        Dim ClickPnt As SharpMap.Geometries.Point = MainMap.ImageToWorld(New System.Drawing.Point(e.X, e.Y))
        Dim ds As SharpMap.Data.FeatureDataSet = New SharpMap.Data.FeatureDataSet()

        ' I like to create a local, since it is easier to read and makes the generated IL more efficient
        Dim layer As SharpMap.Layers.VectorLayer = MainMap.Layers("aLayer")

        'You have to open the layer first...

        'Perform the query which fills up the data set.
        layer.DataSource.ExecuteIntersectionQuery(ClickPnt.GetBoundingBox(), ds)

        'Now that you have the data, you can close the data source.
        For Each row As SharpMap.Data.FeatureDataRow In ds.Tables(0)
            Dim check As String = row.Item(0)
    End Sub


But when I try to create a layer like this:


 Dim fdt As SharpMap.Data.FeatureDataTable = New SharpMap.Data.FeatureDataTable()
        fdt.Columns.Add("ID", GetType(String))

        Dim fdr As SharpMap.Data.FeatureDataRow

        For i As Integer = 0 To 10
            fdr = fdt.NewRow
            fdr.Geometry = New SharpMap.Geometries.Point(i, i)
            fdr("ID") = i.ToString


        Dim newlayer As New SharpMap.Layers.VectorLayer("Pipe")
        newlayer.DataSource = New SharpMap.Data.Providers.GeometryProvider(fdt)
            MainMap.Layers("Pipe") = newlayer

        PictureBox1.Image = MainMap.GetMap


The following Renders fine but when you try to query it it fails with System.NotSupportedException on the line 'layer.DataSource.ExecuteIntersectionQuery(ClickPnt.GetBoundingBox(), ds)'

I also can not use the Datasource from my code created layer for labels either so I'm assuming there is something wrong with how I'm creating the FeatureDataTable.




May 3, 2010 at 11:30 AM

Hello Atrius,

GeometryProvider does not support labeling, since it cannot handle attribute data. It is just for rendering geometries. Use GeometryFeatureProvider instead.
This provider also handles calls to ExecuteIntersectionQuery.

Hth FObermaier

May 3, 2010 at 11:35 PM

Thanks that solved my problem.  Didn't realize I was using the wrong provider.