From: Shane S. <sh...@ax...> - 2012-04-23 22:45:12
|
Hello GT-Devs, We're working with some map tiles in EPSG:3572 and running into a problem. EPSG:3572 centers on the north pole and is only valid for latitudes 45 - 90. When zoomed in the tiles render fine, but when zoomed out far enough (past 45 lat) the request breaks with this stack trace: 2012-04-23 14:55:35,369 ERROR [geotools.rendering] - Points of LinearRing do not form a closed linestring java.lang.IllegalArgumentException: Points of LinearRing do not form a closed linestring at com.vividsolutions.jts.geom.LinearRing.validateConstruction(LinearRing.java:111) at com.vividsolutions.jts.geom.LinearRing.<init>(LinearRing.java:106) at com.vividsolutions.jts.geom.GeometryFactory.createLinearRing(GeometryFactory.java:341) at com.vividsolutions.jts.geom.GeometryFactory.createLinearRing(GeometryFactory.java:328) at org.geotools.filter.BBoxExpressionImpl.setBounds(BBoxExpressionImpl.java:92) at org.geotools.filter.BBoxExpressionImpl.<init>(BBoxExpressionImpl.java:67) at org.geotools.filter.FilterFactoryImpl.createBBoxExpression(FilterFactoryImpl.java:853) at org.geotools.filter.FilterFactoryImpl.bbox(FilterFactoryImpl.java:438) at org.geotools.filter.FilterFactoryImpl.bbox(FilterFactoryImpl.java:424) at org.geotools.filter.visitor.DuplicatingFilterVisitor.visit(DuplicatingFilterVisitor.java:241) at org.geotools.renderer.lite.FastBBOX.accept(FastBBOX.java:122) at org.geotools.renderer.lite.StreamingRenderer.getLayerQuery(StreamingRenderer.java:1118) at org.geotools.renderer.lite.StreamingRenderer.processStylers(StreamingRenderer.java:1958) at org.geotools.renderer.lite.StreamingRenderer.paint(StreamingRenderer.java:804) at org.geotools.renderer.lite.StreamingRenderer.paint(StreamingRenderer.java:620) at org.geotools.renderer.lite.StreamingRenderer.paint(StreamingRenderer.java:569) at org.geoserver.web.crs.CRSAreaOfValidityMapBuilder.createMapFor(CRSAreaOfValidityMapBuilder.java:225) at org.geoserver.web.crs.CRSAreaOfValidityMapBuilder.createMapFor(CRSAreaOfValidityMapBuilder.java:193) at org.geoserver.web.crs.DynamicCrsMapResource.getResourceStream(DynamicCrsMapResource.java:58) at org.apache.wicket.Resource.init(Resource.java:213) at org.apache.wicket.Resource.onResourceRequested(Resource.java:117) at org.apache.wicket.markup.html.image.resource.LocalizedImageResource.onResourceRequested(LocalizedImageResource.java:198) at org.apache.wicket.markup.html.image.Image.onResourceRequested(Image.java:148) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.wicket.request.target.resource.ComponentResourceRequestTarget.respond(ComponentResourceRequestTarget.java:69) at org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:105) at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1258) at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329) at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1436) at org.apache.wicket.RequestCycle.request(RequestCycle.java:545) at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:484) at org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:138) at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.springframework.web.servlet.mvc.ServletWrappingController.handleRequestInternal(ServletWrappingController.java:159) at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.geoserver.filters.ThreadLocalsCleanupFilter.doFilter(ThreadLocalsCleanupFilter.java:23) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:74) at org.geoserver.filters.SpringDelegatingFilter.doFilter(SpringDelegatingFilter.java:45) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.geoserver.platform.AdvancedDispatchFilter.doFilter(AdvancedDispatchFilter.java:49) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.vfny.geoserver.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:109) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:112) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:71) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.geoserver.filters.ReverseProxyFilter.doFilter(ReverseProxyFilter.java:182) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:41) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.geoserver.filters.SessionDebugFilter.doFilter(SessionDebugFilter.java:46) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:662) See this GeoServer url for an example (zoom out): http://localhost:8080/geoserver/web/?wicket:bookmarkablePage=:org.geoserver.web.demo.SRSDescriptionPage&code=EPSG:3572 Any ideas? -- Shane StClair Software Engineer Axiom Consulting & Design http://www.axiomalaska.com |
From: Andrea A. <and...@ge...> - 2012-04-24 07:21:37
|
On Mon, Apr 23, 2012 at 11:49 PM, Shane StClair <sh...@ax...>wrote: > Hello GT-Devs, > > We're working with some map tiles in EPSG:3572 and running into a problem. > EPSG:3572 centers on the north pole and is only valid for latitudes 45 - > 90. When zoomed in the tiles render fine, but when zoomed out far enough > (past 45 lat) the request breaks with this stack trace: > > 2012-04-23 14:55:35,369 ERROR [geotools.rendering] - Points of LinearRing > do not form a closed linestring > java.lang.IllegalArgumentException: Points of LinearRing do not form a > closed linestring > at > com.vividsolutions.jts.geom.LinearRing.validateConstruction(LinearRing.java:111) > at com.vividsolutions.jts.geom.LinearRing.<init>(LinearRing.java:106) > at > com.vividsolutions.jts.geom.GeometryFactory.createLinearRing(GeometryFactory.java:341) > at > com.vividsolutions.jts.geom.GeometryFactory.createLinearRing(GeometryFactory.java:328) > at > org.geotools.filter.BBoxExpressionImpl.setBounds(BBoxExpressionImpl.java:92) > at > org.geotools.filter.BBoxExpressionImpl.<init>(BBoxExpressionImpl.java:67) > at > org.geotools.filter.FilterFactoryImpl.createBBoxExpression(FilterFactoryImpl.java:853) > at > org.geotools.filter.FilterFactoryImpl.bbox(FilterFactoryImpl.java:438) > at > org.geotools.filter.FilterFactoryImpl.bbox(FilterFactoryImpl.java:424) > at > org.geotools.filter.visitor.DuplicatingFilterVisitor.visit(DuplicatingFilterVisitor.java:241) > at org.geotools.renderer.lite.FastBBOX.accept(FastBBOX.java:122) > at > org.geotools.renderer.lite.StreamingRenderer.getLayerQuery(StreamingRenderer.java:1118) > at > org.geotools.renderer.lite.StreamingRenderer.processStylers(StreamingRenderer.java:1958) > at > org.geotools.renderer.lite.StreamingRenderer.paint(StreamingRenderer.java:804) > at > org.geotools.renderer.lite.StreamingRenderer.paint(StreamingRenderer.java:620) > at > org.geotools.renderer.lite.StreamingRenderer.paint(StreamingRenderer.java:569) > at > org.geoserver.web.crs.CRSAreaOfValidityMapBuilder.createMapFor(CRSAreaOfValidityMapBuilder.java:225) > at > org.geoserver.web.crs.CRSAreaOfValidityMapBuilder.createMapFor(CRSAreaOfValidityMapBuilder.java:193) > at > org.geoserver.web.crs.DynamicCrsMapResource.getResourceStream(DynamicCrsMapResource.java:58) > at org.apache.wicket.Resource.init(Resource.java:213) > at org.apache.wicket.Resource.onResourceRequested(Resource.java:117) > at > org.apache.wicket.markup.html.image.resource.LocalizedImageResource.onResourceRequested(LocalizedImageResource.java:198) > at > org.apache.wicket.markup.html.image.Image.onResourceRequested(Image.java:148) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at > org.apache.wicket.request.target.resource.ComponentResourceRequestTarget.respond(ComponentResourceRequestTarget.java:69) > at > org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:105) > at > org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1258) > at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329) > at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1436) > at org.apache.wicket.RequestCycle.request(RequestCycle.java:545) > at > org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:484) > at > org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:138) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) > at > org.springframework.web.servlet.mvc.ServletWrappingController.handleRequestInternal(ServletWrappingController.java:159) > at > org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) > at > org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) > at > org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) > at > org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) > at > org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) > at > org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) > at > org.geoserver.filters.ThreadLocalsCleanupFilter.doFilter(ThreadLocalsCleanupFilter.java:23) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) > at > org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:74) > at > org.geoserver.filters.SpringDelegatingFilter.doFilter(SpringDelegatingFilter.java:45) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) > at > org.geoserver.platform.AdvancedDispatchFilter.doFilter(AdvancedDispatchFilter.java:49) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) > at > org.vfny.geoserver.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:109) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368) > at > org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) > at > org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) > at > org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) > at > org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78) > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) > at > org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:112) > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) > at > org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) > at > org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187) > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) > at > org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) > at > org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) > at > org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) > at > org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169) > at > org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) > at > org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) > at org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:71) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) > at > org.geoserver.filters.ReverseProxyFilter.doFilter(ReverseProxyFilter.java:182) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) > at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:41) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) > at > org.geoserver.filters.SessionDebugFilter.doFilter(SessionDebugFilter.java:46) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) > at > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) > at > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) > at > org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) > at java.lang.Thread.run(Thread.java:662) > > See this GeoServer url for an example (zoom out): > > > http://localhost:8080/geoserver/web/?wicket:bookmarkablePage=:org.geoserver.web.demo.SRSDescriptionPage&code=EPSG:3572 > > Any ideas? The "advanced projection handling" subsystem should take care of reducing the queried bbox in a projectable area, in order to do so it needs a Today we have implementations dealing with Mercator, Transverse Mercator and Polar Stereographic, you'll need to code one for Lambert Azimutal. See the org.geotools.renderer.crs package, ProjectionHandlerFactory and ProjectionHandler, and how they are registered in ProjectionHandlerFinder (yeah, been lazy and did not roll out a SPI for this one, one day we should do that). Cheers Andrea -- ------------------------------------------------------- Ing. Andrea Aime GeoSolutions S.A.S. Tech lead Via Poggio alle Viti 1187 55054 Massarosa (LU) Italy phone: +39 0584 962313 fax: +39 0584 962313 mob: +39 339 8844549 http://www.geo-solutions.it http://geo-solutions.blogspot.com/ http://www.youtube.com/user/GeoSolutionsIT http://www.linkedin.com/in/andreaaime http://twitter.com/geowolf ------------------------------------------------------- |
From: Shane S. <sh...@ax...> - 2012-04-25 21:22:55
|
Thanks Andrea. I implemented a LambertAzimuthalEqualAreaHandlerFactory and registered it with the ProjectionHandlerFactory. My implementation is very simple (maybe too simple), but it is being used and appears to be constructing the ProjectionHandler with the correct WGS84 validArea ([-180.0 : 180.0, 45.0 : 90.0 ] in the case of EPSG:3572). public class LambertAzimuthalEqualAreaHandlerFactory implements ProjectionHandlerFactory { public ProjectionHandler getHandler(ReferencedEnvelope renderingEnvelope, boolean wrap) { MapProjection mapProjection = CRS.getMapProjection(renderingEnvelope .getCoordinateReferenceSystem()); if (renderingEnvelope != null && mapProjection instanceof LambertAzimuthalEqualArea) { GeographicBoundingBox bbox = CRS.getGeographicBoundingBox( renderingEnvelope .getCoordinateReferenceSystem()); ReferencedEnvelope validArea = new ReferencedEnvelope( bbox.getWestBoundLongitude(), bbox.getEastBoundLongitude(), bbox.getNorthBoundLatitude(), bbox.getSouthBoundLatitude(), DefaultGeographicCRS.WGS84 ); return new ProjectionHandler(renderingEnvelope, validArea); } return null; } } However, I'm still seeing the problem. It seems to stem from the reprojection of individual LAEA points which are "off the edge of the world" into WGS84 coordinates, which returns NaN latitudes. For example, in the reprojection console select EPSG:3572 as Source CRS, EPSG:4326 as Target CRS. Source point -10000000 -7000000 reprojects to 154.99202019855863 -56.77932729754025, but -10000000 -7000000 reprojects to 158.65980825409008 NaN. Is this is correct behavior? I'm not sure if the coordinate transformation itself needs to change, or if the rendering envelope should detect and deal with NaN coordinates, or something else. I dug around in the DefaultCoordinateOperationFactory and see that the basis of the 3572 -> 4326 transformation comes from the EPGS database, but I'm a bit out of my league here. Thanks, Shane On Tue, Apr 24, 2012 at 00:21, Andrea Aime <and...@ge...>wrote: > On Mon, Apr 23, 2012 at 11:49 PM, Shane StClair <sh...@ax...>wrote: > >> Hello GT-Devs, >> >> We're working with some map tiles in EPSG:3572 and running into a >> problem. EPSG:3572 centers on the north pole and is only valid for >> latitudes 45 - 90. When zoomed in the tiles render fine, but when zoomed >> out far enough (past 45 lat) the request breaks with this stack trace: >> >> 2012-04-23 14:55:35,369 ERROR [geotools.rendering] - Points of LinearRing >> do not form a closed linestring >> java.lang.IllegalArgumentException: Points of LinearRing do not form a >> closed linestring >> at >> com.vividsolutions.jts.geom.LinearRing.validateConstruction(LinearRing.java:111) >> at com.vividsolutions.jts.geom.LinearRing.<init>(LinearRing.java:106) >> at >> com.vividsolutions.jts.geom.GeometryFactory.createLinearRing(GeometryFactory.java:341) >> at >> com.vividsolutions.jts.geom.GeometryFactory.createLinearRing(GeometryFactory.java:328) >> at >> org.geotools.filter.BBoxExpressionImpl.setBounds(BBoxExpressionImpl.java:92) >> at >> org.geotools.filter.BBoxExpressionImpl.<init>(BBoxExpressionImpl.java:67) >> at >> org.geotools.filter.FilterFactoryImpl.createBBoxExpression(FilterFactoryImpl.java:853) >> at >> org.geotools.filter.FilterFactoryImpl.bbox(FilterFactoryImpl.java:438) >> at >> org.geotools.filter.FilterFactoryImpl.bbox(FilterFactoryImpl.java:424) >> at >> org.geotools.filter.visitor.DuplicatingFilterVisitor.visit(DuplicatingFilterVisitor.java:241) >> at org.geotools.renderer.lite.FastBBOX.accept(FastBBOX.java:122) >> at >> org.geotools.renderer.lite.StreamingRenderer.getLayerQuery(StreamingRenderer.java:1118) >> at >> org.geotools.renderer.lite.StreamingRenderer.processStylers(StreamingRenderer.java:1958) >> at >> org.geotools.renderer.lite.StreamingRenderer.paint(StreamingRenderer.java:804) >> at >> org.geotools.renderer.lite.StreamingRenderer.paint(StreamingRenderer.java:620) >> at >> org.geotools.renderer.lite.StreamingRenderer.paint(StreamingRenderer.java:569) >> at >> org.geoserver.web.crs.CRSAreaOfValidityMapBuilder.createMapFor(CRSAreaOfValidityMapBuilder.java:225) >> at >> org.geoserver.web.crs.CRSAreaOfValidityMapBuilder.createMapFor(CRSAreaOfValidityMapBuilder.java:193) >> at >> org.geoserver.web.crs.DynamicCrsMapResource.getResourceStream(DynamicCrsMapResource.java:58) >> at org.apache.wicket.Resource.init(Resource.java:213) >> at org.apache.wicket.Resource.onResourceRequested(Resource.java:117) >> at >> org.apache.wicket.markup.html.image.resource.LocalizedImageResource.onResourceRequested(LocalizedImageResource.java:198) >> at >> org.apache.wicket.markup.html.image.Image.onResourceRequested(Image.java:148) >> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> at >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) >> at >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) >> at java.lang.reflect.Method.invoke(Method.java:597) >> at >> org.apache.wicket.request.target.resource.ComponentResourceRequestTarget.respond(ComponentResourceRequestTarget.java:69) >> at >> org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:105) >> at >> org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1258) >> at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329) >> at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1436) >> at org.apache.wicket.RequestCycle.request(RequestCycle.java:545) >> at >> org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:484) >> at >> org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:138) >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) >> at >> org.springframework.web.servlet.mvc.ServletWrappingController.handleRequestInternal(ServletWrappingController.java:159) >> at >> org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) >> at >> org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) >> at >> org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) >> at >> org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) >> at >> org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) >> at >> org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) >> at >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) >> at >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >> at >> org.geoserver.filters.ThreadLocalsCleanupFilter.doFilter(ThreadLocalsCleanupFilter.java:23) >> at >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >> at >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >> at >> org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:74) >> at >> org.geoserver.filters.SpringDelegatingFilter.doFilter(SpringDelegatingFilter.java:45) >> at >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >> at >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >> at >> org.geoserver.platform.AdvancedDispatchFilter.doFilter(AdvancedDispatchFilter.java:49) >> at >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >> at >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >> at >> org.vfny.geoserver.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:109) >> at >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >> at >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >> at >> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368) >> at >> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) >> at >> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) >> at >> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) >> at >> org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) >> at >> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) >> at >> org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78) >> at >> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) >> at >> org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:112) >> at >> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) >> at >> org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) >> at >> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) >> at >> org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187) >> at >> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) >> at >> org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) >> at >> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) >> at >> org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) >> at >> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) >> at >> org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169) >> at >> org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) >> at >> org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) >> at >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >> at >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >> at org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:71) >> at >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >> at >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >> at >> org.geoserver.filters.ReverseProxyFilter.doFilter(ReverseProxyFilter.java:182) >> at >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >> at >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >> at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:41) >> at >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >> at >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >> at >> org.geoserver.filters.SessionDebugFilter.doFilter(SessionDebugFilter.java:46) >> at >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >> at >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >> at >> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) >> at >> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) >> at >> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) >> at >> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) >> at >> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) >> at >> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) >> at >> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) >> at >> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) >> at >> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) >> at java.lang.Thread.run(Thread.java:662) >> >> See this GeoServer url for an example (zoom out): >> >> >> http://localhost:8080/geoserver/web/?wicket:bookmarkablePage=:org.geoserver.web.demo.SRSDescriptionPage&code=EPSG:3572 >> >> Any ideas? > > > The "advanced projection handling" subsystem should take care of reducing > the queried bbox in a projectable > area, in order to do so it needs a > Today we have implementations dealing with Mercator, Transverse Mercator > and Polar Stereographic, you'll > need to code one for Lambert Azimutal. > See the org.geotools.renderer.crs package, ProjectionHandlerFactory and > ProjectionHandler, and how they > are registered in ProjectionHandlerFinder (yeah, been lazy and did not > roll out a SPI for this one, one day > we should do that). > > Cheers > Andrea > > -- > ------------------------------------------------------- > Ing. Andrea Aime > GeoSolutions S.A.S. > Tech lead > > Via Poggio alle Viti 1187 > 55054 Massarosa (LU) > Italy > > phone: +39 0584 962313 > fax: +39 0584 962313 > mob: +39 339 8844549 > > http://www.geo-solutions.it > http://geo-solutions.blogspot.com/ > http://www.youtube.com/user/GeoSolutionsIT > http://www.linkedin.com/in/andreaaime > http://twitter.com/geowolf > > ------------------------------------------------------- > -- Shane StClair Software Engineer Axiom Consulting & Design http://www.axiomalaska.com |
From: Shane S. <sh...@ax...> - 2012-04-25 21:24:21
|
Sorry, corrected reprojection console directions here: For example, in the reprojection console select EPSG:3572 as Source CRS, EPSG:4326 as Target CRS. Source point -10000000 -7000000 reprojects to 154.99202019855863 -56.77932729754025, but -10000000 *-8000000* reprojects to 158.65980825409008 NaN. On Wed, Apr 25, 2012 at 14:22, Shane StClair <sh...@ax...> wrote: > Thanks Andrea. I implemented a LambertAzimuthalEqualAreaHandlerFactory and > registered it with the ProjectionHandlerFactory. My implementation is very > simple (maybe too simple), but it is being used and appears to be > constructing the ProjectionHandler with the correct WGS84 validArea > ([-180.0 : 180.0, 45.0 : 90.0 ] in the case of EPSG:3572). > > public class LambertAzimuthalEqualAreaHandlerFactory implements > ProjectionHandlerFactory { > > public ProjectionHandler getHandler(ReferencedEnvelope > renderingEnvelope, boolean wrap) { > MapProjection mapProjection = > CRS.getMapProjection(renderingEnvelope > .getCoordinateReferenceSystem()); > if (renderingEnvelope != null && mapProjection instanceof > LambertAzimuthalEqualArea) { > GeographicBoundingBox bbox = CRS.getGeographicBoundingBox( > renderingEnvelope > .getCoordinateReferenceSystem()); > > ReferencedEnvelope validArea = new ReferencedEnvelope( > bbox.getWestBoundLongitude(), > bbox.getEastBoundLongitude(), > bbox.getNorthBoundLatitude(), > bbox.getSouthBoundLatitude(), > DefaultGeographicCRS.WGS84 ); > return new ProjectionHandler(renderingEnvelope, validArea); > } > > return null; > } > > } > > However, I'm still seeing the problem. It seems to stem from the > reprojection of individual LAEA points which are "off the edge of the > world" into WGS84 coordinates, which returns NaN latitudes. > > For example, in the reprojection console select EPSG:3572 as Source CRS, > EPSG:4326 as Target CRS. Source point -10000000 -7000000 reprojects to > 154.99202019855863 -56.77932729754025, but -10000000 -7000000 reprojects to > 158.65980825409008 NaN. > > Is this is correct behavior? I'm not sure if the coordinate transformation > itself needs to change, or if the rendering envelope should detect and deal > with NaN coordinates, or something else. I dug around in the > DefaultCoordinateOperationFactory and see that the basis of the 3572 -> > 4326 transformation comes from the EPGS database, but I'm a bit out of my > league here. > > Thanks, > Shane > > > On Tue, Apr 24, 2012 at 00:21, Andrea Aime <and...@ge...>wrote: > >> On Mon, Apr 23, 2012 at 11:49 PM, Shane StClair <sh...@ax...>wrote: >> >>> Hello GT-Devs, >>> >>> We're working with some map tiles in EPSG:3572 and running into a >>> problem. EPSG:3572 centers on the north pole and is only valid for >>> latitudes 45 - 90. When zoomed in the tiles render fine, but when zoomed >>> out far enough (past 45 lat) the request breaks with this stack trace: >>> >>> 2012-04-23 14:55:35,369 ERROR [geotools.rendering] - Points of >>> LinearRing do not form a closed linestring >>> java.lang.IllegalArgumentException: Points of LinearRing do not form a >>> closed linestring >>> at >>> com.vividsolutions.jts.geom.LinearRing.validateConstruction(LinearRing.java:111) >>> at com.vividsolutions.jts.geom.LinearRing.<init>(LinearRing.java:106) >>> at >>> com.vividsolutions.jts.geom.GeometryFactory.createLinearRing(GeometryFactory.java:341) >>> at >>> com.vividsolutions.jts.geom.GeometryFactory.createLinearRing(GeometryFactory.java:328) >>> at >>> org.geotools.filter.BBoxExpressionImpl.setBounds(BBoxExpressionImpl.java:92) >>> at >>> org.geotools.filter.BBoxExpressionImpl.<init>(BBoxExpressionImpl.java:67) >>> at >>> org.geotools.filter.FilterFactoryImpl.createBBoxExpression(FilterFactoryImpl.java:853) >>> at >>> org.geotools.filter.FilterFactoryImpl.bbox(FilterFactoryImpl.java:438) >>> at >>> org.geotools.filter.FilterFactoryImpl.bbox(FilterFactoryImpl.java:424) >>> at >>> org.geotools.filter.visitor.DuplicatingFilterVisitor.visit(DuplicatingFilterVisitor.java:241) >>> at org.geotools.renderer.lite.FastBBOX.accept(FastBBOX.java:122) >>> at >>> org.geotools.renderer.lite.StreamingRenderer.getLayerQuery(StreamingRenderer.java:1118) >>> at >>> org.geotools.renderer.lite.StreamingRenderer.processStylers(StreamingRenderer.java:1958) >>> at >>> org.geotools.renderer.lite.StreamingRenderer.paint(StreamingRenderer.java:804) >>> at >>> org.geotools.renderer.lite.StreamingRenderer.paint(StreamingRenderer.java:620) >>> at >>> org.geotools.renderer.lite.StreamingRenderer.paint(StreamingRenderer.java:569) >>> at >>> org.geoserver.web.crs.CRSAreaOfValidityMapBuilder.createMapFor(CRSAreaOfValidityMapBuilder.java:225) >>> at >>> org.geoserver.web.crs.CRSAreaOfValidityMapBuilder.createMapFor(CRSAreaOfValidityMapBuilder.java:193) >>> at >>> org.geoserver.web.crs.DynamicCrsMapResource.getResourceStream(DynamicCrsMapResource.java:58) >>> at org.apache.wicket.Resource.init(Resource.java:213) >>> at org.apache.wicket.Resource.onResourceRequested(Resource.java:117) >>> at >>> org.apache.wicket.markup.html.image.resource.LocalizedImageResource.onResourceRequested(LocalizedImageResource.java:198) >>> at >>> org.apache.wicket.markup.html.image.Image.onResourceRequested(Image.java:148) >>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>> at >>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) >>> at >>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) >>> at java.lang.reflect.Method.invoke(Method.java:597) >>> at >>> org.apache.wicket.request.target.resource.ComponentResourceRequestTarget.respond(ComponentResourceRequestTarget.java:69) >>> at >>> org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:105) >>> at >>> org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1258) >>> at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329) >>> at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1436) >>> at org.apache.wicket.RequestCycle.request(RequestCycle.java:545) >>> at >>> org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:484) >>> at >>> org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:138) >>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) >>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) >>> at >>> org.springframework.web.servlet.mvc.ServletWrappingController.handleRequestInternal(ServletWrappingController.java:159) >>> at >>> org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) >>> at >>> org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) >>> at >>> org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) >>> at >>> org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) >>> at >>> org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) >>> at >>> org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) >>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) >>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) >>> at >>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) >>> at >>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >>> at >>> org.geoserver.filters.ThreadLocalsCleanupFilter.doFilter(ThreadLocalsCleanupFilter.java:23) >>> at >>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >>> at >>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >>> at >>> org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:74) >>> at >>> org.geoserver.filters.SpringDelegatingFilter.doFilter(SpringDelegatingFilter.java:45) >>> at >>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >>> at >>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >>> at >>> org.geoserver.platform.AdvancedDispatchFilter.doFilter(AdvancedDispatchFilter.java:49) >>> at >>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >>> at >>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >>> at >>> org.vfny.geoserver.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:109) >>> at >>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >>> at >>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >>> at >>> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368) >>> at >>> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) >>> at >>> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) >>> at >>> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) >>> at >>> org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) >>> at >>> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) >>> at >>> org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78) >>> at >>> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) >>> at >>> org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:112) >>> at >>> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) >>> at >>> org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) >>> at >>> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) >>> at >>> org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187) >>> at >>> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) >>> at >>> org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) >>> at >>> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) >>> at >>> org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) >>> at >>> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) >>> at >>> org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169) >>> at >>> org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) >>> at >>> org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) >>> at >>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >>> at >>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >>> at >>> org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:71) >>> at >>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >>> at >>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >>> at >>> org.geoserver.filters.ReverseProxyFilter.doFilter(ReverseProxyFilter.java:182) >>> at >>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >>> at >>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >>> at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:41) >>> at >>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >>> at >>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >>> at >>> org.geoserver.filters.SessionDebugFilter.doFilter(SessionDebugFilter.java:46) >>> at >>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) >>> at >>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) >>> at >>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) >>> at >>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) >>> at >>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) >>> at >>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) >>> at >>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) >>> at >>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) >>> at >>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) >>> at >>> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) >>> at >>> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) >>> at java.lang.Thread.run(Thread.java:662) >>> >>> See this GeoServer url for an example (zoom out): >>> >>> >>> http://localhost:8080/geoserver/web/?wicket:bookmarkablePage=:org.geoserver.web.demo.SRSDescriptionPage&code=EPSG:3572 >>> >>> Any ideas? >> >> >> The "advanced projection handling" subsystem should take care of reducing >> the queried bbox in a projectable >> area, in order to do so it needs a >> Today we have implementations dealing with Mercator, Transverse Mercator >> and Polar Stereographic, you'll >> need to code one for Lambert Azimutal. >> See the org.geotools.renderer.crs package, ProjectionHandlerFactory and >> ProjectionHandler, and how they >> are registered in ProjectionHandlerFinder (yeah, been lazy and did not >> roll out a SPI for this one, one day >> we should do that). >> >> Cheers >> Andrea >> >> -- >> ------------------------------------------------------- >> Ing. Andrea Aime >> GeoSolutions S.A.S. >> Tech lead >> >> Via Poggio alle Viti 1187 >> 55054 Massarosa (LU) >> Italy >> >> phone: +39 0584 962313 >> fax: +39 0584 962313 >> mob: +39 339 8844549 >> >> http://www.geo-solutions.it >> http://geo-solutions.blogspot.com/ >> http://www.youtube.com/user/GeoSolutionsIT >> http://www.linkedin.com/in/andreaaime >> http://twitter.com/geowolf >> >> ------------------------------------------------------- >> > > > > -- > Shane StClair > Software Engineer > Axiom Consulting & Design > http://www.axiomalaska.com > -- Shane StClair Software Engineer Axiom Consulting & Design http://www.axiomalaska.com |