Skip to content

Commit ca9db4a

Browse files
authored
modules needed by wms should not use config_loader (#2580)
1 parent 2a7f9ef commit ca9db4a

File tree

12 files changed

+216
-159
lines changed

12 files changed

+216
-159
lines changed

docs/samples/automation/retriever.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939

4040
import mslib
4141
import mslib.utils
42+
from mslib.utils.get_projection_params import get_projection_params
4243
from mslib.utils import thermolib
4344
from mslib.utils.config import config_loader, read_config_file
4445
from mslib.utils.units import units
@@ -140,8 +141,7 @@ def main():
140141
fig = plt.figure()
141142
for flight, section, vertical, filename, init_time, time in \
142143
config["automated_plotting"]["flights"]:
143-
params = mslib.utils.coordinate.get_projection_params(
144-
config["predefined_map_sections"][section]["CRS"].lower())
144+
params = get_projection_params(config["predefined_map_sections"][section]["CRS"].lower())
145145
params["basemap"].update(config["predefined_map_sections"][section]["map"])
146146
wps = load_from_ftml(filename)
147147
wp_lats, wp_lons, wp_locs = [[x[i] for x in wps] for i in [0, 1, 3]]

mslib/msui/editor.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@
3737
from mslib.msui.icons import icons
3838
from mslib.utils.config import MSUIDefaultConfig as mss_default
3939
from mslib.utils.config import config_loader, dict_raise_on_duplicates_empty, merge_dict
40-
from mslib.utils.coordinate import get_projection_params
41-
40+
from mslib.utils.get_projection_params import get_projection_params
4241

4342
from mslib.support.qt_json_view import delegate
4443
from mslib.support.qt_json_view.view import JsonView

mslib/msui/flighttrack.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@
4646

4747
from mslib import __version__
4848
from mslib.utils.units import units
49-
from mslib.utils.coordinate import find_location, path_points, get_distance
49+
from mslib.utils.coordinate import path_points, get_distance
50+
from mslib.utils.find_location import find_location
5051
from mslib.utils import thermolib
5152
from mslib.utils.verify_waypoint_data import verify_waypoint_data
5253
from mslib.utils.config import config_loader, save_settings_qsettings, load_settings_qsettings

mslib/msui/mpl_pathinteractor.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@
5151
import matplotlib.patches as mpatches
5252
from PyQt5 import QtCore, QtWidgets
5353

54-
from mslib.utils.coordinate import get_distance, find_location, latlon_points, path_points
54+
from mslib.utils.coordinate import get_distance, latlon_points, path_points
55+
from mslib.utils.find_location import find_location
5556
from mslib.utils.units import units
5657
from mslib.utils.thermolib import pressure2flightlevel
5758
from mslib.msui import flighttrack as ft

mslib/msui/topview.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
import logging
3333

3434
from mslib.utils.config import config_loader
35-
from mslib.utils.coordinate import get_projection_params
35+
from mslib.utils.get_projection_params import get_projection_params
3636
from PyQt5 import QtGui, QtWidgets, QtCore
3737
from mslib.msui.qt5 import ui_topview_window as ui
3838
from mslib.msui.qt5 import ui_topview_mapappearance as ui_ma

mslib/mswms/mpl_hsec.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
import PIL.Image
4343

4444
from mslib.mswms import mss_2D_sections
45-
from mslib.utils.coordinate import get_projection_params
45+
from mslib.utils.get_projection_params import get_projection_params
4646
from mslib.utils.units import convert_to
4747
from mslib.mswms.utils import make_cbar_labels_readable
4848
from mslib.utils.loggerdef import configure_mpl_logger

mslib/mswms/wms.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ def verify_pw(username, password):
143143
return authfunc(username, password)
144144

145145
from mslib.mswms import mss_plot_driver
146-
from mslib.utils.coordinate import get_projection_params
146+
from mslib.utils.get_projection_params import get_projection_params
147147

148148
# Logging the Standard Output, which will be added to the Apache Log Files
149149
logging.basicConfig(level=logging.DEBUG,

mslib/utils/coordinate.py

Lines changed: 0 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,12 @@
2626
limitations under the License.
2727
"""
2828

29-
import logging
3029
import netCDF4 as nc
3130
import numpy as np
3231
from pyproj import Geod
3332
from scipy.interpolate import interp1d
3433
from scipy.ndimage import map_coordinates
3534

36-
from mslib.utils.config import config_loader
37-
38-
3935
__PR = Geod(ellps='WGS84')
4036

4137

@@ -54,23 +50,6 @@ def get_distance(lat0, lon0, lat1, lon1):
5450
return __PR.inv(lon0, lat0, lon1, lat1)[-1] / 1000.
5551

5652

57-
def find_location(lat, lon, tolerance=5):
58-
"""
59-
Checks if a location is present at given coordinates
60-
:param lat: latitude
61-
:param lon: longitude
62-
:param tolerance: maximum distance between location and coordinates in km
63-
:return: None or lat/lon, name
64-
"""
65-
locations = config_loader(dataset='locations')
66-
distances = sorted([(get_distance(lat, lon, loc_lat, loc_lon), loc)
67-
for loc, (loc_lat, loc_lon) in locations.items()])
68-
if len(distances) > 0 and distances[0][0] <= tolerance:
69-
return locations[distances[0][1]], distances[0][1]
70-
else:
71-
return None
72-
73-
7453
def fix_angle(ang):
7554
"""
7655
Normalizes an angle between -180 and 180 degree.
@@ -107,127 +86,6 @@ def rotate_point(point, angle, origin=(0, 0)):
10786
return temp_point
10887

10988

110-
def get_projection_params(proj):
111-
proj = proj.lower()
112-
if proj.startswith("crs:"):
113-
projid = proj[4:]
114-
if projid == "84":
115-
proj_params = {
116-
"basemap": {"projection": "cyl"},
117-
"bbox": "degree"}
118-
else:
119-
raise ValueError("Only CRS code 84 is supported: '%s' given", proj)
120-
121-
elif proj.startswith("auto:"):
122-
raise ValueError("AUTO not supported")
123-
124-
projid, unitsid, lon0, lat0 = proj[5:].split(",")
125-
if projid == "42001":
126-
proj_params = {
127-
"basemap": {"projection": "tmerc", "lon_0": lon0, "lat_0": lat0},
128-
"bbox": f"meter({lon0},{lat0})"}
129-
elif projid == "42002":
130-
proj_params = {
131-
"basemap": {"projection": "tmerc", "lon_0": lon0, "lat_0": lat0},
132-
"bbox": f"meter({lon0},{lat0})"}
133-
elif projid == "42003":
134-
proj_params = {
135-
"basemap": {"projection": "ortho", "lon_0": lon0, "lat_0": lat0},
136-
"bbox": f"meter({lon0},{lat0})"}
137-
else:
138-
raise ValueError("unspecified AUTO code: '%s'", proj)
139-
140-
elif proj.startswith("auto2:"):
141-
raise ValueError("AUTO2 not supported")
142-
143-
projid, factor, lon0, lat0 = proj[6:].split(",")
144-
if projid == "42001":
145-
proj_params = {
146-
"basemap": {"projection": "tmerc", "lon_0": lon0, "lat_0": lat0},
147-
"bbox": f"meter({lon0},{lat0})"}
148-
elif projid == "42002":
149-
proj_params = {
150-
"basemap": {"projection": "tmerc", "lon_0": lon0, "lat_0": lat0},
151-
"bbox": f"meter({lon0},{lat0})"}
152-
elif projid == "42003":
153-
proj_params = {
154-
"basemap": {"projection": "ortho", "lon_0": lon0, "lat_0": lat0},
155-
"bbox": f"meter({lon0},{lat0})"}
156-
elif projid == "42004":
157-
proj_params = {
158-
"basemap": {"projection": "cyl"},
159-
"bbox": f"meter({lon0},{lat0})"}
160-
elif projid == "42005":
161-
proj_params = {
162-
"basemap": {"projection": "moll", "lon_0": lon0, "lat_0": lat0},
163-
"bbox": "meter???"}
164-
else:
165-
raise ValueError("unspecified AUTO2 code: '%s'", proj)
166-
167-
elif proj.startswith("epsg:"):
168-
epsg = proj[5:]
169-
if epsg.startswith("777") and len(epsg) == 8: # user defined MSS code. deprecated.
170-
logging.warning("Using deprecated MSS-specific EPSG code. Switch to 'MSS:stere' instead.")
171-
lat_0, lon_0 = int(epsg[3:5]), int(epsg[5:])
172-
proj_params = {
173-
"basemap": {"projection": "stere", "lat_0": lat_0, "lon_0": lon_0},
174-
"bbox": "degree"}
175-
elif epsg.startswith("778") and len(epsg) == 8: # user defined MSS code. deprecated.
176-
logging.warning("Using deprecated MSS-specific EPSG code. Switch to 'MSS:stere' instead.")
177-
lat_0, lon_0 = int(epsg[3:5]), int(epsg[5:])
178-
proj_params = {
179-
"basemap": {"projection": "stere", "lat_0": -lat_0, "lon_0": lon_0},
180-
"bbox": "degree"}
181-
elif epsg in ("4258", "4326"):
182-
proj_params = {"basemap": {"epsg": epsg}, "bbox": "degree"}
183-
elif epsg in ("3031", "3412"):
184-
proj_params = {"basemap": {"epsg": epsg}, "bbox": "meter(0,-90)"}
185-
elif epsg in ("3411", "3413", "3575", "3995"):
186-
proj_params = {"basemap": {"epsg": epsg}, "bbox": "meter(0,90)"}
187-
elif epsg in ("3395", "3857"):
188-
proj_params = {"basemap": {"epsg": epsg}, "bbox": "meter(0,0)"}
189-
elif epsg in ("4839"):
190-
proj_params = {"basemap": {"epsg": epsg}, "bbox": "meter(10.5,51)"}
191-
elif epsg in ("31467"):
192-
proj_params = {"basemap": {"epsg": epsg}, "bbox": "meter(-20.9631343,0.0037502)"}
193-
elif epsg in ("31468"):
194-
proj_params = {"basemap": {"epsg": epsg}, "bbox": "meter(-25.4097892,0.0037466)"}
195-
else:
196-
raise ValueError("EPSG code not supported by basemap module: '%s'", proj)
197-
198-
elif proj.startswith("mss:"):
199-
# some MSS-specific codes
200-
params = proj[4:].split(",")
201-
name = params[0]
202-
if name == "stere":
203-
lon0, lat0, lat_ts = params[1:]
204-
proj_params = {
205-
"basemap": {"projection": name, "lat_0": lat0, "lon_0": lon0, "lat_ts": lat_ts},
206-
"bbox": "degree"}
207-
elif name == "cass":
208-
lon0, lat0 = params[1:]
209-
proj_params = {
210-
"basemap": {"projection": name, "lon_0": lon0, "lat_0": lat0},
211-
"bbox": "degree"}
212-
elif name == "lcc":
213-
lon0, lat0, lat1, lat2 = params[1:]
214-
proj_params = {
215-
"basemap": {"projection": name, "lon_0": lon0, "lat_0": lat0, "lat_1": lat1, "lat_2": lat2},
216-
"bbox": "degree"}
217-
elif name == "merc":
218-
lat_ts = params[1]
219-
proj_params = {
220-
"basemap": {"projection": name, "lat_ts": lat_ts},
221-
"bbox": "degree"}
222-
else:
223-
raise ValueError("unknown MSS projection: '%s'", proj)
224-
225-
else:
226-
raise ValueError("unknown projection: '%s'", proj)
227-
logging.debug("Identified CRS '%s' as '%s'", proj, proj_params)
228-
return proj_params
229-
230-
23189
def interpolate_vertsec(data3D, data3D_lats, data3D_lons, lats, lons):
23290
"""
23391
Interpolate curtain[z,pos] (curtain[level,pos]) from data3D[z,y,x]

mslib/utils/find_location.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# -*- coding: utf-8 -*-
2+
"""
3+
4+
mslib.utils.find_location
5+
~~~~~~~~~~~~~~~~~~~~~~~~~
6+
7+
Shows the name of a lat/lon coordinate
8+
9+
This file is part of MSS.
10+
11+
:copyright: Copyright 2021 May Bär
12+
:copyright: Copyright 2021-2024 by the MSS team, see AUTHORS.
13+
:license: APACHE-2.0, see LICENSE for details.
14+
15+
Licensed under the Apache License, Version 2.0 (the "License");
16+
you may not use this file except in compliance with the License.
17+
You may obtain a copy of the License at
18+
19+
http://www.apache.org/licenses/LICENSE-2.0
20+
21+
Unless required by applicable law or agreed to in writing, software
22+
distributed under the License is distributed on an "AS IS" BASIS,
23+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24+
See the License for the specific language governing permissions and
25+
limitations under the License.
26+
"""
27+
28+
29+
from mslib.utils.config import config_loader
30+
from mslib.utils.coordinate import get_distance
31+
32+
33+
def find_location(lat, lon, tolerance=5):
34+
"""
35+
Checks if a location is present at given coordinates
36+
:param lat: latitude
37+
:param lon: longitude
38+
:param tolerance: maximum distance between location and coordinates in km
39+
:return: None or lat/lon, name
40+
"""
41+
locations = config_loader(dataset='locations')
42+
distances = sorted([(get_distance(lat, lon, loc_lat, loc_lon), loc)
43+
for loc, (loc_lat, loc_lon) in locations.items()])
44+
if len(distances) > 0 and distances[0][0] <= tolerance:
45+
return locations[distances[0][1]], distances[0][1]
46+
else:
47+
return None

0 commit comments

Comments
 (0)