コード例 #1
0
ファイル: Osgb36.cs プロジェクト: fossabot/GeoUK
 /// <summary>
 /// Initializes a new instance of the <see cref="Coordinates.Osgb36Cordinates"/> class.
 /// </summary>
 /// <param name="easting">Easting.</param>
 /// <param name="northing">Northing.</param>
 /// <param name="height">Height.</param>
 /// <param name="datum">Datum.</param>
 public Osgb36(double easting, double northing, double height, Osgb36GeoidDatum datum)
     : base(easting, northing, height)
 {
     RegionGeoidDatum = datum;
 }
コード例 #2
0
ファイル: OSTN02Transform.cs プロジェクト: fossabot/GeoUK
        private static Osgb36 Etrs89ToOsgb(EastingNorthing coordinates, double ellipsoidHeight)
        {
            Stream dataStream = GetEmbeddedOSTN02();

            TextReader tr            = new StreamReader(dataStream);
            List <int> recordNumbers = new List <int>();

            string[] records = new string[4];

            //determine record numbers
            int eastIndex  = (int)(coordinates.Easting / 1000.0);
            int northIndex = (int)(coordinates.Northing / 1000.0);

            double x0 = eastIndex * 1000;
            double y0 = northIndex * 1000;

            //work out the four records
            recordNumbers.Add(CalculateRecordNumber(eastIndex, northIndex));
            recordNumbers.Add(CalculateRecordNumber(eastIndex + 1, northIndex));
            recordNumbers.Add(CalculateRecordNumber(eastIndex + 1, northIndex + 1));
            recordNumbers.Add(CalculateRecordNumber(eastIndex, northIndex + 1));

            //get records from the data file
            int recordsFound = 0;

            while (recordsFound < 4)
            {
                string csvRecord = tr.ReadLine();
                for (int index = 0; index < 4; index++)
                {
                    if (csvRecord != null && !csvRecord.StartsWith(recordNumbers[index].ToString().Trim() + ",", StringComparison.Ordinal))
                    {
                        continue;
                    }

                    //don't use add as we need to keep these in same order as record numbers
                    records[index] = csvRecord;
                    recordsFound++;
                }
            }

            //populate the properties
            string[] fields0 = records[0].Split(",".ToCharArray());
            string[] fields1 = records[1].Split(",".ToCharArray());
            string[] fields2 = records[2].Split(",".ToCharArray());
            string[] fields3 = records[3].Split(",".ToCharArray());

            double se0 = System.Convert.ToDouble(fields0[3]);
            double se1 = System.Convert.ToDouble(fields1[3]);
            double se2 = System.Convert.ToDouble(fields2[3]);
            double se3 = System.Convert.ToDouble(fields3[3]);

            double sn0 = System.Convert.ToDouble(fields0[4]);
            double sn1 = System.Convert.ToDouble(fields1[4]);
            double sn2 = System.Convert.ToDouble(fields2[4]);
            double sn3 = System.Convert.ToDouble(fields3[4]);

            double sg0 = System.Convert.ToDouble(fields0[5]);
            double sg1 = System.Convert.ToDouble(fields1[5]);
            double sg2 = System.Convert.ToDouble(fields2[5]);
            double sg3 = System.Convert.ToDouble(fields3[5]);

            double dx = coordinates.Easting - x0;
            double dy = coordinates.Northing - y0;

            double t = dx / 1000.0;
            double u = dy / 1000.0;

            double se = (1 - t) * (1 - u) * se0 + t * (1 - u) * se1 + t * u * se2 + (1 - t) * u * se3;
            double sn = (1 - t) * (1 - u) * sn0 + t * (1 - u) * sn1 + t * u * sn2 + (1 - t) * u * sn3;
            double sg = (1 - t) * (1 - u) * sg0 + t * (1 - u) * sg1 + t * u * sg2 + (1 - t) * u * sg3;

            Osgb36GeoidDatum geoidDatum = (Osgb36GeoidDatum)System.Convert.ToInt32(fields0[6]);

            double easting  = coordinates.Easting + se;
            double northing = coordinates.Northing + sn;
            double height   = ellipsoidHeight - sg;

            return(new Osgb36(easting, northing, height, geoidDatum));
        }
コード例 #3
0
ファイル: Osgb36.cs プロジェクト: fossabot/GeoUK
 /// <summary>
 /// Initializes a new instance of the <see cref="Coordinates.Osgb36Cordinates"/> class.
 /// </summary>
 /// <param name="eastingNorthingCoordinates">Easting northing coordinates.</param>
 /// <param name="datum">Datum.</param>
 public Osgb36(EastingNorthing eastingNorthingCoordinates, Osgb36GeoidDatum datum)
     : base(eastingNorthingCoordinates.Easting, eastingNorthingCoordinates.Northing, eastingNorthingCoordinates.Height)
 {
     RegionGeoidDatum = datum;
 }