ThinkGeo.com    |     Documentation    |     Premium Support

QueryTools and Projections

 I have a function that returns all features within a certain radius of a map click.  My data is in WGS84 and I have been using ThinkGeo's world map kit for a basemap.  I've recently implemented the ability to switch the basemap to Google.  Using projections the data appears on the map just fine.  However, I no longer get any features returned from my map click function.  I've attempted to convert the map click into WGS84,which did nothing.  I've also tried changing the QueryTools.GetFeaturesWithinDIstanceOf to reflect the current mapunit (in this case meters).  Still no features are returned.


 


This is the querytools call:



                            clickedFeatures = (clickedFeatures.Count == 0) ?


                                this.QueryTools.GetFeaturesWithinDistanceOf(worldLoc, mapUnit, DistanceUnit.Meter, searchRadius, ReturningColumnsType.AllColumns)


                                : clickedFeatures;


 


Any ideas what I am doing wrong?




Thomas,


 I think that we have a sample in the Code Community that deals almost exactely with your case. It is Distance Query on Projected Layerswiki.thinkgeo.com/wiki/Map_Suite_De...ted_Layers


 In this sample, we have a shapefile in UTM zone 16 as internal projection. we project it to WGS84 and do distance query on it using GetFeaturesWithinDistanceOf. In your case, you go from WGS84 to Google Map projection (Spherical Mercator) but the principle is the same as in the sample of the Code Community. I suggest you download the sample, look at the code and read the comments and I think this is going to solve it for you. I have to add that this is a Desktop app so you may not be able to run if you don't have DesktopEdition.dll but the code pertaining to the projection and distance query is the same as for the Wpf edition. Let us know if you still need some help. Thank you.



Thomas,


 We have a new sample in the Code Community, Get Feature Clicked On With Projection wiki.thinkgeo.com/wiki/Map_Suite_Wp...Projection


You might want to check this out if you are interested. Thank you.




Thank you for the updated sample project.  It turns out I was doing pretty much what the sample suggests and I am retrieving features.  My logic breaks down with points though.  If I get multiple features returned I want to find the nearest one to the point clicked.  The sample iterates through each retrieved feature and finds the closest.  I attempt to use the GetFeaturesTopologicalEqual method to do something similar. 
 This call : 
 System.Collections.ObjectModel.Collection<Feature> samePointFeatures = this.QueryTools.GetFeaturesTopologicalEqual(currentFeature.GetShape(), ReturningColumnsType.AllColumns); 
  
 will work when the mapunit is decimal degrees (the native format of the data), but will not work for projected data.  Any ideas why?

Thomas,


  I don't understand why you are using  GetFeaturesTopologicalEqual function for the purpose of getting a feature the user clicked on. In the sample, Get Feature Clicked On With Projection, you can see the code in wpfMap1_MapClick, and it should work for any shapefile in any projection as it is explained in the description of the sample. You can also see in the code that there is a loop to get the closest feature to the point where the user clicked for each layer. There are two things you need to ne aware though:


-It loops thru all the layers so it is going to get the feature for each layer. (You can easily modify the code to have it working for only one layer if you want)


-If you have a multipoint based feature, the MultipointShape of the feature might have several points so it may look like several features when it facts it is only one feature.