/** * The id are what they are, not trimming 'upcasing' or other modifications will be done in this * method. * * @param expectedType The class of type T which is expected. * @param <V> the type to cast to if the casting fails, null will be returned. * @param ids to search the cache for * @return the {@link Identifiable} of the first matching id or <code>null</code> if it was not * found. */ public <V extends Identifiable> V getCachedIdentifiable(Class<V> expectedType, Identifiable ids) { if (ids == null) { return null; } return getCachedIdentifiable(expectedType, ids.getIdentifiers()); }
public CoordinateSystem getCRSByID(String id) throws CRSConfigurationException { if (resolver == null) { throw new CRSConfigurationException("No resolver initialized, this may not be."); } CoordinateSystem result = null; if (id != null && !"".equals(id.trim())) { LOG.logDebug("Trying to load crs with id: " + id + " from cache."); if (LOG.isDebug()) { LOG.logDebug(cachedIdentifiables.keySet().toString()); } if (cachedIdentifiables.containsKey(id)) { Identifiable r = cachedIdentifiables.get(id); LOG.logDebug("Found Identifiable: " + r.getIdAndName() + " from given id: " + id); if (!(r instanceof CoordinateSystem)) { LOG.logError( "Found Identifiable: " + r.getIdAndName() + " but it is not a coordinate system, your db is inconsistend return null."); r = null; } result = (CoordinateSystem) r; } if (result == null) { LOG.logDebug("No crs with id: " + id + " found in cache."); try { result = parseCoordinateSystem(resolver.getURIAsType(id)); } catch (IOException e) { LOG.logDebug(e.getLocalizedMessage(), e); throw new CRSConfigurationException(e); } if (result != null) { GeographicCRS t = null; if (result.getType() == CoordinateSystem.COMPOUND_CRS) { if (((CompoundCRS) result).getUnderlyingCRS().getType() == CoordinateSystem.PROJECTED_CRS) { t = ((ProjectedCRS) ((CompoundCRS) result).getUnderlyingCRS()).getGeographicCRS(); } else if (((CompoundCRS) result).getUnderlyingCRS().getType() == CoordinateSystem.GEOGRAPHIC_CRS) { t = (GeographicCRS) ((CompoundCRS) result).getUnderlyingCRS(); } else { LOG.logWarning( "Wgs84 Transformation lookup is currently only supported for GeographicCRS-chains."); } } else if (result.getType() == CoordinateSystem.PROJECTED_CRS) { t = ((ProjectedCRS) result).getGeographicCRS(); } else if (result.getType() == CoordinateSystem.GEOGRAPHIC_CRS) { t = (GeographicCRS) result; } else { LOG.logWarning( "Wgs84 Transformation lookup is currently only supported for GeographicCRS-chains."); } if (t != null) { Helmert wgs84 = t.getGeodeticDatum().getWGS84Conversion(); if (wgs84 == null) { wgs84 = resolver.getWGS84Transformation(t); } if (wgs84 != null) { if (wgs84.getSourceCRS() == null) { wgs84.setSourceCRS(t); addIdToCache(wgs84, true); } GeodeticDatum datum = result.getGeodeticDatum(); if (datum != null) { datum.setToWGS84(wgs84); // update the cache as well addIdToCache(datum, true); } } } } } } if (result == null) { LOG.logDebug( "The id: " + id + " could not be mapped to a valid deegree-crs, currently projectedCRS, geographicCRS, compoundCRS and geocentricCRS are supported."); } else { /** Adding the used underlying crs's to the cache. */ addIdToCache(result, false); if (result.getType() == CoordinateSystem.COMPOUND_CRS) { addIdToCache(((CompoundCRS) result).getUnderlyingCRS(), false); if (((CompoundCRS) result).getUnderlyingCRS().getType() == CoordinateSystem.PROJECTED_CRS) { addIdToCache( ((ProjectedCRS) ((CompoundCRS) result).getUnderlyingCRS()).getGeographicCRS(), false); } } else if (result.getType() == CoordinateSystem.PROJECTED_CRS) { addIdToCache(((ProjectedCRS) result).getGeographicCRS(), false); } } return result; }