ThinkGeo.com    |     Documentation    |     Premium Support

Spatial Queries MSSQL2008FeatureLayer

Hi,



We’re using Mapsuite Web Edition 5.0.0. to perform map rendering with asp .NET. We’re using MSSQL2008FeatureLayer to achieve that. We have the following scenario: We want to allow the user to specify a spatial filter that constraints the features drawn on a circle or a bounding box.


With the tools that we have, we can get the circle or bounding box that the user specified on the client side. The difficulty here is how can we filter the features that are drawn to be contained on that circle? The MSSQL2008FeatureLayer has the property QueryTools but we can’t use that for rendering purposes. We have the property WhereClause where we can define the filter that we want to apply based on T-SQL but for some reason ThinkGeo code UPPER’s all the string before it sends it to the SQL SERVER. Because SQL SERVER spatial data types geometry and geography are .NET types, those kind of UPPER’s on the WhereClause causes errors on the database. For instance, if we set the WhereClause to “where geometry.STIntersects(…)” it becomes “WHERE GEOMETRY.STINTERSECTS(…)”. This isn’t appropriate and causes a runtime errors. We can avoid this by creating a FUNCTION that receives the geometries and performs what we want but it will take more developments for each of the existing spatial functions and it will more difficult to use the spatial indexes.



Is there a better way to do this?



Best regards,
BdaF

Hi BdaF, 
  
 Thanks for let us know that, I am not sure why we set ToUpper for where clause here, I will make sure that with our developer and if that’s a bug we will fix that quickly. 
  
 For a workaround, if your base query string don’t contains “where” and put all where conditions in where clause it won’t get to upper. 
  
 Regards, 
  
 Don

Hi Don,



We’ve tried the proposed solution but without success.



Try this code:

________________________________


MsSql2008FeatureSource fs1 = new MsSql2008FeatureSource(ConfigurationManager.ConnectionStrings[“SQLServer”].ConnectionString, “nuts3_new”, “ogr_fid”, 3763);fs1.WhereClause = “[geometry].STIntersects(geometry::STGeomFromText(‘POINT(0 0)’))”;

fs1.Open();

fs1.GetAllFeatures(ReturningColumnsType.AllColumns);

fs1.Close();

________________________________


The connection string and table names are specific to the test case that we’ve elaborated. You must change that and test.

Is there any other solution?

Thanks,
Bruno da Fonseca


Hi Bruno, 
  
 I think your fs1.WhereClause should be looks like "Where xxxxx". 
  
 And we have fixed this toUpper in development version, if possible, please get the 8.0.234.0 or higher version for that. 
  
 Regards, 
  
 Don