8 lon_coords = [p[0]
for p
in points]
9 lat_coords = [p[1]
for p
in points]
11 centroid_lon = sum(lon_coords)/length
12 centroid_lat = sum(lat_coords)/length
13 return [centroid_lon, centroid_lat]
17 return np.all(dx <= 0)
or np.all(dx >= 0)
19 __version__ =
"1.0-20211104"
21 parser = argparse.ArgumentParser(prog=
'sort_gring',formatter_class=argparse.RawTextHelpFormatter,
22 description=
'This script sorts GRing points to ensure counter-clockwise order',epilog=
'''
24 0 : All is well in the world
25 1 : Dunno, something horrible occurred
26 110 : No reordering necessary''')
27 parser.add_argument(
'--version', action=
'version', version=
'%(prog)s ' + __version__)
28 parser.add_argument(
'-i',
'--ifile', type=str, metavar=
"FILE",default=
None, help=
"name of file with gring data from l1info")
29 parser.add_argument(
'--lon', type=str, default=
None, help=
'list of gring longitudes')
30 parser.add_argument(
'--lat', type=str, default=
None, help=
"list of gring latitudes")
31 parser.add_argument(
'--verbose',
'-v', action=
'store_true', default=
False)
33 args = parser.parse_args()
35 gringpointlongitude =
None
36 gringpointlatitude =
None
39 with open(args.ifile)
as ifile:
40 lines = ifile.readlines()
41 lines =
filter(str.rstrip, lines)
44 key, value = line.split(
'=')
45 values = np.array(value.split(
',')).astype(float)
46 if 'longitude' in key:
47 gringpointlongitude = np.squeeze(np.radians(np.array([values])))
49 gringpointlatitude = np.squeeze(np.radians(np.array([values])))
53 values = np.array(value.split(
',')).astype(float)
54 gringpointlongitude = np.squeeze(np.radians(np.array([values])))
58 values = np.array(value.split(
',')).astype(float)
59 gringpointlatitude = np.squeeze(np.radians(np.array([values])))
61 if (gringpointlongitude
is not None)
and (gringpointlatitude
is not None):
62 if gringpointlongitude.shape != gringpointlatitude.shape:
63 sys.exit(
"lat and lon elements of different size")
66 points =
list(zip(gringpointlongitude, gringpointlatitude))
70 distance = np.atleast_1d(points) - np.atleast_1d(center)
72 angles = np.arctan2(distance[:,0],distance[:,1])
74 deg_angles = np.degrees(angles)
75 idx = np.where(deg_angles < 0)
76 deg_angles[idx] += 360
78 gringsequence = np.argsort(deg_angles, axis=0)[::-1]
82 print(
"already ordered appropriately")
85 sorted_lon = np.array2string(np.take_along_axis(np.degrees(gringpointlongitude), gringsequence, axis=0), precision=5, separator=
',')
86 sorted_lat = np.array2string(np.take_along_axis(np.degrees(gringpointlatitude), gringsequence, axis=0), precision=5, separator=
',')
88 print(
"new world order: {}".format(gringsequence))
90 print(
"gringpointlongitude={}".format(sorted_lon[1:-1]))
91 print(
"gringpointlatitude={}".format(sorted_lat[1:-1]))