4 votos

Extraer información de gdalinfo / ogrinfo

En scripts de Bash, yo uso gdal(srs)info / ogrinfo para obtener información de raster / vector de archivos.

Para utilizar esta información en mis scripts, yo soy la extracción de información de uso de grep

... por ejemplo, como este (para recibir el ulx)

gdalinfo raster.tif | grep "Upper Left" | grep -Po '[-0-9\.]+(?=,)'

... o este (para recibir el Código EPSG)

gdalsrsinfo raster.tif | grep -Po '(?<=AUTHORITY\["EPSG",")\d+(?="\]\]$)'

Que funciona, pero no estoy muy contento con esa solución porque es muy dependiente de la forma gdalinfo obras. Si nada cambia, mi secuencias de comandos pueden romper.

¿Alguien sabe de alguna solución mejor ?

5voto

Nathan Feger Puntos 7675

gdalsrsinfo tiene una opción de formato de salida (-o) que tiene un rango de formatos. epsg es todavía experimental como de Jan 17, y me gustaría que no se recomiendan en esta etapa del proceso. xml probablemente le dirá más de lo que posiblemente quería saber:

$ gdalsrsinfo -o xml phoenix_DEM_subset.tif 
<gml:GeographicCRS gml:id="ogrcrs1">
  <gml:srsName>WGS 84</gml:srsName>
  <gml:srsID>
    <gml:name codeSpace="urn:ogc:def:crs:EPSG::">4326</gml:name>
  </gml:srsID>
  <gml:usesEllipsoidalCS>
    <gml:EllipsoidalCS gml:id="ogrcrs2">
      <gml:csName>ellipsoidal</gml:csName>
      <gml:csID>
        <gml:name codeSpace="urn:ogc:def:cs:EPSG::">6402</gml:name>
      </gml:csID>
      <gml:usesAxis>
        <gml:CoordinateSystemAxis gml:id="ogrcrs3" gml:uom="urn:ogc:def:uom:EPSG::9102">
          <gml:name>Geodetic latitude</gml:name>
          <gml:axisID>
            <gml:name codeSpace="urn:ogc:def:axis:EPSG::">9901</gml:name>
          </gml:axisID>
          <gml:axisAbbrev>Lat</gml:axisAbbrev>
          <gml:axisDirection>north</gml:axisDirection>
        </gml:CoordinateSystemAxis>
      </gml:usesAxis>
      <gml:usesAxis>
        <gml:CoordinateSystemAxis gml:id="ogrcrs4" gml:uom="urn:ogc:def:uom:EPSG::9102">
          <gml:name>Geodetic longitude</gml:name>
          <gml:axisID>
            <gml:name codeSpace="urn:ogc:def:axis:EPSG::">9902</gml:name>
          </gml:axisID>
          <gml:axisAbbrev>Lon</gml:axisAbbrev>
          <gml:axisDirection>east</gml:axisDirection>
        </gml:CoordinateSystemAxis>
      </gml:usesAxis>
    </gml:EllipsoidalCS>
  </gml:usesEllipsoidalCS>
  <gml:usesGeodeticDatum>
    <gml:GeodeticDatum gml:id="ogrcrs5">
      <gml:datumName>WGS_1984</gml:datumName>
      <gml:datumID>
        <gml:name codeSpace="urn:ogc:def:datum:EPSG::">6326</gml:name>
      </gml:datumID>
      <gml:usesPrimeMeridian>
        <gml:PrimeMeridian gml:id="ogrcrs6">
          <gml:meridianName>Greenwich</gml:meridianName>
          <gml:greenwichLongitude>
            <gml:angle uom="urn:ogc:def:uom:EPSG::9102">0</gml:angle>
          </gml:greenwichLongitude>
        </gml:PrimeMeridian>
      </gml:usesPrimeMeridian>
      <gml:usesEllipsoid>
        <gml:Ellipsoid gml:id="ogrcrs7">
          <gml:ellipsoidName>WGS 84</gml:ellipsoidName>
          <gml:ellipsoidID>
            <gml:name codeSpace="urn:ogc:def:ellipsoid:EPSG::">7030</gml:name>
          </gml:ellipsoidID>
          <gml:semiMajorAxis uom="urn:ogc:def:uom:EPSG::9001">6378137</gml:semiMajorAxis>
          <gml:secondDefiningParameter>
            <gml:inverseFlattening uom="urn:ogc:def:uom:EPSG::9201">298.257223563</gml:inverseFlattening>
          </gml:secondDefiningParameter>
        </gml:Ellipsoid>
      </gml:usesEllipsoid>
    </gml:GeodeticDatum>
  </gml:usesGeodeticDatum>
</gml:GeographicCRS>

Si usted tiene una versión más reciente de gdalinfo (he probado en el maestro de 16 de diciembre, pero nada de 2.0 en adelante debe estar bien), puede utilizar la -json opción de formato para obtener detallado descriptivo de salida.

$ gdalinfo -json phoenix_DEM_subset.tif 
{
  "description":"phoenix_DEM_subset.tif",
  "driverShortName":"GTiff",
  "driverLongName":"GeoTIFF",
  "files":[
    "phoenix_DEM_subset.tif"
  ],
  "size":[
    4633,
    1153
  ],
  "coordinateSystem":{
    "wkt":"GEOGCS[\"WGS 84\",\n    DATUM[\"WGS_1984\",\n        SPHEROID[\"WGS 84\",6378137,298.257223563,\n            AUTHORITY[\"EPSG\",\"7030\"]],\n        AUTHORITY[\"EPSG\",\"6326\"]],\n    PRIMEM[\"Greenwich\",0],\n    UNIT[\"degree\",0.0174532925199433],\n    AUTHORITY[\"EPSG\",\"4326\"]]"
  },
  "geoTransform":[
    -112.114887330000002,
    0.000083333333333,
    0.0,
    33.4441373299999967,
    0.0,
    -0.000083333333333
  ],
  "metadata":{
    "":{
      "AREA_OR_POINT":"Area",
      "TIFFTAG_XRESOLUTION":"1",
      "TIFFTAG_YRESOLUTION":"1"
    },
    "IMAGE_STRUCTURE":{
      "INTERLEAVE":"BAND"
    }
  },
  "cornerCoordinates":{
    "upperLeft":[
      -112.1148873,
      33.4441373
    ],
    "lowerLeft":[
      -112.1148873,
      33.348054
    ],
    "upperRight":[
      -111.728804,
      33.4441373
    ],
    "lowerRight":[
      -111.728804,
      33.348054
    ],
    "center":[
      -111.9218457,
      33.3960957
    ]
  },
  "wgs84Extent":{
    "type":"Polygon",
    "coordinates":[
      [
        [
          -112.1148873,
          33.4441373
        ],
        [
          -112.1148873,
          33.348054
        ],
        [
          -111.728804,
          33.4441373
        ],
        [
          -111.728804,
          33.348054
        ],
        [
          -112.1148873,
          33.4441373
        ]
      ]
    ]
  },
  "bands":[
    {
      "band":1,
      "block":[
        4633,
        1
      ],
      "type":"Int16",
      "colorInterpretation":"Gray",
      "metadata":{
      }
    }
  ]

Tenga en cuenta que esto no está en el 1.x de la serie.

0voto

Mat Puntos 196

Esto es algo que me preguntaba acerca demasiado.

gdalinfo escupe el texto a stdout, pero en un formato de texto (como usted dice) es difícil de analizar.

Usted puede utilizar (o puerto) una herramienta existente como gdalinfo-json para convertir gdalinfo de salida en formato JSON, y de la tubería en una herramienta como jq para filtrar la salida.

No he probado estos, pero podría ser vale la pena mirar si no te apetece empezar desde cero con python/gdal.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X