From 9585c74111260f988042a90e6ca326b27b62c4d3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=99=88=E5=A2=9E=E8=BE=89?= <3045316072@qq.com>
Date: Wed, 12 Feb 2025 09:34:03 +0800
Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=B8=BB=E7=AA=97=E5=8F=A3?=
=?UTF-8?q?=E5=A4=A7=E5=B0=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../BaseTool/BaseConstVariable.h | 12 +-
GF3_Simulation_GPSNode.xml | 1616 +++++++++++++++++
.../RasterProcessTool.vcxproj | 1 +
.../RasterProcessTool.vcxproj.filters | 3 +
LAMPSARProcessProgram/ToolBoxWidget.cpp | 4 +-
.../RasterMainWidget/RasterMainWidget.cpp | 4 +-
.../RasterMainWidget/RasterMainWidget.ui | 387 ++--
RasterMainWidgetGUI/resource/res.qrc | 14 +
Toolbox/LAMPScatterTool/LAMPScatterTool.h | 3 +
.../OribtModelOperator.cpp | 693 +++++++
.../OribtModelOperator.h | 101 ++
.../QSimulationSARPolynomialOrbitModel.cpp | 73 +
.../QSimulationSARPolynomialOrbitModel.h | 27 +
.../QSimulationSARPolynomialOrbitModel.ui | 120 ++
.../SimulationSARTool/SimulationSARTool.cpp | 26 +-
Toolbox/SimulationSARTool/SimulationSARTool.h | 21 +-
.../SimulationSARTool.vcxproj | 7 +-
.../SimulationSARTool.vcxproj.filters | 18 +
18 files changed, 2941 insertions(+), 189 deletions(-)
create mode 100644 GF3_Simulation_GPSNode.xml
create mode 100644 RasterMainWidgetGUI/resource/res.qrc
create mode 100644 Toolbox/SimulationSARTool/PowerSimulationIncoherent/OribtModelOperator.cpp
create mode 100644 Toolbox/SimulationSARTool/PowerSimulationIncoherent/OribtModelOperator.h
create mode 100644 Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.cpp
create mode 100644 Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.h
create mode 100644 Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.ui
diff --git a/BaseCommonLibrary/BaseTool/BaseConstVariable.h b/BaseCommonLibrary/BaseTool/BaseConstVariable.h
index 0b9ca22..4af5368 100644
--- a/BaseCommonLibrary/BaseTool/BaseConstVariable.h
+++ b/BaseCommonLibrary/BaseTool/BaseConstVariable.h
@@ -141,12 +141,12 @@ struct DemBox {
/*********************************************** FEKO仿真参数 ********************************************************************/
struct SatellitePos {
double time;
- double Px;
- double Py;
- double Pz;
- double Vx;
- double Vy;
- double Vz;
+ double Px ;
+ double Py ;
+ double Pz ;
+ double Vx ;
+ double Vy ;
+ double Vz ;
};
diff --git a/GF3_Simulation_GPSNode.xml b/GF3_Simulation_GPSNode.xml
new file mode 100644
index 0000000..f3b6858
--- /dev/null
+++ b/GF3_Simulation_GPSNode.xml
@@ -0,0 +1,1616 @@
+
+
+
+
+ 2023-06-19 10:08:35.999999
+ -2167079.200000
+ 5252078.800000
+ 4301919.000000
+ 3347.420000
+ -3429.100000
+ 5856.130000
+
+
+ 2023-06-19 10:08:36.999999
+ -2163730.900000
+ 5248646.600000
+ 4307772.800000
+ 3349.290000
+ -3435.330000
+ 5851.380000
+
+
+ 2023-06-19 10:08:38.000000
+ -2160380.600000
+ 5245208.100000
+ 4313621.900000
+ 3351.150000
+ -3441.570000
+ 5846.630000
+
+
+ 2023-06-19 10:08:38.999999
+ -2157028.600000
+ 5241763.500000
+ 4319466.100000
+ 3353.010000
+ -3447.800000
+ 5841.860000
+
+
+ 2023-06-19 10:08:40.000000
+ -2153674.600000
+ 5238312.500000
+ 4325305.600000
+ 3354.870000
+ -3454.020000
+ 5837.100000
+
+
+ 2023-06-19 10:08:41.000000
+ -2150318.800000
+ 5234855.400000
+ 4331140.400000
+ 3356.720000
+ -3460.240000
+ 5832.320000
+
+
+ 2023-06-19 10:08:42.000000
+ -2146961.200000
+ 5231392.000000
+ 4336970.300000
+ 3358.570000
+ -3466.460000
+ 5827.540000
+
+
+ 2023-06-19 10:08:42.999999
+ -2143601.700000
+ 5227922.500000
+ 4342795.500000
+ 3360.410000
+ -3472.680000
+ 5822.760000
+
+
+ 2023-06-19 10:08:44.000000
+ -2140240.300000
+ 5224446.700000
+ 4348615.900000
+ 3362.250000
+ -3478.890000
+ 5817.960000
+
+
+ 2023-06-19 10:08:44.999999
+ -2136877.200000
+ 5220964.700000
+ 4354431.500000
+ 3364.080000
+ -3485.100000
+ 5813.160000
+
+
+ 2023-06-19 10:08:45.999999
+ -2133512.200000
+ 5217476.500000
+ 4360242.300000
+ 3365.910000
+ -3491.300000
+ 5808.360000
+
+
+ 2023-06-19 10:08:46.999999
+ -2130145.400000
+ 5213982.100000
+ 4366048.300000
+ 3367.730000
+ -3497.500000
+ 5803.550000
+
+
+ 2023-06-19 10:08:47.999999
+ -2126776.800000
+ 5210481.500000
+ 4371849.500000
+ 3369.550000
+ -3503.700000
+ 5798.730000
+
+
+ 2023-06-19 10:08:48.999999
+ -2123406.300000
+ 5206974.800000
+ 4377645.900000
+ 3371.370000
+ -3509.900000
+ 5793.900000
+
+
+ 2023-06-19 10:08:49.999999
+ -2120034.000000
+ 5203461.800000
+ 4383437.400000
+ 3373.180000
+ -3516.090000
+ 5789.070000
+
+
+ 2023-06-19 10:08:51.000000
+ -2116660.000000
+ 5199942.600000
+ 4389224.100000
+ 3374.980000
+ -3522.270000
+ 5784.230000
+
+
+ 2023-06-19 10:08:51.999999
+ -2113284.100000
+ 5196417.300000
+ 4395006.000000
+ 3376.790000
+ -3528.460000
+ 5779.390000
+
+
+ 2023-06-19 10:08:53.000000
+ -2109906.400000
+ 5192885.700000
+ 4400783.000000
+ 3378.580000
+ -3534.640000
+ 5774.540000
+
+
+ 2023-06-19 10:08:54.000000
+ -2106526.900000
+ 5189348.000000
+ 4406555.100000
+ 3380.370000
+ -3540.810000
+ 5769.680000
+
+
+ 2023-06-19 10:08:55.000000
+ -2103145.600000
+ 5185804.100000
+ 4412322.300000
+ 3382.160000
+ -3546.980000
+ 5764.820000
+
+
+ 2023-06-19 10:08:56.000000
+ -2099762.600000
+ 5182254.000000
+ 4418084.700000
+ 3383.940000
+ -3553.150000
+ 5759.950000
+
+
+ 2023-06-19 10:08:57.000000
+ -2096377.700000
+ 5178697.700000
+ 4423842.200000
+ 3385.720000
+ -3559.320000
+ 5755.070000
+
+
+ 2023-06-19 10:08:58.000000
+ -2092991.100000
+ 5175135.300000
+ 4429594.800000
+ 3387.490000
+ -3565.480000
+ 5750.190000
+
+
+ 2023-06-19 10:08:59.000000
+ -2089602.700000
+ 5171566.700000
+ 4435342.600000
+ 3389.260000
+ -3571.640000
+ 5745.300000
+
+
+ 2023-06-19 10:09:00.000000
+ -2086212.500000
+ 5167992.000000
+ 4441085.400000
+ 3391.030000
+ -3577.790000
+ 5740.400000
+
+
+ 2023-06-19 10:09:01.000000
+ -2082820.600000
+ 5164411.100000
+ 4446823.400000
+ 3392.790000
+ -3583.940000
+ 5735.500000
+
+
+ 2023-06-19 10:09:01.999999
+ -2079427.000000
+ 5160824.100000
+ 4452556.500000
+ 3394.540000
+ -3590.090000
+ 5730.600000
+
+
+ 2023-06-19 10:09:02.999999
+ -2076031.600000
+ 5157231.000000
+ 4458284.700000
+ 3396.290000
+ -3596.230000
+ 5725.680000
+
+
+ 2023-06-19 10:09:03.999999
+ -2072634.400000
+ 5153631.700000
+ 4464007.900000
+ 3398.040000
+ -3602.370000
+ 5720.760000
+
+
+ 2023-06-19 10:09:05.000000
+ -2069235.500000
+ 5150026.300000
+ 4469726.300000
+ 3399.780000
+ -3608.510000
+ 5715.830000
+
+
+ 2023-06-19 10:09:05.999999
+ -2065834.800000
+ 5146414.700000
+ 4475439.600000
+ 3401.520000
+ -3614.640000
+ 5710.900000
+
+
+ 2023-06-19 10:09:07.000000
+ -2062432.400000
+ 5142797.000000
+ 4481148.100000
+ 3403.250000
+ -3620.770000
+ 5705.960000
+
+
+ 2023-06-19 10:09:07.999999
+ -2059028.300000
+ 5139173.200000
+ 4486851.700000
+ 3404.980000
+ -3626.890000
+ 5701.020000
+
+
+ 2023-06-19 10:09:08.999999
+ -2055622.500000
+ 5135543.200000
+ 4492550.300000
+ 3406.700000
+ -3633.010000
+ 5696.070000
+
+
+ 2023-06-19 10:09:09.999999
+ -2052215.000000
+ 5131907.200000
+ 4498243.900000
+ 3408.420000
+ -3639.130000
+ 5691.110000
+
+
+ 2023-06-19 10:09:10.999999
+ -2048805.700000
+ 5128265.000000
+ 4503932.600000
+ 3410.130000
+ -3645.240000
+ 5686.140000
+
+
+ 2023-06-19 10:09:11.999999
+ -2045394.700000
+ 5124616.700000
+ 4509616.200000
+ 3411.840000
+ -3651.350000
+ 5681.170000
+
+
+ 2023-06-19 10:09:13.000000
+ -2041982.000000
+ 5120962.400000
+ 4515295.000000
+ 3413.540000
+ -3657.460000
+ 5676.200000
+
+
+ 2023-06-19 10:09:13.999999
+ -2038567.700000
+ 5117301.800000
+ 4520968.700000
+ 3415.240000
+ -3663.560000
+ 5671.210000
+
+
+ 2023-06-19 10:09:15.000000
+ -2035151.600000
+ 5113635.300000
+ 4526637.500000
+ 3416.940000
+ -3669.660000
+ 5666.220000
+
+
+ 2023-06-19 10:09:15.999999
+ -2031733.800000
+ 5109962.500000
+ 4532301.200000
+ 3418.630000
+ -3675.750000
+ 5661.230000
+
+
+ 2023-06-19 10:09:17.000000
+ -2028314.300000
+ 5106283.800000
+ 4537960.000000
+ 3420.310000
+ -3681.840000
+ 5656.230000
+
+
+ 2023-06-19 10:09:17.999999
+ -2024893.200000
+ 5102598.900000
+ 4543613.700000
+ 3421.990000
+ -3687.930000
+ 5651.220000
+
+
+ 2023-06-19 10:09:18.999999
+ -2021470.400000
+ 5098908.000000
+ 4549262.500000
+ 3423.670000
+ -3694.010000
+ 5646.200000
+
+
+ 2023-06-19 10:09:19.999999
+ -2018045.900000
+ 5095210.900000
+ 4554906.300000
+ 3425.340000
+ -3700.090000
+ 5641.180000
+
+
+ 2023-06-19 10:09:20.999999
+ -2014619.700000
+ 5091507.800000
+ 4560545.000000
+ 3427.010000
+ -3706.160000
+ 5636.160000
+
+
+ 2023-06-19 10:09:22.000000
+ -2011191.900000
+ 5087798.600000
+ 4566178.700000
+ 3428.670000
+ -3712.240000
+ 5631.130000
+
+
+ 2023-06-19 10:09:22.999999
+ -2007762.400000
+ 5084083.400000
+ 4571807.300000
+ 3430.330000
+ -3718.300000
+ 5626.090000
+
+
+ 2023-06-19 10:09:23.999999
+ -2004331.200000
+ 5080362.100000
+ 4577430.900000
+ 3431.980000
+ -3724.370000
+ 5621.040000
+
+
+ 2023-06-19 10:09:25.000000
+ -2000898.400000
+ 5076634.700000
+ 4583049.500000
+ 3433.630000
+ -3730.430000
+ 5615.990000
+
+
+ 2023-06-19 10:09:26.000000
+ -1997464.000000
+ 5072901.300000
+ 4588663.000000
+ 3435.270000
+ -3736.480000
+ 5610.930000
+
+
+ 2023-06-19 10:09:26.999999
+ -1994027.900000
+ 5069161.800000
+ 4594271.400000
+ 3436.910000
+ -3742.540000
+ 5605.870000
+
+
+ 2023-06-19 10:09:28.000000
+ -1990590.200000
+ 5065416.200000
+ 4599874.700000
+ 3438.550000
+ -3748.580000
+ 5600.800000
+
+
+ 2023-06-19 10:09:29.000000
+ -1987150.800000
+ 5061664.600000
+ 4605473.000000
+ 3440.180000
+ -3754.630000
+ 5595.720000
+
+
+ 2023-06-19 10:09:29.999999
+ -1983709.800000
+ 5057906.900000
+ 4611066.200000
+ 3441.800000
+ -3760.670000
+ 5590.640000
+
+
+ 2023-06-19 10:09:31.000000
+ -1980267.200000
+ 5054143.200000
+ 4616654.300000
+ 3443.420000
+ -3766.710000
+ 5585.550000
+
+
+ 2023-06-19 10:09:32.000000
+ -1976823.000000
+ 5050373.500000
+ 4622237.400000
+ 3445.040000
+ -3772.740000
+ 5580.460000
+
+
+ 2023-06-19 10:09:32.999999
+ -1973377.100000
+ 5046597.700000
+ 4627815.300000
+ 3446.650000
+ -3778.770000
+ 5575.360000
+
+
+ 2023-06-19 10:09:34.000000
+ -1969929.700000
+ 5042816.000000
+ 4633388.100000
+ 3448.260000
+ -3784.790000
+ 5570.250000
+
+
+ 2023-06-19 10:09:34.999999
+ -1966480.600000
+ 5039028.200000
+ 4638955.900000
+ 3449.860000
+ -3790.810000
+ 5565.140000
+
+
+ 2023-06-19 10:09:35.999999
+ -1963030.000000
+ 5035234.400000
+ 4644518.500000
+ 3451.460000
+ -3796.830000
+ 5560.020000
+
+
+ 2023-06-19 10:09:36.999999
+ -1959577.700000
+ 5031434.600000
+ 4650076.000000
+ 3453.050000
+ -3802.840000
+ 5554.890000
+
+
+ 2023-06-19 10:09:37.999999
+ -1956123.900000
+ 5027628.700000
+ 4655628.400000
+ 3454.640000
+ -3808.850000
+ 5549.760000
+
+
+ 2023-06-19 10:09:39.000000
+ -1952668.400000
+ 5023816.900000
+ 4661175.600000
+ 3456.220000
+ -3814.860000
+ 5544.620000
+
+
+ 2023-06-19 10:09:40.000000
+ -1949211.400000
+ 5019999.000000
+ 4666717.700000
+ 3457.800000
+ -3820.860000
+ 5539.480000
+
+
+ 2023-06-19 10:09:40.999999
+ -1945752.800000
+ 5016175.100000
+ 4672254.600000
+ 3459.370000
+ -3826.860000
+ 5534.330000
+
+
+ 2023-06-19 10:09:42.000000
+ -1942292.700000
+ 5012345.300000
+ 4677786.400000
+ 3460.940000
+ -3832.850000
+ 5529.180000
+
+
+ 2023-06-19 10:09:42.999999
+ -1938831.000000
+ 5008509.400000
+ 4683313.000000
+ 3462.510000
+ -3838.840000
+ 5524.010000
+
+
+ 2023-06-19 10:09:44.000000
+ -1935367.700000
+ 5004667.600000
+ 4688834.500000
+ 3464.070000
+ -3844.830000
+ 5518.850000
+
+
+ 2023-06-19 10:09:44.999999
+ -1931902.800000
+ 5000819.800000
+ 4694350.800000
+ 3465.620000
+ -3850.810000
+ 5513.670000
+
+
+ 2023-06-19 10:09:45.999999
+ -1928436.400000
+ 4996966.000000
+ 4699861.900000
+ 3467.170000
+ -3856.780000
+ 5508.490000
+
+
+ 2023-06-19 10:09:46.999999
+ -1924968.500000
+ 4993106.300000
+ 4705367.800000
+ 3468.720000
+ -3862.760000
+ 5503.310000
+
+
+ 2023-06-19 10:09:48.000000
+ -1921499.000000
+ 4989240.500000
+ 4710868.500000
+ 3470.260000
+ -3868.730000
+ 5498.110000
+
+
+ 2023-06-19 10:09:49.000000
+ -1918028.000000
+ 4985368.800000
+ 4716364.000000
+ 3471.790000
+ -3874.690000
+ 5492.920000
+
+
+ 2023-06-19 10:09:50.000000
+ -1914555.400000
+ 4981491.100000
+ 4721854.300000
+ 3473.330000
+ -3880.650000
+ 5487.710000
+
+
+ 2023-06-19 10:09:51.000000
+ -1911081.300000
+ 4977607.400000
+ 4727339.400000
+ 3474.850000
+ -3886.610000
+ 5482.500000
+
+
+ 2023-06-19 10:09:52.000000
+ -1907605.700000
+ 4973717.800000
+ 4732819.400000
+ 3476.380000
+ -3892.560000
+ 5477.290000
+
+
+ 2023-06-19 10:09:52.999999
+ -1904128.500000
+ 4969822.300000
+ 4738294.100000
+ 3477.890000
+ -3898.510000
+ 5472.060000
+
+
+ 2023-06-19 10:09:54.000000
+ -1900649.800000
+ 4965920.800000
+ 4743763.500000
+ 3479.410000
+ -3904.460000
+ 5466.840000
+
+
+ 2023-06-19 10:09:55.000000
+ -1897169.700000
+ 4962013.400000
+ 4749227.800000
+ 3480.920000
+ -3910.400000
+ 5461.600000
+
+
+ 2023-06-19 10:09:55.999999
+ -1893688.000000
+ 4958100.000000
+ 4754686.800000
+ 3482.420000
+ -3916.340000
+ 5456.360000
+
+
+ 2023-06-19 10:09:56.999999
+ -1890204.900000
+ 4954180.700000
+ 4760140.600000
+ 3483.920000
+ -3922.270000
+ 5451.110000
+
+
+ 2023-06-19 10:09:57.999999
+ -1886720.200000
+ 4950255.500000
+ 4765589.100000
+ 3485.410000
+ -3928.200000
+ 5445.860000
+
+
+ 2023-06-19 10:09:58.999999
+ -1883234.100000
+ 4946324.400000
+ 4771032.400000
+ 3486.900000
+ -3934.120000
+ 5440.600000
+
+
+ 2023-06-19 10:09:59.999999
+ -1879746.400000
+ 4942387.300000
+ 4776470.400000
+ 3488.390000
+ -3940.040000
+ 5435.340000
+
+
+ 2023-06-19 10:10:01.000000
+ -1876257.300000
+ 4938444.300000
+ 4781903.100000
+ 3489.870000
+ -3945.960000
+ 5430.070000
+
+
+ 2023-06-19 10:10:02.000000
+ -1872766.700000
+ 4934495.400000
+ 4787330.600000
+ 3491.340000
+ -3951.870000
+ 5424.790000
+
+
+ 2023-06-19 10:10:02.999999
+ -1869274.600000
+ 4930540.500000
+ 4792752.700000
+ 3492.820000
+ -3957.780000
+ 5419.510000
+
+
+ 2023-06-19 10:10:04.000000
+ -1865781.100000
+ 4926579.800000
+ 4798169.600000
+ 3494.280000
+ -3963.690000
+ 5414.220000
+
+
+ 2023-06-19 10:10:04.999999
+ -1862286.100000
+ 4922613.200000
+ 4803581.300000
+ 3495.740000
+ -3969.590000
+ 5408.930000
+
+
+ 2023-06-19 10:10:05.999999
+ -1858789.600000
+ 4918640.700000
+ 4808987.600000
+ 3497.200000
+ -3975.480000
+ 5403.630000
+
+
+ 2023-06-19 10:10:06.999999
+ -1855291.700000
+ 4914662.300000
+ 4814388.600000
+ 3498.650000
+ -3981.370000
+ 5398.320000
+
+
+ 2023-06-19 10:10:07.999999
+ -1851792.300000
+ 4910678.000000
+ 4819784.300000
+ 3500.100000
+ -3987.260000
+ 5393.010000
+
+
+ 2023-06-19 10:10:09.000000
+ -1848291.500000
+ 4906687.800000
+ 4825174.700000
+ 3501.540000
+ -3993.140000
+ 5387.690000
+
+
+ 2023-06-19 10:10:09.999999
+ -1844789.200000
+ 4902691.700000
+ 4830559.700000
+ 3502.980000
+ -3999.020000
+ 5382.370000
+
+
+ 2023-06-19 10:10:11.000000
+ -1841285.500000
+ 4898689.700000
+ 4835939.400000
+ 3504.410000
+ -4004.900000
+ 5377.040000
+
+
+ 2023-06-19 10:10:12.000000
+ -1837780.300000
+ 4894681.900000
+ 4841313.800000
+ 3505.840000
+ -4010.770000
+ 5371.700000
+
+
+ 2023-06-19 10:10:13.000000
+ -1834273.800000
+ 4890668.100000
+ 4846682.800000
+ 3507.270000
+ -4016.640000
+ 5366.360000
+
+
+ 2023-06-19 10:10:14.000000
+ -1830765.800000
+ 4886648.500000
+ 4852046.500000
+ 3508.690000
+ -4022.500000
+ 5361.010000
+
+
+ 2023-06-19 10:10:15.000000
+ -1827256.400000
+ 4882623.100000
+ 4857404.800000
+ 3510.100000
+ -4028.360000
+ 5355.660000
+
+
+ 2023-06-19 10:10:16.000000
+ -1823745.500000
+ 4878591.800000
+ 4862757.800000
+ 3511.510000
+ -4034.210000
+ 5350.300000
+
+
+ 2023-06-19 10:10:17.000000
+ -1820233.300000
+ 4874554.600000
+ 4868105.500000
+ 3512.920000
+ -4040.060000
+ 5344.940000
+
+
+ 2023-06-19 10:10:17.999999
+ -1816719.700000
+ 4870511.600000
+ 4873447.700000
+ 3514.320000
+ -4045.910000
+ 5339.570000
+
+
+ 2023-06-19 10:10:19.000000
+ -1813204.700000
+ 4866462.800000
+ 4878784.600000
+ 3515.710000
+ -4051.750000
+ 5334.190000
+
+
+ 2023-06-19 10:10:20.000000
+ -1809688.200000
+ 4862408.100000
+ 4884116.100000
+ 3517.100000
+ -4057.580000
+ 5328.810000
+
+
+ 2023-06-19 10:10:21.000000
+ -1806170.400000
+ 4858347.600000
+ 4889442.200000
+ 3518.490000
+ -4063.420000
+ 5323.420000
+
+
+ 2023-06-19 10:10:21.999999
+ -1802651.200000
+ 4854281.200000
+ 4894762.900000
+ 3519.870000
+ -4069.250000
+ 5318.020000
+
+
+ 2023-06-19 10:10:23.000000
+ -1799130.700000
+ 4850209.100000
+ 4900078.300000
+ 3521.250000
+ -4075.070000
+ 5312.620000
+
+
+ 2023-06-19 10:10:24.000000
+ -1795608.700000
+ 4846131.100000
+ 4905388.200000
+ 3522.620000
+ -4080.890000
+ 5307.220000
+
+
+ 2023-06-19 10:10:25.000000
+ -1792085.400000
+ 4842047.300000
+ 4910692.700000
+ 3523.990000
+ -4086.710000
+ 5301.800000
+
+
+ 2023-06-19 10:10:25.999999
+ -1788560.700000
+ 4837957.600000
+ 4915991.800000
+ 3525.350000
+ -4092.520000
+ 5296.390000
+
+
+ 2023-06-19 10:10:27.000000
+ -1785034.700000
+ 4833862.200000
+ 4921285.600000
+ 3526.710000
+ -4098.320000
+ 5290.960000
+
+
+ 2023-06-19 10:10:27.999999
+ -1781507.300000
+ 4829761.000000
+ 4926573.800000
+ 3528.060000
+ -4104.130000
+ 5285.530000
+
+
+ 2023-06-19 10:10:29.000000
+ -1777978.500000
+ 4825653.900000
+ 4931856.600000
+ 3529.410000
+ -4109.930000
+ 5280.100000
+
+
+ 2023-06-19 10:10:30.000000
+ -1774448.500000
+ 4821541.100000
+ 4937134.000000
+ 3530.760000
+ -4115.720000
+ 5274.660000
+
+
+ 2023-06-19 10:10:30.999999
+ -1770917.000000
+ 4817422.500000
+ 4942406.000000
+ 3532.100000
+ -4121.510000
+ 5269.210000
+
+
+ 2023-06-19 10:10:32.000000
+ -1767384.200000
+ 4813298.000000
+ 4947672.400000
+ 3533.430000
+ -4127.300000
+ 5263.760000
+
+
+ 2023-06-19 10:10:33.000000
+ -1763850.100000
+ 4809167.900000
+ 4952933.500000
+ 3534.760000
+ -4133.080000
+ 5258.300000
+
+
+ 2023-06-19 10:10:33.999999
+ -1760314.700000
+ 4805031.900000
+ 4958189.100000
+ 3536.090000
+ -4138.850000
+ 5252.830000
+
+
+ 2023-06-19 10:10:34.999999
+ -1756778.000000
+ 4800890.200000
+ 4963439.300000
+ 3537.410000
+ -4144.630000
+ 5247.360000
+
+
+ 2023-06-19 10:10:35.999999
+ -1753239.900000
+ 4796742.700000
+ 4968683.900000
+ 3538.720000
+ -4150.390000
+ 5241.890000
+
+
+ 2023-06-19 10:10:37.000000
+ -1749700.500000
+ 4792589.400000
+ 4973923.100000
+ 3540.030000
+ -4156.160000
+ 5236.410000
+
+
+ 2023-06-19 10:10:38.000000
+ -1746159.800000
+ 4788430.300000
+ 4979156.800000
+ 3541.340000
+ -4161.920000
+ 5230.920000
+
+
+ 2023-06-19 10:10:38.999999
+ -1742617.900000
+ 4784265.600000
+ 4984385.000000
+ 3542.640000
+ -4167.670000
+ 5225.430000
+
+
+ 2023-06-19 10:10:39.999999
+ -1739074.600000
+ 4780095.000000
+ 4989607.700000
+ 3543.940000
+ -4173.420000
+ 5219.930000
+
+
+ 2023-06-19 10:10:41.000000
+ -1735530.000000
+ 4775918.700000
+ 4994824.800000
+ 3545.230000
+ -4179.170000
+ 5214.420000
+
+
+ 2023-06-19 10:10:42.000000
+ -1731984.100000
+ 4771736.600000
+ 5000036.500000
+ 3546.520000
+ -4184.910000
+ 5208.910000
+
+
+ 2023-06-19 10:10:43.000000
+ -1728436.900000
+ 4767548.800000
+ 5005242.600000
+ 3547.800000
+ -4190.650000
+ 5203.400000
+
+
+ 2023-06-19 10:10:44.000000
+ -1724888.500000
+ 4763355.300000
+ 5010443.300000
+ 3549.080000
+ -4196.380000
+ 5197.880000
+
+
+ 2023-06-19 10:10:45.000000
+ -1721338.700000
+ 4759156.000000
+ 5015638.400000
+ 3550.350000
+ -4202.110000
+ 5192.350000
+
+
+ 2023-06-19 10:10:46.000000
+ -1717787.700000
+ 4754951.000000
+ 5020828.000000
+ 3551.620000
+ -4207.830000
+ 5186.810000
+
+
+ 2023-06-19 10:10:47.000000
+ -1714235.400000
+ 4750740.300000
+ 5026012.000000
+ 3552.880000
+ -4213.550000
+ 5181.280000
+
+
+ 2023-06-19 10:10:47.999999
+ -1710681.900000
+ 4746523.800000
+ 5031190.500000
+ 3554.140000
+ -4219.270000
+ 5175.730000
+
+
+ 2023-06-19 10:10:49.000000
+ -1707127.100000
+ 4742301.700000
+ 5036363.400000
+ 3555.400000
+ -4224.980000
+ 5170.180000
+
+
+ 2023-06-19 10:10:50.000000
+ -1703571.100000
+ 4738073.800000
+ 5041530.800000
+ 3556.650000
+ -4230.690000
+ 5164.620000
+
+
+ 2023-06-19 10:10:51.000000
+ -1700013.800000
+ 4733840.200000
+ 5046692.600000
+ 3557.890000
+ -4236.390000
+ 5159.060000
+
+
+ 2023-06-19 10:10:51.999999
+ -1696455.300000
+ 4729601.000000
+ 5051848.900000
+ 3559.130000
+ -4242.090000
+ 5153.500000
+
+
+ 2023-06-19 10:10:52.999999
+ -1692895.500000
+ 4725356.000000
+ 5056999.600000
+ 3560.370000
+ -4247.780000
+ 5147.920000
+
+
+ 2023-06-19 10:10:54.000000
+ -1689334.500000
+ 4721105.300000
+ 5062144.700000
+ 3561.600000
+ -4253.470000
+ 5142.340000
+
+
+ 2023-06-19 10:10:55.000000
+ -1685772.200000
+ 4716849.000000
+ 5067284.300000
+ 3562.820000
+ -4259.150000
+ 5136.760000
+
+
+ 2023-06-19 10:10:56.000000
+ -1682208.800000
+ 4712586.900000
+ 5072418.200000
+ 3564.050000
+ -4264.830000
+ 5131.170000
+
+
+ 2023-06-19 10:10:57.000000
+ -1678644.100000
+ 4708319.200000
+ 5077546.600000
+ 3565.260000
+ -4270.510000
+ 5125.570000
+
+
+ 2023-06-19 10:10:57.999999
+ -1675078.200000
+ 4704045.900000
+ 5082669.400000
+ 3566.470000
+ -4276.180000
+ 5119.970000
+
+
+ 2023-06-19 10:10:58.999999
+ -1671511.100000
+ 4699766.800000
+ 5087786.500000
+ 3567.680000
+ -4281.840000
+ 5114.370000
+
+
+ 2023-06-19 10:10:59.999999
+ -1667942.800000
+ 4695482.100000
+ 5092898.100000
+ 3568.880000
+ -4287.510000
+ 5108.750000
+
+
+ 2023-06-19 10:11:01.000000
+ -1664373.300000
+ 4691191.700000
+ 5098004.000000
+ 3570.080000
+ -4293.160000
+ 5103.140000
+
+
+ 2023-06-19 10:11:02.000000
+ -1660802.600000
+ 4686895.700000
+ 5103104.300000
+ 3571.270000
+ -4298.810000
+ 5097.510000
+
+
+ 2023-06-19 10:11:03.000000
+ -1657230.700000
+ 4682594.000000
+ 5108199.000000
+ 3572.460000
+ -4304.460000
+ 5091.880000
+
+
+ 2023-06-19 10:11:03.999999
+ -1653657.700000
+ 4678286.700000
+ 5113288.100000
+ 3573.650000
+ -4310.110000
+ 5086.250000
+
+
+ 2023-06-19 10:11:05.000000
+ -1650083.400000
+ 4673973.700000
+ 5118371.500000
+ 3574.820000
+ -4315.740000
+ 5080.610000
+
+
+ 2023-06-19 10:11:06.000000
+ -1646508.000000
+ 4669655.100000
+ 5123449.300000
+ 3576.000000
+ -4321.380000
+ 5074.960000
+
+
+ 2023-06-19 10:11:06.999999
+ -1642931.400000
+ 4665330.900000
+ 5128521.400000
+ 3577.170000
+ -4327.010000
+ 5069.310000
+
+
+ 2023-06-19 10:11:07.999999
+ -1639353.600000
+ 4661001.000000
+ 5133587.900000
+ 3578.330000
+ -4332.630000
+ 5063.650000
+
+
+ 2023-06-19 10:11:09.000000
+ -1635774.700000
+ 4656665.600000
+ 5138648.700000
+ 3579.490000
+ -4338.250000
+ 5057.990000
+
+
+ 2023-06-19 10:11:10.000000
+ -1632194.600000
+ 4652324.500000
+ 5143703.800000
+ 3580.650000
+ -4343.870000
+ 5052.320000
+
+
+ 2023-06-19 10:11:11.000000
+ -1628613.300000
+ 4647977.800000
+ 5148753.300000
+ 3581.800000
+ -4349.480000
+ 5046.650000
+
+
+ 2023-06-19 10:11:11.999999
+ -1625031.000000
+ 4643625.500000
+ 5153797.200000
+ 3582.940000
+ -4355.090000
+ 5040.970000
+
+
+ 2023-06-19 10:11:12.999999
+ -1621447.400000
+ 4639267.600000
+ 5158835.300000
+ 3584.080000
+ -4360.690000
+ 5035.280000
+
+
+ 2023-06-19 10:11:14.000000
+ -1617862.800000
+ 4634904.000000
+ 5163867.700000
+ 3585.220000
+ -4366.290000
+ 5029.590000
+
+
+ 2023-06-19 10:11:15.000000
+ -1614277.000000
+ 4630534.900000
+ 5168894.500000
+ 3586.350000
+ -4371.880000
+ 5023.900000
+
+
+ 2023-06-19 10:11:16.000000
+ -1610690.000000
+ 4626160.200000
+ 5173915.500000
+ 3587.480000
+ -4377.470000
+ 5018.190000
+
+
+ 2023-06-19 10:11:16.999999
+ -1607102.000000
+ 4621779.900000
+ 5178930.800000
+ 3588.600000
+ -4383.050000
+ 5012.490000
+
+
+ 2023-06-19 10:11:17.999999
+ -1603512.800000
+ 4617394.100000
+ 5183940.400000
+ 3589.710000
+ -4388.630000
+ 5006.770000
+
+
+ 2023-06-19 10:11:19.000000
+ -1599922.500000
+ 4613002.600000
+ 5188944.400000
+ 3590.830000
+ -4394.210000
+ 5001.060000
+
+
+ 2023-06-19 10:11:20.000000
+ -1596331.100000
+ 4608605.600000
+ 5193942.500000
+ 3591.930000
+ -4399.780000
+ 4995.330000
+
+
+ 2023-06-19 10:11:21.000000
+ -1592738.600000
+ 4604203.000000
+ 5198935.000000
+ 3593.040000
+ -4405.340000
+ 4989.600000
+
+
+ 2023-06-19 10:11:22.000000
+ -1589145.000000
+ 4599794.900000
+ 5203921.700000
+ 3594.140000
+ -4410.900000
+ 4983.870000
+
+
+ 2023-06-19 10:11:23.000000
+ -1585550.300000
+ 4595381.100000
+ 5208902.700000
+ 3595.230000
+ -4416.460000
+ 4978.130000
+
+
+ 2023-06-19 10:11:24.000000
+ -1581954.500000
+ 4590961.900000
+ 5213878.000000
+ 3596.320000
+ -4422.010000
+ 4972.380000
+
+
+ 2023-06-19 10:11:24.999999
+ -1578357.600000
+ 4586537.100000
+ 5218847.500000
+ 3597.400000
+ -4427.550000
+ 4966.630000
+
+
+ 2023-06-19 10:11:25.999999
+ -1574759.700000
+ 4582106.700000
+ 5223811.200000
+ 3598.480000
+ -4433.090000
+ 4960.880000
+
+
+ 2023-06-19 10:11:27.000000
+ -1571160.700000
+ 4577670.800000
+ 5228769.200000
+ 3599.550000
+ -4438.630000
+ 4955.110000
+
+
+ 2023-06-19 10:11:28.000000
+ -1567560.500000
+ 4573229.400000
+ 5233721.400000
+ 3600.620000
+ -4444.160000
+ 4949.350000
+
+
+ 2023-06-19 10:11:29.000000
+ -1563959.400000
+ 4568782.400000
+ 5238667.900000
+ 3601.690000
+ -4449.690000
+ 4943.570000
+
+
+ 2023-06-19 10:11:30.000000
+ -1560357.100000
+ 4564329.900000
+ 5243608.600000
+ 3602.750000
+ -4455.210000
+ 4937.800000
+
+
+ 2023-06-19 10:11:30.999999
+ -1556753.800000
+ 4559871.900000
+ 5248543.500000
+ 3603.800000
+ -4460.730000
+ 4932.010000
+
+
+ 2023-06-19 10:11:31.999999
+ -1553149.500000
+ 4555408.400000
+ 5253472.600000
+ 3604.850000
+ -4466.240000
+ 4926.220000
+
+
+ 2023-06-19 10:11:32.999999
+ -1549544.100000
+ 4550939.400000
+ 5258395.900000
+ 3605.900000
+ -4471.750000
+ 4920.430000
+
+
+ 2023-06-19 10:11:34.000000
+ -1545937.700000
+ 4546464.900000
+ 5263313.400000
+ 3606.940000
+ -4477.260000
+ 4914.630000
+
+
+
diff --git a/LAMPSARProcessProgram/RasterProcessTool.vcxproj b/LAMPSARProcessProgram/RasterProcessTool.vcxproj
index 847e5ff..85f2c20 100644
--- a/LAMPSARProcessProgram/RasterProcessTool.vcxproj
+++ b/LAMPSARProcessProgram/RasterProcessTool.vcxproj
@@ -125,6 +125,7 @@
+
diff --git a/LAMPSARProcessProgram/RasterProcessTool.vcxproj.filters b/LAMPSARProcessProgram/RasterProcessTool.vcxproj.filters
index bef3bd3..99e980b 100644
--- a/LAMPSARProcessProgram/RasterProcessTool.vcxproj.filters
+++ b/LAMPSARProcessProgram/RasterProcessTool.vcxproj.filters
@@ -38,6 +38,9 @@
Source Files
+
+ Resource Files
+
diff --git a/LAMPSARProcessProgram/ToolBoxWidget.cpp b/LAMPSARProcessProgram/ToolBoxWidget.cpp
index 5d349c2..d565631 100644
--- a/LAMPSARProcessProgram/ToolBoxWidget.cpp
+++ b/LAMPSARProcessProgram/ToolBoxWidget.cpp
@@ -75,7 +75,7 @@ void ToolBoxWidget::initToolbox(QString dlltoolPath)
else {
FreeLibrary(hmodel);
qDebug() << "do not find Register function Plugin: " << plugpath;
- return ;
+ continue ;
}
}
else {
@@ -191,7 +191,7 @@ QToolboxTreeWidgetItem::QToolboxTreeWidgetItem(QTreeWidget* IntreeWidgetToolBox,
button->setIcon(icon);
button->setText(toolName);
button->setLayoutDirection(Qt::LeftToRight);
- button->setStyleSheet("QPushButton { text-align: left;font-size: 12px; font-weight: normal; }");
+ button->setStyleSheet("QPushButton { text-align: left; font-weight: blob; }");
IntreeWidgetToolBox->setItemWidget(actionItem, 0, button);
QObject::connect(button, SIGNAL(clicked()), item, SLOT(excute()));
item->setParent(IntreeWidgetToolBox);
diff --git a/RasterMainWidgetGUI/RasterMainWidget/RasterMainWidget.cpp b/RasterMainWidgetGUI/RasterMainWidget/RasterMainWidget.cpp
index b36c743..536a85c 100644
--- a/RasterMainWidgetGUI/RasterMainWidget/RasterMainWidget.cpp
+++ b/RasterMainWidgetGUI/RasterMainWidget/RasterMainWidget.cpp
@@ -98,8 +98,8 @@ RasterMainWidget::setupActions() {
void RasterMainWidget::setupWindow() {
mUi->mapCanvasLayout->addWidget(mMapConvas);
- setFixedSize(size());
- setWindowFlags(windowFlags() & ~Qt::WindowMaximizeButtonHint);
+ //setFixedSize(size());
+ //setWindowFlags(windowFlags() | Qt::WindowMinMaxButtonsHint | Qt::WindowSystemMenuHint);
QObject::connect(mMapConvas, &MapCanvas::zoomChanged, this, &RasterMainWidget::zoomChangedHandle);
QObject::connect(mMapConvas, &MapCanvas::clicked, this, &RasterMainWidget::clickedHandle);
diff --git a/RasterMainWidgetGUI/RasterMainWidget/RasterMainWidget.ui b/RasterMainWidgetGUI/RasterMainWidget/RasterMainWidget.ui
index 0714264..839020e 100644
--- a/RasterMainWidgetGUI/RasterMainWidget/RasterMainWidget.ui
+++ b/RasterMainWidgetGUI/RasterMainWidget/RasterMainWidget.ui
@@ -2,6 +2,9 @@
RasterMainWidget
+
+ Qt::WindowModal
+
true
@@ -9,8 +12,8 @@
0
0
- 810
- 637
+ 906
+ 609
@@ -19,190 +22,187 @@
0
+
+ Qt::StrongFocus
+
- 地图下载器
+ LAMP栅格处理主界面
-
-
-
- 0
- 0
- 1441
- 911
-
-
-
- -
-
-
- 0
-
-
-
- 地图
-
-
-
-
- 0
- 0
- 1241
- 881
-
-
-
-
-
-
-
- 1250
- -1
- 191
- 881
-
-
-
-
-
-
-
-
-
-
-
-
- 10
- 10
- 171
- 611
-
-
-
- 图层列表
-
-
-
-
- 9
- 30
- 151
- 571
-
+
+
-
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+ 0
+
+
+
+ 地图
+
+
+
-
+
+
+ -
+
+
-
+
+
+
+ 0
+ 0
+
-
-
-
-
-
-
+
+
+
+
+
+
+ 10
+ 650
+ 171
+ 221
+
+
+
+
+ 0
+ 0
+
+
+
+ 下载区域
+
+
+
+
+ 10
+ 40
+ 151
+ 31
+
+
+
+
+ 0
+ 0
+
+
+
+ true
+
+
+
+
+
+ 10
+ 80
+ 151
+ 25
+
+
+
+
+ 0
+ 0
+
+
+
+ 点击开始选择左上角点
+
+
+ 选择左上角
+
+
+
+
+
+ 12
+ 140
+ 151
+ 31
+
+
+
+
+ 0
+ 0
+
+
+
+ true
+
+
+
+
+
+ 10
+ 180
+ 151
+ 25
+
+
+
+
+ 0
+ 0
+
+
+
+ 点击开始选择右下角点
+
+
+ 选择右下角
+
+
+
-
-
-
-
- 10
- 650
- 171
- 221
-
-
-
- 下载区域
-
-
-
-
- 10
- 40
- 151
- 31
-
-
-
- true
-
-
-
-
-
- 10
- 80
- 151
- 25
-
-
-
- 点击开始选择左上角点
-
-
- 选择左上角
-
-
-
-
-
- 12
- 140
- 151
- 31
-
-
-
- true
-
-
-
-
-
- 10
- 180
- 151
- 25
-
-
-
- 点击开始选择右下角点
-
-
- 选择右下角
-
-
-
-
+
+
-
-
-
- 任务
-
-
-
-
- 0
- 0
- 1431
- 871
-
-
-
- -
-
-
-
+
+
+ 任务
+
+
+
+
+ 0
+ 0
+ 1431
+ 871
+
+
+
+ -
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+ 0
+ 0
+
+
+
+ 1
+
+
+
+ -
+
+
+ true
+
+
+
+ 0
+ 0
+
+
+
+ 图层列表
+
+
+
-
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
使用教程
diff --git a/RasterMainWidgetGUI/resource/res.qrc b/RasterMainWidgetGUI/resource/res.qrc
new file mode 100644
index 0000000..b65814f
--- /dev/null
+++ b/RasterMainWidgetGUI/resource/res.qrc
@@ -0,0 +1,14 @@
+
+
+ theme/mActionPan.svg
+ theme/mActionRefresh.svg
+ theme/mActionZoomIn.svg
+ theme/mActionZoomOut.svg
+ theme/mActionSelect.svg
+ theme/mActionDownload.svg
+
+
+ plane-red.png
+ plane-black.png
+
+
diff --git a/Toolbox/LAMPScatterTool/LAMPScatterTool.h b/Toolbox/LAMPScatterTool/LAMPScatterTool.h
index b8691ee..1a33424 100644
--- a/Toolbox/LAMPScatterTool/LAMPScatterTool.h
+++ b/Toolbox/LAMPScatterTool/LAMPScatterTool.h
@@ -10,4 +10,7 @@ class ToolBoxWidget;
+
+
+
extern "C" LAMPSCATTERTOOL_EXPORT void RegisterPreToolBox(LAMPMainWidget::RasterMainWidget* mainwindows, ToolBoxWidget* toolbox);
\ No newline at end of file
diff --git a/Toolbox/SimulationSARTool/PowerSimulationIncoherent/OribtModelOperator.cpp b/Toolbox/SimulationSARTool/PowerSimulationIncoherent/OribtModelOperator.cpp
new file mode 100644
index 0000000..a92a48d
--- /dev/null
+++ b/Toolbox/SimulationSARTool/PowerSimulationIncoherent/OribtModelOperator.cpp
@@ -0,0 +1,693 @@
+#include "OribtModelOperator.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+OrbitElements::OrbitElements() : semiMajorAxis(0), eccentricity(0), inclination(0),
+longitudeOfAscendingNode(0), argumentOfPeriapsis(0), trueAnomaly(0) {}
+
+
+/** ģ************************************************************************************/
+
+OrbitEstimator::OrbitEstimator() {}
+
+void OrbitEstimator::estimateOrbit(const SatellitePos& node) {
+ // ݹڵľ㷨
+ elements = estimateKeplerianElements(node);
+}
+
+void OrbitEstimator::saveToXml(const QString& filename) const {
+ QDomDocument doc("OrbitElements");
+ QDomElement root = doc.createElement("OrbitElements");
+ doc.appendChild(root);
+
+ QDomElement elem;
+
+ elem = doc.createElement("SemiMajorAxis");
+ elem.appendChild(doc.createTextNode(QString::number(elements.semiMajorAxis)));
+ root.appendChild(elem);
+
+ elem = doc.createElement("Eccentricity");
+ elem.appendChild(doc.createTextNode(QString::number(elements.eccentricity)));
+ root.appendChild(elem);
+
+ elem = doc.createElement("Inclination");
+ elem.appendChild(doc.createTextNode(QString::number(elements.inclination)));
+ root.appendChild(elem);
+
+ elem = doc.createElement("LongitudeOfAscendingNode");
+ elem.appendChild(doc.createTextNode(QString::number(elements.longitudeOfAscendingNode)));
+ root.appendChild(elem);
+
+ elem = doc.createElement("ArgumentOfPeriapsis");
+ elem.appendChild(doc.createTextNode(QString::number(elements.argumentOfPeriapsis)));
+ root.appendChild(elem);
+
+ elem = doc.createElement("TrueAnomaly");
+ elem.appendChild(doc.createTextNode(QString::number(elements.trueAnomaly)));
+ root.appendChild(elem);
+
+ QFile file(filename);
+ if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
+ qDebug() << "Cannot open file for writing:" << filename;
+ return;
+ }
+ QTextStream out(&file);
+ doc.save(out, 4); // Indent by 4 spaces
+ file.close();
+}
+
+bool OrbitEstimator::loadFromXml(const QString& filename) {
+ QFile file(filename);
+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ qDebug() << "Cannot open file for reading:" << filename;
+ return false;
+ }
+
+ QDomDocument doc;
+ if (!doc.setContent(&file)) {
+ file.close();
+ return false;
+ }
+ file.close();
+
+ QDomElement root = doc.documentElement();
+ QDomNodeList nodeList = root.elementsByTagName("*");
+
+ for (int i = 0; i < nodeList.count(); ++i) {
+ QDomElement element = nodeList.at(i).toElement();
+ if (element.tagName() == "SemiMajorAxis") {
+ elements.semiMajorAxis = element.text().toDouble();
+ }
+ else if (element.tagName() == "Eccentricity") {
+ elements.eccentricity = element.text().toDouble();
+ }
+ else if (element.tagName() == "Inclination") {
+ elements.inclination = element.text().toDouble();
+ }
+ else if (element.tagName() == "LongitudeOfAscendingNode") {
+ elements.longitudeOfAscendingNode = element.text().toDouble();
+ }
+ else if (element.tagName() == "ArgumentOfPeriapsis") {
+ elements.argumentOfPeriapsis = element.text().toDouble();
+ }
+ else if (element.tagName() == "TrueAnomaly") {
+ elements.trueAnomaly = element.text().toDouble();
+ }
+ }
+
+ return true;
+}
+
+SatellitePos OrbitEstimator::calculateNode(double time) const {
+ // ݹڵľ㷨
+ return calculateKeplerianNode(elements, time);
+}
+
+SatellitePos OrbitEstimator::predictNode(double time)
+{
+ return calculateNode(time);
+}
+
+OrbitElements OrbitEstimator::estimateKeplerianElements(const SatellitePos& node) {
+ // ʾؽֵΪ0
+ OrbitElements elements;
+ elements.semiMajorAxis = 0;
+ elements.eccentricity = 0;
+ elements.inclination = 0;
+ elements.longitudeOfAscendingNode = 0;
+ elements.argumentOfPeriapsis = 0;
+ elements.trueAnomaly = 0;
+ return elements;
+}
+
+SatellitePos OrbitEstimator::calculateKeplerianNode(const OrbitElements& elements, double time) const {
+ const double G = 6.67430e-11; // m^3 kg^-1 s^-2
+ const double M_Earth = 5.972e24; // kg
+ const double mu = G * M_Earth; // m^3 s^-2
+
+ double a = elements.semiMajorAxis;
+ double e = elements.eccentricity;
+ double i = elements.inclination;
+ double Omega = elements.longitudeOfAscendingNode;
+ double omega = elements.argumentOfPeriapsis;
+
+ // ƽ˶
+ double n = std::sqrt(mu / (a * a * a));
+
+ // Ӳοʱ̵ʱƽ쳣
+ double t_ref = 0.0; // οʱ̣Ϊ0
+ double M = n * (time - t_ref);
+
+ // շ E - e*sin(E) = M ʹţٵ
+ double E = M; // ʼ²
+ double tolerance = 1e-8;
+ int maxIterations = 100;
+ for (int iter = 0; iter < maxIterations; ++iter) {
+ double f = E - e * std::sin(E) - M;
+ double df = 1 - e * std::cos(E);
+ double delta = f / df;
+ E -= delta;
+ if (std::abs(delta) < tolerance) {
+ break;
+ }
+ }
+
+ // ƫ
+ double sin_nu = std::sqrt(1 - e * e) * std::sin(E) / (1 - e * std::cos(E));
+ double cos_nu = (std::cos(E) - e) / (1 - e * std::cos(E));
+ double nu = std::atan2(sin_nu, cos_nu);
+
+ // 뾶 r
+ double r = a * (1 - e * std::cos(E));
+
+ // λڹƽϵķ
+ double Px_prime = r * std::cos(nu);
+ double Py_prime = r * std::sin(nu);
+
+ // ٶڹƽϵķ
+ double h = std::sqrt(mu * a * (1 - e * e)); // Ƕ
+ double Vx_prime = -(h / r) * std::sin(nu);
+ double Vy_prime = (h / r) * (std::cos(nu) + e);
+
+ // ƽϵתϵ
+ double cos_Omega = std::cos(Omega);
+ double sin_Omega = std::sin(Omega);
+ double cos_omega = std::cos(omega);
+ double sin_omega = std::sin(omega);
+ double cos_i = std::cos(i);
+ double sin_i = std::sin(i);
+
+ double Px = Px_prime * (cos_Omega * cos_omega - sin_Omega * sin_omega * cos_i) +
+ Py_prime * (-cos_Omega * sin_omega - sin_Omega * cos_omega * cos_i);
+ double Py = Px_prime * (sin_Omega * cos_omega + cos_Omega * sin_omega * cos_i) +
+ Py_prime * (-sin_Omega * sin_omega + cos_Omega * cos_omega * cos_i);
+ double Pz = Px_prime * sin_omega * sin_i + Py_prime * cos_omega * sin_i;
+
+ double Vx = Vx_prime * (cos_Omega * cos_omega - sin_Omega * sin_omega * cos_i) +
+ Vy_prime * (-cos_Omega * sin_omega - sin_Omega * cos_omega * cos_i);
+ double Vy = Vx_prime * (sin_Omega * cos_omega + cos_Omega * sin_omega * cos_i) +
+ Vy_prime * (-sin_Omega * sin_omega + cos_Omega * cos_omega * cos_i);
+ double Vz = Vx_prime * sin_omega * sin_i + Vy_prime * cos_omega * sin_i;
+
+ SatellitePos node;
+ node.time = time;
+ node.Px = Px;
+ node.Py = Py;
+ node.Pz = Pz;
+ node.Vx = Vx;
+ node.Vy = Vy;
+ node.Vz = Vz;
+ return node;
+}
+
+double OrbitEstimator::solveKeplerEquation(double M, double e) const {
+ double E = M; // ʼ²
+ double tolerance = 1e-8;
+ int maxIterations = 100;
+ for (int iter = 0; iter < maxIterations; ++iter) {
+ double f = E - e * std::sin(E) - M;
+ double df = 1 - e * std::cos(E);
+ double delta = f / df;
+ E -= delta;
+ if (std::abs(delta) < tolerance) {
+ break;
+ }
+ }
+ return E;
+}
+
+/** ʽģ************************************************************************************/
+
+void PolynomialOrbitModel::fitPolynomial(const QList& nodes, int degree) {
+ QList times;
+ QList positionsX;
+ QList positionsY;
+ QList positionsZ;
+ QList velocitiesX;
+ QList velocitiesY;
+ QList velocitiesZ;
+
+ for (const auto& node : nodes) {
+ times.append(node.time);
+ positionsX.append(node.Px);
+ positionsY.append(node.Py);
+ positionsZ.append(node.Pz);
+ velocitiesX.append(node.Vx);
+ velocitiesY.append(node.Vy);
+ velocitiesZ.append(node.Vz);
+ }
+
+
+
+ coefficientsX = leastSquaresFit(times, positionsX, degree);
+ coefficientsY = leastSquaresFit(times, positionsY, degree);
+ coefficientsZ = leastSquaresFit(times, positionsZ, degree);
+ coefficientsVx = leastSquaresFit(times, velocitiesX, degree);
+ coefficientsVy = leastSquaresFit(times, velocitiesY, degree);
+ coefficientsVz = leastSquaresFit(times, velocitiesZ, degree);
+}
+
+SatellitePos PolynomialOrbitModel::predictPosition(double time) {
+ double Px = 0.0;
+ double Py = 0.0;
+ double Pz = 0.0;
+ double Vx = 0.0;
+ double Vy = 0.0;
+ double Vz = 0.0;
+
+ for (int i = 0; i < coefficientsX.size(); ++i) {
+ Px += coefficientsX(i) * std::pow(time, i);
+ Py += coefficientsY(i) * std::pow(time, i);
+ Pz += coefficientsZ(i) * std::pow(time, i);
+ Vx += coefficientsVx(i) * std::pow(time, i);
+ Vy += coefficientsVy(i) * std::pow(time, i);
+ Vz += coefficientsVz(i) * std::pow(time, i);
+ }
+
+ SatellitePos predictedNode;
+ predictedNode.time = time;
+ predictedNode.Px = Px;
+ predictedNode.Py = Py;
+ predictedNode.Pz = Pz;
+ predictedNode.Vx = Vx;
+ predictedNode.Vy = Vy;
+ predictedNode.Vz = Vz;
+ return predictedNode;
+}
+
+Eigen::VectorXd PolynomialOrbitModel::leastSquaresFit(const QList& x, const QList& y, int degree) {
+ int n = x.size();
+ Eigen::MatrixXd A=Eigen::MatrixXd::Zero(n, degree + 1);
+
+ for (int i = 0; i < n; ++i) {
+ for (int j = 0; j <= degree; ++j) {
+ A(i, j) = std::pow(x[i], j);
+ }
+ }
+
+ Eigen::VectorXd b(y.count());
+
+ for (long i = 0; i < y.count(); i++) {
+ b(i) = y[i];
+ }
+
+
+
+ Eigen::Vector2d coefficients = A.colPivHouseholderQr().solve(b);
+ //Eigen::Vector2d coefficientsVector = Eigen::Vector2d::Zero(degree);
+ //coefficientsVector = coefficients.array();
+ return coefficients;
+}
+
+void PolynomialOrbitModel::saveCoefficientsToXml(QDomElement& parent, const Eigen::VectorXd& coefficients, const QString& tagName) const {
+ QDomDocument doc = parent.ownerDocument();
+ QDomElement coeffElement = doc.createElement(tagName);
+ for (int i = 0; i < coefficients.size(); ++i) {
+ QDomElement valueElement = doc.createElement("Value");
+ valueElement.appendChild(doc.createTextNode(QString::number(coefficients(i))));
+ coeffElement.appendChild(valueElement);
+ }
+ parent.appendChild(coeffElement);
+}
+
+bool PolynomialOrbitModel::loadCoefficientsFromXml(const QDomElement& parent, Eigen::VectorXd& coefficients, const QString& tagName) {
+ QDomNodeList coeffNodes = parent.elementsByTagName(tagName);
+ if (coeffNodes.isEmpty()) {
+ qWarning() << "Tag" << tagName << "not found in XML.";
+ return false;
+ }
+
+ QDomElement coeffElement = coeffNodes.at(0).toElement();
+ QDomNodeList valueNodes = coeffElement.elementsByTagName("Value");
+
+ int size = valueNodes.count();
+ coefficients.resize(size);
+
+ for (int i = 0; i < size; ++i) {
+ QDomElement valueElement = valueNodes.at(i).toElement();
+ coefficients(i) = valueElement.text().toDouble();
+ }
+
+ return true;
+}
+
+void PolynomialOrbitModel::saveToXml(const QString& filename) const {
+ QDomDocument doc("PolynomialOrbitModel");
+ QDomElement root = doc.createElement("PolynomialOrbitModel");
+ doc.appendChild(root);
+
+ saveCoefficientsToXml(root, coefficientsX, "CoefficientsX");
+ saveCoefficientsToXml(root, coefficientsY, "CoefficientsY");
+ saveCoefficientsToXml(root, coefficientsZ, "CoefficientsZ");
+ saveCoefficientsToXml(root, coefficientsVx, "CoefficientsVx");
+ saveCoefficientsToXml(root, coefficientsVy, "CoefficientsVy");
+ saveCoefficientsToXml(root, coefficientsVz, "CoefficientsVz");
+
+ QFile file(filename);
+ if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
+ qDebug() << "Cannot open file for writing:" << filename;
+ return;
+ }
+ QTextStream out(&file);
+ doc.save(out, 4); // Indent by 4 spaces
+ file.close();
+}
+
+bool PolynomialOrbitModel::loadFromXml(const QString& filename) {
+ QFile file(filename);
+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ qDebug() << "Cannot open file for reading:" << filename;
+ return false;
+ }
+
+ QDomDocument doc;
+ if (!doc.setContent(&file)) {
+ file.close();
+ return false;
+ }
+ file.close();
+
+ QDomElement root = doc.documentElement();
+
+ if (!loadCoefficientsFromXml(root, coefficientsX, "CoefficientsX")) return false;
+ if (!loadCoefficientsFromXml(root, coefficientsY, "CoefficientsY")) return false;
+ if (!loadCoefficientsFromXml(root, coefficientsZ, "CoefficientsZ")) return false;
+ if (!loadCoefficientsFromXml(root, coefficientsVx, "CoefficientsVx")) return false;
+ if (!loadCoefficientsFromXml(root, coefficientsVy, "CoefficientsVy")) return false;
+ if (!loadCoefficientsFromXml(root, coefficientsVz, "CoefficientsVz")) return false;
+
+ return true;
+}
+
+SatellitePos PolynomialOrbitModel::predictNode(double time)
+{
+ return predictPosition(time);
+}
+
+
+
+
+/** и************************************************************************************/
+
+TwoLineElements::TwoLineElements() {}
+
+bool TwoLineElements::loadFromTleFile(const QString& filename) {
+ QFile file(filename);
+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ qDebug() << "Cannot open file for reading:" << filename;
+ return false;
+ }
+
+ QTextStream in(&file);
+ line1 = in.readLine().toStdString();
+ line2 = in.readLine().toStdString();
+
+ if (line1.empty() || line2.empty()) {
+ qDebug() << "Invalid TLE data in file:" << filename;
+ return false;
+ }
+
+ file.close();
+
+ parseTleLines();
+ return true;
+}
+
+void TwoLineElements::parseTleLines() {
+ // һ
+ // ʾ1 25544U 98067A 23044.15434167 .00001971 00000-0 39389-4 0 9994
+ // ڶ
+ // ʾ2 25544 51.6416 243.5887 0001672 130.5360 325.0288 15.49472743275958
+
+ // ʵӦҪϸ֤ʹ
+}
+
+double TwoLineElements::meanMotion() const {
+ // ڶе53-63λƽ˶ÿת
+ return std::stod(line2.substr(52, 11));
+}
+
+double TwoLineElements::semiMajorAxis() const {
+ const double G = 6.67430e-11; // m^3 kg^-1 s^-2
+ const double M_Earth = 5.972e24; // kg
+ const double mu = G * M_Earth; // m^3 s^-2
+ double n = meanMotion() * 2 * M_PI / 60; // תΪ/
+ return std::cbrt(mu / (n * n));
+}
+
+double TwoLineElements::eccentricity() const {
+ // ڶе9-16λʣСʡԣ
+ return std::stod("0." + line2.substr(8, 7));
+}
+
+double TwoLineElements::inclination() const {
+ // ڶе20-25λбǣȣ
+ return std::stod(line2.substr(19, 5));
+}
+
+double TwoLineElements::longitudeOfAscendingNode() const {
+ // ڶе34-42λྭȣ
+ return std::stod(line2.substr(33, 9));
+}
+
+double TwoLineElements::argumentOfPeriapsis() const {
+ // ڶе45-52λǽصǣȣ
+ return std::stod(line2.substr(44, 8));
+}
+
+double TwoLineElements::meanAnomaly() const {
+ // ڶе64-72λƽǣȣ
+ return std::stod(line2.substr(63, 9));
+}
+
+double TwoLineElements::revolutionNumberAtEpoch() const {
+ // ڶе64-72λƵش
+ return std::stod(line2.substr(63, 5));
+}
+
+double TwoLineElements::epochTime() const {
+ // һе20-32λԪʱ
+ int year = std::stoi(line1.substr(18, 2)) + 2000;
+ double dayOfYear = std::stod(line1.substr(20, 12));
+ int month = 1, day = 1;
+ while (dayOfYear > 0) {
+ int daysInMonth[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
+ if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
+ daysInMonth[1] = 29;
+ }
+ if (dayOfYear <= daysInMonth[month - 1]) {
+ day = static_cast(dayOfYear);
+ break;
+ }
+ dayOfYear -= daysInMonth[month - 1];
+ month++;
+ }
+ QDate date(year, month, day);
+ QTime time(0, 0, 0);
+ QDateTime dateTime(date, time);
+ return dateTime.toSecsSinceEpoch() + (dayOfYear - day) * 86400;
+}
+
+SatellitePos TwoLineElements::calculateNode(double time) const {
+ return calculateKeplerianNode(time);
+}
+
+SatellitePos TwoLineElements::predictNode(double time)
+{
+ return calculateNode(time);
+}
+
+SatellitePos TwoLineElements::calculateKeplerianNode(double time) const {
+ const double G = 6.67430e-11; // m^3 kg^-1 s^-2
+ const double M_Earth = 5.972e24; // kg
+ const double mu = G * M_Earth; // m^3 s^-2
+
+ double a = semiMajorAxis();
+ double e = eccentricity();
+ double i = inclination() * M_PI / 180.0;
+ double Omega = longitudeOfAscendingNode() * M_PI / 180.0;
+ double omega = argumentOfPeriapsis() * M_PI / 180.0;
+ double M0 = meanAnomaly() * M_PI / 180.0;
+
+ // ƽ˶
+ double n = std::sqrt(mu / (a * a * a));
+
+ // Ӳοʱ̵ʱƽ쳣
+ double t_ref = epochTime(); // οʱ
+ double M = M0 + n * (time - t_ref);
+
+ // շ E - e*sin(E) = M ʹţٵ
+ double E = solveKeplerEquation(M, e);
+
+ // ƫ
+ double sin_nu = std::sqrt(1 - e * e) * std::sin(E) / (1 - e * std::cos(E));
+ double cos_nu = (std::cos(E) - e) / (1 - e * std::cos(E));
+ double nu = std::atan2(sin_nu, cos_nu);
+
+ // 뾶 r
+ double r = a * (1 - e * std::cos(E));
+
+ // λڹƽϵķ
+ double Px_prime = r * std::cos(nu);
+ double Py_prime = r * std::sin(nu);
+
+ // ٶڹƽϵķ
+ double h = std::sqrt(mu * a * (1 - e * e)); // Ƕ
+ double Vx_prime = -(h / r) * std::sin(nu);
+ double Vy_prime = (h / r) * (std::cos(nu) + e);
+
+ // ƽϵתϵ
+ double cos_Omega = std::cos(Omega);
+ double sin_Omega = std::sin(Omega);
+ double cos_omega = std::cos(omega);
+ double sin_omega = std::sin(omega);
+ double cos_i = std::cos(i);
+ double sin_i = std::sin(i);
+
+ double Px = Px_prime * (cos_Omega * cos_omega - sin_Omega * sin_omega * cos_i) +
+ Py_prime * (-cos_Omega * sin_omega - sin_Omega * cos_omega * cos_i);
+ double Py = Px_prime * (sin_Omega * cos_omega + cos_Omega * sin_omega * cos_i) +
+ Py_prime * (-sin_Omega * sin_omega + cos_Omega * cos_omega * cos_i);
+ double Pz = Px_prime * sin_omega * sin_i + Py_prime * cos_omega * sin_i;
+
+ double Vx = Vx_prime * (cos_Omega * cos_omega - sin_Omega * sin_omega * cos_i) +
+ Vy_prime * (-cos_Omega * sin_omega - sin_Omega * cos_omega * cos_i);
+ double Vy = Vx_prime * (sin_Omega * cos_omega + cos_Omega * sin_omega * cos_i) +
+ Vy_prime * (-sin_Omega * sin_omega + cos_Omega * cos_omega * cos_i);
+ double Vz = Vx_prime * sin_omega * sin_i + Vy_prime * cos_omega * sin_i;
+
+ SatellitePos node;
+ node.time = time;
+ node.Px = Px;
+ node.Py = Py;
+ node.Pz = Pz;
+ node.Vx = Vx;
+ node.Vy = Vy;
+ node.Vz = Vz;
+ return node;
+}
+
+double TwoLineElements::solveKeplerEquation(double M, double e) const {
+ double E = M; // ʼ²
+ double tolerance = 1e-8;
+ int maxIterations = 100;
+ for (int iter = 0; iter < maxIterations; ++iter) {
+ double f = E - e * std::sin(E) - M;
+ double df = 1 - e * std::cos(E);
+ double delta = f / df;
+ E -= delta;
+ if (std::abs(delta) < tolerance) {
+ break;
+ }
+ }
+ return E;
+}
+
+
+
+
+/** ڵļд************************************************************************************/
+
+QList loadNodesFromXml(const QString& filename) {
+ QFile file(filename);
+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ qDebug() << "Cannot open file for reading:" << filename;
+ return {};
+ }
+
+ QDomDocument doc;
+ if (!doc.setContent(&file)) {
+ file.close();
+ return {};
+ }
+ file.close();
+
+ QDomElement root = doc.documentElement();
+ QDomNodeList gpsParamNodes = root.elementsByTagName("GPSParam");
+
+ QList loadedNodes;
+
+ for (int i = 0; i < gpsParamNodes.count(); ++i) {
+ QDomElement paramElement = gpsParamNodes.at(i).toElement();
+
+ SatellitePos node;
+ node.time = paramElement.firstChildElement("TimeStamp").text().toDouble();
+ node.Px = paramElement.firstChildElement("xPosition").text().toDouble();
+ node.Py = paramElement.firstChildElement("yPosition").text().toDouble();
+ node.Pz = paramElement.firstChildElement("zPosition").text().toDouble();
+ node.Vx = paramElement.firstChildElement("xVelocity").text().toDouble();
+ node.Vy = paramElement.firstChildElement("yVelocity").text().toDouble();
+ node.Vz = paramElement.firstChildElement("zVelocity").text().toDouble();
+
+ loadedNodes.append(node);
+ }
+
+ return loadedNodes;
+}
+
+void saveNodesToXml(const QString& filename, const QList& inposes) {
+ QDomDocument doc("GPSData");
+ QDomElement root = doc.createElement("GPS");
+ doc.appendChild(root);
+
+ for (const auto& node : inposes) {
+ QDomElement paramElement = doc.createElement("GPSParam");
+
+ QDomElement timeStampElement = doc.createElement("TimeStamp");
+ timeStampElement.appendChild(doc.createTextNode(QString::number(node.time)));
+ paramElement.appendChild(timeStampElement);
+
+ QDomElement xPositionElement = doc.createElement("xPosition");
+ xPositionElement.appendChild(doc.createTextNode(QString::number(node.Px)));
+ paramElement.appendChild(xPositionElement);
+
+ QDomElement yPositionElement = doc.createElement("yPosition");
+ yPositionElement.appendChild(doc.createTextNode(QString::number(node.Py)));
+ paramElement.appendChild(yPositionElement);
+
+ QDomElement zPositionElement = doc.createElement("zPosition");
+ zPositionElement.appendChild(doc.createTextNode(QString::number(node.Pz)));
+ paramElement.appendChild(zPositionElement);
+
+ QDomElement xVelocityElement = doc.createElement("xVelocity");
+ xVelocityElement.appendChild(doc.createTextNode(QString::number(node.Vx)));
+ paramElement.appendChild(xVelocityElement);
+
+ QDomElement yVelocityElement = doc.createElement("yVelocity");
+ yVelocityElement.appendChild(doc.createTextNode(QString::number(node.Vy)));
+ paramElement.appendChild(yVelocityElement);
+
+ QDomElement zVelocityElement = doc.createElement("zVelocity");
+ zVelocityElement.appendChild(doc.createTextNode(QString::number(node.Vz)));
+ paramElement.appendChild(zVelocityElement);
+
+ root.appendChild(paramElement);
+ }
+
+ QFile file(filename);
+ if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
+ qDebug() << "Cannot open file for writing:" << filename;
+ return;
+ }
+ QTextStream out(&file);
+ doc.save(out, 4); // Indent by 4 spaces
+ file.close();
+}
+
+OrbitModelAbstract::OrbitModelAbstract()
+{
+}
+
+OrbitModelAbstract::~OrbitModelAbstract()
+{
+}
+
+SatellitePos OrbitModelAbstract::predictNode(double time)
+{
+ return SatellitePos();
+}
diff --git a/Toolbox/SimulationSARTool/PowerSimulationIncoherent/OribtModelOperator.h b/Toolbox/SimulationSARTool/PowerSimulationIncoherent/OribtModelOperator.h
new file mode 100644
index 0000000..0008250
--- /dev/null
+++ b/Toolbox/SimulationSARTool/PowerSimulationIncoherent/OribtModelOperator.h
@@ -0,0 +1,101 @@
+#ifndef ORIBTMODELOPERATOR_H_
+#define ORIBTMODELOPERATOR_H_
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include "BaseConstVariable.h"
+
+QList loadNodesFromXml(const QString& filename);
+void saveNodesToXml(const QString& filename, const QList& inposes);
+
+
+
+class OrbitModelAbstract {
+public:
+ OrbitModelAbstract();
+ ~OrbitModelAbstract();
+public:
+ virtual SatellitePos predictNode(double time) ;
+};
+
+
+
+class OrbitElements {
+public:
+ double semiMajorAxis; // 볤 (a)
+ double eccentricity; // (e)
+ double inclination; // б (i)
+ double longitudeOfAscendingNode; // ྭ ()
+ double argumentOfPeriapsis; // ص ()
+ double trueAnomaly; // ()
+
+ OrbitElements();
+};
+
+class OrbitEstimator :public OrbitModelAbstract {
+public:
+ OrbitEstimator();
+ void estimateOrbit(const SatellitePos& node);
+ void saveToXml(const QString& filename) const;
+ bool loadFromXml(const QString& filename);
+ SatellitePos calculateNode(double time) const;
+ virtual SatellitePos predictNode(double time) override;
+private:
+ OrbitElements elements;
+ OrbitElements estimateKeplerianElements(const SatellitePos& node);
+ SatellitePos calculateKeplerianNode(const OrbitElements& elements, double time) const;
+ double solveKeplerEquation(double M, double e) const;
+};
+
+class PolynomialOrbitModel :public OrbitModelAbstract {
+public:
+ void fitPolynomial(const QList& nodes, int degree=3);
+ SatellitePos predictPosition(double time);
+ void saveToXml(const QString& filename) const;
+ bool loadFromXml(const QString& filename);
+ virtual SatellitePos predictNode(double time) override;
+private:
+ Eigen::VectorXd coefficientsX;
+ Eigen::VectorXd coefficientsY;
+ Eigen::VectorXd coefficientsZ;
+ Eigen::VectorXd coefficientsVx;
+ Eigen::VectorXd coefficientsVy;
+ Eigen::VectorXd coefficientsVz;
+
+ Eigen::VectorXd leastSquaresFit(const QList& x, const QList& y, int degree);
+ void saveCoefficientsToXml(QDomElement& parent, const Eigen::VectorXd& coefficients, const QString& tagName) const;
+ bool loadCoefficientsFromXml(const QDomElement& parent, Eigen::VectorXd& coefficients, const QString& tagName);
+};
+
+
+
+
+class TwoLineElements :public OrbitModelAbstract {
+public:
+ TwoLineElements();
+ bool loadFromTleFile(const QString& filename);
+ SatellitePos calculateNode(double time) const;
+ virtual SatellitePos predictNode(double time) override;
+private:
+ std::string line1;
+ std::string line2;
+
+ void parseTleLines();
+ double meanMotion() const;
+ double semiMajorAxis() const;
+ double eccentricity() const;
+ double inclination() const;
+ double longitudeOfAscendingNode() const;
+ double argumentOfPeriapsis() const;
+ double meanAnomaly() const;
+ double revolutionNumberAtEpoch() const;
+ double epochTime() const;
+ double solveKeplerEquation(double M, double e) const;
+ SatellitePos calculateKeplerianNode(double time) const;
+};
+
+#endif
\ No newline at end of file
diff --git a/Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.cpp b/Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.cpp
new file mode 100644
index 0000000..a5d3f6e
--- /dev/null
+++ b/Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.cpp
@@ -0,0 +1,73 @@
+
+
+#include "QSimulationSARPolynomialOrbitModel.h"
+#include "ui_QSimulationSARPolynomialOrbitModel.h"
+#include
+#include "OribtModelOperator.h"
+
+QSimulationPolynomialSAROrbitModel::QSimulationPolynomialSAROrbitModel(QWidget *parent)
+ : QDialog(parent),ui(new Ui::QSimulationSARPolynomialOrbitModelClass)
+{
+ ui->setupUi(this);
+ connect(ui->pushButtongpxml, SIGNAL(clicked(bool)), this, SLOT(onpushButtongpxmlClicked(bool)));
+ connect(ui->pushButtonOrbitModel, SIGNAL(clicked(bool)), this, SLOT(onpushButtonOrbitModelClicked(bool)));
+ connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(onbtnaccepted()));
+ connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(onbtnrejected()));
+}
+
+QSimulationPolynomialSAROrbitModel::~QSimulationPolynomialSAROrbitModel()
+{}
+
+void QSimulationPolynomialSAROrbitModel::onpushButtongpxmlClicked(bool)
+{
+ // ļѡԻѡһ .tif ļ
+ QString fileName = QFileDialog::getOpenFileName(this,
+ u8"GPS xml", // Ի
+ "", // ʼĿ¼Ϊ·
+ u8"xml Files (*.xml)"); // ļ
+
+ if (!fileName.isEmpty()) {
+ this->ui->gpsXmlPathEdit->setText(fileName);
+ }
+ else {
+ QMessageBox::information(this, u8"ûѡļ", u8"ûѡκļ");
+ }
+}
+void QSimulationPolynomialSAROrbitModel::onpushButtonOrbitModelClicked(bool)
+{
+ // ļѡԻѡһ .tif ļ
+ QString fileName = QFileDialog::getSaveFileName(this,
+ u8"Polynomial GPS Model xml", // Ի
+ "", // ʼĿ¼Ϊ·
+ u8"xml Files (*.xml)"); // ļ
+
+ if (!fileName.isEmpty()) {
+ this->ui->gpsXmlPathEdit->setText(fileName);
+ }
+ else {
+ QMessageBox::information(this, u8"ûѡļ", u8"ûѡκļ");
+ }
+}
+
+void QSimulationPolynomialSAROrbitModel::onbtnaccepted()
+{
+ QString gpsxmlpath = this->ui->gpsXmlPathEdit->text();
+ QString outmodelpath = this->ui->modelxmlPathEdit->text();
+ qDebug() << "Input GPS Xml:\t" << gpsxmlpath;
+ qDebug() << "out Model Xml:\t" << outmodelpath;
+
+ PolynomialOrbitModel model;
+ QList sateposes = loadNodesFromXml(gpsxmlpath);
+ model.fitPolynomial(sateposes);
+ model.saveToXml(outmodelpath);
+ qDebug() << "PolynomialSAROrbitModel fit finished!!";
+ QMessageBox::information(this, u8"Ϣ", u8"ģϳɹ");
+}
+
+void QSimulationPolynomialSAROrbitModel::onbtnrejected()
+{
+ this->close();
+}
+
+
+
diff --git a/Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.h b/Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.h
new file mode 100644
index 0000000..0d628a4
--- /dev/null
+++ b/Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.h
@@ -0,0 +1,27 @@
+#pragma once
+#include "SimulationSARToolAPI.h"
+#include "QToolAbstract.h"
+#include
+
+namespace Ui {
+ class QSimulationSARPolynomialOrbitModelClass;
+}
+
+
+class SIMULATIONSARTOOLAPI_EXPORT QSimulationPolynomialSAROrbitModel : public QDialog
+{
+ Q_OBJECT
+
+public:
+ QSimulationPolynomialSAROrbitModel(QWidget *parent = nullptr);
+ ~QSimulationPolynomialSAROrbitModel();
+
+public slots:
+ void onpushButtongpxmlClicked(bool);
+ void onpushButtonOrbitModelClicked(bool);
+ void onbtnaccepted();
+ void onbtnrejected();
+private:
+ Ui::QSimulationSARPolynomialOrbitModelClass* ui;
+
+};
diff --git a/Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.ui b/Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.ui
new file mode 100644
index 0000000..549ee21
--- /dev/null
+++ b/Toolbox/SimulationSARTool/PowerSimulationIncoherent/QSimulationSARPolynomialOrbitModel.ui
@@ -0,0 +1,120 @@
+
+
+ QSimulationSARPolynomialOrbitModelClass
+
+
+
+ 0
+ 0
+ 600
+ 170
+
+
+
+ 多项式轨道模型
+
+
+ -
+
+
+
+ 0
+ 30
+
+
+
+ 多项式轨道模型参数:
+
+
+
+ -
+
+
+
+ 0
+ 30
+
+
+
+ 选择
+
+
+
+ -
+
+
+
+ 0
+ 30
+
+
+
+ 选择
+
+
+
+ -
+
+
+
+ 0
+ 30
+
+
+
+ D:/Programme/vs2022/RasterMergeTest/simulationData/GF3_Simulation_GPSNode.xml
+
+
+
+ -
+
+
+
+ 0
+ 30
+
+
+
+ D:/Programme/vs2022/RasterMergeTest/simulationData/demdataset/demxyz.bin
+
+
+
+ -
+
+
+
+ 0
+ 30
+
+
+
+ GPS xml 地址:
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+ -
+
+
+ QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+
+
+
+
+
+
+
+
+
diff --git a/Toolbox/SimulationSARTool/SimulationSARTool.cpp b/Toolbox/SimulationSARTool/SimulationSARTool.cpp
index 2b498ca..3878fa5 100644
--- a/Toolbox/SimulationSARTool/SimulationSARTool.cpp
+++ b/Toolbox/SimulationSARTool/SimulationSARTool.cpp
@@ -2,6 +2,7 @@
#include "LAMPMainWidget.h"
#include "RasterMainWidget.h"
#include "ToolBoxWidget.h"
+#include "QSimulationSARPolynomialOrbitModel.h"
SARSimlulationRFPCToolButton::SARSimlulationRFPCToolButton(QWidget* parent)
{
@@ -42,16 +43,35 @@ void SARSimulationTBPImageToolButton::excute()
+
+QSimulationSAROrbitModelToolButton::QSimulationSAROrbitModelToolButton(QWidget* parent)
+{
+ this->toolPath = QVector(0);
+ this->toolPath.push_back(u8"湤߿");
+ this->toolname = QString(u8"");
+}
+
+QSimulationSAROrbitModelToolButton::~QSimulationSAROrbitModelToolButton()
+{
+}
+void QSimulationSAROrbitModelToolButton::excute()
+{
+ QSimulationPolynomialSAROrbitModel* dialog = new QSimulationPolynomialSAROrbitModel;
+ dialog->show();
+}
+
+
+
void RegisterPreToolBox(LAMPMainWidget::RasterMainWidget* mainwindows, ToolBoxWidget* toolbox)
{
SARSimlulationRFPCToolButton* items6 = new SARSimlulationRFPCToolButton(toolbox);
SARSimulationTBPImageToolButton* items7 = new SARSimulationTBPImageToolButton(toolbox);
-
+ QSimulationSAROrbitModelToolButton* items8 = new QSimulationSAROrbitModelToolButton(toolbox);
emit toolbox->addBoxToolItemSIGNAL(items6);
emit toolbox->addBoxToolItemSIGNAL(items7);
-
+ emit toolbox->addBoxToolItemSIGNAL(items8);
-}
+}
\ No newline at end of file
diff --git a/Toolbox/SimulationSARTool/SimulationSARTool.h b/Toolbox/SimulationSARTool/SimulationSARTool.h
index c26171a..8b1cca4 100644
--- a/Toolbox/SimulationSARTool/SimulationSARTool.h
+++ b/Toolbox/SimulationSARTool/SimulationSARTool.h
@@ -14,6 +14,15 @@ class ToolBoxWidget;
+class SIMULATIONSARTOOL_EXPORT SARSimlulationRFPCToolButton : public QToolAbstract {
+ Q_OBJECT
+public:
+ SARSimlulationRFPCToolButton(QWidget* parent = nullptr);
+ ~SARSimlulationRFPCToolButton();
+public slots:
+ virtual void excute() override;
+
+};
class SIMULATIONSARTOOL_EXPORT SARSimulationTBPImageToolButton : public QToolAbstract {
@@ -26,18 +35,20 @@ public slots:
};
-class SIMULATIONSARTOOL_EXPORT SARSimlulationRFPCToolButton : public QToolAbstract {
+
+
+
+class QSimulationSAROrbitModelToolButton :public QToolAbstract {
Q_OBJECT
public:
- SARSimlulationRFPCToolButton(QWidget* parent = nullptr);
- ~SARSimlulationRFPCToolButton();
+ QSimulationSAROrbitModelToolButton(QWidget* parent = nullptr);
+ ~QSimulationSAROrbitModelToolButton();
public slots:
+
virtual void excute() override;
-
};
-
extern "C" SIMULATIONSARTOOL_EXPORT void RegisterPreToolBox(LAMPMainWidget::RasterMainWidget* mainwindows, ToolBoxWidget* toolbox);
diff --git a/Toolbox/SimulationSARTool/SimulationSARTool.vcxproj b/Toolbox/SimulationSARTool/SimulationSARTool.vcxproj
index bc546b0..4ac6913 100644
--- a/Toolbox/SimulationSARTool/SimulationSARTool.vcxproj
+++ b/Toolbox/SimulationSARTool/SimulationSARTool.vcxproj
@@ -64,7 +64,7 @@
- ..\..\BaseCommonLibrary;..\..\BaseCommonLibrary\BaseTool;..\..\BaseCommonLibrary\ToolAbstract;..\..\GPUBaseLib\GPUTool;.\SimulationSAR;.;..\..\LAMPSARProcessProgram\ToolBoxManager;..\..\RasterMainWidgetGUI\RasterMainWidget;..\..\LAMPSARProcessProgram;..\..\RasterMainWidgetGUI;$(VC_IncludePath);$(WindowsSDK_IncludePath)
+ ..\..\BaseCommonLibrary;..\..\BaseCommonLibrary\BaseTool;..\..\BaseCommonLibrary\ToolAbstract;..\..\GPUBaseLib\GPUTool;.\SimulationSAR;.;..\..\LAMPSARProcessProgram\ToolBoxManager;..\..\RasterMainWidgetGUI\RasterMainWidget;..\..\LAMPSARProcessProgram;..\..\RasterMainWidgetGUI;.\PowerSimulationIncoherent;$(VC_IncludePath);$(WindowsSDK_IncludePath)
$(SolutionDir)$(Platform)\$(Configuration)\Toolbox\
PluginTool_$(ProjectName)
@@ -111,6 +111,8 @@
+
+
@@ -121,6 +123,8 @@
+
+
@@ -147,6 +151,7 @@
+
diff --git a/Toolbox/SimulationSARTool/SimulationSARTool.vcxproj.filters b/Toolbox/SimulationSARTool/SimulationSARTool.vcxproj.filters
index a61744d..4ed2221 100644
--- a/Toolbox/SimulationSARTool/SimulationSARTool.vcxproj.filters
+++ b/Toolbox/SimulationSARTool/SimulationSARTool.vcxproj.filters
@@ -24,6 +24,9 @@
{2d0ea8a6-e32f-4ebb-b8df-3f1afdfa2b00}
+
+ {9b848585-2348-400d-b12a-dd79a2a71007}
+
@@ -53,6 +56,9 @@
Header Files
+
+ PowerSimulationIncoherent
+
@@ -85,6 +91,12 @@
SimulationSAR
+
+ PowerSimulationIncoherent
+
+
+ PowerSimulationIncoherent
+
@@ -99,6 +111,9 @@
SimulationSAR
+
+ PowerSimulationIncoherent
+
@@ -116,6 +131,9 @@
Header Files
+
+ PowerSimulationIncoherent
+