ThinkGeo.com    |     Documentation    |     Premium Support

Layer.QueryTools.GetFeaturesWithin always return zero count ?!

Hi,


I'm trying to build a routine to traverse a series of frames (defined as bounding boxes), outputting info about the content within each of these. I'm testing whether the frame contains data or not.


However, all my attempts to get a feature count fails, as the routine always return zero.


I'm attempting to use GetFeaturesWithin, but I've also tried GetFeaturesInsideBoundingBox and GetFeaturesOverlapping, but all return zero.


I've also tested whether any data is returned, and both GetAllFeatures and GetFeatureById return valid features.


Here's the relevant code segment:



Dim lyr As New MsSql2008FeatureLayer(...)
Dim frameRect As New RectangleShape(lox, hiy, hix, loy) 'populated with frame min/max

'testing access:
Dim ft1 = lyr.QueryTools.GetAllFeatures(ReturningColumnsType.AllColumns).First 'this returns a valid feature
Dim ft2 = lyr.QueryTools.GetFeatureById("30062", ReturningColumnsType.AllColumns) 'this returns a valid feature within a specific frame (A210) - see screen dump label

Dim ftscnt As Long = 0
ftscnt = lyr.QueryTools.GetFeaturesWithin(frameRect, ReturningColumnsType.NoColumns).Count 'this always returns zero !?!

Here's a screendump of the data in question (frames are read, data is green, labeled with feature ID):



Suggestions as to the cause are most welcome.


Cheers.


 



Hmmmmm!


I found the source of my woes.Apparently Map Suite needs defined rendering styles to count features !!


I suspect some sort of "shortcut" has been made inside the code to return a count of 0 if nothing needs to be displayed (e.g. if no styles are defined). But since MsSql2008FeatureLayer and other feature layers are part of the core assembly, and may be used for other purposes than rendering, I think this constitutes a bug.


I only discovered this caveat when working my way around the problem, eventually getting to the display part.


I'm still on 5.5, so it may be solved in 6.0. Otherwise I'll suggest it gets fixed asap.


Cheers.


 



Hi Lars, 


We tested the Map Suite 5.5.0.0 Web Edition and didn’t get the 0 result. Seems like all of them work fine. Below is our test code and we got 77 results: 


Dim connectString As String = "User ID=userid;Password=xxx;Data Source=192.168.0.212;Initial Catalog=InternalDB;"


Dim sql2008Layer As New MsSql2008FeatureLayer(connectString, "cntry02", "CNTRY_NAME")


sql2008Layer.Open()


Dim returnfeatures As Collection(Of Feature) = sql2008Layer.QueryTools.GetFeaturesWithin(New RectangleShape(-60, 40, 60, -40), ReturningColumnsType.NoColumns)


 


So, please do a little modification to it and have a try again. 


Also, as I know, the features query is not relative the defined rendering style both 5.5 and 6.0. Actually, all of methods from the QueryTools would reference to the methods in FeatureSource like here is MsSql2008FeatureSource. So, the above code also can be equaled as below if we are just doing the query.


 


Dim connectString As String = "User ID= userid;Password=xxx;Data Source=192.168.0.212;Initial Catalog=InternalDB;"
Dim sql2008FeatureSource As New MsSql2008FeatureSource(connectString, "cntry02", "CNTRY_NAME")
sql2008FeatureSource.Open()
Dim allfeatures As Collection(Of Feature) = sql2008FeatureSource.SpatialQuery(New RectangleShape(-60, 40, 60, -40), QueryType.Within, ReturningColumnsType.NoColumns)

 


If the issue is still here, can you check the latest version (6.0.0.360) and have a try again.


 


Thanks.


Johnny




Hi Johnny,


Yup, did all that, and the counts failed until I added the styles. Or that's how it looked to me at least.


As posting the application in full would be too much, I've tried to build both a small web solution - and then also a small console application (as this was the type that failed for me) - to replicate the error, but neither displays the error, i.e. both return valid counts for a bbox that returned zero for me previously. And does this regardless of whether I add styles or not to the layer. Same dataset, same bbox, but no cigar


It must've been something else then, or an error triggered by something else too. In any case I found a work-around (or solution), and when it can't be replicated easily, there's no need to spend more time on it at this time, imho.


Sorry for the trouble, I'm currently in the clear with this.


Cheers, and thanks for the fine support :-)


 



Hi Lars,  
  
 Glad to hear that a walkaround is found and thanks for sharing your experience here, if you have any more question, please feel free to let us know. 
   
  
 Best Regards,  
  
 Johnny