Java实现对某一时刻GPS中圆轨道卫星的空间位置计算

在上两文中给出了Java编程实现对RINEX格式的观测值文件和广播星历文件的读取(读取观测值文件链接https://blog.csdn.net/qq_40449816/article/details/100695746读取广播星历文件链接https://blog.csdn.net/qq_40449816/article/details/100767851),本文给出根据广播星历对卫星某一时刻的空间位置计算的代码,包括对卫星钟差改正和相对论效应改正。代码详情如下:

  • SatellitePosCal.java

package PosCalcluate;

import ReadFile.DataClass.Ephemeris;
import ReadFile.ReadNavData;
import TimeSysTrans.GPST;
import Util.CorrectionCalculate.SatelliteClockCorrection;

import java.util.ArrayList;
import java.util.List;

/**
 * 该类实现对某一时刻卫星位置的计算
 * @author lhn
 * */
public class SatellitePosCal {
    //地球自转角速度
    private static final double EARTH_ROTATION_RATE_RAD_PER_SEC = 7.2921151467e-5;
    /**
     * 实现对某一时刻,某一卫星的空间坐标位置计算(默认采用的坐标系时WGS-84空间大地坐标系)
     * @param obs_t  观测时刻
     * @param ephemeris 卫星星历数据
     * @return satPos
     */
    public static SatellitePosition CalSatPos(GPST obs_t, Ephemeris ephemeris){
        double X_Pos=0.0;
        double Y_Pos=0.0;
        double Z_Pos=0.0;
        SatellitePosition satellitePosition=new SatellitePosition();
/*        *//**筛选出与观测时刻最近的历元星历数据*//*
        Ephemeris ephemeris=null;
        GPST temp=new GPST();
        for(Ephemeris e:ephemerisList){
            if(e.getPrn().equals(prn)){
                temp=e.getGpst();
                ephemeris=e;
                break;
            }
        }
        for(Ephemeris e:ephemerisList){
            if(e.getPrn().equals(prn)){
                GPST gpst=obs_t.sub(e.getGpst());
                if(gpst.isLess(temp)){
                    temp=gpst;
                    ephemeris=e;
                }

            }
        }*/
        /**根据开普勒轨道6参数和摄动九参数确定卫星的空间坐标*/
        if(ephemeris!=null){
            try {
                SatelliteClockCorrection satelliteClockCorrection=new SatelliteClockCorrection(ephemeris,obs_t);
                //归化时间(s)
                double tkSec=satelliteClockCorrection.getTimeFromRefEpochSec();
                //偏近点角(弧)
                double eccentricAnomalyRadians=satelliteClockCorrection.getEccentricAno
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
霍夫变换是一种图像处理算法,可以用来检测图像、直线等形状。在Python,我们可以使用OpenCV库来实现霍夫变换。 下面是一个简单的例子,演示如何使用霍夫变换来检测一张图片。 首先,我们需要导入必要的库: ```python import cv2 import numpy as np ``` 然后,我们读取一张图片,并将其转换为灰度图像: ```python img = cv2.imread('circle.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ``` 接下来,我们可以使用霍夫变换检测: ```python circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0) ``` 在上面的代码,我们使用了cv2.HoughCircles()函数来检测。其,第一个参数是输入的灰度图像,第二个参数是检测的方法(一般使用HOUGH_GRADIENT),第三个参数是图像分辨率与累加器分辨率的比例(一般为1),第四个参数是心之间的最小距离,第五个参数是Canny边缘检测的高阈值,第六个参数是累加器的阈值,第七个参数是最小半径,第八个参数是最大半径。 最后,我们可以将检测到的画出来: ```python if circles is not None: circles = np.round(circles[0, :]).astype("int") for (x, y, r) in circles: cv2.circle(img, (x, y), r, (0, 255, 0), 2) ``` 在上面的代码,我们首先判断是否检测到了。如果检测到了,我们就将其坐标和半径取整,并使用cv2.circle()函数画出。 完整代码如下: ```python import cv2 import numpy as np img = cv2.imread('circle.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0) if circles is not None: circles = np.round(circles[0, :]).astype("int") for (x, y, r) in circles: cv2.circle(img, (x, y), r, (0, 255, 0), 2) cv2.imshow("circles", img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 运行代码后,我们就可以在窗口看到检测到的了。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值