X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=code%2Fnetwork-generator%2Fmodel%2Fpython%2Fgeo_location.py;h=6d60fc003a24c377abbea49f004308f42ae10a05;hb=5695364ecac8148f7eef8819518362589748b222;hp=67d098ebe38e2e30fd1175a663e600d0f6be4ddc;hpb=9ea4e241e3ec0c9dffd3db7fd7ab5a2cf3d13e7d;p=oam.git 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