Geotiff hosted Azure Blob Storage to be used as mosaic

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Geotiff hosted Azure Blob Storage to be used as mosaic

Guy Doulberg
Hi guys

I am working on a POC using Geoserver.

I have several COGs (cloud optimized Geotiff) stored on azure blob storage and accessible via HTTP. 

I want to render them in a mosaic store in Geoserver with time granule configured.

I already did some steps, but I failed to achieve what I wanted.
So I will describe what I did so far, but if there is a different way to achieve my goal that I missed, I will be more than happy to do so.

I am using geoserver 2.15  and GDAL 2.4

1. I installed the imageI/O-ext 
2. I created a VRT file refering for each Geotiff in azure using /vsicurl/
2. I configured the mosaic plugin using these VRT files
3. Each of the vrt files has also mask band

The outcome of this was, that I could render the mosaic, but the mask is not being respected.

Just for tests, I replaced the VRT file with the GeoTiff it is referring to (downloaded to geoserver storage), and I could see the mask is being respected. So maybe imageI/O-ext doesn't respect the mask band of a VRT?

Since it didn't work I tried to use the footprint configuration, I followed the instructions of footprint and added a file name with the suffix wkt to each of the vrt files.

The outcome of this was NullPointerException when rendering the tiles (WMS)

Can somone help me understand on which scenario footprint might return NullPointerExceptions?

Thank, Guy

following is the stacktrace:
geoserver_1  | 11-Jun-2019 05:57:35.206 INFO [http-nio-8080-exec-4] org.geoserver.GeoserverInitStartupListener$1.errorOccurred Problem occurs when computing a tile by the owner.
geoserver_1  |  java.lang.NullPointerException
geoserver_1  | at javax.media.jai.PlanarImage.getData(PlanarImage.java:2110)
geoserver_1  | at it.geosolutions.jaiext.scale.ScaleOpImage.computeTile(ScaleOpImage.java:1499)
geoserver_1  | at com.sun.media.jai.util.SunTileScheduler.scheduleTile(SunTileScheduler.java:904)
geoserver_1  | at javax.media.jai.OpImage.getTile(OpImage.java:1129)
geoserver_1  | at javax.media.jai.PointOpImage.computeTile(PointOpImage.java:962)
geoserver_1  | at com.sun.media.jai.util.SunTileScheduler.scheduleTile(SunTileScheduler.java:904)
geoserver_1  | at javax.media.jai.OpImage.getTile(OpImage.java:1129)
geoserver_1  | at it.geosolutions.jaiext.stats.SimpleStatsOpImage.computeTile(SimpleStatsOpImage.java:95)
geoserver_1  | at com.sun.media.jai.util.SunTileScheduler.scheduleTile(SunTileScheduler.java:904)
geoserver_1  | at javax.media.jai.OpImage.getTile(OpImage.java:1129)
geoserver_1  | at javax.media.jai.PointOpImage.computeTile(PointOpImage.java:962)
geoserver_1  | at com.sun.media.jai.util.SunTileScheduler.scheduleTile(SunTileScheduler.java:904)
geoserver_1  | at javax.media.jai.OpImage.getTile(OpImage.java:1129)
geoserver_1  | at javax.media.jai.PlanarImage.copyData(PlanarImage.java:2343)
geoserver_1  | at javax.media.jai.PlanarImage.copyExtendedData(PlanarImage.java:2398)
geoserver_1  | at javax.media.jai.PlanarImage.getExtendedData(PlanarImage.java:2459)
geoserver_1  | at it.geosolutions.jaiext.mosaic.MosaicOpImage.computeTile(MosaicOpImage.java:834)
geoserver_1  | at com.sun.media.jai.util.SunTileScheduler.scheduleTile(SunTileScheduler.java:904)
geoserver_1  | at javax.media.jai.OpImage.getTile(OpImage.java:1129)
geoserver_1  | at it.geosolutions.jaiext.bandselect.BandSelectOpImage.computeTile(BandSelectOpImage.java:127)
geoserver_1  | at it.geosolutions.jaiext.bandselect.BandSelectOpImage.getTile(BandSelectOpImage.java:156)
geoserver_1  | at javax.media.jai.RenderedOp.getTile(RenderedOp.java:2257)
geoserver_1  | at com.sun.imageio.plugins.jpeg.JPEGImageWriter.writeOnThread(JPEGImageWriter.java:401)
geoserver_1  | at com.sun.imageio.plugins.jpeg.JPEGImageWriter.write(JPEGImageWriter.java:363)
geoserver_1  | at org.geotools.image.ImageWorker.writeJPEG(ImageWorker.java:4002)
geoserver_1  | at org.geoserver.wms.map.JPEGMapResponse.formatImageOutputStream(JPEGMapResponse.java:69)
geoserver_1  | at org.geoserver.map.turbojpeg.TurboJPEGMapResponse.formatImageOutputStream(TurboJPEGMapResponse.java:88)
geoserver_1  | at org.geoserver.wms.map.RenderedImageMapResponse.write(RenderedImageMapResponse.java:112)
geoserver_1  | at org.geoserver.ows.Dispatcher.response(Dispatcher.java:1029)
geoserver_1  | at org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:268)
geoserver_1  | at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)
geoserver_1  | at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:52)
geoserver_1  | at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)
geoserver_1  | at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
geoserver_1  | at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:998)
geoserver_1  | at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:890)
geoserver_1  | at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
geoserver_1  | at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:875)
geoserver_1  | at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
geoserver_1  | at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
geoserver_1  | at org.geoserver.filters.ThreadLocalsCleanupFilter.doFilter(ThreadLocalsCleanupFilter.java:26)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
geoserver_1  | at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:69)
geoserver_1  | at org.geoserver.flow.controller.IpBlacklistFilter.doFilter(IpBlacklistFilter.java:89)
geoserver_1  | at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:66)
geoserver_1  | at org.geoserver.flow.ControlFlowCallback.doFilter(ControlFlowCallback.java:260)
geoserver_1  | at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:66)
geoserver_1  | at org.geoserver.wms.animate.AnimatorFilter.doFilter(AnimatorFilter.java:73)
geoserver_1  | at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:66)
geoserver_1  | at org.geoserver.filters.SpringDelegatingFilter.doFilter(SpringDelegatingFilter.java:41)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
geoserver_1  | at org.geoserver.platform.AdvancedDispatchFilter.doFilter(AdvancedDispatchFilter.java:37)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
geoserver_1  | at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
geoserver_1  | at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:70)
geoserver_1  | at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
geoserver_1  | at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
geoserver_1  | at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:74)
geoserver_1  | at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:91)
geoserver_1  | at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
geoserver_1  | at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:70)
geoserver_1  | at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)
geoserver_1  | at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:74)
geoserver_1  | at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:91)
geoserver_1  | at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
geoserver_1  | at org.geoserver.security.filter.GeoServerAnonymousAuthenticationFilter.doFilter(GeoServerAnonymousAuthenticationFilter.java:51)
geoserver_1  | at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
geoserver_1  | at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:70)
geoserver_1  | at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:215)
geoserver_1  | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
geoserver_1  | at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:74)
geoserver_1  | at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:91)
geoserver_1  | at org.geoserver.security.filter.GeoServerBasicAuthenticationFilter.doFilter(GeoServerBasicAuthenticationFilter.java:81)
geoserver_1  | at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
geoserver_1  | at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:70)
geoserver_1  | at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
geoserver_1  | at org.geoserver.security.filter.GeoServerSecurityContextPersistenceFilter$1.doFilter(GeoServerSecurityContextPersistenceFilter.java:52)
geoserver_1  | at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:74)
geoserver_1  | at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:91)
geoserver_1  | at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
geoserver_1  | at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
geoserver_1  | at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
geoserver_1  | at org.geoserver.security.GeoServerSecurityFilterChainProxy.doFilter(GeoServerSecurityFilterChainProxy.java:142)
geoserver_1  | at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)
geoserver_1  | at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
geoserver_1  | at org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:90)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
geoserver_1  | at org.geoserver.filters.XFrameOptionsFilter.doFilter(XFrameOptionsFilter.java:79)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
geoserver_1  | at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:42)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
geoserver_1  | at org.geoserver.filters.SessionDebugFilter.doFilter(SessionDebugFilter.java:46)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
geoserver_1  | at org.geoserver.filters.FlushSafeFilter.doFilter(FlushSafeFilter.java:42)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
geoserver_1  | at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
geoserver_1  | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
geoserver_1  | at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
geoserver_1  | at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
geoserver_1  | at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
geoserver_1  | at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492)
geoserver_1  | at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
geoserver_1  | at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
geoserver_1  | at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
geoserver_1  | at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
geoserver_1  | at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)
geoserver_1  | at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1152)
geoserver_1  | at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
geoserver_1  | at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1539)
geoserver_1  | at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1495)
geoserver_1  | at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
geoserver_1  | at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
geoserver_1  | at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
geoserver_1  | at java.lang.Thread.run(Thread.java:748)



_______________________________________________
Geoserver-users mailing list

Please make sure you read the following two resources before posting to this list:
- Earning your support instead of buying it, but Ian Turton: http://www.ianturton.com/talks/foss4g.html#/
- The GeoServer user list posting guidelines: http://geoserver.org/comm/userlist-guidelines.html

If you want to request a feature or an improvement, also see this: https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer


[hidden email]
https://lists.sourceforge.net/lists/listinfo/geoserver-users
Reply | Threaded
Open this post in threaded view
|

Re: Geotiff hosted Azure Blob Storage to be used as mosaic

geowolf
On Tue, Jun 11, 2019 at 8:57 AM Guy Doulberg <[hidden email]> wrote:
Hi guys

I am working on a POC using Geoserver.

I have several COGs (cloud optimized Geotiff) stored on azure blob storage and accessible via HTTP.  

I want to render them in a mosaic store in Geoserver with time granule configured.

I already did some steps, but I failed to achieve what I wanted.
So I will describe what I did so far, but if there is a different way to achieve my goal that I missed, I will be more than happy to do so.

I am using geoserver 2.15  and GDAL 2.4

Only GeoServer 2.16.x supports GDAL 2.4 officially. GeoServer 2.15.x should go with 1.9.2, even if there are people that managed
to make it work with 2.x too (but not officially supported)
 

1. I installed the imageI/O-ext 
2. I created a VRT file refering for each Geotiff in azure using /vsicurl/
2. I configured the mosaic plugin using these VRT files
3. Each of the vrt files has also mask band

The outcome of this was, that I could render the mosaic, but the mask is not being respected.

Just for tests, I replaced the VRT file with the GeoTiff it is referring to (downloaded to geoserver storage), and I could see the mask is being respected. So maybe imageI/O-ext doesn't respect the mask band of a VRT?

The GDAL readers have no support for masks yet, it's present at the GDAL level but not exposed through the Java API
GeoServer is using yet (via imageio-ext). Support is possible but coding/funding is needed to make that work.

 
Since it didn't work I tried to use the footprint configuration, I followed the instructions of footprint and added a file name with the suffix wkt to each of the vrt files. 

The outcome of this was NullPointerException when rendering the tiles (WMS)

Can somone help me understand on which scenario footprint might return NullPointerExceptions?

The NPE happens when no data could be read from the raster, the real issue is happening before this trace.

If the masks are internal to the geotiff you might want to try out skipping the VRTs and using this (community, thus unsupported) plugin
to read directly from the remote site (not sure if it will work on Azure blobstore, maybe not, but I'll share it for you to try):

 
Generally speaking, the path you're trying to take needs some development to work properly, I'd suggest you get in touch with
a commercial support provider: http://geoserver.org/support/

Cheers
Andrea

==

GeoServer Professional Services from the experts! Visit http://goo.gl/it488V for more information. == Ing. Andrea Aime @geowolf Technical Lead GeoSolutions S.A.S. Via di Montramito 3/A 55054 Massarosa (LU) phone: +39 0584 962313 fax: +39 0584 1660272 mob: +39 339 8844549 http://www.geo-solutions.it http://twitter.com/geosolutions_it ------------------------------------------------------- Con riferimento alla normativa sul trattamento dei dati personali (Reg. UE 2016/679 - Regolamento generale sulla protezione dei dati “GDPR”), si precisa che ogni circostanza inerente alla presente email (il suo contenuto, gli eventuali allegati, etc.) è un dato la cui conoscenza è riservata al/i solo/i destinatario/i indicati dallo scrivente. Se il messaggio Le è giunto per errore, è tenuta/o a cancellarlo, ogni altra operazione è illecita. Le sarei comunque grato se potesse darmene notizia. This email is intended only for the person or entity to which it is addressed and may contain information that is privileged, confidential or otherwise protected from disclosure. We remind that - as provided by European Regulation 2016/679 “GDPR” - copying, dissemination or use of this e-mail or the information herein by anyone other than the intended recipient is prohibited. If you have received this email by mistake, please notify us immediately by telephone or e-mail.



_______________________________________________
Geoserver-users mailing list

Please make sure you read the following two resources before posting to this list:
- Earning your support instead of buying it, but Ian Turton: http://www.ianturton.com/talks/foss4g.html#/
- The GeoServer user list posting guidelines: http://geoserver.org/comm/userlist-guidelines.html

If you want to request a feature or an improvement, also see this: https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer


[hidden email]
https://lists.sourceforge.net/lists/listinfo/geoserver-users
Reply | Threaded
Open this post in threaded view
|

Re: Geotiff hosted Azure Blob Storage to be used as mosaic

Guy Doulberg
Thanks Andera,

I will check it out,

Is storing the rasters on a samba server make sense,

I am thinking maybe to use Azure FileShare which is a NFS server with samba interface



On Thu, Jun 13, 2019 at 9:32 AM Andrea Aime <[hidden email]> wrote:
On Tue, Jun 11, 2019 at 8:57 AM Guy Doulberg <[hidden email]> wrote:
Hi guys

I am working on a POC using Geoserver.

I have several COGs (cloud optimized Geotiff) stored on azure blob storage and accessible via HTTP.  

I want to render them in a mosaic store in Geoserver with time granule configured.

I already did some steps, but I failed to achieve what I wanted.
So I will describe what I did so far, but if there is a different way to achieve my goal that I missed, I will be more than happy to do so.

I am using geoserver 2.15  and GDAL 2.4

Only GeoServer 2.16.x supports GDAL 2.4 officially. GeoServer 2.15.x should go with 1.9.2, even if there are people that managed
to make it work with 2.x too (but not officially supported)
 

1. I installed the imageI/O-ext 
2. I created a VRT file refering for each Geotiff in azure using /vsicurl/
2. I configured the mosaic plugin using these VRT files
3. Each of the vrt files has also mask band

The outcome of this was, that I could render the mosaic, but the mask is not being respected.

Just for tests, I replaced the VRT file with the GeoTiff it is referring to (downloaded to geoserver storage), and I could see the mask is being respected. So maybe imageI/O-ext doesn't respect the mask band of a VRT?

The GDAL readers have no support for masks yet, it's present at the GDAL level but not exposed through the Java API
GeoServer is using yet (via imageio-ext). Support is possible but coding/funding is needed to make that work.

 
Since it didn't work I tried to use the footprint configuration, I followed the instructions of footprint and added a file name with the suffix wkt to each of the vrt files. 

The outcome of this was NullPointerException when rendering the tiles (WMS)

Can somone help me understand on which scenario footprint might return NullPointerExceptions?

The NPE happens when no data could be read from the raster, the real issue is happening before this trace.

If the masks are internal to the geotiff you might want to try out skipping the VRTs and using this (community, thus unsupported) plugin
to read directly from the remote site (not sure if it will work on Azure blobstore, maybe not, but I'll share it for you to try):

 
Generally speaking, the path you're trying to take needs some development to work properly, I'd suggest you get in touch with
a commercial support provider: http://geoserver.org/support/

Cheers
Andrea

==

GeoServer Professional Services from the experts! Visit http://goo.gl/it488V for more information. == Ing. Andrea Aime @geowolf Technical Lead GeoSolutions S.A.S. Via di Montramito 3/A 55054 Massarosa (LU) phone: +39 0584 962313 fax: +39 0584 1660272 mob: +39 339 8844549 http://www.geo-solutions.it http://twitter.com/geosolutions_it ------------------------------------------------------- Con riferimento alla normativa sul trattamento dei dati personali (Reg. UE 2016/679 - Regolamento generale sulla protezione dei dati “GDPR”), si precisa che ogni circostanza inerente alla presente email (il suo contenuto, gli eventuali allegati, etc.) è un dato la cui conoscenza è riservata al/i solo/i destinatario/i indicati dallo scrivente. Se il messaggio Le è giunto per errore, è tenuta/o a cancellarlo, ogni altra operazione è illecita. Le sarei comunque grato se potesse darmene notizia. This email is intended only for the person or entity to which it is addressed and may contain information that is privileged, confidential or otherwise protected from disclosure. We remind that - as provided by European Regulation 2016/679 “GDPR” - copying, dissemination or use of this e-mail or the information herein by anyone other than the intended recipient is prohibited. If you have received this email by mistake, please notify us immediately by telephone or e-mail.



_______________________________________________
Geoserver-users mailing list

Please make sure you read the following two resources before posting to this list:
- Earning your support instead of buying it, but Ian Turton: http://www.ianturton.com/talks/foss4g.html#/
- The GeoServer user list posting guidelines: http://geoserver.org/comm/userlist-guidelines.html

If you want to request a feature or an improvement, also see this: https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer


[hidden email]
https://lists.sourceforge.net/lists/listinfo/geoserver-users
Reply | Threaded
Open this post in threaded view
|

Re: Geotiff hosted Azure Blob Storage to be used as mosaic

geowolf
On Thu, Jun 13, 2019 at 10:48 AM Guy Doulberg <[hidden email]> wrote:
Thanks Andera,

I will check it out,

Is storing the rasters on a samba server make sense,

I am thinking maybe to use Azure FileShare which is a NFS server with samba interface

It should work, I have no experience with that particular file system but if you can mount it to make it look
like a local file system, there should be no problem, except maybe performance (see if there are caching
and transfer batching tunables that you can tweak to reduce the number of network round trips)

Cheers
Andrea

==

GeoServer Professional Services from the experts! Visit http://goo.gl/it488V for more information. == Ing. Andrea Aime @geowolf Technical Lead GeoSolutions S.A.S. Via di Montramito 3/A 55054 Massarosa (LU) phone: +39 0584 962313 fax: +39 0584 1660272 mob: +39 339 8844549 http://www.geo-solutions.it http://twitter.com/geosolutions_it ------------------------------------------------------- Con riferimento alla normativa sul trattamento dei dati personali (Reg. UE 2016/679 - Regolamento generale sulla protezione dei dati “GDPR”), si precisa che ogni circostanza inerente alla presente email (il suo contenuto, gli eventuali allegati, etc.) è un dato la cui conoscenza è riservata al/i solo/i destinatario/i indicati dallo scrivente. Se il messaggio Le è giunto per errore, è tenuta/o a cancellarlo, ogni altra operazione è illecita. Le sarei comunque grato se potesse darmene notizia. This email is intended only for the person or entity to which it is addressed and may contain information that is privileged, confidential or otherwise protected from disclosure. We remind that - as provided by European Regulation 2016/679 “GDPR” - copying, dissemination or use of this e-mail or the information herein by anyone other than the intended recipient is prohibited. If you have received this email by mistake, please notify us immediately by telephone or e-mail.



_______________________________________________
Geoserver-users mailing list

Please make sure you read the following two resources before posting to this list:
- Earning your support instead of buying it, but Ian Turton: http://www.ianturton.com/talks/foss4g.html#/
- The GeoServer user list posting guidelines: http://geoserver.org/comm/userlist-guidelines.html

If you want to request a feature or an improvement, also see this: https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer


[hidden email]
https://lists.sourceforge.net/lists/listinfo/geoserver-users