Reading-eScience-Centre / ncwms

ncWMS - A Web Map Service for displaying environmental data over the web
Other
63 stars 30 forks source link

Can I set the default COLORSCALERANGE for a dynamic service datasets? #57

Closed Abouzeid closed 4 years ago

Abouzeid commented 4 years ago

Hi,

I have a NetCDF file on OpenDAP and uses a dynamic service to access it. For some reason, GetMAP with default-scalar/default style fails to return the image. I am wondering how can I set the default COLORSCALERANGE or how can I disallow the style default-scalar.

2020-06-12 17:21:42 ERROR GraphicsUtils:342 - Problem reading data whilst estimating scale range for x\.tif. A default value will be used. uk.ac.rdg.resc.edal.exceptions.DataReadingException: Could not read underlying data at uk.ac.rdg.resc.edal.dataset.GriddedDataset.extractHorizontalData(GriddedDataset.java:564) at uk.ac.rdg.resc.edal.dataset.GriddedDataset.extractHorizontalData(GriddedDataset.java:1) at uk.ac.rdg.resc.edal.dataset.DiscreteLayeredDataset.readUnderlyingHorizontalData(DiscreteLayeredDataset.java:100) at uk.ac.rdg.resc.edal.dataset.HorizontallyDiscreteDataset.readHorizontalData(HorizontallyDiscreteDataset.java:273) at uk.ac.rdg.resc.edal.dataset.HorizontallyDiscreteDataset.extractMapFeatures(HorizontallyDiscreteDataset.java:177) at uk.ac.rdg.resc.edal.graphics.utils.GraphicsUtils.estimateValueRange(GraphicsUtils.java:333) at uk.ac.rdg.resc.edal.wms.GetMapStyleParams.getImageGenerator(GetMapStyleParams.java:493) at uk.ac.rdg.resc.edal.wms.WmsServlet.getMap(WmsServlet.java:528) at uk.ac.rdg.resc.edal.wms.WmsServlet.dispatchWmsRequest(WmsServlet.java:368) at uk.ac.rdg.resc.edal.ncwms.NcwmsServlet.dispatchWmsRequest(NcwmsServlet.java:212) at uk.ac.rdg.resc.edal.wms.WmsServlet.doGet(WmsServlet.java:303) at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:168) at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:233) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410) 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: org.apache.http.MalformedChunkCodingException: Unexpected content at the end of chunk at org.apache.http.impl.io.ChunkedInputStream.getChunkSize(ChunkedInputStream.java:257) at org.apache.http.impl.io.ChunkedInputStream.nextChunk(ChunkedInputStream.java:225) at org.apache.http.impl.io.ChunkedInputStream.read(ChunkedInputStream.java:184) at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:137) at java.io.FilterInputStream.read(FilterInputStream.java:133) at java.io.BufferedInputStream.fill(BufferedInputStream.java:246) at java.io.BufferedInputStream.read(BufferedInputStream.java:265) at java.io.DataInputStream.readInt(DataInputStream.java:389) at opendap.dap.Int16PrimitiveVector.deserialize(Int16PrimitiveVector.java:167) at opendap.dap.DVector.deserialize(DVector.java:262) at opendap.dap.DGrid.deserialize(DGrid.java:450) at opendap.dap.DataDDS.readData(DataDDS.java:135) at opendap.dap.DConnect2$DataDDSCommand.process(DConnect2.java:942) at opendap.dap.DConnect2.openConnection(DConnect2.java:334) at opendap.dap.DConnect2.getData(DConnect2.java:913) at opendap.dap.DConnect2.getData(DConnect2.java:1213) at ucar.nc2.dods.DODSNetcdfFile.readDataDDSfromServer(DODSNetcdfFile.java:1436)

guygriffiths commented 4 years ago

What does your WMS request look like? Does it include something like COLORSCALERANGE=0,100? That will stop it trying to estimate the scale range.

However, from the look of the stack trace it may be the case that even with COLORSCALERANGE set it will still fail. That uk.ac.rdg.resc.edal.exceptions.DataReadingException: Could not read underlying data looks worrying.

Abouzeid commented 4 years ago

What does your WMS request look like? here: wms?request=GetMap&VERSION=1.3.0&STYLES=default-scalar/default&CRS=CRS%3a84&WIDTH=256&HEIGHT=256&FORMAT=image%2fpng&TRANSPARENT=true&LAYERS=lds%2fdata%2fnc%2fAreas.nc%2f120_d_sn_cls%5c.tif&BBOX=121.51398025319675%2c23.78789714526954%2c121.64902029065352%2c23.90603461464895

image

After the above response, if I try to send another request, the ncWMS2 returns layer not found.

Does it include something like COLORSCALERANGE=0,100? No, it doesn't.

Initially, I don't know the min&max values to assign the COLORSCALERANGE. I tried to call the GetMetadata extension with ITEM = minmax but it took so long and responded nothing.

it may be the case that even with COLORSCALERANGE set it will still fail.

The netCDF in Panoply. image

Last words: