private ElevationCell GetCell(double x, double y, bool isCreateIfMissing) { int ix = 0; if (_numCellX > 1) { ix = (int)((x - _extent.MinX) / _cellSizeX); ix = MathUtil.Clamp(ix, 0, _numCellX - 1); } int iy = 0; if (_numCellY > 1) { iy = (int)((y - _extent.MinY) / _cellSizeY); iy = MathUtil.Clamp(iy, 0, _numCellY - 1); } var cell = _cells[iy][ix]; if (isCreateIfMissing && cell == null) { cell = new ElevationCell(); _cells[iy][ix] = cell; } return(cell); }
/// <summary> /// Creates a new elevation model covering an extent by a grid of given dimensions. /// </summary> /// <param name="extent">The XY extent to cover</param> /// <param name="numCellX">The number of grid cells in the X dimension</param> /// <param name="numCellY">The number of grid cells in the Y dimension</param> public ElevationModel(Envelope extent, int numCellX, int numCellY) { _extent = extent; _numCellX = numCellX; _numCellY = numCellY; _cellSizeX = extent.Width / numCellX; _cellSizeY = extent.Height / numCellY; if (_cellSizeX <= 0.0) { _numCellX = 1; } if (_cellSizeY <= 0.0) { _numCellY = 1; } _cells = new ElevationCell[numCellY][]; for (int i = 0; i < numCellY; i++) { _cells[i] = new ElevationCell[numCellX]; } }