/// <summary>
        /// Gets the instance with the specified identifier.
        /// </summary>
        /// <param name="identifier">The identifier.</param>
        /// <returns>The instance with the specified identifier.</returns>
        public CoordinateTransformation <CoordinateType> this[String identifier]
        {
            get
            {
                if (identifier == null)
                {
                    return(null);
                }

                CoordinateTransformationData data = this.dataCollection[identifier];

                this.EnsureOperationTypes();

                // TODO: remove condition, once all operations are implemented
                if (data == null || !this.transformationTypes.ContainsKey(data.Method.Code))
                {
                    return(null);
                }

                return(this.CreateTransformation(data));
            }
        }
        /// <summary>
        /// Creates a coordinate transformation.
        /// </summary>
        /// <param name="data">The raw coordinate transformation data.</param>
        /// <returns>The produced coordinate projection.</returns>
        private CoordinateTransformation <CoordinateType> CreateTransformation(CoordinateTransformationData data)
        {
            Object[] arguments = new Object[] { data.Identifier, data.Name, data.Remarks, data.Aliases, data.Parameters, data.Collection, data.Target, data.AreaOfUse };

            return(Activator.CreateInstance(this.transformationTypes[data.Method.Code], arguments) as CoordinateTransformation <CoordinateType>);
        }