Ejemplo n.º 1
0
  private KaMapCacheMapReader(
      String map,
      String group,
      String units,
      int metaTileWidth,
      int metaTileHeight,
      RenderingContext context,
      PJsonObject params) {
    super(context, params);
    this.map = map;
    this.group = group;
    this.units = units;
    this.metaTileWidth = metaTileWidth;
    this.metaTileHeight = metaTileHeight;

    PJsonArray maxExtent = params.getJSONArray("maxExtent");
    PJsonArray tileSize = params.getJSONArray("tileSize");
    tileCacheLayerInfo =
        new TileCacheLayerInfo(
            params.getJSONArray("resolutions"),
            tileSize.getInt(0),
            tileSize.getInt(1),
            maxExtent.getFloat(0),
            maxExtent.getFloat(1),
            maxExtent.getFloat(2),
            maxExtent.getFloat(3),
            params.getString("extension"));
  }
  private WMTSMapReader(String layer, RenderingContext context, PJsonObject params) {
    super(context, params);
    this.layer = layer;
    this.capabilitiesInfo = WMTSServiceInfo.getLayerInfo(baseUrl, layer, context);
    // Optional (but mandatory if matrixIds is not provided)
    PJsonArray maxExtent = params.optJSONArray(TILE_FULL_EXTENT, params.optJSONArray(MAX_EXTENT));
    // Optional (but mandatory if matrixIds is not provided)
    PJsonArray tileSize = params.optJSONArray(TILE_SIZE);
    opacity = params.optFloat(OPACITY, 1.0F);
    version = params.optString(VERSION, "1.0.0");
    requestEncoding =
        WMTSRequestEncoding.valueOf(
            params.optString(REQUEST_ENCODING, WMTSRequestEncoding.REST.name()));

    // Optional (but mandatory if matrixIds is not provided)
    tileOrigin = params.optJSONArray(TILE_ORIGIN);
    style = params.optString(STYLE, "");
    // Optional
    dimensions = params.optJSONArray(DIMENSIONS);
    // Optional
    dimensionsParams = params.optJSONObject(PARAMS);
    matrixSet = params.getString(MATRIX_SET);
    // Optional (but mandatory if matrixIds is not provided)
    zoomOffset = params.optInt(ZOOM_OFFSET);
    // Optional
    matrixIds = params.optJSONArray(MATRIX_IDS);
    // Optional (but mandatory if matrixIds is not provided)
    formatSuffix = params.optString(FORMAT_SUFFIX, params.optString(EXTENSION));

    // Optional (but mandatory if matrixIds is provided and requestEncoding is KVP)
    format = params.optString(FORMAT);

    if (tileOrigin == null && matrixIds == null) {
      throw new IllegalArgumentException(
          "Either " + TILE_ORIGIN + " or " + MATRIX_IDS + " is required.");
    }
    if (zoomOffset == null && matrixIds == null) {
      throw new IllegalArgumentException(
          "Either " + ZOOM_OFFSET + " or " + MATRIX_IDS + " is required.");
    }
    if (formatSuffix == null && matrixIds == null) {
      throw new IllegalArgumentException(
          "Either " + EXTENSION + " (or " + FORMAT_SUFFIX + ") or " + MATRIX_IDS + " is required.");
    }
    if (matrixIds == null) {
      tileCacheLayerInfo =
          new WMTSLayerInfo(
              params.getJSONArray(RESOLUTIONS),
              tileSize.getInt(0),
              tileSize.getInt(1),
              maxExtent.getFloat(0),
              maxExtent.getFloat(1),
              maxExtent.getFloat(2),
              maxExtent.getFloat(3),
              formatSuffix);
    }
  }
 @Override
 protected void renderTiles(
     TileRenderer formatter,
     Transformer transformer,
     URI commonUri,
     ParallelMapTileLoader parallelMapTileLoader)
     throws IOException, URISyntaxException {
   if (matrixIds != null) {
     double diff = Double.POSITIVE_INFINITY;
     double targetResolution = transformer.getGeoW() / transformer.getStraightBitmapW();
     for (int i = 0; i < matrixIds.size(); i++) {
       PJsonObject matrixId = matrixIds.getJSONObject(i);
       float resolution = matrixId.getFloat(RESOLUTION);
       double delta = Math.abs(1 - resolution / targetResolution);
       if (delta < diff) {
         diff = delta;
         matrix = matrixId;
       }
     }
     float resolution = matrix.getFloat(RESOLUTION);
     PJsonArray tileSize = matrix.getJSONArray(TILE_SIZE);
     PJsonArray topLeftCorner = matrix.getJSONArray(TOP_LEFT_CORNER);
     PJsonArray matrixSize = matrix.getJSONArray(MATRIX_SIZE);
     tileCacheLayerInfo =
         new TileCacheLayerInfo(
             String.valueOf(resolution),
             tileSize.getInt(0),
             tileSize.getInt(1),
             topLeftCorner.getFloat(0),
             topLeftCorner.getFloat(1) - tileSize.getInt(1) * matrixSize.getInt(1) * resolution,
             topLeftCorner.getFloat(0) + tileSize.getInt(0) * matrixSize.getInt(0) * resolution,
             topLeftCorner.getFloat(1),
             format);
   }
   super.renderTiles(formatter, transformer, commonUri, parallelMapTileLoader);
 }