I ́m using GeoServer 2.20.1 with the netCDF plugin (geoserver-2.20.1-netcdf-plugin.zip) on a Tomcat 9 locally on my Mac (localhost:8080).
I ́m trying to add a 4d netcdf file structure (filename: junker_v1.nc) into geoserver, but I ́m getting always the error:
"Could not list layers for this store, an error occurred retrieving them: Failed to create reader from file"
The error logs in geoserver are the following:
2022年01月20日 17:34:23,310 INFO [org.geoserver.web] - Getting list of coverages for saved store file:data/netCDF/junker_v1.nc
java.lang.RuntimeException: Could not list layers for this store, an error occurred retrieving them: Failed to create reader from file:data/netCDF/junker_v1.nc and hints Hints:
REPOSITORY = org.geoserver.catalog.CatalogRepository@1ab79b32
EXECUTOR_SERVICE = java.util.concurrent.ThreadPoolExecutor@6e69bf6a[Running, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]
System defaults:
GRID_COVERAGE_FACTORY = GridCoverageFactory
TILE_ENCODING = null
FEATURE_FACTORY = org.geotools.feature.LenientFeatureFactoryImpl@145487a5
FILTER_FACTORY = FilterFactoryImpl
COMPARISON_TOLERANCE = 1.0E-8
FORCE_LONGITUDE_FIRST_AXIS_ORDER = true
LENIENT_DATUM_SHIFT = true
FORCE_AXIS_ORDER_HONORING = http
STYLE_FACTORY = StyleFactoryImpl
at org.geoserver.web.data.layer.NewLayerPageProvider.getItemsInternal(NewLayerPageProvider.java:181)
at org.geoserver.web.data.layer.NewLayerPageProvider.getItems(NewLayerPageProvider.java:60)
at org.geoserver.web.wicket.GeoServerDataProvider.getFilteredItems(GeoServerDataProvider.java:190)
at org.geoserver.web.data.layer.NewLayerPageProvider.getFilteredItems(NewLayerPageProvider.java:197)
at org.geoserver.web.wicket.GeoServerDataProvider.size(GeoServerDataProvider.java:208)
at org.geoserver.web.wicket.GeoServerTablePanel$PagerDelegate.updateMatched(GeoServerTablePanel.java:662)
at org.geoserver.web.wicket.GeoServerTablePanel$PagerDelegate.<init>(GeoServerTablePanel.java:657)
at org.geoserver.web.wicket.GeoServerTablePanel.<init>(GeoServerTablePanel.java:236)
at org.geoserver.web.wicket.GeoServerTablePanel.<init>(GeoServerTablePanel.java:105)
at org.geoserver.web.data.layer.NewLayerPage1ドル.<init>(NewLayerPage.java:111)
at org.geoserver.web.data.layer.NewLayerPage.<init>(NewLayerPage.java:110)
at org.geoserver.web.data.store.CoverageStoreNewPage.onSuccessfulSave(CoverageStoreNewPage.java:86)
at org.geoserver.web.data.store.CoverageStoreNewPage.onSave(CoverageStoreNewPage.java:71)
at org.geoserver.web.data.store.AbstractCoverageStorePage1ドル.onSubmit(AbstractCoverageStorePage.java:138)
at org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink1ドル.onSubmit(AjaxSubmitLink.java:111)
at org.apache.wicket.ajax.form.AjaxFormSubmitBehavior$AjaxFormSubmitter.onSubmit(AjaxFormSubmitBehavior.java:218)
at org.apache.wicket.markup.html.form.Form.delegateSubmit(Form.java:1312)
at org.apache.wicket.markup.html.form.Form.process(Form.java:976)
at org.apache.wicket.markup.html.form.Form.onFormSubmitted(Form.java:797)
at org.apache.wicket.ajax.form.AjaxFormSubmitBehavior.onEvent(AjaxFormSubmitBehavior.java:174)
at org.apache.wicket.ajax.AjaxEventBehavior.respond(AjaxEventBehavior.java:155)
at org.apache.wicket.ajax.AbstractDefaultAjaxBehavior.onRequest(AbstractDefaultAjaxBehavior.java:601)
at sun.reflect.GeneratedMethodAccessor436.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:258)
at org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:241)
at org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.invokeListener(ListenerInterfaceRequestHandler.java:248)
at org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler.respond(ListenerInterfaceRequestHandler.java:234)
at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:895)
at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64)
at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:265)
at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:222)
at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:293)
at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:261)
at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:203)
at org.apache.wicket.protocol.http.WicketServlet.doPost(WicketServlet.java:159)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
at org.springframework.web.servlet.mvc.ServletWrappingController.handleRequestInternal(ServletWrappingController.java:166)
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.geoserver.filters.ThreadLocalsCleanupFilter.doFilter(ThreadLocalsCleanupFilter.java:28)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:73)
at org.geoserver.ows.HTTPHeadersCollector.doFilter(HTTPHeadersCollector.java:48)
at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:70)
at org.geoserver.filters.SpringDelegatingFilter.doFilter(SpringDelegatingFilter.java:43)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.geoserver.platform.AdvancedDispatchFilter.doFilter(AdvancedDispatchFilter.java:39)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:71)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:75)
at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:71)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:75)
at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.geoserver.security.filter.GeoServerAnonymousAuthenticationFilter.doFilter(GeoServerAnonymousAuthenticationFilter.java:53)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:71)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:75)
at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
at org.geoserver.security.filter.GeoServerUserNamePasswordAuthenticationFilter.doFilter(GeoServerUserNamePasswordAuthenticationFilter.java:122)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:71)
at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:158)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:75)
at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:71)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
at org.geoserver.security.filter.GeoServerSecurityContextPersistenceFilter1ドル.doFilter(GeoServerSecurityContextPersistenceFilter.java:52)
at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:75)
at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
at org.geoserver.security.GeoServerSecurityFilterChainProxy.doFilter(GeoServerSecurityFilterChainProxy.java:142)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:102)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.geoserver.filters.XFrameOptionsFilter.doFilter(XFrameOptionsFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:48)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.geoserver.filters.SessionDebugFilter.doFilter(SessionDebugFilter.java:49)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.geoserver.filters.FlushSafeFilter.doFilter(FlushSafeFilter.java:42)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: Failed to create reader from file:data/netCDF/junker_v1.nc and hints Hints:
REPOSITORY = org.geoserver.catalog.CatalogRepository@1ab79b32
EXECUTOR_SERVICE = java.util.concurrent.ThreadPoolExecutor@6e69bf6a[Running, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]
System defaults:
GRID_COVERAGE_FACTORY = GridCoverageFactory
TILE_ENCODING = null
FEATURE_FACTORY = org.geotools.feature.LenientFeatureFactoryImpl@145487a5
FILTER_FACTORY = FilterFactoryImpl
COMPARISON_TOLERANCE = 1.0E-8
FORCE_LONGITUDE_FIRST_AXIS_ORDER = true
LENIENT_DATUM_SHIFT = true
FORCE_AXIS_ORDER_HONORING = http
STYLE_FACTORY = StyleFactoryImpl
at org.geoserver.catalog.ResourcePool.getGridCoverageReader(ResourcePool.java:1575)
at org.geoserver.catalog.ResourcePool.getGridCoverageReader(ResourcePool.java:1518)
at org.geoserver.catalog.impl.CoverageStoreInfoImpl.getGridCoverageReader(CoverageStoreInfoImpl.java:57)
at sun.reflect.GeneratedMethodAccessor467.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.geoserver.catalog.impl.ModificationProxy.invoke(ModificationProxy.java:129)
at com.sun.proxy.$Proxy30.getGridCoverageReader(Unknown Source)
at org.geoserver.web.data.layer.NewLayerPageProvider.getItemsInternal(NewLayerPageProvider.java:98)
... 139 more
2022年01月20日 17:34:23,311 TRACE [org.geoserver.config] - org.geoserver.catalog.event.impl.CatalogModifyEventImpl@54776a00 :handleModifyEvent
2022年01月20日 17:34:23,312 DEBUG [org.geoserver.config] - Persisted com.sun.proxy.$Proxy45 to global.xml
2022年01月20日 17:34:23,313 DEBUG [org.geoserver.config] - Removing coverage store testNETCDF-4d
2022年01月20日 17:34:23,314 DEBUG [org.geoserver.config] - Persisted com.sun.proxy.$Proxy45 to global.xml
2022年01月20日 17:34:23,317 DEBUG [org.geoserver] - Thread 111 locking in mode WRITE
2022年01月20日 17:34:23,317 DEBUG [org.geoserver] - Thread 111 releasing the lock in mode WRITE
2022年01月20日 17:34:23,318 DEBUG [org.geoserver.filters] - Compressing output for mimetype: text/xml;charset=UTF-8
2022年01月20日 17:34:23,319 DEBUG [org.geoserver.security.filter.GeoServerSecurityContextPersistenceFilter1ドル] - SecurityContextHolder now cleared, as request processing completed
2022年01月20日 17:34:24,231 TRACE [org.geoserver.platform.resource] - polling contents of /Library/Tomcat/apache-tomcat-9.0.44/webapps/geoserver/data/gwc-layers
2022年01月20日 17:34:24,234 TRACE [org.geoserver.platform.resource] - delta computed in 3ms for /Library/Tomcat/apache-tomcat-9.0.44/webapps/geoserver/data/gwc-layers
2022年01月20日 17:34:29,235 TRACE [org.geoserver.platform.resource] - polling contents of /Library/Tomcat/apache-tomcat-9.0.44/webapps/geoserver/data/gwc-layers
2022年01月20日 17:34:29,236 TRACE [org.geoserver.platform.resource] - delta computed in 793us for /Library/Tomcat/apache-tomcat-9.0.44/webapps/geoserver/data/gwc-layers
2022年01月20日 17:34:34,238 TRACE [org.geoserver.platform.resource] - polling contents of /Library/Tomcat/apache-tomcat-9.0.44/webapps/geoserver/data/gwc-layers
2022年01月20日 17:34:34,238 TRACE [org.geoserver.platform.resource] - delta computed in 398us for /Library/Tomcat/apache-tomcat-9.0.44/webapps/geoserver/data/gwc-layers
2022年01月20日 17:34:38,015 DEBUG [org.geoserver.security.IncludeQueryStringAntPathRequestMatcher] - Checking match of request : 'Path: /web/wicket/bookmarkable/org.geoserver.web.admin.logpage, QueryString: filter=false'; against '/web/**'
2022年01月20日 17:34:38,015 DEBUG [org.geoserver.security.IncludeQueryStringAntPathRequestMatcher] - Matched Path: /web/wicket/bookmarkable/org.geoserver.web.admin.logpage, QueryString: filter=false with /web/**
2022年01月20日 17:34:38,017 DEBUG [org.geoserver.ows] - Could not find a layer group named web
2022年01月20日 17:34:38,017 DEBUG [org.geoserver.ows] - Could not find a layer group named web
2022年01月20日 17:34:38,017 DEBUG [org.geoserver.ows] - Could not find a layer group named web
2022年01月20日 17:34:38,017 DEBUG [org.geoserver.ows] - Could not find a layer group named web
2022年01月20日 17:34:38,018 DEBUG [org.geoserver] - Thread 109 locking in mode READ
2022年01月20日 17:34:38,018 DEBUG [org.geoserver] - Thread 109 got the lock in mode READ
2022年01月20日 17:34:38,087 DEBUG [org.geoserver] - Thread 109 locking in mode READ
2022年01月20日 17:34:38,087 DEBUG [org.geoserver] - Thread 109 releasing the lock in mode READ
2022年01月20日 17:34:38,088 DEBUG [org.geoserver.security.filter.GeoServerSecurityContextPersistenceFilter1ドル] - SecurityContextHolder now cleared, as request processing completed
2022年01月20日 17:34:38,091 DEBUG [org.geoserver.security.IncludeQueryStringAntPathRequestMatcher] - Checking match of request : 'Path: /web/wicket/bookmarkable/org.geoserver.web.admin.logpage, QueryString: 42&filter=false'; against '/web/**'
2022年01月20日 17:34:38,092 DEBUG [org.geoserver.security.IncludeQueryStringAntPathRequestMatcher] - Matched Path: /web/wicket/bookmarkable/org.geoserver.web.admin.logpage, QueryString: 42&filter=false with /web/**
2022年01月20日 17:34:38,094 DEBUG [org.geoserver.ows] - Could not find a layer group named web
2022年01月20日 17:34:38,094 DEBUG [org.geoserver.ows] - Could not find a layer group named web
2022年01月20日 17:34:38,094 DEBUG [org.geoserver.ows] - Could not find a layer group named web
2022年01月20日 17:34:38,094 DEBUG [org.geoserver.ows] - Could not find a layer group named web
complete log file here: geoserver.log
I have followed the tutorial: https://geoserver.geo-solutions.it/multidim/multidim/netcdf/netcdf_config.html#netcdf
Does anybody know why the error occur? The error logs are not really clear for me, but it seems geoserver has problems to handle the 4th dimension.
I tried the same with a netcdf structure in 3d and it works like a charm - geoserver could list the layers.
1 Answer 1
Looking at the stack trace, there is some issue setting up the variables.
While I cannot be sure, the likely cause is that your NetCDF is not copliant with the COARDS convention, a requirement for GeoServer to actually make sense of the contents.
See also: https://docs.geoserver.org/stable/en/user/extensions/netcdf/netcdf.html#notes-on-supported-netcdfs
It may be possible to make GeoServer read that NetCDF anyways, but it's likely going to require some development.