docs: public void moveCenterAndZoom(double moveHorizontal, double moveVertical, byte zoomLevelDiff, boolean animated) {
          synchronized (this) {
              long mapSize = MercatorProjection.getMapSize(this.zoomLevel, this.displayModel.getTileSize());
              double pixelX = MercatorProjection.longitudeToPixelX(this.longitude, mapSize)
                      - moveHorizontal;
              double pixelY = MercatorProjection.latitudeToPixelY(this.latitude, mapSize) - moveVertical;
  
              pixelX = Math.min(Math.max(0, pixelX), mapSize);
              pixelY = Math.min(Math.max(0, pixelY), mapSize);
  
              double newLatitude = MercatorProjection.pixelYToLatitude(pixelY, mapSize);
              double newLongitude = MercatorProjection.pixelXToLongitude(pixelX, mapSize);
              setCenterInternal(newLatitude, newLongitude);
              setZoomLevelInternal(this.zoomLevel + zoomLevelDiff, animated);
          }
          notifyObservers();
      }