Exemplo n.º 1
0
        private void TworzWektory()
        {
            this.tachimetrTableAdapter.Fill(this.database1DataSet.Tachimetr);
            this.transformacjaTableAdapter.Fill(this.database1DataSet.Transformacja);
            var oblazymut   = new Wspprzyb();
            var obliczenia2 = new Transformacja();

            foreach (DataRow row in database1DataSet.Tachimetr.Rows)
            {
                string stanowisko = (row["Stanowisko"].ToString());
                string cel        = (row["Cel"].ToString());
                var    odl        = Convert.ToDouble(row[5]);
                var    hi         = Convert.ToDouble(row[6]);
                var    hc         = Convert.ToDouble(row[7]);
                var    alfa       = Convert.ToDouble(row[3]);
                var    beta       = Convert.ToDouble(row[4]);

                DataRow celRow = database1DataSet.Transformacja.Where(rowcel => rowcel.Nazwa.Equals(cel)).FirstOrDefault();
                DataRow stRow  = database1DataSet.Transformacja.AsEnumerable().Where(rowst => rowst.Nazwa.Equals(stanowisko)).FirstOrDefault();

                double B  = Convert.ToDouble(stRow["B"]);
                double L  = Convert.ToDouble(stRow["L"]);
                double Bc = Convert.ToDouble(celRow["B"]);
                double Lc = Convert.ToDouble(celRow["L"]);
                var    b  = Properties.Settings.Default.elipsoida_b;
                var    a  = Properties.Settings.Default.elipsoida_a;
                var    f  = Properties.Settings.Default.elipsoida_f;
                double azymut; obliczenia2.Vincenty(B, L, Bc, Lc, a, b, f, out azymut);
                var    Brad  = B * Math.PI / 180;
                var    Lrad  = L * Math.PI / 180;
                double sigma = 0;

                var przyrosty = oblazymut.Oblbiegunowe(0, 0, 0, odl, azymut, 0, 0
                                                       , beta, hi, hc);
                var eta       = (double)stRow["eta"];
                var ksi       = (double)stRow["ksi"];
                var ksirad    = ksi * Math.PI / (180 * 60 * 60);
                var etarad    = eta * Math.PI / (180 * 60 * 60);
                var betaRad   = beta * M.PI / 200;
                var azymutRad = azymut * M.PI / 200;
                var ms        = Properties.Settings.Default.bladdlugosci1 / 1000000 +
                                Properties.Settings.Default.bladdlugosci2 / 1000000 * odl;
                double malfa = Properties.Settings.Default.bladkierunkucc / 10000 * M.PI / 200, mbeta = malfa, mi = Properties.Settings.Default.bladwysantm / 1000000, mj = mi;
                var    mx2 = M.Pow(M.Cos(azymutRad) * M.Sin(azymutRad), 2) * M.Pow(ms, 2) +
                             M.Pow((-M.Sin(azymutRad) * M.Sin(betaRad) * odl), 2) * M.Pow(malfa, 2) +
                             M.Pow(odl * M.Cos(azymutRad) * M.Cos(betaRad), 2) * M.Pow(mbeta, 2);
                var my2 = M.Pow(M.Sin(azymutRad) * M.Sin(azymutRad), 2) * M.Pow(ms, 2) +
                          M.Pow((M.Cos(azymutRad) * M.Sin(betaRad) * odl), 2) * M.Pow(malfa, 2) +
                          M.Pow(odl * M.Sin(azymutRad) * M.Cos(betaRad), 2) * M.Pow(mbeta, 2);
                var mz2 = M.Pow(M.Cos(betaRad), 2) * M.Pow(ms, 2) + M.Pow(odl * -M.Sin(betaRad), 2) * M.Pow(mbeta, 2) + M.Pow(mi, 2) +
                          M.Pow(mj, 2);
                Matrix <double> bledy = DenseMatrix.OfArray(new double[, ]
                {
                    { mx2, 0, 0 },
                    { 0, my2, 0 },
                    { 0, 0, mz2 }
                });


                Matrix <double> xyz = DenseMatrix.OfArray(new double[, ] {
                    { przyrosty.X },
                    { przyrosty.Y },
                    { przyrosty.H }
                });
                Matrix <double> R3 = DenseMatrix.OfArray(new double[, ] {
                    { Math.Cos(sigma), Math.Sin(sigma), 0 },
                    { -Math.Sin(sigma), Math.Cos(sigma), 0 },
                    { 0, 0, 1 }
                });

                Matrix <double> R2 = DenseMatrix.OfArray(new double[, ] {
                    { 1, -etarad * Math.Tan(Brad), -ksirad },
                    { etarad *Math.Tan(Brad), 1, -etarad },
                    { ksirad, etarad, 1 }
                });

                Matrix <double> R13 = DenseMatrix.OfArray(new double[, ]
                {
                    { -Math.Sin(Brad) * Math.Cos(Lrad), -Math.Sin(Brad) * Math.Sin(Lrad), Math.Cos(Brad) },
                    { -Math.Sin(Lrad), Math.Cos(Lrad), 0 },
                    { Math.Cos(Brad) * Math.Cos(Lrad), Math.Cos(Brad) * Math.Sin(Lrad), Math.Sin(Brad) }
                });


                var wynik      = R13.Transpose() * R2.Transpose() * R3.Transpose() * xyz;
                var dlugosc    = Math.Sqrt((Math.Pow(wynik[0, 0], 2) + Math.Pow(wynik[1, 0], 2) + Math.Pow(wynik[2, 0], 2)));
                var obrot1     = R3 * R2 * R13;
                var obrot2     = R13.Transpose() * R2.Transpose() * R3.Transpose();
                var wynikbledy = obrot1 * bledy * obrot2;
                var mx         = M.Sqrt(wynikbledy[0, 0]);
                var my         = M.Sqrt(wynikbledy[1, 1]);
                var mz         = M.Sqrt(wynikbledy[2, 2]);
                wektory2TableAdapter.Insert(stanowisko, cel, wynik[0, 0], wynik[1, 0], wynik[2, 0], "Klasyczne-obl.wekt.", przyrosty.X, przyrosty.Y, przyrosty.H, mx, my, mz, dlugosc);
            }
            foreach (DataRow row in database1DataSet.Wektory.Rows)
            {
                var dlugosc = Math.Sqrt((Math.Pow(Convert.ToDouble(row["DX"]), 2) + Math.Pow(Convert.ToDouble(row["DY"]), 2) + Math.Pow(Convert.ToDouble(row["DZ"]), 2)));
                wektory2TableAdapter.Insert(row["poczatek"].ToString(), row["koniec"].ToString(), Convert.ToDouble(row["DX"]), Convert.ToDouble(row["DY"]), Convert.ToDouble(row["DZ"]), "RTKLib", null, null, null, Convert.ToDouble(row["sdx"]), Convert.ToDouble(row["sdy"]), Convert.ToDouble(row["sdz"]), dlugosc);
            }

            this.wektory2TableAdapter.Fill(this.database1DataSet.Wektory2);
        }
Exemplo n.º 2
0
        void odczyt()
        {
            this.tachimetrTableAdapter.Fill(this.database1DataSet.Tachimetr);
            this.transformacjaTableAdapter.Fill(this.database1DataSet.Transformacja);
            var rtBotworz = new FormOtworzRTB();

            rtBotworz.MdiParent = this.MdiParent;
            rtBotworz.Show();
            var    oblazymut            = new Wspprzyb();
            double azymut               = 0;
            double odczyt_nawiazania    = 0;
            bool   nawiazanie           = false;
            string stanowsikopoprzednie = "";
            bool   czyjuz               = false;
            bool   braknawiazania       = true;
            var    obliczenia           = new Transformacja();
            var    b = Properties.Settings.Default.elipsoida_b;
            var    a = Properties.Settings.Default.elipsoida_a;
            var    f = Properties.Settings.Default.elipsoida_f;
            var    modultransformacji = new Transformacja();
            int    licznik            = 0;

            toolStripProgressBar1.Maximum = database1DataSet.Tachimetr.Rows.Count;
            while (czyjuz != true)
            {
                toolStripProgressBar1.Value = 0;
                czyjuz = true;
                foreach (DataRow row in database1DataSet.Tachimetr.Rows)
                {
                    var stanowisko = row.ItemArray[1].ToString();
                    if (stanowisko != stanowsikopoprzednie)
                    {
                        nawiazanie = false;
                    }
                    var    cel = row.ItemArray[2].ToString();
                    string wynikc, wyniks;
                    bool   celistnieje =
                        database1DataSet.Transformacja.Any(punkt => punkt.Nazwa.Equals(cel));
                    if (celistnieje)
                    {
                        wynikc = "Znany ";
                    }
                    else
                    {
                        wynikc = "Nieznany";
                        czyjuz = false;
                    }
                    bool stanowiskoistnieje =
                        database1DataSet.Transformacja.Any(
                            punkt => punkt.Nazwa.Equals(stanowisko));
                    if (stanowiskoistnieje)
                    {
                        wyniks = "Znany ";
                    }
                    else
                    {
                        wyniks = "Nieznany";
                        czyjuz = false;
                    }
                    string dowyswietlenia = string.Format("stanowisko: {0}  {3}  cel: {1} {2}\n", stanowisko, cel,
                                                          wynikc, wyniks);

                    if (celistnieje && stanowiskoistnieje)
                    {
                        bool    stanowisko3 = database1DataSet.Transformacja.Any(punkt => punkt.Nazwa.Equals(stanowisko));
                        DataRow celRow      =
                            database1DataSet.Transformacja.Where(rowcel => rowcel.Nazwa.Equals(cel)).FirstOrDefault();
                        DataRow stRow =
                            database1DataSet.Transformacja.AsEnumerable()
                            .Where(rowst => rowst.Nazwa == stanowisko)
                            .FirstOrDefault();
                        //tu coś zmienic
                        double sB = Convert.ToDouble(stRow["B"]);
                        double sL = Convert.ToDouble(stRow["L"]);
                        double cB = Convert.ToDouble(celRow["B"]);
                        double cL = Convert.ToDouble(celRow["L"]);
                        obliczenia.Vincenty(sB, sL, cB, cL, a, b, f, out azymut);
                        dowyswietlenia    = dowyswietlenia + "azymut: " + azymut + "\n";
                        nawiazanie        = true;
                        odczyt_nawiazania = Convert.ToDouble(row.ItemArray[3]);
                        braknawiazania    = false;
                    }
                    if (celistnieje == false && stanowiskoistnieje && nawiazanie)
                    {
                        DataRow stRow =
                            database1DataSet.Transformacja.AsEnumerable()
                            .Where(rowst => rowst.Nazwa == stanowisko)
                            .FirstOrDefault();
                        double sx   = Convert.ToDouble(stRow["X"]);
                        double sy   = Convert.ToDouble(stRow["Y"]);
                        double sz   = Convert.ToDouble(stRow["Z"]);
                        var    odl  = Convert.ToDouble(row[5]);
                        var    hi   = Convert.ToDouble(row[6]);
                        var    hc   = Convert.ToDouble(row[7]);
                        var    alfa = Convert.ToDouble(row[3]);
                        var    beta = Convert.ToDouble(row[4]);

                        var przyrosty = oblazymut.Oblbiegunowe(0, 0, 0, odl, alfa, 0, 0
                                                               , beta, hi, hc);
                        var eta = (double)stRow["eta"];
                        var ksi = (double)stRow["ksi"];

                        /*var temp=ksi;
                         * ksi = eta;
                         * eta = temp;*/
                        var ksirad = ksi * Math.PI / (180 * 60 * 60);
                        var etarad = eta * Math.PI / (180 * 60 * 60);



                        double          B    = Convert.ToDouble(stRow["B"]);
                        double          L    = Convert.ToDouble(stRow["L"]);
                        var             Brad = B * Math.PI / 180;
                        var             Lrad = L * Math.PI / 180;
                        Matrix <double> xyz  = DenseMatrix.OfArray(new double[, ] {
                            { przyrosty.X },
                            { przyrosty.Y },
                            { przyrosty.H }
                        });
                        dowyswietlenia += " Odnaleziono punkt " + cel + "\n";
                        var sigma = azymut - odczyt_nawiazania;
                        sigma = sigma * Math.PI / 200;
                        var sigma2 = sigma;
                        //sigma = 0;



                        Matrix <double> R3 = DenseMatrix.OfArray(new double[, ] {
                            { Math.Cos(sigma), Math.Sin(sigma), 0 },
                            { -Math.Sin(sigma), Math.Cos(sigma), 0 },
                            { 0, 0, 1 }
                        });

                        Matrix <double> R2 = DenseMatrix.OfArray(new double[, ] {
                            { 1, -etarad * Math.Tan(Brad), -ksirad },
                            { etarad *Math.Tan(Brad), 1, -etarad },
                            { ksirad, etarad, 1 }
                        });

                        Matrix <double> R13 = DenseMatrix.OfArray(new double[, ]
                        {
                            { -Math.Sin(Brad) * Math.Cos(Lrad), -Math.Sin(Brad) * Math.Sin(Lrad), Math.Cos(Brad) },
                            { -Math.Sin(Lrad), Math.Cos(Lrad), 0 },
                            { Math.Cos(Brad) * Math.Cos(Lrad), Math.Cos(Brad) * Math.Sin(Lrad), Math.Sin(Brad) }
                        });

                        var wynik = R13.Transpose() * R2.Transpose() * R3.Transpose() * xyz;
                        //       wektory2TableAdapter.Insert(stanowisko, cel, wynik[0, 0], wynik[1, 0], wynik[2, 0], "Klasyczne-wsp.przyb.", przyrosty.X, przyrosty.Y, przyrosty.H);

                        var    X = wynik[0, 0] + sx;
                        var    Y = wynik[1, 0] + sy;
                        var    Z = wynik[2, 0] + sz;
                        double fi, lambda, h, xGk, yGk, ksi2, eta2;
                        modultransformacji.Hirvonen(X, Y, Z, a, b, out fi, out lambda, out h);
                        modultransformacji.GaussKruger1(fi, lambda, lambda, out xGk, out yGk);
                        modultransformacji.odczytBL(fi, lambda, out ksi2, out eta2);
                        transformacjaTableAdapter.Insert(cel, X, Y, Z, fi, lambda, h, xGk, yGk, ksi2, eta2, przyrosty.X, przyrosty.Y,
                                                         przyrosty.H);
                    }
                    stanowsikopoprzednie = stanowisko;
                    toolStripProgressBar1.Increment(1);
                    rtBotworz.richTextBox1.AppendText(dowyswietlenia);
                }
                if (braknawiazania)
                {
                    rtBotworz.richTextBox1.AppendText("Brak nawiązania!!");
                    break;
                }
                this.transformacjaTableAdapter.Fill(this.database1DataSet.Transformacja);
                toolStripProgressBar1.Value = 0;
                this.wektory2TableAdapter.Fill(this.database1DataSet.Wektory2);
                oblicz_GK();
            }
        }