From 68f3097bd8defa526c289096368532c8fc5e52c9 Mon Sep 17 00:00:00 2001 From: Martin Skorupski Date: Wed, 18 Oct 2023 15:24:24 +0200 Subject: [PATCH] Create concrete classes for O-RAN Nodes - a function added to convert a Point(x,y) into a new geographical location where 'self' is represented as Point(0,0) Issue-ID: OAM-368 Change-Id: I7df2e1319d6d5c38c290b02b711c1213e2319f8f Signed-off-by: Martin Skorupski --- .../network-generator/model/python/geo_location.py | 32 +++++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/code/network-generator/model/python/geo_location.py b/code/network-generator/model/python/geo_location.py index 67d098e..6d60fc0 100644 --- a/code/network-generator/model/python/geo_location.py +++ b/code/network-generator/model/python/geo_location.py @@ -17,13 +17,19 @@ """ A collection of TypeDefinitions for a geographical location """ +import math +from model.python.hexagon import Point + + class IGeoLocationData: + def __init__(self, latitude: float, longitude: float, aboveMeanSeaLevel: float): self.latitude = latitude self.longitude = longitude self.aboveMeanSeaLevel = aboveMeanSeaLevel class IGeoLocation: + def __init__(self, latitude: float = 0, longitude: float = 0, aboveMeanSeaLevel: float = 0): self.latitude = latitude self.longitude = longitude @@ -39,9 +45,9 @@ class GeoLocation(IGeoLocation): def __init__(self, geoLocation: IGeoLocationData = None): super().__init__( - geoLocation.latitude if geoLocation else 0, - geoLocation.longitude if geoLocation else 0, - geoLocation.aboveMeanSeaLevel if geoLocation else 0 + geoLocation['latitude'] if geoLocation else 0, + geoLocation['longitude'] if geoLocation else 0, + geoLocation['aboveMeanSeaLevel'] if geoLocation else 0 ) @property @@ -70,4 +76,22 @@ class GeoLocation(IGeoLocation): } def __str__(self): - return str(self.json()) \ No newline at end of file + return str(self.json()) + + def point_to_geo_location(self, point:Point): + """ + A static function which converts a point in pixels into a geographical location + when the self is represented as Point(0,0) + @param point : The point to be converted + returns The converted GeoLocation object. + """ + equatorialRadius = 6378137 # meters + new_lat = self.latitude + (point.y / equatorialRadius) * (180 / math.pi) + new_lon = self.longitude + (point.x / equatorialRadius) * (180 / math.pi) / math.cos(self.latitude * math.pi / 180) + + geo_location: IGeoLocationData = { + "longitude": new_lon, + "latitude": new_lat, + "aboveMeanSeaLevel": self.aboveMeanSeaLevel + } + return GeoLocation(geo_location) \ No newline at end of file -- 2.16.6