ThinkGeo.com    |     Documentation    |     Premium Support

Finding features inside polygon

 Hello,


 
What is a best way to find features inside another feature (polygon)?
I’m currently using SpatialQuery - QueryType.Within, but it does not work if polygon crosses dateline or on “virtual” world.
 
 
Please see attached sample code.
 
 
Thanks,
Inna
 

001_TrackOverlay.zip (14.3 KB)

Hi Inna,


The reason is that the feature in trackOverlay is real value and the features displayed on the virtual world are "virtual value", their value are always in (-180,180), so if you want to query the features near the dateline, you should shift the polygon to the real world and query. 


Regards,


Edgar



Hi Edgar, 
  
 I know there are a lot of samples in this forum regarding the dateline issue, but none of them work 100% right. 
 Is it a lot to ask you to provide a working example that able to do the following (based on my sample code)? 
 1. Select a polygon on a map that crosses 180 (already in my sample code) 
 2. Finding features inside this polygon. 
 3. After finding these features, zooms to one of the feature, but zooms to the virtual world where selected polygon is. 
  
 I will appreciate all your help, 
 Inna

Also, as Edgar stated, you will have to do the transformation youself to determine if a feature is in the vitual world and zoom to it accordingly.  I have something called a WrapDatelineProjection class that does these transformations for me, which is especially important when clicking on the virtual world.  I can share some aspects of the class with you if you want.

Thanks for helping on this Klaus, you are right, the transformation is needed. And one more thing, if the projection is used in this case, the transformation would be very complicated, e.g. in this case, the map unit is Meter,  a polygon from trckOverlay lies across the dateline, RectangleShape(0, 1000000, 20137508, -1000000), then it should be converted to decimal degree to execute the spatial query, but the projection cannot convert the coordinates which is out of range, so we have to make it to (0, 1000000, 20037508, -1000000) in our code, and the converted result is (0,8.94657,179.99999,-8.94657), it's very closed to the 180 longitude but never reach. So please notice this when you are doing the transformation. 



Regards, 



Edgar



Hi Klaus, 
  
 I will appreciate if you share your code with me. 
  
 Thank you very much, 
 Inna

Hello Inna, 
  
 You are welcome, don’t hesitate to let us know your problem. 
  
 Regards, 
  
 Gary

Inna, this is what I have for transformations.  I hope this helps.



WrapDatelineProjection.cs (5.49 KB)

Now, I also have another class called OffsetProjects to render lines and polygons properly across the dateline. I doubt it will help for your current problem.



Hi Klaus, 
  
  
 I think this forum prevents viewing .cs files. Can you please attach WrapDatelineProjection.cs as a text document? 
 I’ll appreciate if you attach OffsetProjection class too, just in case. 
  
 Thank you very much for your help. 
 Inna

Comments in the files may be a little stale as I did not get a chance to clean them up.



WrapDatelineProjection.txt (5.49 KB)
OffsetProjection.txt (27.6 KB)

Hi Klaus, 
  
 Thank you very much for your code. 
  
 I already using projection to transform my map from decimal degrees to meters (Mercator), and I cannot use WrapDatelineProjection in addition to the Mercator projection. 
 I was looking for a simplest  way to handle dateline wrapping transformation, but I guess I’ll have to do it manually for each feature. 
  
 Inna

Thank you for your help on this Klaus. 
  
 You’re right Inna, the only way is handling it manually. Hope you will find a best solution. 
  
 Regards, 
  
 Edgar