docs: private void computeGrid(final MapView pMapView) {
          // TODO: 15-11-2016 should take map orientation into account in the BBox!
          BoundingBox viewBBox = pMapView.getBoundingBox();
  
          startBoundingBox = viewBBox;
          startProjection = pMapView.getProjection();
  
          // do not compute grid if BBox is the same
          if(viewBBox.getLatNorth() != prevBoundingBox.getLatNorth()
                  || viewBBox.getLatSouth() != prevBoundingBox.getLatSouth()
                  || viewBBox.getLonWest() != prevBoundingBox.getLonWest()
                  || viewBBox.getLonEast() != prevBoundingBox.getLonEast()) {
  
              prevBoundingBox = new BoundingBox(viewBBox.getLatNorth(), viewBBox.getLonEast()
                      , viewBBox.getLatSouth(), viewBBox.getLonWest());
  
              if (gridBool == null || viewHei != pMapView.getHeight() || viewWid != pMapView.getWidth()) {
                  updateGrid(pMapView);
              } else {
                  // empty grid.
                  // TODO: we might leave the grid as it was before to avoid the "flickering"?
                  for (boolean[] row : gridBool)
                      Arrays.fill(row, false);
              }
  
              int gridX, gridY;
              final Point mPositionPixels = new Point();
              final Projection pj = pMapView.getProjection();
              gridIndex = new ArrayList<>();
              numLabels = 0;
  
              for (IGeoPoint pt1 : mPointList) {
                  if (pt1 == null) continue;
                  if (pt1.getLatitude() > viewBBox.getLatSouth()
                          && pt1.getLatitude() < viewBBox.getLatNorth()
                          && pt1.getLongitude() > viewBBox.getLonWest()
                          && pt1.getLongitude() < viewBBox.getLonEast()) {
                      pj.toPixels(pt1, mPositionPixels);
                      // test whether in this grid cell there is already a point, skip if yes
                      gridX = (int) Math.floor((float) mPositionPixels.x / mStyle.mCellSize);
                      gridY = (int) Math.floor((float) mPositionPixels.y / mStyle.mCellSize);
                      if (gridX >= gridWid || gridY >= gridHei || gridX < 0 || gridY < 0
                          || gridBool[gridX][gridY])
                          continue;
                      gridBool[gridX][gridY] = true;
                      gridIndex.add(new StyledLabelledPoint(mPositionPixels
                          , mPointList.isLabelled() ? ((LabelledGeoPoint) pt1).getLabel() : null
                          , mPointList.isStyled() ? ((StyledLabelledGeoPoint) pt1).getPointStyle() : null
                          , mPointList.isStyled() ? ((StyledLabelledGeoPoint) pt1).getTextStyle() : null
                      ));
                      numLabels++;
                  }
              }
          }
      }