ThinkGeo.com    |     Documentation    |     Premium Support

IsoLine Layer

I am implementing isolines in my application, in all of my layers I have the ability to zoom to the extents of the layer.



However this does not see to work with an isoline layer as it doesn’t implement GetBoundingBox




_gridOverlay.Layers[name].GetBoundingBox();

this causes an error.



Is there any other way to get the bounds of a InMemoryGridIsoLineLayer ?



thanks



Murray

Hi Murray,  
  
 Thanks for reporting this, You are right we didn’t implement the GetBoundingBox for some reasons, I will confirm with our development team for if it is on purpose or a mistake.  
  
 Before this, here are two options for it to get the boundingBox: 
  
 Option 1: 
            Collection<Feature> allfeatures = inMemoryGridIsoLineLayer.GetIsoLineFeatures(); 
             RectangleShape boundingBox = ExtentHelper.GetBoundingBoxOfItems(allfeatures); 
 Option 2: 
             GridCell[,] gridMatrix = inMemoryGridIsoLineLayer.GridMatrix; 
             double cellSize = 0;// todo. 
             int columnCount = gridMatrix.GetLength(0); 
             int rowCount = gridMatrix.GetLength(1); 
  
             double minX = gridMatrix[0, 0].CenterX - cellSize / 2; 
             double maxY = gridMatrix[0, 0].CenterY + cellSize / 2; 
             double maxX = gridMatrix[0, 0].CenterX - cellSize / 2 + cellSize * columnCount; 
             double minY = gridMatrix[0, 0].CenterY + cellSize / 2 - cellSize * rowCount; 
             RectangleShape gridExtent = new RectangleShape(minX, maxY, maxX, minY); 
  
 The option 1 is simple but with some performance loss. As for the option 2, we need to know the cellSize firstly, but as far as I know, when we generate the gridMatrix  for ‘inMemoryGridIsoLineLayer’, we have to specify not only the cellSize but the currentExtent in the GridDefinition which is  one of the parameters in method “GenerateGridMatrix” like the below: 
             GridDefinition gridDefinition = new GridDefinition(currentDrawingExtent, cellSize, -9999, wellDepthPointData); 
             gridCellMatrix = GridFeatureSource.GenerateGridMatrix(gridDefinition, new InverseDistanceWeightedGridInterpolationModel(2, double.MaxValue)); 
  
 So as you can see the cellsize could be got from "GridDefinition gridDefinition = new GridDefinition(currentDrawingExtent, cellSize, -9999, wellDepthPointData);" and one more interesting thing is CurrentDrawingExtent could also be got from it. So, would you please check if we could use currentDrawingExtent instead of _gridOverlay.Layers[name].GetBoundingBox()? 
  
 Hope those would help. 
  
 Summer 


Thanks Summer 
  
 For now I have just used solution 1. If we we do load testing performance is a problem I will revisit. Hopefully by then the developers can add the functionality to the layer. 
  
 On that topic. I did ask at the end of another post but no one has answered. There does not seem to be a way to project this layer? 
  
 The post thinkgeo.com/forums/MapSuite/tabid/143/aft/10534/Default.aspx  acknowledges this shortcoming and then says they will look to add it as a feature. 
  
 This was some time ago. Can you please check the status of this. As I would like to re-project the layer without having to regenerate it. 
  
 regards 
  
 Murray

Hi Murry, 
  
 Glad to heart the option one is helpful, and about isolinelayer projection, now we are evaluating it, and will soon have a update, any thing new will be updated here immediatly. 
  
 Best Regards 
  
 Summer