public CoordinateTransformationEPSGFactoryTest()
        {
            IDbConnection connection = Global.GetEPSGDatabaseConnection();

            _CTfactory  = new CoordinateTransformationEPSGFactory(connection);
            _CRSfactory = new CoordinateSystemEPSGFactory(connection);
        }
Beispiel #2
0
        public void Test2()
        {
            IDbConnection  connection = Global.GetEPSGDatabaseConnection();
            PrecisionModel pm         = new PrecisionModel(100.0, 0.0, 0.0);
            CoordinateTransformationEPSGFactory CTfactory       = new CoordinateTransformationEPSGFactory(connection);
            ICoordinateTransformation           UKNationalGrid1 = CTfactory.CreateFromTransformationCode("1681");
            GeometryFactory geometryFactory = new GeometryFactory(pm, 4326);

            string wkt = "POINT ( -1 50 )";

            Assertion.AssertEquals("Point 1", true, Compare2(wkt, "POINT (471659.59 11644.49)", geometryFactory, UKNationalGrid1));
        }
Beispiel #3
0
        public void Test1()
        {
            IDbConnection connection = Global.GetEPSGDatabaseConnection();

            _CTfactory       = new CoordinateTransformationEPSGFactory(connection);
            _UKNationalGrid1 = _CTfactory.CreateFromTransformationCode("1681");
            _geometryFactory = new GeometryFactory(_pm, 4326);
            string wkt = "POINT ( -2.0 49.0 )";

            Assertion.AssertEquals("Point 1", true, Compare(wkt, "POINT (400000 -100000)"));

            wkt = "MULTIPOINT( -2 49, -1 50)";
            Assertion.AssertEquals("Multipoint 1", true, Compare(wkt, "MULTIPOINT (400000 -100000, 471660 11644)"));

            wkt = "MULTIPOINT EMPTY";
            Assertion.AssertEquals("Multipoint 2", true, Compare(wkt, "MULTIPOINT EMPTY"));

            wkt = "LINESTRING(50 31, 54 31, 54 29, 50 29, 50 31 )";
            Assertion.AssertEquals("LineString 1 1", true, Compare(wkt, "LINESTRING (5664915 -615242, 6117479 -308294, 6306392 -569639, 5827846 -873669, 5664915 -615242)"));

            wkt = "POLYGON( ( 50 31, 54 31, 54 29, 50 29, 50 31) )";
            Assertion.AssertEquals("Multipoint 3", true, Compare(wkt, "POLYGON ((5664915 -615242, 6117479 -308294, 6306392 -569639, 5827846 -873669, 5664915 -615242))"));


            //wkt = "POLYGON( ( 1 1, 10 1, 10 10, 1 10, 1 1),(4 4, 5 4, 5 5, 4 5, 4 4 ))";
            //Assertion.AssertEquals("Multipoint 4",true,Compare(wkt,"POLYGON ((733898 -5416388, 1744907 -5414055, 1724214 -4397377, 728899 -4420227, 733898 -5416388), "+
            //"(1067192 -5082521, 1178905 -5081633, 1177832 -4970278, 1066275 -4971386, 1067192 -5082521))"));

            // these tests fail because the strings are too long/ have a CR in the middle of the string. Should really fix this. awc.


            //wkt = "MULTILINESTRING (( 10.05  10.28 , 20.95  20.89 ),( 20.95  20.89, 31.92 21.45)) ";
            //Assertion.AssertEquals("Multipoint 5",false,Compare(wkt,"MULTILINESTRING ((1724213.5597264355 -4397376.6478565233, 2839122.2852214454 -3022771.8465291355), \n  "+
            //												"(2839122.2852214454 -3022771.8465291355, 4095081.5366646093 -2776957.6041615554))"));

            //wkt = "MULTIPOLYGON (((10 10, 10 20, 20 20, 20 15 , 10 10), (50 40, 50 50, 60 50, 60 40, 50 40)))";
            //Assertion.AssertEquals("Multipoint 6",true,Compare(wkt,"MULTIPOLYGON (((1724213.5597264355 -4397376.6478565233, 1662268.9948102259 -3270049.5581512651, 2745586.9073599684 -3156174.8212744244, 2817027.1068546474 -3744257.1145197917, 1724213.5597264355 -4397376.6478565233), "+
            //	 "(4882561.4795353347 438327.55639206013, 3970695.8611971624 1430641.0215268317, 4530976.2509158608 2096414.3039089143, 5721871.0214089518 1247465.211354611, 4882561.4795353347 438327.55639206013)))"));

            //wkt = "GEOMETRYCOLLECTION(POINT ( 3 4 ),LINESTRING(50 31, 54 31, 54 29, 50 29, 50 31 ))";
            //Assertion.AssertEquals("Multipoint 7",true,Compare(wkt,"GEOMETRYCOLLECTION (POINT (955682.872367636 -5083270.4404414054),"+
            //											"LINESTRING (-7.5557896002384908 49.766496583001434, -7.555734311078294 49.766499242352, -7.5557322582139372 49.76648133658518, -7.5557875473539609 49.7664786772363, -7.5557896002384908 49.766496583001434))"));
        }
        /// <summary>
        /// Creates a projected coordinate system using the given code.
        /// </summary>
        /// <param name="code">The EPSG code.</param>
        /// <returns>A IProjectedCoordinateSystem object.</returns>
        public IProjectedCoordinateSystem CreateProjectedCoordinateSystem(string code)
        {
            if (code == null)
            {
                throw new ArgumentNullException("code");
            }
            string sqlQuery = "SELECT COORD_REF_SYS_NAME, COORD_REF_SYS_CODE, AREA_OF_USE_CODE, " +
                              "	COORD_REF_SYS_KIND, DATUM_CODE, COORD_SYS_CODE, " +
                              "	SOURCE_GEOGCRS_CODE, PROJECTION_CONV_CODE, CMPD_VERTCRS_CODE, CRS_SCOPE, CMPD_HORIZCRS_CODE, DATA_SOURCE, REMARKS " +
                              "FROM  [Coordinate Reference System] " +
                              "WHERE COORD_REF_SYS_CODE = {0}";


            sqlQuery = String.Format(System.Globalization.CultureInfo.InvariantCulture, sqlQuery, code);
            IDataReader reader = Database.ExecuteQuery(_databaseConnection, sqlQuery);

            if (!reader.Read())
            {
                throw new ArgumentException(String.Format(System.Globalization.CultureInfo.InvariantCulture, "Geographic Coordinate System with a code {0} not found in the CRS table in the EPSG database.", code));
            }


            string coordSysCode        = reader["COORD_SYS_CODE"].ToString().ToLower();
            string coordSysName        = reader["COORD_REF_SYS_NAME"].ToString();
            string name                = reader["COORD_REF_SYS_NAME"].ToString();
            string horizontalDatumCode = reader["DATUM_CODE"].ToString();
            string geographicCRSCode   = reader["SOURCE_GEOGCRS_CODE"].ToString();
            string projectionCode      = reader["PROJECTION_CONV_CODE"].ToString();
            string coordRefKind        = reader["COORD_REF_SYS_KIND"].ToString();
            string remarks             = reader["REMARKS"].ToString();
            string datasource          = reader["DATA_SOURCE"].ToString();    // should always be EPSG??


            Database.CheckOneRow(reader, code, "Geographic CRC code");
            if (coordRefKind.ToLower() != "projected")
            {
                throw new ArgumentException(String.Format(System.Globalization.CultureInfo.InvariantCulture, "CRS code {0} is not a projected coordinate system but a {1}.", code, coordRefKind));
            }

            string           primeMeridianCode = "";
            IPrimeMeridian   primeMeridian     = null;
            IHorizontalDatum horizontalDatum   = null;

            if (horizontalDatumCode != "")
            {
                horizontalDatum   = HorizontalDatum.WGS84;              //this.CreateHorizontalDatum( horizontalDatumCode );
                primeMeridianCode = this.CreatePrimeMeridianCodeFromDatum(horizontalDatumCode);
                primeMeridian     = this.CreatePrimeMeridian(primeMeridianCode);
            }

            // we get the information for the axis
            IAxisInfo[] axisInfos = GetAxisInfo(coordSysCode);

            ICoordinateTransformationAuthorityFactory factory = new CoordinateTransformationEPSGFactory(_databaseConnection);

            ICoordinateTransformation mathtransform = factory.CreateFromCoordinateSystemCodes(geographicCRSCode, "");
            string      methodOperation             = this.GetMethodOperationCodeFromProjectionCode(projectionCode);
            IProjection projection = this.CreateProjection(methodOperation, projectionCode);
            IGeographicCoordinateSystem geographicCoordSystem = this.CreateGeographicCoordinateSystem(geographicCRSCode);
            ILinearUnit linearUnit = LinearUnit.Meters;
            IProjectedCoordinateSystem projectedCoordSys = new ProjectedCoordinateSystem(horizontalDatum, axisInfos, geographicCoordSystem, linearUnit, projection, remarks, datasource, code, coordSysName, "", "");

            return(projectedCoordSys);
        }