2016-06-29 3 views
2

Ich versuche, eine NetCDF-4-Datei mit einer Variable variabler Länge zu schreiben.Wie erstellt man eine netCDF-4-Datei mit einer Variable variabler Länge von Ncml?

Idealerweise hätte ich das Dienstprogramm ncgen verwendet, aber es unterstützt ncml nicht. Daher benutze ich die netCDF-Java-Bibliothek 4.6.6. Die folgende ncml ohne variabler Länge Variable erzeugt eine tragfähige netCDF-4-Datei:

java -Xmx1g -classpath ~/dump/netcdfAll-4.6.6.jar ucar.nc2.dataset.NetcdfDataset -in test.ncml -out test.nc4 -netcdf4 

Dies wird die entsprechende ncml/xml:

<?xml version="1.0" encoding="UTF-8"?> 
<netcdf xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://what.no"> 
    <group name="data"> 
    <dimension name="number_packets" length="6"/> 
    <variable name="packet_time_utc" shape="number_packets" type="double"> 
    </variable> 
    </group> 
</netcdf> 

Wenn ich eine weitere unbegrenzte Dimension der ncml bin das Hinzufügen, Fehler auftritt

<?xml version="1.0" encoding="UTF-8"?> 
<netcdf xmlns="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://what.no"> 
    <group name="data"> 
    <dimension name="number_packets" length="6" isVariableLength="true" isShared="false"/> 
    <variable name="packet_time_utc" shape="number_packets" type="double"> 
    </variable> 
    </group> 
</netcdf> 

nach dem ncml schema, die Definition der Dimension korrekt ist. Fehler msg NetCDF: Variable nicht gefunden:

NetcdfDatataset read from test-vlen.ncml write to test-Vlen.nc4 java.io.IOException: -49: NetCDF: Variable not found 
     at ucar.nc2.jni.netcdf.Nc4Iosp.writeData(Nc4Iosp.java:2835) 
     at ucar.nc2.jni.netcdf.Nc4Iosp.writeData(Nc4Iosp.java:2789) 
     at ucar.nc2.NetcdfFileWriter.write(NetcdfFileWriter.java:954) 
     at ucar.nc2.NetcdfFileWriter.write(NetcdfFileWriter.java:938) 
     at ucar.nc2.FileWriter2.copyAll(FileWriter2.java:431) 
     at ucar.nc2.FileWriter2.copyVarData(FileWriter2.java:384) 
     at ucar.nc2.FileWriter2.write(FileWriter2.java:199) 
     at ucar.nc2.dataset.NetcdfDataset.main(NetcdfDataset.java:1888) 
Exception in thread "main" java.io.IOException: -101: NetCDF: HDF error 
     at ucar.nc2.jni.netcdf.Nc4Iosp.close(Nc4Iosp.java:289) 
     at ucar.nc2.NetcdfFileWriter.abort(NetcdfFileWriter.java:1032) 
     at ucar.nc2.FileWriter2.write(FileWriter2.java:207) 
     at ucar.nc2.dataset.NetcdfDataset.main(NetcdfDataset.java:1888) 

length="*" angeben, wie here empfohlen, die Ergebnisse in einem anderen Number Fehler.

Ich verwende die neuesten Versionen verfügbar:

  • HDF 1.8.17
  • netcdf C 4.4.0
  • netCDF-java lib 4.6.6

Der Fehler ist über den Fehler, die Variable zu finden (FileWrite möchte alle Variablen kopieren). Ich stehe jedoch auf der Suche nach dem Ursprung des Fehlers.

Antwort

0

Ich reproduziert dies mit dem netCDF-Java-Lib Zweig 5.0.0; begehen 0cc266d, aber der Fehler ist ein wenig klarer:

Mit Ihrem zweiten Beispiel:

java.lang.IllegalArgumentException: Dimensions added to a group must be shared. 

Nach isShared="false" Entfernen

java.lang.IllegalArgumentException: variable length dimension cannot be shared or unlimited 

Es sieht für mich, dass es nur noch keine Unterstützung ist .

0

Leider unterstützen wir dies in NetCDF-Java nicht. Ich habe ein Problem darüber auf GitHub gemacht.

+0

Vielen Dank (Ich habe noch nicht genug Rep zu upvote) –

Verwandte Themen