ThinkGeo.com    |     Documentation    |     Premium Support

ExtentHelper.GetBoundingBoxOfItems does not always return correct extent

Hi,


I found that ExtentHelper.GetBoundingBoxOfItems(IEnumerable<Feature> features) does not always return the correct extent, sometimes it just return the current extent.


I try to use that to zoom in to certain features on the map, it doesn't work on some streets, I would say like 10% of the streets on the map.


Is this a known issue or am I doing something wrong?


below is the code:



        private static void ZoomToFeatures(Collection<Feature> features, Feature center)

        {

            if(features.Count > 0)

            {

                CurrentMap.CurrentExtent = ExtentHelper.GetBoundingBoxOfItems(features);

                CurrentMap.CenterAt(center);

                CurrentMap.CurrentExtent.ScaleUp(20);

                CurrentMap.Refresh();

            }

        }



I put a break point on CurrentMap.CurrentExtent = ExtentHelper.GetBoundingBoxOfItems(features);

to make sure it gets called every time. And I also confirmed that features return correct values, which contain a street, a point, a intersecting street and the intersecting point.



 


 



Ching, 
  
 The map will always snap to the closest zoomlevel after the extent is changed. For example,  if the current scale is 1:1000, I zoom in / out a little bit and if the new scale is within 1:900 to 1:1100, it will always snap to 1:1000. In other word,  if the current extent is 30(in width) * 40 (in height), if I changed the extent a little bit to 27 * 37 for example, it will automatically snap back to 30 * 40.  I think why you have this problem is because when you scale up 20% of the extent, the size is quite close to the current extent and for some cases, it will be the same after snapping. Try comment the CenterAt statement and you will see the extent is modified. 
  
 Hope that helps, 
  
 Thanks, 
  
 Ben 


Hi Ben, 
  
 I think I need to re-phrase my problem. 
 When I initially load the map, it’s loading entire county, then I click on one of the streets on the map, then click the button zoom to the street, it will zoom to the screen that only contains the street I clicked on and the intersecting street. I can do that with or without ScaleUp(20) function. 
  
 The problem is some of the streets I clicked on, it won’t zoom to the street level, it’s still showing the entire county which is the initial extent. I put a point and a line on the street user clicked on, so that verified user did click the actual street, and I did verified the feature collections containing the correct features. 
 This doesn’t work for like 10% of the streets in that county.

Ching, 
  
 I confirmed this is a bug and thanks for pointing it out,  we will solve it in the next version. That’s not difficult to work around (get the bounding box of every feature and merge them) and if you have any issues please let me know. 
  
 Thanks, 
  
 Ben

Thanks Ben, I will look into the work around.

Ching, 
  
 Just remind do not use ExpandToInclude in the following way when you merge the rectangle shapes.  
 
RectangleShape a = new RectangleShape();
 a.ExpandToInclude(rectangshpeB);
 
 That’s because when you create a new RectangleShape with no parameters, it will create a tiny rectangle with the center point (0, 0). So for example the rectangleShapeB.lowerLeftPoint is (10, 10), the result rectangle of the above codes will have (0, 0) as its lowerLeft point instead. That’s definitely not what you want and that’s also the root of the issue in GetBoundBoxOfItems(). 
  
 It’s not difficult to get a right workaround. Just remind you be careful about that codes and avoid the potential problems. :-) 
  
 Thanks, 
  
 Ben