Class WKTDictionary
- All Implemented Interfaces:
- AuthorityFactory,- Factory
create(…) method is invoked for the first time for a given key.
 Sub-classing and instantiation
Newly constructedWKTDictionary are initially empty.
 The dictionary can be populated in the following ways:
 - Invoke load(BufferedReader)for reading definitions from file(s).
- Invoke addDefinitions(Stream)for providing definitions from an arbitrary source.
- Override fetchDefinition(DefaultIdentifier)in a subclass for fetching WKT definitions on-the-fly (for example from the"spatial_ref_sys"table of a spatial database.
fetchDefinition(…) is not overridden
 because WKTDictionary does not implement any of the
 CRSAuthorityFactory,
 CSAuthorityFactory or
 DatumAuthorityFactory.
 The choice of interfaces to implement is left to subclasses.
 CRS.forCode(String).
 The additional CRS are defined by Well-Known Text strings in a "MyCRS.txt" file.
 First step is to create a CRS factory with those definitions:
 public final class MyCRS extends WKTDictionary implements CRSAuthorityFactory {
    MyCRS() throws IOException, FactoryException {
        super(new DefaultCitation("MyAuthority"));
        try (BufferedReader source = Files.newBufferedReader(Paths.get("MyCRS.txt"))) {
            load(source);
        }
    }
}META-INF/services/org.opengis.referencing.crs.CRSAuthorityFactory file on the classpath.
 That file shall contain the fully qualified class name of above MyCRS class.Errors management
Well-Known Text parsing is performed in two steps, each of them executed at a different time:Early validation
WKT strings added byload(…) or addDefinitions(…) methods are verified
 for matching quotes, balanced parenthesis or brackets, and valid number or date formats.
 If a syntax error is detected, the loading process is interrupted at the point the error occurred;
 CRS definitions after the error location are not loaded.
 However, WKT keywords and geodetic parameters (e.g. map projections) are not validated at this stage.
 Late validation
WKT keywords and geodetic parameters inside WKT elements are validated only whencreateObject(String)
 is invoked. If an error occurs at this stage, only the CRS (or other geodetic object) for the code given to
 the createFoo(…) method become invalid. Objects associated to other codes are not impacted.
 Multi-threading
This class is thread-safe but not necessarily concurrent. This class is designed for a relatively small amount of WKT; it is not a replacement for database-backed factory such asEPSGFactory.- Since:
- 1.1
Defined in the sis-referencing module
- 
Field SummaryFields
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionvoidaddDefinitions(Stream<String> objects) Adds definitions of CRS (or other geodetic objects) from Well-Known Texts.createObject(String code) Returns an arbitrary object from a code.protected StringfetchDefinition(DefaultIdentifier identifier) Fetches the Well-Known Text for a user-specified identifier not found in thisWKTDictionary.Returns the authority or specification that defines the codes recognized by this factory.getAuthorityCodes(Class<? extends IdentifiedObject> type) Returns the set of authority codes for objects of the given type.Returns all namespaces recognized by this factory.getDescriptionText(String code) Gets a description of the object corresponding to a code.voidload(BufferedReader source) Adds to this factory all definitions read from the given source.Methods inherited from class GeodeticAuthorityFactorycreateCartesianCS, createCompoundCRS, createCoordinateOperation, createCoordinateReferenceSystem, createCoordinateSystem, createCoordinateSystemAxis, createCylindricalCS, createDatum, createDerivedCRS, createEllipsoid, createEllipsoidalCS, createEngineeringCRS, createEngineeringDatum, createExtent, createFromCoordinateReferenceSystemCodes, createGeocentricCRS, createGeodeticDatum, createGeographicCRS, createImageCRS, createImageDatum, createOperationMethod, createParameterDescriptor, createParametricCRS, createParametricCS, createParametricDatum, createPolarCS, createPrimeMeridian, createProjectedCRS, createSphericalCS, createTemporalCRS, createTemporalDatum, createTimeCS, createUnit, createVerticalCRS, createVerticalCS, createVerticalDatum, newIdentifiedObjectFinder, toString, trimNamespaceMethods inherited from class AbstractFactorygetVendorMethods inherited from class Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface FactorygetVendor
- 
Field Details- 
parserThe parser to use for creating geodetic objects from WKT definitions. Subclasses can modify theWKTFormatconfiguration in their constructor, but should not use it directly after construction (for thread safety reasons).
 
- 
- 
Constructor Details- 
WKTDictionaryCreates an initially empty factory. The authority can specified explicitly or inferred from the WKTs. In the latter case (when the given authority isnull), an authority will be inferred from allID[…]orAUTHORITY[…]elements found in WKT strings as below, in preference order:- Most frequent CITATION[…]value.
- If there is no citation, then most frequent code space
       in ID[…]orAUTHORITY[…]elements.
 load(BufferedReader)oraddDefinitions(Stream)after construction.- Parameters:
- authority- organization that defines the codes recognized by this factory, or- null.
 
- Most frequent 
 
- 
- 
Method Details- 
loadAdds to this factory all definitions read from the given source. Each Coordinate Reference System (or other geodetic object) is defined by a string in WKT format. The key associated to each object is given by theID[…]orAUTHORITY[…]element, which is typically the last element of a WKT string and is mandatory for definitions in this file.WKT strings can span many lines. All lines after the first line shall be indented with at least one white space. Non-indented lines start new definitions. Blank lines and lines starting with the #character (ignoring white spaces) are ignored.Aliases for WKT fragmentsFiles with more than one WKT definition tend to repeat the same WKT fragments many times. For example, the sameBaseGeogCRS[…]element may be repeated in everyProjectedCRSdefinitions. Redundant fragments can be replaced by aliases for making the file more compact, easier to read, faster to parse and with smaller memory footprint.Each line starting with " SET <identifier>=<WKT>" defines an alias for a fragment of WKT string. The WKT can span many lines as described above. Aliases are local to the file where they are defined. Aliases can be expanded in other WKT strings by "$<identifier>".ValidationThis method verifies that definitions have matching quotes, balanced parenthesis or brackets, and valid number or date formats. It does not verify WKT keywords or geodetic parameters. See class javadoc for more details.ExampleAn example is available here.- Parameters:
- source- the source of WKT definitions.
- Throws:
- FactoryException- if the definition file cannot be read.
 
- 
addDefinitionsAdds definitions of CRS (or other geodetic objects) from Well-Known Texts. Blank strings are ignored. Each non-blankStringshall contain the complete definition of exactly one geodetic object. A geodetic object cannot have its definition splitted in two or moreStrings.The key associated to each object is given by the ID[…]orAUTHORITY[…]element, which is typically the last element of a WKT string and is mandatory. WKT strings can contain line separators for human readability.- Parameters:
- objects- CRS (or other geodetic objects) definitions as WKT strings.
- Throws:
- FactoryException- if a WKT cannot be parsed, or does not contain an- ID[…]or- AUTHORITY[…]element, or if the same- codespace:version:codetuple is used for two objects.
 
- 
fetchDefinitionFetches the Well-Known Text for a user-specified identifier not found in thisWKTDictionary. Subclasses can override this method if WKT strings are not loaded or specified in advance, but instead fetched when first needed. An example of such scenario is WKTs provided by the"spatial_ref_sys"table of a spatial database. If no WKT is found for the given identifier, then this method returnsnull.On input, identifiercontains only the pieces of information provided by user. For example if user invokedcreateGeographicCRS("Foo"), then the identifier code will be"Foo"but the codespace and version will be undefined (null). On output,identifiershould be completed with missing code space and version (if available).OverridingThe default implementation returnsnull. If a subclass overrides this method, then it should also overridegetAuthorityCodes(Class)becauseWKTDictionarydoes not know the codes that this method can recognize.- Parameters:
- identifier- the code specified by user, possible with code space and version.
- Returns:
- Well-Known Text (WKT) for the given identifier, or nullif none.
- Throws:
- FactoryException- if an error occurred while fetching the WKT.
 
- 
getAuthorityReturns the authority or specification that defines the codes recognized by this factory. This is the first of the following values, in preference order:- The authority explicitly specified at construction time.
- A citation built from the most frequent value found in CITATIONelements.
- A citation built from the most frequent value found in IDorAUTHORITYelements.
 - Specified by:
- getAuthorityin interface- AuthorityFactory
- Specified by:
- getAuthorityin class- GeodeticAuthorityFactory
- Returns:
- the organization responsible for CRS definitions, or nullif unknown.
- See Also:
 
- 
getCodeSpacesReturns all namespaces recognized by this factory. Those namespaces can appear before codes in calls tocreateFoo(String)methods, for example"ESRI"in"ESRI:102018". Namespaces are case-insensitive.- Overrides:
- getCodeSpacesin class- GeodeticAuthorityFactory
- Returns:
- the namespaces recognized by this factory.
 
- 
getAuthorityCodespublic Set<String> getAuthorityCodes(Class<? extends IdentifiedObject> type) throws FactoryException Returns the set of authority codes for objects of the given type. Thetypeargument specifies the base type of identified objects.- Parameters:
- type- the spatial reference objects type.
- Returns:
- the set of authority codes for spatial reference objects of the given type.
- Throws:
- FactoryException- if an error occurred while fetching the codes.
 
- 
getDescriptionTextGets a description of the object corresponding to a code.- Specified by:
- getDescriptionTextin interface- AuthorityFactory
- Overrides:
- getDescriptionTextin class- GeodeticAuthorityFactory
- Parameters:
- code- value allocated by authority.
- Returns:
- a description of the object, or nullifnullif none.
- Throws:
- NoSuchAuthorityCodeException- if the specified- codewas not found.
- FactoryException- if the query failed for some other reason.
 
- 
createObjectReturns an arbitrary object from a code.- Specified by:
- createObjectin interface- AuthorityFactory
- Specified by:
- createObjectin class- GeodeticAuthorityFactory
- Parameters:
- code- value allocated by authority.
- Returns:
- the object for the given code.
- Throws:
- NoSuchAuthorityCodeException- if the specified- codewas not found.
- FactoryException- if the object creation failed for some other reason.
- See Also:
 
 
-