E
- the type of tensor element values.public class TensorParameters<E> extends Object implements Serializable
Each group of parameters contains the following elements:
"num_row"
in WKT1 conventions),"num_col"
in WKT1 conventions),num_row
× num_col
× … optional parameters for the matrix or tensor element values.
Parameter names depend on the formatting convention.Parameters are not an efficient storage format for large tensors. Parameters are used only for small matrices/tensors to be specified in coordinate operations or processing libraries. In particular, those parameters integrate well in Well Known Text (WKT) format. For a more efficient matrix storage, see the matrix package.
Using EPSG:9624 names and identifiers | Using OGC names |
---|---|
Parameter["A0", <value>, Id["EPSG", 8623]], Parameter["A1", <value>, Id["EPSG", 8624]], Parameter["A2", <value>, Id["EPSG", 8625]], Parameter["B0", <value>, Id["EPSG", 8639]], Parameter["B1", <value>, Id["EPSG", 8640]], Parameter["B2", <value>, Id["EPSG", 8641]] Note:
the EPSG database contains also A3, A4, A5, A6, A7, A8 and B3 parameters,
but they are for polynomial transformations, not for affine transformations.
|
Parameter["num_row", 3], Parameter["num_col", 3], Parameter["elt_0_0", <value>], Parameter["elt_0_1", <value>], ... Parameter["elt_0_<num_col-1>", <value>], Parameter["elt_1_0", <value>], Parameter["elt_1_1", <value>], ... Parameter["elt_<num_row-1>_<num_col-1>", <value>] |
"elt_row_col"
parameters
depends on the "num_row"
and "num_col"
parameter values. For this reason, the descriptor of
matrix or tensor parameters is not immutable.
WKT1
naming conventions,
one can use the following code:
Map<String,?> properties = Collections.singletonMap(ParameterValueGroup.NAME_KEY, "Affine"); ParameterValueGroup p = TensorParameters.WKT1.createValueGroup(properties);For setting the elements of a few values, then create a matrix from the parameter values:
p.parameter("elt_0_0").setValue(4); // "A0" also accepted as a synonymous of "elt_0_0". p.parameter("elt_1_1").setValue(6); // "B1" also accepted as a synonymous of "elt_1_1". Matrix m = TensorParameters.WKT1.toMatrix(p);
Matrices
,
Serialized FormDefined in the sis-referencing
module
Modifier and Type | Field and Description |
---|---|
static TensorParameters<Double> |
ALPHANUM
Parses and creates matrix parameters with alphanumeric names.
|
protected String |
prefix
The prefix of parameter names for tensor elements.
|
protected String |
separator
The separator between row and column in parameter names for tensor elements.
|
static TensorParameters<Double> |
WKT1
Parses and creates matrix parameters with names matching the
Well Known Text
version 1 (WKT 1) convention.
|
Constructor and Description |
---|
TensorParameters(Class<E> elementType,
String prefix,
String separator,
ParameterDescriptor<Integer>... dimensions)
Constructs a descriptors provider.
|
Modifier and Type | Method and Description |
---|---|
protected ParameterDescriptor<E> |
createElementDescriptor(int[] indices)
Creates a new parameter descriptor for a matrix or tensor element at the given indices.
|
ParameterValueGroup |
createValueGroup(Map<String,?> properties)
Creates a new instance of parameter group with default values of 1 on the diagonal, and 0 everywhere else.
|
ParameterValueGroup |
createValueGroup(Map<String,?> properties,
Matrix matrix)
Creates a new instance of parameter group initialized to the given matrix.
|
boolean |
equals(Object other)
Compares this object with the given object for equality.
|
ParameterDescriptor<?>[] |
getAllDescriptors(int... actualSize)
Returns all parameters in this group for a tensor of the specified dimensions.
|
protected E |
getDefaultValue(int[] indices)
Returns the default value for the parameter descriptor at the given indices.
|
ParameterDescriptor<Integer> |
getDimensionDescriptor(int i)
Returns the parameter descriptor for the dimension at the given index.
|
ParameterDescriptor<E> |
getElementDescriptor(int... indices)
Returns the parameter descriptor for a matrix or tensor element at the given indices.
|
Class<E> |
getElementType()
Returns the type of tensor element values.
|
int |
hashCode()
Returns a hash code value for this object.
|
protected String |
indicesToName(int[] indices)
Returns the parameter descriptor name of a matrix or tensor element at the given indices.
|
protected int[] |
nameToIndices(String name)
Returns the indices of matrix element for the given parameter name, or
null if none. |
int |
rank()
Returns the rank of the tensor objects for which this instance will create parameters.
|
Matrix |
toMatrix(ParameterValueGroup parameters)
Constructs a matrix from a group of parameters.
|
public static final TensorParameters<Double> ALPHANUM
"A"
), followed by a digit indicating the column index (first column is "0"
).
Aliases are the names as they were defined in version 1
of Well Known Text (WKT) format.
Primary name | Alias |
---|---|
┌ ┐ │ A0 A1 A2 │ │ B0 B1 B2 │ │ C0 C1 C2 │ └ ┘ |
┌ ┐ │ elt_0_0 elt_0_1 elt_0_2 │ │ elt_1_0 elt_1_1 elt_1_2 │ │ elt_2_0 elt_2_1 elt_2_2 │ └ ┘ |
ALPHANUM
convention extends the definition to matrices of arbitrary size and accepts
"num_row"
and "num_col"
as optional parameters."C0"
, "C1"
and "C2"
in a 3×3 matrices).TensorParameters
constant can not be named EPSG
.public static final TensorParameters<Double> WKT1
"num_row"
."num_col"
."elt_
row_
col"
.
Those parameters have alias of the form "A0"
, "A1"
, etc. where the letter indicates
the row (first row is "A"
) and the digit is the column index (first column is "0"
)."elt_1_2"
is the element name for the value at row 1 and column 2.
Its alias is "B2"
, which is the EPSG name for the same parameter.protected final String prefix
"elt_"
in WKT 1.protected final String separator
"_"
in WKT 1.@SafeVarargs public TensorParameters(Class<E> elementType, String prefix, String separator, ParameterDescriptor<Integer>... dimensions)
elementType
- the type of tensor element values.prefix
- the prefix to insert in front of parameter name for each tensor elements.separator
- the separator between dimension (row, column, …) indices in parameter names.dimensions
- the parameter for the size of each dimension, usually in an array of length 2.
Length may be different if the caller wants to generalize usage of this class to tensors.public final Class<E> getElementType()
public final int rank()
Rank | Type | Used with |
---|---|---|
0 | scalar | |
1 | vector | |
2 | matrix | Affine parametric transformation |
k | rank k tensor |
public final ParameterDescriptor<Integer> getDimensionDescriptor(int i)
i
- the dimension index, from 0 inclusive to rank()
exclusive.getElementDescriptor(int...)
,
getAllDescriptors(int...)
public final ParameterDescriptor<E> getElementDescriptor(int... indices)
indices
array shall be equals to the rank.
That length is usually 2, where indices[0]
is the row index and indices[1]
is the column index.indices
- the indices of the tensor element for which to get the descriptor.IllegalArgumentException
- if the given array does not have the expected length or have illegal value.getDimensionDescriptor(int)
,
getAllDescriptors(int...)
protected ParameterDescriptor<E> createElementDescriptor(int[] indices) throws IllegalArgumentException
getElementDescriptor(int[])
when a new descriptor needs
to be created.
indicesToName(int[])
method, then creates a descriptor for an optional parameter
of that name. The default value is given by getDefaultValue(int[])
.
indices
- the indices of the tensor element for which to create a parameter.IllegalArgumentException
- if the given array does not have the expected length or have illegal value.indicesToName(int[])
,
getDefaultValue(int[])
protected String indicesToName(int[] indices) throws IllegalArgumentException
nameToIndices(String)
method.
indices
array having a length equals to the rank. That length is usually 2, where indices[0]
is the row index and indices[1]
is
the column index. Then this method builds a name with the “prefix
+ row +
separator
+ column + …” pattern (e.g. "elt_0_0"
).
nameToIndices(String)
for parsing those names.indices
- the indices of the tensor element for which to create a parameter name.IllegalArgumentException
- if the given array does not have the expected length or have illegal value.protected int[] nameToIndices(String name) throws IllegalArgumentException
null
if none.
This method is the converse of indicesToName(int[])
.
prefix
+ row + separator
+
column + …” pattern and returns an array containing the row, column and other
indices, in that order.name
- the parameter name to parse.null
if the name is not recognized.IllegalArgumentException
- if the name has been recognized but an error occurred while parsing it
(e.g. an NumberFormatException
, which is an IllegalArgumentException
subclass).protected E getDefaultValue(int[] indices)
indices
- the indices of the tensor element for which to get the default value.null
if none.DefaultParameterDescriptor.getDefaultValue()
public ParameterDescriptor<?>[] getAllDescriptors(int... actualSize)
getDimensionDescriptor(int)
and getElementDescriptor(int...)
.actualSize
- the matrix (or tensor) dimensions for which to get the parameters.getDimensionDescriptor(int)
,
getElementDescriptor(int...)
public ParameterValueGroup createValueGroup(Map<String,?> properties)
The properties map is given unchanged to the identified object constructor. The following table is a reminder of main (not all) properties:
Property name | Value type | Returned by |
---|---|---|
"name" | ReferenceIdentifier or String |
AbstractIdentifiedObject.getName() |
"alias" | GenericName or CharSequence (optionally as array) |
AbstractIdentifiedObject.getAlias() |
"identifiers" | ReferenceIdentifier (optionally as array) |
AbstractIdentifiedObject.getIdentifiers() |
"remarks" | InternationalString or String |
AbstractIdentifiedObject.getRemarks() |
properties
- the properties to be given to the identified object.public ParameterValueGroup createValueGroup(Map<String,?> properties, Matrix matrix)
properties
- the properties to be given to the identified object.matrix
- the matrix to copy in the new parameter group.toMatrix(ParameterValueGroup)
public Matrix toMatrix(ParameterValueGroup parameters) throws InvalidParameterNameException
parameters
- the group of parameters.InvalidParameterNameException
- if a parameter name was not recognized.createValueGroup(Map, Matrix)
public int hashCode()
Copyright © 2010–2017 The Apache Software Foundation. All rights reserved.