[Geoserver-devel] Handling non-working projections / CRS

There is a very wide range of EPSG codes supported in GeoServer, based on the
underlying Geotools support.

The problem is that a few don't work. There are bug reports about this:
https://osgeo-org.atlassian.net/browse/GEOS-3935
https://osgeo-org.atlassian.net/browse/GEOS-4010
and perhaps others.

That is not spec compliant, and is causing trouble in my attempt to be able to
run CITE tests against a "standard" geoserver release data_dir, because the
CITE tests (WMS 1.1) try every SRS against every map.

So I did some experiments on filtering out the EPSG codes, with logic like:

        private static boolean epsgCrsCodeIsNotSupported(String code) {
            if ("EPSG:WGS84(DD)".equals(code)) {
                return true;
            }

            try {
                CoordinateReferenceSystem crs = CRS.decode(code);
                if (crs.getCoordinateSystem().getDimension() != 2) {
                    return true;
                }
            } catch (NoSuchAuthorityCodeException ex) {
                return true;
            } catch (FactoryException ex) {
                return true;
            }
            
            return false;
        }

in the WMS GetCapabilities transformer.

(yeah, it probably would help if I reversed the sense of the tests).

The problem cases are listed at the end if anyone cares.

That does appear to work, but its way too slow - it makes the WMS module
build 6 times slower.

So I'm thinking of caching results. However I need guidance on whether the
supported codes can possibly change at runtime? If it can change, can it
change in such a way that an existing EPSG code might stop or start working?
Or will any runtime changes only be new codes?

The other approach is to thin the list of codes that are provided by GeoTools
to only those that will work (by a combination of removing those that can
never be supported by decode(), and fixing the cases that could be
supported). The problem is that it might still have plugged-in that are not
supportable, and there is a gap between "never supported" and "works
perfectly".

Another variation would be to have a whitelist of codes that are expected to
work. That whitelist could be represented in GeoTools by a new function
(like CRS.getDecodeableCodes(String authority) or similar). That would be
a maintenance burden, and we'd lose support for things that might work.

Any suggestions?

Brad

The problems follow. EPSG:5820 is particularly strange...

EPSG code EPSG:2036 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:2037 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:2038 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:2139 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:2140 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:2141 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:2142 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:2143 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:2144 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:2145 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:2146 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:2147 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:2148 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:2149 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:2150 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:2151 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:2152 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:2153 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:2191 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:2218 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Conformal (West Orientated)".
EPSG code EPSG:2221 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Conformal (West Orientated)".
EPSG code EPSG:2292 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:2296 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Conformal (West Orientated)".
EPSG code EPSG:2297 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Conformal (West Orientated)".
EPSG code EPSG:2298 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Conformal (West Orientated)".
EPSG code EPSG:2299 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Conformal (West Orientated)".
EPSG code EPSG:2300 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Conformal (West Orientated)".
EPSG code EPSG:2301 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Conformal (West Orientated)".
EPSG code EPSG:2302 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Conformal (West Orientated)".
EPSG code EPSG:2303 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Conformal (West Orientated)".
EPSG code EPSG:2304 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Conformal (West Orientated)".
EPSG code EPSG:2305 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Conformal (West Orientated)".
EPSG code EPSG:2306 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Conformal (West Orientated)".
EPSG code EPSG:2307 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Conformal (West Orientated)".
EPSG code EPSG:2550 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:2963 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Bonne (South Orientated)".
EPSG code EPSG:2982 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:2985 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Polar Stereographic (variant C)".
EPSG code EPSG:2986 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Polar Stereographic (variant C)".
EPSG code EPSG:3052 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Conformal (West Orientated)".
EPSG code EPSG:3053 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Conformal (West Orientated)".
EPSG code EPSG:3139 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Hyperbolic Cassini-Soldner".
EPSG code EPSG:3143 does not decode:org.opengis.referencing.FactoryException: Can't set a value to the parameter "Scale factor at natural origin".
EPSG code EPSG:3144 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Conformal (West Orientated)".
EPSG code EPSG:3145 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Conformal (West Orientated)".
EPSG code EPSG:3173 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Conformal (West Orientated)".
EPSG code EPSG:3295 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Modified Azimuthal Equidistant".
EPSG code EPSG:3410 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Cylindrical Equal Area (Spherical)".
EPSG code EPSG:3774 does not decode:org.opengis.referencing.FactoryException: Can't set a value to the parameter "Scale factor at natural origin".
EPSG code EPSG:3778 does not decode:org.opengis.referencing.FactoryException: Can't set a value to the parameter "Scale factor at natural origin".
EPSG code EPSG:3782 does not decode:org.opengis.referencing.FactoryException: Can't set a value to the parameter "Scale factor at natural origin".
EPSG code EPSG:3901 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:3902 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:3903 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:3975 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Cylindrical Equal Area (Spherical)".
EPSG code EPSG:3993 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Guam Projection".
EPSG code EPSG:5017 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Bonne (South Orientated)".
EPSG code EPSG:5221 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Krovak (North Orientated)".
EPSG code EPSG:5224 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Krovak Modified".
EPSG code EPSG:5225 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Krovak Modified (North Orientated)".
EPSG code EPSG:5498 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5499 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5500 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5514 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Krovak (North Orientated)".
EPSG code EPSG:5515 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Krovak Modified".
EPSG code EPSG:5516 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Krovak Modified (North Orientated)".
EPSG code EPSG:5628 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5818 does not decode:org.opengis.referencing.FactoryException: Unknow axis direction: "J-axis plus 90°".
EPSG code EPSG:5819 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Geographic/topocentric conversions".
EPSG code EPSG:5820 does not decode:org.opengis.referencing.NoSuchAuthorityCodeException: No code "EPSG:5820" from authority "European Petroleum Survey Group" found for object of type "IdentifiedObject".
EPSG code EPSG:5821 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Geographic/topocentric conversions".
EPSG code EPSG:5845 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5846 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5847 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5848 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5849 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5850 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5851 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5852 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5853 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5854 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5855 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5856 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5857 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5859 does not decode:org.opengis.referencing.FactoryException: Unknow axis direction: "J-axis minus 90°".
EPSG code EPSG:5942 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5945 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5946 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5947 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5948 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5949 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5950 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5951 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5952 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5953 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5954 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5955 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5956 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5957 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5958 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5959 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5960 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5961 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5962 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5963 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5964 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5965 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5966 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5967 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5968 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5969 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:5970 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6144 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6145 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6146 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6147 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6148 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6149 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6150 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6151 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6152 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6153 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6154 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6155 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6156 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6157 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6158 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6159 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6160 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6161 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6162 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6163 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6164 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6165 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6166 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6167 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6168 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6169 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6170 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6200 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Conformal (2SP Michigan)".
EPSG code EPSG:6201 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Conformal (2SP Michigan)".
EPSG code EPSG:6202 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Conformal (2SP Michigan)".
EPSG code EPSG:6244 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6245 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6246 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6247 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6248 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6249 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6250 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6251 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6252 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6253 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6254 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6255 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6256 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6257 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6258 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6259 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6260 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6261 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6262 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6263 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6264 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6265 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6266 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6267 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6268 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6269 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6270 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6271 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6272 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6273 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6274 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6275 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Colombia Urban".
EPSG code EPSG:6349 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6649 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6696 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6697 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6700 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6917 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6927 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:6933 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Cylindrical Equal Area".
EPSG code EPSG:7400 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:7404 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:7406 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:7408 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:7409 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:7410 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:7414 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:7423 does not decode:org.opengis.referencing.FactoryException: Coordinate system "DefaultCompoundCS" is unsupported.
EPSG code EPSG:22300 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Tunisia Mining Grid".
EPSG code EPSG:22700 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Lambert Conic Near-Conformal".
EPSG code EPSG:22832 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:23433 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:29100 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:29118 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:29119 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:29120 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:29121 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:29122 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:29177 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:29178 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:29179 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:29180 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:29181 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:29182 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:29183 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:29184 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:29185 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:29635 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:29636 does not decode:org.opengis.referencing.FactoryException: Unit conversion from "DMS" to "°" is non-linear.
EPSG code EPSG:29701 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Laborde Oblique Mercator".
EPSG code EPSG:32600 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Transverse Mercator Zoned Grid System".
EPSG code EPSG:32700 does not decode:org.opengis.referencing.NoSuchIdentifierException: No transform for classification "Transverse Mercator Zoned Grid System".
EPSG code EPSG:63266406 does not decode:org.opengis.referencing.FactoryException: Unsupported unit: 9116
EPSG code EPSG:63266407 does not decode:org.opengis.referencing.FactoryException: Unsupported unit: 9117
EPSG code EPSG:63266408 does not decode:org.opengis.referencing.FactoryException: Unsupported unit: 9115
EPSG code EPSG:63266409 does not decode:org.opengis.referencing.FactoryException: Unsupported unit: 9118
EPSG code EPSG:63266410 does not decode:org.opengis.referencing.FactoryException: Unsupported unit: 9119
EPSG code EPSG:63266412 does not decode:org.opengis.referencing.FactoryException: Unsupported unit: 9120
EPSG code EPSG:63266414 does not decode:org.opengis.referencing.FactoryException: Unsupported unit: 9116
EPSG code EPSG:63266415 does not decode:org.opengis.referencing.FactoryException: Unsupported unit: 9117
EPSG code EPSG:63266416 does not decode:org.opengis.referencing.FactoryException: Unsupported unit: 9115
EPSG code EPSG:63266417 does not decode:org.opengis.referencing.FactoryException: Unsupported unit: 9118
EPSG code EPSG:63266418 does not decode:org.opengis.referencing.FactoryException: Unsupported unit: 9119
EPSG code EPSG:63266420 does not decode:org.opengis.referencing.FactoryException: Unsupported unit: 9120

On Thu, Oct 1, 2015 at 7:42 AM, Brad Hards <bradh@anonymised.com> wrote:

That does appear to work, but its way too slow - it makes the WMS module
build 6 times slower.

So I'm thinking of caching results. However I need guidance on whether the
supported codes can possibly change at runtime? If it can change, can it
change in such a way that an existing EPSG code might stop or start
working?
Or will any runtime changes only be new codes?

Not at runtime, but there is an issue, the data dir used in tests
is destroyed and rebuilt at every test run (for each class, not method).
We could create a blacklist in the user_projections storage, that also has
its own
problems though, as supported EPSG codes evolve over time, and the data
dirs are long lived.

The other approach is to thin the list of codes that are provided by
GeoTools
to only those that will work (by a combination of removing those that can
never be supported by decode(), and fixing the cases that could be
supported). The problem is that it might still have plugged-in that are not
supportable, and there is a gap between "never supported" and "works
perfectly".

Right, that is another issue, everything in the projection subsystem is
pluggable,
which makes it hard to setup a query that would return only what's
supported.
I have witnessed installations that had custom plugins with extra
projections
support compared to the base GeoServer, for example.

Another variation would be to have a whitelist of codes that are expected
to
work. That whitelist could be represented in GeoTools by a new function
(like CRS.getDecodeableCodes(String authority) or similar). That would be
a maintenance burden, and we'd lose support for things that might work.

Any suggestions?

Err... I'm not sure I have a good solution... time ago there was this
suggestion
to have the WMS caps only report the list of CRS that are actually in use,
plus some well known ones (e.g., 3857).
This could be a flag in the WMS configuration, enabled by default in the
release
data directory.
It would also have the nice side effect of stop troubling some lesser OGC
clients,
such as, you know, ArcGis

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 Poggio alle Viti 1187
55054 Massarosa (LU)
Italy
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 339 8844549

http://www.geo-solutions.it
http://twitter.com/geosolutions_it

*AVVERTENZE AI SENSI DEL D.Lgs. 196/2003*

Le informazioni contenute in questo messaggio di posta elettronica e/o
nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
loro utilizzo è consentito esclusivamente al destinatario del messaggio,
per le finalità indicate nel messaggio stesso. Qualora riceviate questo
messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
darcene notizia via e-mail e di procedere alla distruzione del messaggio
stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od
utilizzarlo per finalità diverse, costituisce comportamento contrario ai
principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for
the attention and use of the named addressee(s) and may be confidential or
proprietary in nature or covered by the provisions of privacy act
(Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
Code).Any use not in accord with its purpose, any disclosure, reproduction,
copying, distribution, or either dissemination, either whole or partial, is
strictly forbidden except previous formal approval of the named
addressee(s). If you are not the intended recipient, please contact
immediately the sender by telephone, fax or e-mail and delete the
information in this message that has been received in error. The sender
does not give any warranty or accept liability as the content, accuracy or
completeness of sent messages and accepts no responsibility for changes
made after they were sent or for other risks which arise as a result of
e-mail transmission, viruses, etc.

-------------------------------------------------------

On Thu, 1 Oct 2015 10:04:28 AM Andrea Aime wrote:

On Thu, Oct 1, 2015 at 7:42 AM, Brad Hards <bradh@anonymised.com> wrote:
> That does appear to work, but its way too slow - it makes the WMS module
> build 6 times slower.
>
> So I'm thinking of caching results. However I need guidance on whether the
> supported codes can possibly change at runtime? If it can change, can it
> change in such a way that an existing EPSG code might stop or start
> working?
> Or will any runtime changes only be new codes?

Not at runtime, but there is an issue, the data dir used in tests
is destroyed and rebuilt at every test run (for each class, not method).

I'm less concerned that tests are slow, but more concerned that
GetCapabilities becomes slow in production.

If we create the list at startup, there still could be some way to get
reasonable speed for subsequent calls. Maybe a singleton that has the server-
wide list (Set<String>) of CRS codes that work.

We could create a blacklist in the user_projections storage, that also has
its own
problems though, as supported EPSG codes evolve over time, and the data
dirs are long lived.

> The other approach is to thin the list of codes that are provided by
> GeoTools
> to only those that will work (by a combination of removing those that can
> never be supported by decode(), and fixing the cases that could be
> supported). The problem is that it might still have plugged-in that are
> not
> supportable, and there is a gap between "never supported" and "works
> perfectly".

Right, that is another issue, everything in the projection subsystem is
pluggable,
which makes it hard to setup a query that would return only what's
supported.
I have witnessed installations that had custom plugins with extra
projections
support compared to the base GeoServer, for example.

Presumably those custom plugins work though, so the blacklist (or whitelist by
exception) would only apply to those that we "know" about. Are the custom ones
in the EPSG namespace?

> Another variation would be to have a whitelist of codes that are expected
> to
> work. That whitelist could be represented in GeoTools by a new function
> (like CRS.getDecodeableCodes(String authority) or similar). That would be
> a maintenance burden, and we'd lose support for things that might work.
>
> Any suggestions?

Err... I'm not sure I have a good solution... time ago there was this
suggestion
to have the WMS caps only report the list of CRS that are actually in use,
plus some well known ones (e.g., 3857).
This could be a flag in the WMS configuration, enabled by default in the
release
data directory.

So the "Limited SRS list" would be the default. We could do a subset with no
code changes, just by modifying the data dirs.

It would need to cycle through all the layers to find out the CRS that are in
use though.

Brad

On Thu, Oct 1, 2015 at 1:26 PM, Brad Hards <bradh@anonymised.com> wrote:

> Not at runtime, but there is an issue, the data dir used in tests
> is destroyed and rebuilt at every test run (for each class, not method).
I'm less concerned that tests are slow, but more concerned that
GetCapabilities becomes slow in production.

Making tests slower is definitely not an option, they are already too slow,
we actually have spent code sprints (Vienna, 3 days) and several personal
hours
to make them faster in face of the growing system and growing number
of modules. On my machine GS il building in 12-13 minutes, without all
that effort we'd be around 20-30 minutes by now.

Presumably those custom plugins work though, so the blacklist (or whitelist

by
exception) would only apply to those that we "know" about. Are the custom
ones
in the EPSG namespace?

Sometimes they are, other times not, it's all over the place.

> > Another variation would be to have a whitelist of codes that are
expected
> > to
> > work. That whitelist could be represented in GeoTools by a new function
> > (like CRS.getDecodeableCodes(String authority) or similar). That would
be
> > a maintenance burden, and we'd lose support for things that might work.
> >
> > Any suggestions?
>
> Err... I'm not sure I have a good solution... time ago there was this
> suggestion
> to have the WMS caps only report the list of CRS that are actually in
use,
> plus some well known ones (e.g., 3857).
> This could be a flag in the WMS configuration, enabled by default in the
> release
> data directory.
So the "Limited SRS list" would be the default. We could do a subset with
no
code changes, just by modifying the data dirs.

It would need to cycle through all the layers to find out the CRS that are
in
use though.

Indeed, it would require two cycles, one to generate the list of CRS, one to
actually produce the caps document.
Unless the list is gathered once and then cached and maintained up to date
using catalog listeners.

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 Poggio alle Viti 1187
55054 Massarosa (LU)
Italy
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 339 8844549

http://www.geo-solutions.it
http://twitter.com/geosolutions_it

*AVVERTENZE AI SENSI DEL D.Lgs. 196/2003*

Le informazioni contenute in questo messaggio di posta elettronica e/o
nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
loro utilizzo è consentito esclusivamente al destinatario del messaggio,
per le finalità indicate nel messaggio stesso. Qualora riceviate questo
messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
darcene notizia via e-mail e di procedere alla distruzione del messaggio
stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od
utilizzarlo per finalità diverse, costituisce comportamento contrario ai
principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for
the attention and use of the named addressee(s) and may be confidential or
proprietary in nature or covered by the provisions of privacy act
(Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
Code).Any use not in accord with its purpose, any disclosure, reproduction,
copying, distribution, or either dissemination, either whole or partial, is
strictly forbidden except previous formal approval of the named
addressee(s). If you are not the intended recipient, please contact
immediately the sender by telephone, fax or e-mail and delete the
information in this message that has been received in error. The sender
does not give any warranty or accept liability as the content, accuracy or
completeness of sent messages and accepts no responsibility for changes
made after they were sent or for other risks which arise as a result of
e-mail transmission, viruses, etc.

-------------------------------------------------------

Got an idea (feel free to shoot down). Right now I have a program that generates the [function list](http://docs geotools function list) for the geotools docs, I keep meaning to add that into the maven build (so the docs are always up to date).

Could we do the same thing for a generated epsg-blacklist.properties? Idea would be to have each line be an sys code to “skip” and the value would be the reason why.

EPSG:22300=No transform for classification “Tunisia Mining Grid”

We could use the blacklist to “filter” the contents of the gt-epsh-hsql.jar to only those that are supportable by our reference implementation.

···

On 1 October 2015 at 05:10, Andrea Aime <andrea.aime@anonymised.com> wrote:



GeoTools-Devel mailing list
GeoTools-Devel@anonymised.coms.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-devel


Jody Garnett

On Thu, Oct 1, 2015 at 1:26 PM, Brad Hards <bradh@anonymised.com91…> wrote:

Not at runtime, but there is an issue, the data dir used in tests
is destroyed and rebuilt at every test run (for each class, not method).
I’m less concerned that tests are slow, but more concerned that
GetCapabilities becomes slow in production.

Making tests slower is definitely not an option, they are already too slow,
we actually have spent code sprints (Vienna, 3 days) and several personal hours
to make them faster in face of the growing system and growing number
of modules. On my machine GS il building in 12-13 minutes, without all
that effort we’d be around 20-30 minutes by now.

Presumably those custom plugins work though, so the blacklist (or whitelist by
exception) would only apply to those that we “know” about. Are the custom ones
in the EPSG namespace?

Sometimes they are, other times not, it’s all over the place.

Another variation would be to have a whitelist of codes that are expected
to
work. That whitelist could be represented in GeoTools by a new function
(like CRS.getDecodeableCodes(String authority) or similar). That would be
a maintenance burden, and we’d lose support for things that might work.

Any suggestions?

Err… I’m not sure I have a good solution… time ago there was this
suggestion
to have the WMS caps only report the list of CRS that are actually in use,
plus some well known ones (e.g., 3857).
This could be a flag in the WMS configuration, enabled by default in the
release
data directory.
So the “Limited SRS list” would be the default. We could do a subset with no
code changes, just by modifying the data dirs.

It would need to cycle through all the layers to find out the CRS that are in
use though.

Indeed, it would require two cycles, one to generate the list of CRS, one to
actually produce the caps document.
Unless the list is gathered once and then cached and maintained up to date
using catalog listeners.

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 Poggio alle Viti 1187
55054 Massarosa (LU)
Italy
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 339 8844549

http://www.geo-solutions.it
http://twitter.com/geosolutions_it

AVVERTENZE AI SENSI DEL D.Lgs. 196/2003

Le informazioni contenute in questo messaggio di posta elettronica e/o nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il loro utilizzo è consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora riceviate questo messaggio senza esserne il destinatario, Vi preghiamo cortesemente di darcene notizia via e-mail e di procedere alla distruzione del messaggio stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso, divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od utilizzarlo per finalità diverse, costituisce comportamento contrario ai principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for the attention and use of the named addressee(s) and may be confidential or proprietary in nature or covered by the provisions of privacy act (Legislative Decree June, 30 2003, no.196 - Italy’s New Data Protection Code).Any use not in accord with its purpose, any disclosure, reproduction, copying, distribution, or either dissemination, either whole or partial, is strictly forbidden except previous formal approval of the named addressee(s). If you are not the intended recipient, please contact immediately the sender by telephone, fax or e-mail and delete the information in this message that has been received in error. The sender does not give any warranty or accept liability as the content, accuracy or completeness of sent messages and accepts no responsibility for changes made after they were sent or for other risks which arise as a result of e-mail transmission, viruses, etc.