XYZ exports met E+38 waarden

Hoi
Ik krijg lastige waarden als output uit een Geotif.
Hoe voorkom je zoiets? Mijn CAD applicaties zijn er niet zo blij mee.

Ik heb liever dat er meteen 0 staat :stuck_out_tongue:

qgis question E38

Dat is de max value voor een hoogte en wordt gebruikt om aan te geven dat dit geen hoogte is. Als daar 0 staat dan is het een geldige (maar foutieve) hoogte.

Bedankt Anton!

Wel raar hoor Dat 0 nummeriek foutief zou zijn. Waarom? Dat zijn lege plekken, en met max. gaat het gegarandeerd verkeerd.

Qgis is misschien zo slim te krijgen dat
4028…e+38 terug gegeven moet worden als 0? Zal daar een balletje opgooien.

Er zijn genoeg plekken in Nederland waar 0 een correcte hoogte is. Dus 0 kan niet gebruikt worden als “leeg”.

Omdat het een wereldwijde standaard is moet je een waarde hebben die ruim onder of boven werkelijke hoogten vallen (-8000 tot +4000?, gezien de maximale zeedieptes en berghoogten). En dan is de nu gebruikte waarde best logisch.

Om een e+38 waarde correct als een nodata-waarde te interpreteren, moet deze waarde wel als nodata-waarde in het geotiff-bestand ingesteld staan. Dit is met bijv. gdalinfo eenvoudig te checken. Voorbeeld:

Driver: GTiff/GeoTIFF
Files: /vsizip/R_01CZ1.ZIP
Size is 10000, 12500
Coordinate System is:
PROJCS["Amersfoort / RD New",
    GEOGCS["Amersfoort",
        DATUM["Amersfoort",
            SPHEROID["Bessel 1841",6377397.155,299.1528131060796,
                AUTHORITY["EPSG","7004"]],
            AUTHORITY["EPSG","6289"]],
        PRIMEM["Greenwich",0],
        UNIT["degree",0.0174532925199433],
        AUTHORITY["EPSG","4289"]],
    PROJECTION["Oblique_Stereographic"],
    PARAMETER["latitude_of_origin",52.15616055555555],
    PARAMETER["central_meridian",5.38763888888889],
    PARAMETER["scale_factor",0.9999079],
    PARAMETER["false_easting",155000],
    PARAMETER["false_northing",463000],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AUTHORITY["EPSG","28992"]]
Origin = (140000.000000000000000,606250.000000000000000)
Pixel Size = (0.500000000000000,-0.500000000000000)
Metadata:
  AREA_OR_POINT=Point
  TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch)
  TIFFTAG_XRESOLUTION=1
  TIFFTAG_YRESOLUTION=1
Image Structure Metadata:
  INTERLEAVE=BAND
Corner Coordinates:
Upper Left  (  140000.000,  606250.000) (  5d 9'42.75"E, 53d26'36.33"N)
Lower Left  (  140000.000,  600000.000) (  5d 9'43.81"E, 53d23'14.15"N)
Upper Right (  145000.000,  606250.000) (  5d14'13.67"E, 53d26'36.76"N)
Lower Right (  145000.000,  600000.000) (  5d14'14.38"E, 53d23'14.57"N)
Center      (  142500.000,  603125.000) (  5d11'58.65"E, 53d24'55.48"N)
Band 1 Block=256x256 Type=Float32, ColorInterp=Gray
  NoData Value=3.4028234663852886e+38
  Unit Type: metre

Zie de een na laatste regel: NoData Value=3.4028234663852886e+38

Als deze waarde niet ingesteld staat, kun je niet direct van een applicatie verwachten dat hij deze waarde als een nodata-waarde interpreteert. Als deze waarde wel ingesteld staat, dan is dat een fout van de betreffende applicatie.

1 like

Bedankt! Is er een mogelijkheid voor de gebruiker (niveau Jip en Janneke :P) een methode te geven om

NoData Value=3.4028234663852886e+38

in te voeren in Qgis? Maw Hoe knoop ik dit antwoord aan deze link?

Hoi Halam,

Je moet inderdaad ff de NoData value instellen van de geotiff zodat Autocad er een surface van kan maken. Dit kan met Gdal (open source). Ik gebruik hiervoor een script om dit om te zetten

hmm…ik krijg dat niet aan de praat. Hij gooit alles eruit behalve de waarde. Ook verschiet van waarde naar een andere.

!
!

Ik dacht het gevonden te hebben maar dat blijk alleen een manier te zijn op de display en het gedrag van de laag in Qgis zelf. Verwndering van waarde = 0 met / zonder het vinkje heeft geen invloed op het exporteren naar XYZ bestand. Het blijft een zoektocht.

?

Antwoord aan mezelf. :stuck_out_tongue: Deze beschrijving laat heel cryptisch zien hoe je met calculator NODATA kan hercalculeren door alle >1000. Moet dit alleen nog even ontcijferen dat het voor leken en minder begaafde GISgoeroes ook gewoon nog eens leesbaar wordt.

Het werkt wel met notepad++ maar kan wel gebruiksvriendelijker als Qgis in staat is deze NoData regels uberhaupt weg te laten tijdens het exporteren. Zoals de naam zegt… NO Data

QGIS kan zelf niet echt een xyz-export maken, maar maakt gebruik van andere “libraries” die dit kunnen. Dit zijn de volgende processing algoritmes:

  • r.out.xyz van GRASS
  • gdal2xyz van GDAL

Het algoritme van GRASS heeft een optie om nodata-waarden wel/niet toe te voegen, en een bijbehorend vinkje in de QGIS user interface.

Indien je het nog gebruiksvriendelijker wil kun je QGIS (laten) verbouwen of een plugin maken die precies exporteert wat je nodig hebt.

2 likes

Heb er een feature request van gemaakt.
Mooie van Qgis is laagdrempelig is.
Gdal en Grass gaan mij iets te ver.
Tot die tijd : notepad++

Ben wel benieuwd waarom de oplossing die ik noemde niet werkt voor je. Maar misschien begrijp ik je vraag niet goed. De screenshot die ik meestuurde heb ik met QGIS gemaakt, je hoeft GRASS niet direct te gebruiken. Ik stuur het nog een keer mee, met de optie omcirkeld:

Welke tool in QGIS gebruik je nu dan om een xyz bestand op te slaan?

Een feature request kan een goed idee zijn, maar ik denk dat je veel duidelijker moet zijn in wat je zou willen hebben.

I gebruik de reguliere functieTranslate (convert format) Save as xyz file. Zonder addon, regels of parapmeter tools. Kun jij laten zien hoe dat zonder ingewikkelde addons of workaround werkt?

In windows, start “QGIS with GRASS” (of zoiets…)

Open de “Processing Toolbox”:
Processing > Toolbox (Ctrl+Alt+T)

(Misschien moet je de Processing Plugin even aanzetten in de plugin manager)

Zoek tools met “xyz” en kies r.out.xyz:

image

1 like

Bedankt Raymond! Ik zal Qgis anders opstarten! :slight_smile:

Raymond, deze manier en het vinkje aan / uit heeft hetzelfde resultaat. De waarde"NoData" wordt sowieso uitgevoerd of je het vinkje nu wel of niet aanzet. Lijkt gewoon totaal niet te werken. (?)

{ ‘-i’ : False, ‘GRASS_REGION_CELLSIZE_PARAMETER’ : 0, ‘GRASS_REGION_PARAMETER’ : None, ‘input’ : ‘’, ‘output’ : ‘C:/Users/Admin/Documents/Demo site AKZO/AKZO site.xyz’, ‘separator’ : ’ ’ }

g.proj -c proj4="+proj=sterea +lat_0=52.1561605555556 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.07249999989645 +units=m +no_defs +type=crs"
g.region n=0.0 s=0.0 e=0.0 w=0.0 res=100.0
r.out.xyz separator=" " output=“C:/Users/Admin/Documents/Demo site AKZO/AKZO site.xyz” --overwrite

Bij mij werkte het wel, ik kreeg alleen xyz-waarden voor de cellen die niet nodata waren.

Misschien ligt het aan het verschil in brondata?

Zou kunnen, ik werk vanuit een geclipte geotiff. Het eigenaardig is, da als je dit gedaan hebt, de NoData hide vinkje in de eigenschappen ook geen resultaat geeft. Display blijft gelijk. Ik vermoed dat dit ermee te maken heeft. Zal eens proberen direct uit de grote kaart te xyz’ten