Skip to content

Commit

Permalink
rename and move to utils0.py
Browse files Browse the repository at this point in the history
+ rename `_set_longitude_range()` to `standardize_longitude()`

+ move the function from objects/gnss.py to utils/utils0.py
  • Loading branch information
yunjunz committed Nov 11, 2024
1 parent d3e6c9f commit be03e45
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 41 deletions.
46 changes: 5 additions & 41 deletions src/mintpy/objects/gnss.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ def search_gnss(SNWE, start_date=None, end_date=None, source='UNR', site_list_fi
# ensure that site data formatting is consistent
sites['site'] = np.array([site.upper() for site in sites['site']])
# ensure longitude values in (-180, 180]
sites['lon'] = _set_longitude_range(sites['lon'], lon_range='-180to180')
sites['lon'] = ut.standardize_longitude(sites['lon'], limit='-180to180')
vprint(f'load {len(sites["site"]):d} GNSS sites with fields: {" ".join(sites.keys())}')

# limit in space
Expand Down Expand Up @@ -392,42 +392,6 @@ def get_ESESES_url_prefix():
return url_prefix


def _set_longitude_range(lon, lon_range='-180to180'):
"""Set the longitude data range.
Parameters: lon - float / np.ndarray, longitude in degree
lon_range - str, -180to180 or 0to360
Returns: lon - float / np.ndarray, longitude in degree
"""

# ensure data within (-180, 360)
if np.nanmax(lon) >= 360:
if np.isscalar(lon):
lon -= 360
else:
lon[lon >= 360] -= 360
elif np.nanmin(lon) <= -180:
if np.isscalar(lon):
lon += 360
else:
lon[lon <= -180] += 360

# range option 1: ensure data within (-180, 180]
if lon_range == '-180to180' and np.nanmax(lon) > 180:
if np.isscalar(lon):
lon -= 360
else:
lon[lon > 180] -= 360

# range option 2: ensure data within [0, 360)
elif lon_range == '0to360' and np.nanmin(lon) < 0:
if np.isscalar(lon):
lon += 360
else:
lon[lon < 0] += 360

return lon


#################################### GNSS-GSI utility functions #####################################

Expand Down Expand Up @@ -905,7 +869,7 @@ def get_site_lat_lon(self, print_msg=False) -> (float, float):
data = np.loadtxt(self.file, dtype=bytes, skiprows=1, max_rows=10)
self.site_lat, self.site_lon = data[0, 20:22].astype(float)
# ensure longitude in the range of (-180, 180]
self.site_lon = _set_longitude_range(self.site_lon, lon_range='-180to180')
self.site_lon = ut.standardize_longitude(self.site_lon, limit='-180to180')

return self.site_lat, self.site_lon

Expand Down Expand Up @@ -1029,7 +993,7 @@ def get_site_lat_lon(self, print_msg=False) -> (float, float):
self.site_lon = float(lon_line.split()[-1])

# ensure longitude in the range of (-180, 180]
self.site_lon = _set_longitude_range(self.site_lon, lon_range='-180to180')
self.site_lon = ut.standardize_longitude(self.site_lon, limit='-180to180')

return self.site_lat, self.site_lon

Expand Down Expand Up @@ -1136,7 +1100,7 @@ def get_site_lat_lon(self, print_msg=False) -> (float, float):
self.site_lat = float(site_lat)
self.site_lon = float(site_lon)
# ensure longitude in the range of (-180, 180]
self.site_lon = _set_longitude_range(self.site_lon, lon_range='-180to180')
self.site_lon = ut.standardize_longitude(self.site_lon, limit='-180to180')

if print_msg == True:
print(f'\t{self.site_lat:f}, {self.site_lon:f}')
Expand Down Expand Up @@ -1230,7 +1194,7 @@ def get_site_lat_lon(self, print_msg=False) -> (str, str):
ind = sites['site'].tolist().index(self.site)
site_lat, site_lon = sites['lat'][ind], sites['lon'][ind]
# ensure longitude in the range of (-180, 180]
site_lon = _set_longitude_range(site_lon, lon_range='-180to180')
site_lon = ut.standardize_longitude(site_lon, limit='-180to180')

return site_lat, site_lon

Expand Down
24 changes: 24 additions & 0 deletions src/mintpy/utils/utils0.py
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,30 @@ def touch(fname_list, times=None):


################################## Coordinate ##########################################
def standardize_longitude(lon, limit='-180to180'):
"""Normalize the longitude value range into (-180, 180] or [0, 360).
Parameters: lon - float / np.ndarray, longitude in degree
limit - str, -180to180 or 0to360
Returns: lon - float / np.ndarray, longitude in degree
"""
lon = np.asarray(lon)

# ensure data within (-180, 360)
lon = np.where(lon >= 360, lon - 360, lon)
lon = np.where(lon <= -180, lon + 360, lon)

# range option 1: ensure data within (-180, 180]
if limit == '-180to180':
lon = np.where(lon > 180, lon - 360, lon)

# range option 2: ensure data within [0, 360)
elif limit == '0to360' and np.nanmin(lon) < 0:
lon = np.where(lon < 0, lon + 360, lon)

return float(lon) if np.isscalar(lon) else lon


def utm_zone2epsg_code(utm_zone):
"""Convert UTM Zone string to EPSG code.
Expand Down

0 comments on commit be03e45

Please sign in to comment.