/// <summary>
        /// 构建不同的投影变换方法
        /// </summary>
        /// <param name="projection"></param>
        /// <param name="ellipsoid"></param>
        /// <param name="unit"></param>
        /// <returns></returns>
        private static IMathTransform CreateCoordinateOperation(IProjection projection, IEllipsoid ellipsoid, ILinearUnit unit)
        {
            List <ProjectionParameter> parameterList = new List <ProjectionParameter>(projection.NumParameters);

            for (int i = 0; i < projection.NumParameters; i++)
            {
                parameterList.Add(projection.GetParameter(i));
            }

            parameterList.Add(new ProjectionParameter("semi_major", ellipsoid.SemiMajorAxis)); //长轴
            parameterList.Add(new ProjectionParameter("semi_minor", ellipsoid.SemiMinorAxis)); //短轴
            parameterList.Add(new ProjectionParameter("unit", unit.MetersPerUnit));            //单位弧度
            IMathTransform transform = null;

            switch (projection.ClassName.ToLower(CultureInfo.InvariantCulture).Replace(' ', '_'))
            {
            case "mercator":
            case "mercator_1sp":
            case "mercator_2sp":
                //1SP
                transform = new Mercator(parameterList);
                break;

            case "transverse_mercator":
                transform = new TransverseMercator(parameterList);
                break;

            case "gauss_kruger":    //高斯克吕格投影
                transform = new GaussKrugerProjection(parameterList);
                break;

            case "albers":
            case "albers_conic_equal_area":
                transform = new AlbersProjection(parameterList);
                break;

            case "krovak":
                transform = new KrovakProjection(parameterList);
                break;

            case "lambert_conformal_conic":
            case "lambert_conformal_conic_2sp":
            case "lambert_conic_conformal_(2sp)":
                transform = new LambertConformalConic2SP(parameterList);
                break;

            default:
                throw new NotSupportedException(String.Format("Projection {0} is not supported.", projection.ClassName));
            }
            return(transform);
        }
Пример #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="name">Name to give new object.</param>
        /// <param name="wktProjectionClass">Classification string for projection (e.g. "Transverse_Mercator").</param>
        /// <param name="parameters">Parameters to use for projection. A default set of parameters can
        /// be constructed using classification and initialized
        /// using a chain of SetParameter(...) calls.</param>
        /// <returns>A projection.</returns>
        public IProjection CreateProjection(string name, string wktProjectionClass, ProjectionParameter[] parameters)
        {
            if (name == null)
            {
                throw new ArgumentNullException("name");
            }

            ParameterList parameterList = new ParameterList();

            for (int i = 0; i < parameters.Length; i++)
            {
                ProjectionParameter param = parameters[i];
                parameterList.Add(param.Name, param.Value);
            }

            IProjection projection = null;

            switch (wktProjectionClass.ToLower())
            {
            case  "transverse_mercator":
                projection = new TransverseMercatorProjection(parameterList);
                break;

            case "mercator":
                projection = new MercatorProjection(parameterList);
                break;

            case "lambert_conformal_conic_2sp":
                projection = new LambertConformalConic2SPProjection(parameterList);
                break;

            case "albers":
                projection = new AlbersProjection(parameterList);
                break;

            default:
                throw new NotImplementedException(String.Format("The {0} projection is not supported", wktProjectionClass));
            }
            return(projection);
        }
        private static IMathTransform CreateCoordinateOperation(IProjection projection, IEllipsoid ellipsoid)
        {
            List <ProjectionParameter> parameterList = new List <ProjectionParameter>(projection.NumParameters);

            for (int i = 0; i < projection.NumParameters; i++)
            {
                parameterList.Add(projection.GetParameter(i));
            }

            parameterList.Add(new ProjectionParameter("semi_major", ellipsoid.SemiMajorAxis));
            parameterList.Add(new ProjectionParameter("semi_minor", ellipsoid.SemiMinorAxis));

            IMathTransform transform = null;

            switch (projection.ClassName.ToLower())
            {
            case "mercator_1sp":
            case "mercator_2sp":
                //1SP
                transform = new Mercator(parameterList);
                break;

            case "transverse_mercator":
                transform = new TransverseMercator(parameterList);
                break;

            case "albers":
                transform = new AlbersProjection(parameterList);
                break;

            case "lambert_conformal_conic":
            case "lambert_conformal_conic_2sp":
                transform = new LambertConformalConic2SP(parameterList);
                break;

            default:
                throw new NotSupportedException(String.Format("Projection {0} is not supported.", projection.ClassName));
            }
            return(transform);
        }
Пример #4
0
        private static IMathTransform CreateCoordinateOperation(IProjection projection, IEllipsoid ellipsoid, ILinearUnit unit)
        {
            List<ProjectionParameter> parameterList = new List<ProjectionParameter>(projection.NumParameters);
            for (int i = 0; i < projection.NumParameters; i++)
                parameterList.Add(projection.GetParameter(i));

            parameterList.Add(new ProjectionParameter("semi_major", ellipsoid.SemiMajorAxis));
            parameterList.Add(new ProjectionParameter("semi_minor", ellipsoid.SemiMinorAxis));
            parameterList.Add(new ProjectionParameter("unit", unit.MetersPerUnit));
            IMathTransform transform = null;
            switch (projection.ClassName.ToLower(CultureInfo.InvariantCulture).Replace(' ', '_'))
            {
                case "mercator":
                case "mercator_1sp":
                case "mercator_2sp":
                    transform = new Mercator(parameterList);
                    break;
                case "transverse_mercator":
                    transform = new TransverseMercator(parameterList);
                    break;
                case "albers":
                case "albers_conic_equal_area":
                    transform = new AlbersProjection(parameterList);
                    break;
                case "lambert_conformal_conic":
                case "lambert_conformal_conic_2sp":
                case "lambert_conic_conformal_(2sp)":
                    transform = new LambertConformalConic2SP(parameterList);
                    break;
                default:
                    throw new NotSupportedException(String.Format("Projection {0} is not supported.", projection.ClassName));
            }
            return transform;
        }