Skip to content

Commit

Permalink
Rearrange folder 'backend'
Browse files Browse the repository at this point in the history
  • Loading branch information
Maxime Fourquaux committed Mar 29, 2024
1 parent ff780aa commit 8005077
Show file tree
Hide file tree
Showing 9 changed files with 339 additions and 333 deletions.
406 changes: 203 additions & 203 deletions backend/scripts/FUNCTION.py → backend/FUNCTION.py

Large diffs are not rendered by default.

88 changes: 44 additions & 44 deletions backend/scripts/README.md → backend/README.md
Original file line number Diff line number Diff line change
@@ -1,44 +1,44 @@
# Génération automatique d'un masque d'élévation avec Python
Le but du script est de générer de manière automatique un masque azimuth-élévation depuis un geotiff et une coordonnée définie au préalable.

## Exécution du code
### Donnée de base
Afin de générer un masque personnalisé plusieurs variable sont disponibles afin de définir :
- emplacement du Geotiff, 'ImgOri' : grille raster avec information de l'altitude dans la première bande
- emplacement du Geotiff, 'geotiff_crop' : extrait, ce fichier est temporaire
- taille du demi carrée de coupe, 'sizeCut' : par rapport au point de référence un Geotif de 16km de coté est extrait avec comme centre le point d'étude
- défnition de l'interval de filtrage des données, 'intervalFilter', en degré


La génération du masque d'obstruction (élévation) est réalisée sur la base d'un Geotiff.
```python
#general information on the reference model and image extraction
ImgOri = 'SRC_IMG\\SUISSE_ALL_V2.tif'
geoTiff_crop = 'SRC_IMG\\geoTiff_Crop.tif'
#half the length of the cutting right-of-way
sizeCut=8000.00
#define the step for filter the observation
intervalFilter=1.0
```

### Configuration de l'API
Le script python est configuré afin de fonctionner en Backend avec une solution [FastAPI](https://fastapi.tiangolo.com/).

>[!IMPORTANT]
>La commande FastAPI doit être lancé dans le répertoire backend où se trouve le fichier 'main.py'.
>Commande à exécuter dans un terminal : 'uvicorn main:app --reload'.
### Les données de base pour le calcul

L'API d'extraction du masque d'observation fonctionne avec
```
{
"east": "2581190",
"nord": "1119010",
"i": "1.7",
"minElevation": "5",
"elevation": "1210"
}
```


# Génération automatique d'un masque d'élévation avec Python
Le but du script est de générer de manière automatique un masque azimuth-élévation depuis un geotiff et une coordonnée définie au préalable.

## Exécution du code
### Donnée de base
Afin de générer un masque personnalisé plusieurs variable sont disponibles afin de définir :
- emplacement du Geotiff, 'ImgOri' : grille raster avec information de l'altitude dans la première bande
- emplacement du Geotiff, 'geotiff_crop' : extrait, ce fichier est temporaire
- taille du demi carrée de coupe, 'sizeCut' : par rapport au point de référence un Geotif de 16km de coté est extrait avec comme centre le point d'étude
- défnition de l'interval de filtrage des données, 'intervalFilter', en degré


La génération du masque d'obstruction (élévation) est réalisée sur la base d'un Geotiff.
```python
#general information on the reference model and image extraction
ImgOri = 'SRC_IMG\\SUISSE_ALL_V2.tif'
geoTiff_crop = 'SRC_IMG\\geoTiff_Crop.tif'
#half the length of the cutting right-of-way
sizeCut=8000.00
#define the step for filter the observation
intervalFilter=1.0
```

### Configuration de l'API
Le script python est configuré afin de fonctionner en Backend avec une solution [FastAPI](https://fastapi.tiangolo.com/).

>[!IMPORTANT]
>La commande FastAPI doit être lancé dans le répertoire backend où se trouve le fichier 'main.py'.
>Commande à exécuter dans un terminal : 'uvicorn main:app --reload'.
### Les données de base pour le calcul

L'API d'extraction du masque d'observation fonctionne avec
```
{
"east": "2581190",
"nord": "1119010",
"i": "1.7",
"minElevation": "5",
"elevation": "1210"
}
```


Empty file removed backend/config/.gitkeep
Empty file.
98 changes: 49 additions & 49 deletions backend/scripts/main.py → backend/main.py
Original file line number Diff line number Diff line change
@@ -1,49 +1,49 @@
# -*- coding: utf-8 -*-
"""
Created on Wed Mar 6 16:28:38 2024
@author: fschmidt
"""


from fastapi import FastAPI
from pydantic import BaseModel
from fastapi.middleware.cors import CORSMiddleware
import FUNCTION as mo

#general information on the reference model and image extraction
ImgOri = 'SRC_IMG\\SUISSE_ALL_V2.tif'
geoTiff_crop = 'SRC_IMG\\geoTiff_Crop.tif'
#half the length of the cutting right-of-way
sizeCut=8000.00
#define the step for filter the observation
intervalFilter=1.0

app = FastAPI()

# Configuration CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # Autorise les requêtes depuis n'importe quel origine (à ajuster selon vos besoins)
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"])

class SiteInformation(BaseModel):
east: float
nord: float
i: float
minElevation :float
elevation : float

@app.post("/")
async def generationElevation(siteInformation: SiteInformation):
print(siteInformation)
leftHighPoint, rightLowPoint =mo.cuttingArea(siteInformation,sizeCut)
mo.CutGeotiff(ImgOri,geoTiff_crop,leftHighPoint,rightLowPoint)
siteInformation.elevation=mo.surchHeightSite(geoTiff_crop,siteInformation)
imgGeoRefInformation, imageMatrix = mo.gdalinfoImage(geoTiff_crop)
polarcoordinate=mo.PolarCoordinateCenterView(siteInformation, imgGeoRefInformation, imageMatrix)
MasqueElevation=mo.FilterPolarcoordinate(polarcoordinate,siteInformation.minElevation,intervalFilter)
print(siteInformation.elevation)
return MasqueElevation
# -*- coding: utf-8 -*-
"""
Created on Wed Mar 6 16:28:38 2024
@author: fschmidt
"""


from fastapi import FastAPI
from pydantic import BaseModel
from fastapi.middleware.cors import CORSMiddleware
import FUNCTION as mo

#general information on the reference model and image extraction
ImgOri = 'SRC_IMG\\SUISSE_ALL_V2.tif'
geoTiff_crop = 'SRC_IMG\\geoTiff_Crop.tif'
#half the length of the cutting right-of-way
sizeCut=8000.00
#define the step for filter the observation
intervalFilter=1.0

app = FastAPI()

# Configuration CORS
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # Autorise les requêtes depuis n'importe quel origine (à ajuster selon vos besoins)
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"])

class SiteInformation(BaseModel):
east: float
nord: float
i: float
minElevation :float
elevation : float

@app.post("/")
async def generationElevation(siteInformation: SiteInformation):
print(siteInformation)
leftHighPoint, rightLowPoint =mo.cuttingArea(siteInformation,sizeCut)
mo.CutGeotiff(ImgOri,geoTiff_crop,leftHighPoint,rightLowPoint)
siteInformation.elevation=mo.surchHeightSite(geoTiff_crop,siteInformation)
imgGeoRefInformation, imageMatrix = mo.gdalinfoImage(geoTiff_crop)
polarcoordinate=mo.PolarCoordinateCenterView(siteInformation, imgGeoRefInformation, imageMatrix)
MasqueElevation=mo.FilterPolarcoordinate(polarcoordinate,siteInformation.minElevation,intervalFilter)
print(siteInformation.elevation)
return MasqueElevation
Empty file removed backend/scripts/.gitkeep
Empty file.
Empty file removed backend/src/utils/.gitkeep
Empty file.
Empty file removed backend/tests/.gitkeep
Empty file.
78 changes: 43 additions & 35 deletions frontend/public/js/satellite/compute.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,43 +21,51 @@ export function compute_satellite(obs_position, date, tle_message){
// Convert JSON to text
const tle_orbit = convertJSON(orbit);

// Decode text message
const satrec = satellite.twoline2satrec(
tle_orbit.split('\n')[0].trim(),
tle_orbit.split('\n')[1].trim()
);

// Compute position and velocity
const positionAndVelocity = satellite.propagate(satrec, date);
const gmst = satellite.gstime(date);

// Compute and convert position
const position_geodetic = satellite.eciToGeodetic(positionAndVelocity.position, gmst); // returns in radians
const position_ecf = satellite.geodeticToEcf(position_geodetic); // returns in cartesiens
const position_az_el = satellite.ecfToLookAngles(obs_position, position_ecf); // angles in radians
const azi = position_az_el["azimuth"] * 180.0 / Math.PI;
const ele = position_az_el["elevation"] * 180.0 / Math.PI;

// Selecting visible satellites
if (ele > 0.0){

// Get constellation of satellite
const constella = constellation(orbit.OBJECT_NAME);
if ( constella !== false){
// Get constellation of satellite
const constella = constellation(orbit.OBJECT_NAME);
if ( constella !== false){

console.log(orbit.OBJECT_NAME)

// Decode text message
const satrec = satellite.twoline2satrec(
tle_orbit.split('\n')[0].trim(),
tle_orbit.split('\n')[1].trim()
);

// Compute position and velocity
const positionAndVelocity = satellite.propagate(satrec, date);
const gmst = satellite.gstime(date);

// Create object and push to array
const obj = {
name: orbit.OBJECT_NAME,
constellation: constella,
id: orbit.OBJECT_ID,
azimut: azi,
elevation: ele,
longitude: position_geodetic.longitude * 180.0 / Math.PI,
latitude: position_geodetic.latitude * 180.0 / Math.PI,
height: position_geodetic.height,
}
satellite_return.push(obj);
// Compute and convert position
console.log(positionAndVelocity.position);
if (positionAndVelocity.position !== undefined){
const position_geodetic = satellite.eciToGeodetic(positionAndVelocity.position, gmst); // returns in radians
const position_ecf = satellite.geodeticToEcf(position_geodetic); // returns in cartesiens

console.log(position_ecf);

const position_az_el = satellite.ecfToLookAngles(obs_position, position_ecf); // angles in radians
const azi = position_az_el["azimuth"] * 180.0 / Math.PI;
const ele = position_az_el["elevation"] * 180.0 / Math.PI;

// Selecting visible satellites
if (ele > 0.0){

// Create object and push to array
const obj = {
name: orbit.OBJECT_NAME,
constellation: constella,
id: orbit.OBJECT_ID,
azimut: azi,
elevation: ele,
longitude: position_geodetic.longitude * 180.0 / Math.PI,
latitude: position_geodetic.latitude * 180.0 / Math.PI,
height: position_geodetic.height,
}
satellite_return.push(obj);

}
}
};

Expand Down
2 changes: 0 additions & 2 deletions frontend/public/js/satellite/constellation.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
*/
export function constellation(object_name){

console.log(object_name);

let constellation_gnss = false;

if (object_name.includes("NAVSTAR")){ constellation_gnss = "GPS" }
Expand Down

0 comments on commit 8005077

Please sign in to comment.