Probleem met WCS 2.0.1 bij grotere bbox

Ik zie een probleem bij bevraging van de WCS met versie 2.0.1. Dit is niet te zien in versie 1.0.0 en verschijnt enkel bij iets of wat grotere bounding box (in dit voorbeeld 600 m x 600 m).
Ik geef hieronder de hypelinks naar de requests voor beide gevallen en het overeenkomstige beeld voor versie 2.0.1 met de probleemzone in zwarte rechthoek.

WCS DSM (overdrachtdiensten/el-dsm/wcs) bevraging met versie 1.0.0:

SERVICE=WCS&VERSION=1.0.0&REQUEST=GetCoverage&COVERAGE=EL.GridCoverage.DSM&CRS=EPSG%3A4258&BBOX=4.72095012725145%2C51.061826948537%2C4.7298371754509%2C51.0673731834911&RESX=1&RESY=1&FORMAT=geoTIFF&RESPONSE_CRS=EPSG%3A4258

WCS DSM bevraging met versie 2.0.1:

SERVICE=WCS&VERSION=2.0.1&REQUEST=GetCoverage&COVERAGEID=EL.GridCoverage.DSM&CRS=EPSG%3A4258&SUBSET=x%2Chttp%3A%2F%2Fwww.opengis.net%2Fdef%2Fcrs%2FEPSG%2F0%2F4258%284.72095012725145%2C4.7298371754509%29&SUBSET=y%2Chttp%3A%2F%2Fwww.opengis.net%2Fdef%2Fcrs%2FEPSG%2F0%2F4258%2851.061826948537%2C51.0673731834911%29&FORMAT=image%2Ftiff&RESPONSE_CRS=EPSG%3A4258

EDIT: ik heb dit beeld zelf (client-zijde) getransformeerd naar EPSG 31370.
EDIT2: ik heb onvoldoende rechten om hyperlink in te voegen en om twee beelden te uploaden, vandaar enkel het beeld waarin het probleem te zien is (vergelijk met versie 1.0.0 om dit duidelijker te zien)

We hebben met beide requests een beeld opgevraagd en kunnen het probleem niet reproduceren. Beide beelden komen overeen.

Wat u waarneemt wordt waarschijnlijk veroorzaakt door de transformatie van ETRS89 naar Lambert 72. Hierbij wordt het beeld onder andere wat geroteerd. Het tif-beeld is een raster, rechthoekig en zal hierdoor (vaak) na de transformatie “no-data” pixels bevatten. In onderstaand voorbeeld is de no-data waarde gelijk aan 0. Deze waarde is afhankelijk van de software en eventuele instellingen gebruikt bij de transformatie. In veel toepassingen kan je deze no-data-waarde als transparant definiëren.

De hoekpunten van de bounding-box (minimum & maximum op X/Y) van het getransformeerde beeld zullen door de rotatie afwijken van de hoekpunten zoals zichtbaar van het beeld dat werd opgevraagd in ETRS89.

Om beide coördinatensystemen gelijktijdig in een GIS-toepassing te kunnen gebruiken, wordt minstens één van beide beelden on-the-fly getransformeerd. Hierbij worden no-data waarden niet ingekleurd. Je kan wel een eventuele rotatie zien.

Vreemd. Ik zie het probleem immers ook als ik niet transformeer:

Versie 1.0.0:

Versie 2.0.1:

De versie 2.0.1 figuur heeft bij mij een afwijkende foutieve zone (51.062 - 51.064 en 4.722 - 4.724) tov versie 1.0.0 die niet afhangt van een transformatie.

Je mag dit issue als afgehandeld beschouwen. Ik heb gevonden dat het probleem zit bij mijn procedure om het tif gedeelte uit het .mht bestand te halen. Als ik dit “manueel” doe via notepad++ krijg ik wel het juiste beeld te zien. Het probleem zit dus bij de code die ik schreef om deze manuele stap te automatiseren.
Dit is de code die ik hiervoor gebruik (R taal). Moest iemand zien wat ik fout doe… laat het weten:

unpack_mht <- function(path) {

  lines_raw <- readr::read_lines_raw(path)
  lines_char <- suppressWarnings(readr::read_lines(path))
  assertthat::assert_that(any(stringr::str_detect(lines_char, "image/tiff")))
  start <- max(which(stringr::str_detect(lines_char, "Content-"))) + 1
  end <- length(lines_raw) - 1
  tif <- lines_raw[start:end]
  readr::write_lines(
    x = tif,
    file = stringr::str_replace(path, "mht", "tif"))
}

(Dus bij deze toch ook een kleine request om rechtstreeks een .tif bestand te kunnen downloaden i.p.v. een multipart .mht bestand :slight_smile: )

Voor het geval iemand hier meeleest en geĂŻnteresseerd zou zijn in de R code. Ik heb ondertussen de R code aangepast zodat het wel werkt (lelijke code, maar ik zag geen betere manier om het opgelost te krijgen):

unpack_mht <- function(path) {

  lines_raw <- readr::read_lines_raw(path)
  lines_char <- suppressWarnings(readr::read_lines(path))
  raw_vector <- readr::read_file_raw(path)

  assertthat::assert_that(any(stringr::str_detect(lines_char, "image/tiff")))
  start <- max(which(stringr::str_detect(lines_char, "Content-"))) + 1
  end <- length(lines_raw) - 1
  pos_start <- length(unlist(lines_raw[1:(start - 1)])) + start
  pos_end <- length(raw_vector) - (length(lines_raw[end + 1]) + 1)

  tif <- raw_vector[pos_start:pos_end]
  readr::write_file(tif,
                    stringr::str_replace(path, "mht", "tif"))
}

2 likes

Dank je om dit te delen.