Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Convert ECI to ECEF #27

Open
JDragonB opened this issue Jan 21, 2023 · 2 comments
Open

Convert ECI to ECEF #27

JDragonB opened this issue Jan 21, 2023 · 2 comments

Comments

@JDragonB
Copy link

JDragonB commented Jan 21, 2023

Hello,

Is it possible to convert ECI coordinates to ECEF from the DLL?

I made a script in PowerShell, the import of the DLL works, the latitude is OK but the longitude does anything and I have curiously always an error of 20 km for the altitude:

$Block = $false
$Streams = Get-Item -LiteralPath "$PSScriptRoot\sgp4\One_Sgp4.dll" -Stream *
$Streams | ForEach-Object {if ($_.Stream -match "Zone.Identifier") {$Block = $true}}
if ($Block) {
    Unblock-File -LiteralPath "$PSScriptRoot\sgp4\One_Sgp4.dll"
    Write-Host -ForegroundColor Yellow -BackgroundColor Red "Un fichier a du être dévérouillé, veuillez redémarrer PowerShell pour la prise en compte"
    }
Add-Type -LiteralPath "$PSScriptRoot\sgp4\One_Sgp4.dll"

# Création d'un objet Satellite
$tleISS = New-Object One_Sgp4.Tle

#Analyse TLE
$tleISS = [One_Sgp4.ParserTLE]::parseTle("1 25544U 98067A   23021.58893016  .00026763  00000-0  47621-3 0  9995","2 25544  51.6443 334.6786 0004827 262.6903 262.3175 15.49939031379055","ISS (ZARYA)")

Write-host -BackgroundColor Black -ForegroundColor Cyan ("Nom du Satellite :    "+$tleISS.getName())
Write-host -BackgroundColor Black -ForegroundColor Cyan ("Numéro du Satellite : "+$tleISS.getSatNumber())

[double]$PI = [Math]::PI
$RayonTerreMin = 6356.752314
$RayonTerreMax = 6378.137
$Maintenant=(Get-Date).ToUniversalTime()
$MaintenantSGP4=[One_Sgp4.EpochTime]::new($Maintenant.Year,$Maintenant.DayOfYear+($Maintenant.Hour/24)+($Maintenant.Minute/1440)+($Maintenant.Second/86400))
$J2000 = [DateTime]'01/01/2000 11:58:55.816'
$Data = [One_Sgp4.SatFunctions]::getSatPositionAtTime($tleISS,$MaintenantSGP4,1)
$ECI_X= $Data.getX()
$ECI_Y= $Data.getY()
$ECI_Z= $Data.getZ()

$Longitude = 180*([Math]::Atan($ECI_Y/$ECI_X))/$PI
$Longitude = $Longitude + 280.46 + 360.9856123035484*(($Maintenant-$J2000).TotalDays) #Pour passer d'une coordonnée ECI à ECEF, il faut ajouter la rotation du temps sidéral par rapport à Greenwich (approximation)  
$Longitude = $Longitude % 360
if ($Longitude -gt 180) {$Longitude -= 360}

$LatitudeRad = [Math]::Atan($ECI_Z/([Math]::Sqrt(([Math]::Pow($ECI_X,2)+[Math]::Pow($ECI_Y,2)))))
$Latitude = ($LatitudeRad/$PI)*180

$RayonTerreP1 = ([Math]::Pow($RayonTerreMax,2))*([Math]::Pow($RayonTerreMax,2))
$RayonTerreP2 = ([Math]::Pow($RayonTerreMax,2))*([Math]::Pow([Math]::Sin($LatitudeRad),2))
$RayonTerreP3 = ([Math]::Pow($RayonTerreMin,2))*([Math]::Pow([Math]::Cos($LatitudeRad),2))
$RayonTerre = [Math]::Sqrt($RayonTerreP1/($RayonTerreP2+$RayonTerreP3))
$Altitude = [Math]::Sqrt([Math]::Pow($ECI_X,2)+[Math]::Pow($ECI_Y,2)+[Math]::Pow($ECI_Z,2)) - $RayonTerre

Write-host -BackgroundColor DarkGray -ForegroundColor Cyan "$Maintenant Z"
Write-host -BackgroundColor DarkGray -ForegroundColor yellow "ECI_X:$ECI_X km ECI_Y:$ECI_Y km ECI_Z:$ECI_Z km"
"Latitude:$Latitude N/S Longitude:$Longitude E/W Altitude:$Altitude km"

Thanks.

@JDragonB
Copy link
Author

I found my happiness with the function [One_Sgp4.SatFunctions]::calcSatSubPoint :

$SP = [One_Sgp4.SatFunctions]::calcSatSubPoint($MaintenantSGP4,$Data,1)
$SP.getLatitude()
$SP.getLongitude()
$SP.getHeight()

Much easier than redoing the calculations, even if it's fun to do it myself.

Thanks for this DLL.

@1manprojects
Copy link
Owner

Very Good,
Converting would be possible in the Library itself. Depending how it will devolope in the future i might implement more features.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants