Created
November 19, 2020 08:56
-
-
Save procrastinatio/cf41a2e9f570bd2f54505d2745d4b499 to your computer and use it in GitHub Desktop.
Format for LTOP-EL
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python3 | |
import sys | |
import csv | |
import random | |
import string | |
from datetime import datetime | |
FNAME = '20201102_Goms_RAW_Swisstopo.csv' | |
''' | |
Format LtOP: EL | |
https://geodesy.geo.admin.ch/reframe/ltop_fmt_descr_fr.html#EL | |
Format EL ( Exemple: chtrs95.el ) | |
$$ELC'est la ligne titre | |
TRI150 PY 751030 4BL087334 +007 36 15.265890 +47 10 21.838950 657 617.1602 657CH -0.0485 114CH -10.2 15.5 114 0.0 0.0 114ST 01 @ 264TEXT-.. | |
TRI152 PY 751030 4BL087336 7 36 10.521760 47 10 21.761880 657 633.4622 657CH -0.0486 114CH -10.5 15.0 114 0.0 0.0 114ZI 02 @ 264TEXT-.. | |
TRI153 PY 751030 4BL087337 7 35 49.178250 47 10 28.434750 657 594.7734 657CH -0.0490 114CH -10.9 14.9 660 0.0 0.0 114ZI 03 @ 264TEXT-.. | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 | |
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 | |
1 1 1 1 1 1 1 | |
gcp227 PY 20201118 4BLHRXGWE 8 7 56.585350 46 23 46.471020 657 0.000000 11484 | |
$$EL Type du fichier de coordonnées EL Coordonnées ellipsoïdiques (géodésiques), en degrés, minutes et secondes sexagésimales | |
1 - 10 (A10) Identification du point, nom | |
11 - 14 (A4) Identification du point, type | |
15 - 22 (A8) Identification du point, date du repérage (YYYYMMDD) | |
23 - 26 (A4) Ordre, canton | |
27 - 32 (A6) Nouveau numéro: carte / numéro du point | |
33 - 37 (I5) Longitude: degrés | |
38 - 40 (I3) Longitude: minutes | |
41 - 50 (F10.6) Longitude: secondes | |
51 - 55 (I5) Latitude: degrés | |
56 - 58 (I3) Latitude: minutes | |
59 - 68 (F10.6) Latitude: secondes | |
69 - 72 (I4) Provenance des coordonnées | |
73 - 82 (F10.4) Altitude H (sur l'ellipsoïde) [m] | |
83 - 86 (I4) Provenance de l'altitude | |
87 - 88 (A2) Code système de référence - CH : Bessel CH1903 | |
- 84 : WGS84 | |
- ....... | |
89 - 96 (F8.4) Cote du géoïde [m] = écart entre le géoïde et l'ellipsoïde défini par le code (Pos.101-102) | |
97 - 100 (I4) Provenance de la cote du géoïde | |
101 - 102 (A2) Code de l'ellipsoïde (ellipsoïde de référence pour la cote du géoïde et la déviation de la verticale) | |
- CH : Bessel CH1903 | |
- 84 : WGS84 | |
- ....... | |
103 - 108 (F6.1) Déviation de la verticale ETA (à l'altitude H) [cc] | |
109 - 114 (F6.1) Déviation de la verticale XI (à l'altitude H) [cc] | |
115 - 118 (I4) Provenance de la déviation de la verticale | |
119 - 124 (F6.1) Déviation de la verticale au niveau de la mer ETA0 [cc] | |
125 - 130 (F6.1) Déviation de la verticale au niveau de la mer XI0 [cc] | |
131 - 134 (I4) Provenance de la déviation de la verticale au niveau de la mer | |
135 - 138 (A4) Code point pour RAUMTRI *) | |
139 - 141 (I3) numérotation continue (pour GPS-Software) **) | |
142 - 143 (A2) Flag pour GPS **) | |
144 - 147 (I4) Numéro de session GPS (Day of Year) ***) | |
148 - 160 (A13) Réserve, texte supplémentaire | |
*) prévu pour code RAUMTRI | |
**) nécessaire pour "Bernese GPS-Software" | |
***) nécessaire pour la distinction des sessions (fichier des mesures pour LTOP) | |
''' | |
''' | |
Padding | |
String | |
'{:>10}'.format('test') --> align right | |
'{:10}'.format('test') --> align left | |
Integer | |
'{:4d}'.format(42) | |
Float | |
'{:06.2f}'.format(3.141592653589793) | |
''' | |
class FixWidthFieldLine(object): | |
fields = (('idname', '{:10}'), | |
('idtype', '{:4}'), | |
('iddate', '{:>8}'), | |
('canton', '{:>4}'), | |
('nr', '{:>6}'), | |
('lngdeg', '{:5d}' ), | |
('lngmin', '{:3d}' ), | |
('lngsec', '{:10.6f}'), | |
('latdeg', '{:5d}' ), | |
('latmin', '{:3d}' ), | |
('latsec', '{:10.6f}'), | |
('provcoord', '{:4d}' ), | |
('alt', '{:10.6f}'), | |
('provalt', '{:4d}' ), | |
('ref', '{:>2}') | |
) | |
def __init__(self): | |
self.idname = 'gcp11' | |
self.idtype = 'PY' | |
self.iddate = datetime.today().strftime('%Y%m%d') | |
self.canton = '4BL' | |
self.nr = ''.join(random.choices(string.ascii_uppercase + string.digits, k=6)) | |
self.lngdeg = 0 | |
self.lngmin = 0 | |
self.lngsec = 0.0 | |
self.latdeg = 0 | |
self.latmin = 0 | |
self.latsec = 0.0 | |
self.provcoord = 657 | |
self.alt = 0.0 | |
self.provalt = 114 | |
self.ref = '84' | |
def __str__(self): | |
tpls = [tpl for field_name, tpl in self.fields] | |
template = ''.join(tpls) | |
# print(template) | |
vals = [getattr(self, field_name) for field_name, width in self.fields] | |
#for x,y in zip(tpls, vals): | |
# print(x,y, type(y)) | |
return template.format(*vals) | |
def get_coords(coord): | |
d,m,s = coord.split(':') | |
return (int(d), int(m), float(s)) | |
with open(FNAME, newline='') as csvfile: | |
csv_reader = csv.reader(csvfile, delimiter=',') | |
header = next(csv_reader) | |
if header != None: | |
print('$$EL') | |
for row in csv_reader: | |
nr, b, l, h = row | |
bb = get_coords(b) | |
ll = get_coords(l) | |
hh = float(h) | |
le = FixWidthFieldLine() | |
le.idname = nr | |
le.lngdeg, le.lngmin, le.lngsec = ll | |
le.latdeg, le.latmin, le.latsec = bb | |
le.alt = hh | |
print(le) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment