docs: @Override
      public synchronized void onChange() {
          currBoundingBox = null;
          if (isClustering)
              return;
          // Log.e(getClass().getSimpleName(), "Position: "
          // + mapView.getModel().mapViewPosition.getCenter().toString()
          // + "ZoomLavel: " +
          // mapView.getModel().mapViewPosition.getZoomLevel());
          if (oldZoolLevel != mapView.getModel().mapViewPosition.getZoomLevel()) {
              // react on zoom changes
              // Log.d(TAG, "zooming...");
              oldZoolLevel = mapView.getModel().mapViewPosition.getZoomLevel();
              resetViewport(false);
          } else {
              // react on position changes
              IMapViewPosition mapViewPosition = mapView.getModel().mapViewPosition;
  
              Point posOld = mapView.getMapViewProjection().toPixels(oldCenterLatLong);
              Point posNew = mapView.getMapViewProjection().toPixels(mapViewPosition.getCenter());
              if (posOld != null && posOld.distance(posNew) > GRIDSIZE / 2) {
                  // Log.d(TAG, "moving...");
                  oldCenterLatLong = mapViewPosition.getCenter();
                  resetViewport(true);
              }
          }
      }