diff --git a/projects/EarthNow/cylc/bin/earthnow.py b/projects/EarthNow/cylc/bin/earthnow.py index 731fe74..07780c4 100755 --- a/projects/EarthNow/cylc/bin/earthnow.py +++ b/projects/EarthNow/cylc/bin/earthnow.py @@ -38,6 +38,7 @@ driver = cfg_products[product]["driver"] options.update(cfg_products[product]) + options = { k:v for k,v in options.items() if k != 'driver' } for data_reader in data_readers: diff --git a/projects/EarthNow/cylc/modules b/projects/EarthNow/cylc/modules index 20cf122..9b5d90b 100644 --- a/projects/EarthNow/cylc/modules +++ b/projects/EarthNow/cylc/modules @@ -1,8 +1,9 @@ - source /usr/share/lmod/lmod/init/bash module load python/GEOSpyD module load ffmpeg +INSTALL_PATH="$(dirname "${BASH_SOURCE[0]}")" +INSTALL_PATH="$(realpath "${INSTALL_PATH}/../")" export PYTHONPATH="$INSTALL_PATH/src:$INSTALL_PATH/cylc/src" export PATH="$INSTALL_PATH/bin:$INSTALL_PATH/cylc/bin:$PATH" diff --git a/projects/EarthNow/cylc/modules.csh b/projects/EarthNow/cylc/modules.csh new file mode 100644 index 0000000..8617160 --- /dev/null +++ b/projects/EarthNow/cylc/modules.csh @@ -0,0 +1,15 @@ +set called = ( $_ ) +if ( "$called" != "" ) then + set script_path = $called[2] + set script_dir = `dirname $script_path` +endif + +source /usr/share/lmod/lmod/init/csh +module load python/GEOSpyD +module load ffmpeg + +set INSTALL_PATH = `realpath $script_dir/../` +setenv PYTHONPATH "$INSTALL_PATH/src:$INSTALL_PATH/cylc/src" +setenv PATH "$INSTALL_PATH/bin:$INSTALL_PATH/cylc/bin:$PATH" + +umask 022 diff --git a/projects/MissionSupport/applications/WxFlight/README b/projects/MissionSupport/applications/WxFlight/README new file mode 100644 index 0000000..268b754 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/README @@ -0,0 +1,3 @@ +wp2traj.py -v -p DC8 test.csv 2024-01-19T8:00:00 2024-01-19T12:00:00 2024-01-19T15:00:00 + +trj_sampler.py -d 60 -o /discover/nobackup/projects/gmao/asia_aq/pub/flights/2024011900/Seoul_DC8_2024-01-19T12:00:00.nc -v -t csv -I -r sampler.rc test.csv diff --git a/projects/MissionSupport/applications/WxFlight/asia-aq/collection.rc b/projects/MissionSupport/applications/WxFlight/asia-aq/collection.rc new file mode 100644 index 0000000..48215c3 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/asia-aq/collection.rc @@ -0,0 +1,13 @@ +BCEXT,OCEXT,SSEXT,SUEXT,DUEXT: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/inst3_3d_ext_Np/inst3_3d_ext_Np.%Y%m%d_%H + +#CLDLOW,CLDMID,CLDHGH,PRECTOT,PRECCON,PRECSNO: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/inst3_2d_met_Nx/inst3_2d_met_Nx.%Y%m%d_%H + +#U2M,V2M,T2M,SLP: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/tavg1_2d_slv_Nx/tavg1_2d_slv_Nx.%Y%m%d_%H + +#SSEXTTAU,DUEXTTAU,BCEXTTAU,OCEXTTAU,SUEXTTAU,NIEXTTAU, DUSMASS25,SSSMASS25,OCSMASS,BCSMASS,NISMASS25,SO4SMASS,COSC: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/inst1_2d_hwl_Nx/inst1_2d_hwl_Nx.%Y%m%d_%H + +#BC,OC,SS,SO4,DU,NI: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/inst3_3d_aer_Np/inst3_3d_aer_Np.%Y%m%d_%H + +#CO,CO2,AIRDENS: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/inst3_3d_chm_Np/inst3_3d_chm_Np.%Y%m%d_%H + +#U,V,RH: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/inst3_3d_asm_Np/inst3_3d_asm_Np.%Y%m%d_%H diff --git a/projects/MissionSupport/applications/WxFlight/asia-aq/collection.rc.save b/projects/MissionSupport/applications/WxFlight/asia-aq/collection.rc.save new file mode 100644 index 0000000..2a5aac0 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/asia-aq/collection.rc.save @@ -0,0 +1,13 @@ +BCEXT,OCEXT,SSEXT,SUEXT,DUEXT: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/inst3_3d_ext_Np/inst3_3d_ext_Np.%Y%m%d_%H + +CLDLOW,CLDMID,CLDHGH,PRECTOT,PRECCON,PRECSNO: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/inst3_2d_met_Nx/inst3_2d_met_Nx.%Y%m%d_%H + +U2M,V2M,T2M,SLP: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/tavg1_2d_slv_Nx/tavg1_2d_slv_Nx.%Y%m%d_%H + +SSEXTTAU,DUEXTTAU,BCEXTTAU,OCEXTTAU,SUEXTTAU,NIEXTTAU, DUSMASS25,SSSMASS25,OCSMASS,BCSMASS,NISMASS25,SO4SMASS,COSC: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/inst1_2d_hwl_Nx/inst1_2d_hwl_Nx.%Y%m%d_%H + +BC,OC,SS,SO4,DU,NI: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/inst3_3d_aer_Np/inst3_3d_aer_Np.%Y%m%d_%H + +CO,CO2,AIRDENS: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/inst3_3d_chm_Np/inst3_3d_chm_Np.%Y%m%d_%H + +U,V,RH: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/inst3_3d_asm_Np/inst3_3d_asm_Np.%Y%m%d_%H diff --git a/projects/MissionSupport/applications/WxFlight/asia-aq/collection.yml b/projects/MissionSupport/applications/WxFlight/asia-aq/collection.yml new file mode 100644 index 0000000..afeb6a7 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/asia-aq/collection.yml @@ -0,0 +1,84 @@ +GEOS-FP: + + collections: + + inst3_3d_ext_Np: + + vars: [BCEXT,OCEXT,SSEXT,SUEXT,DUEXT] + file: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/inst3_3d_ext_Np/inst3_3d_ext_Np.%Y%m%d_%H + + tavg1_2d_flx_Nx: + vars: [PRECTOT,PRECCON,PRECSNO] + file: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/tavg1_2d_flx_Nx/tavg1_2d_flx_Nx.%Y%m%d_%H + + tavg1_2d_rad_Nx: + vars: [CLDLOW,CLDMID,CLDHGH] + file: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/tavg1_2d_rad_Nx/tavg1_2d_rad_Nx.%Y%m%d_%H + +# inst3_2d_met_Nx: + +# vars: [CLDLOW,CLDMID,CLDHGH,PRECTOT,PRECCON,PRECSNO] +# file: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/inst3_2d_met_Nx/inst3_2d_met_Nx.%Y%m%d_%H + + tavg1_2d_slv_Nx: + + vars: [U2M,V2M,T2M,SLP] + file: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/tavg1_2d_slv_Nx/tavg1_2d_slv_Nx.%Y%m%d_%H + + inst1_2d_hwl_Nx: + + vars: [SSEXTTAU,DUEXTTAU,BCEXTTAU,OCEXTTAU,SUEXTTAU,NIEXTTAU, DUSMASS25,SSSMASS25,OCSMASS,BCSMASS,NISMASS25,SO4SMASS,COSC] + file: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/inst1_2d_hwl_Nx/inst1_2d_hwl_Nx.%Y%m%d_%H + + inst3_3d_aer_Np: + + vars: [BC,OC,SS,SO4,DU,NI] + file: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/inst3_3d_aer_Np/inst3_3d_aer_Np.%Y%m%d_%H + + inst3_3d_chm_Np: + + vars: [CO,CO2,AIRDENS] + file: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/inst3_3d_chm_Np/inst3_3d_chm_Np.%Y%m%d_%H + + inst3_3d_asm_Np: + + vars: [U,V,RH] + file: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/inst3_3d_asm_Np/inst3_3d_asm_Np.%Y%m%d_%H + +GEOS-CF: + + collections: + + chm_tavg_1hr_g1440x721_v1: + + vars: [PM25su_RH35_GCC, PM25ni_RH35_GCC, PM25soa_RH35_GCC, PM25bc_RH35_GCC, PM25du_RH35_GCC, PM25oc_RH35_GCC, PM25ss_RH35_GCC, O3, NO2, CO, SO2] + file: /discover/nobackup/projects/gmao/geos_cf/pub/GEOS-CF_NRT/opendap/fcast/chm_tavg_1hr_g1440x721_v1/chm_tavg_1hr_g1440x721_v1.%Y%m%d_%Hz + + chm_inst_1hr_g1440x721_p23: + + vars: [O3,NO2,CO,SO2,PM25_RH35_GCC] + file: /discover/nobackup/projects/gmao/geos_cf/pub/GEOS-CF_NRT/opendap/fcast/chm_inst_1hr_g1440x721_p23/chm_inst_1hr_g1440x721_p23.%Y%m%d_%Hz + + met_tavg_1hr_g1440x721_x1: + + vars: [CLDTT, TPREC, T2M, U10M, V10M, ZPBL] + file: /discover/nobackup/projects/gmao/geos_cf/pub/GEOS-CF_NRT/opendap/fcast/met_tavg_1hr_g1440x721_x1/met_tavg_1hr_g1440x721_x1.%Y%m%d_%Hz + +GEOS-CFAN: + + collections: + + chm_tavg_1hr_g1440x721_v1: + + vars: [PM25su_RH35_GCC, PM25ni_RH35_GCC, PM25soa_RH35_GCC, PM25bc_RH35_GCC, PM25du_RH35_GCC, PM25oc_RH35_GCC, PM25ss_RH35_GCC, O3, NO2, CO, SO2] + file: /discover/nobackup/projects/gmao/geos_cf/pub/GEOS-CF_NRT/opendap/assim/chm_tavg_1hr_g1440x721_v1 + + chm_inst_1hr_g1440x721_p23: + + vars: [O3,NO2,CO,SO2,PM25_RH35_GCC] + file: /discover/nobackup/projects/gmao/geos_cf/pub/GEOS-CF_NRT/opendap/assim/chm_inst_1hr_g1440x721_p23 + + met_tavg_1hr_g1440x721_x1: + + vars: [CLDTT, TPREC, T2M, U10M, V10M, ZPBL] + file: /discover/nobackup/projects/gmao/geos_cf/pub/GEOS-CF_NRT/opendap/assim/met_tavg_1hr_g1440x721_x1 diff --git a/projects/MissionSupport/applications/WxFlight/asia-aq/default.yml b/projects/MissionSupport/applications/WxFlight/asia-aq/default.yml new file mode 100644 index 0000000..5c2be96 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/asia-aq/default.yml @@ -0,0 +1,10 @@ +WX_PATH: /discover/nobackup/projects/gmao/asia_aq +WX_FLIGHT_PATH: $WX_PATH/pub/flight_tracks/$WX_MODEL/Y%Y/M%m/D%d/H%H +#WX_CURTAIN_PATH: /discover/nobackup/dao_ops/jardizzo/ASIA-AQ/curtain/$WX_MODEL/Y%Y/M%m/D%d/H%H +WX_CURTAIN_PATH: /gpfsm/dnb06/projects/p14/pub/fp/.internal/ASIA-AQ/flight_tracks/$WX_MODEL/%Y%m%d_%H + +WX_CURTAIN_FILE: $WX_CURTAIN_PATH/nasa.gmao.flight_track.$aircraft.$stream.$field.0.$airport.%Y-%m-%dT%H:%M:%S.PT000H.png + +HANDLERS: + GEOS-FP: curtain_fp + GEOS-CF: curtain_cf diff --git a/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/Manila/Manila_waypoints.csv b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/Manila/Manila_waypoints.csv new file mode 100644 index 0000000..4fdba11 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/Manila/Manila_waypoints.csv @@ -0,0 +1,3571 @@ +city,utc_adjust +Manila,8 +waypoint,lon,lat +RPLC,120.556,15.18200003 +transit,120.56232759211345,15.175791398462003 +transit,120.568654814593,15.169582585856645 +transit,120.5749816676081,15.16337359227141 +transit,120.58130815132822,15.157164417793794 +transit,120.5876342659228,15.150955062511267 +transit,120.59396001156126,15.14474552651128 +transit,120.60028538841301,15.138535809881272 +transit,120.60661039664744,15.132325912708675 +transit,120.61293503643391,15.126115835080892 +transit,120.6192593079418,15.11990557708532 +transit,120.62558321134041,15.113695138809339 +transit,120.63190674679909,15.107484520340309 +transit,120.63822991448711,15.10127372176558 +transit,120.64455271457378,15.095062743172493 +transit,120.65087514722836,15.088851584648351 +transit,120.65719721262009,15.082640246280466 +transit,120.6635189109182,15.076428728156124 +transit,120.66984024229191,15.070217030362606 +transit,120.67616120691042,15.064005152987152 +transit,120.6824818049429,15.057793096117013 +transit,120.68880203655851,15.051580859839419 +transit,120.6951219019264,15.045368444241577 +transit,120.70144140121567,15.03915584941069 +transit,120.70776053459548,15.03294307543393 +transit,120.71407930223488,15.026730122398469 +transit,120.72039770430295,15.020516990391458 +transit,120.72671574096876,15.014303679500028 +transit,120.73303341240134,15.008090189811307 +transit,120.7393507187697,15.001876521412399 +transit,120.74566766024286,14.99566267439039 +transit,120.75198423698978,14.989448648832358 +transit,120.75830044917947,14.983234444825364 +transit,120.76461629698086,14.977020062456457 +transit,120.77093178056288,14.970805501812661 +transit,120.77724690009445,14.964590762980993 +transit,120.78356165574446,14.958375846048451 +transit,120.78987604768182,14.95216075110203 +transit,120.79619007607536,14.94594547822869 +transit,120.80250374109394,14.939730027515386 +transit,120.8088170429064,14.933514399049061 +transit,120.81512998168154,14.927298592916644 +transit,120.82144255758816,14.921082609205031 +transit,120.82775477079502,14.914866448001135 +transit,120.83406662147091,14.908650109391827 +transit,120.84037810978455,14.90243359346397 +transit,120.84668923590468,14.896216900304411 +RPUX,120.853,14.89000003 +transit,120.85979782446294,14.884600564854255 +transit,120.86659531051718,14.879200895697487 +transit,120.87339245829533,14.873801022616716 +transit,120.88018926793,14.868400945698953 +transit,120.88698573955382,14.863000665031208 +transit,120.89378187329942,14.857600180700459 +transit,120.90057766929938,14.852199492793686 +transit,120.90737312768633,14.846798601397856 +transit,120.91416824859287,14.841397506599918 +transit,120.92096303215158,14.835996208486819 +transit,120.92775747849507,14.830594707145481 +transit,120.9345515877559,14.825193002662823 +transit,120.94134536006668,14.819791095125751 +transit,120.94813879555998,14.814388984621152 +transit,120.95493189436837,14.808986671235916 +transit,120.96172465662443,14.803584155056903 +transit,120.96851708246069,14.798181436170978 +transit,120.97530917200974,14.792778514664978 +transit,120.98210092540413,14.78737539062574 +transit,120.9888923427764,14.781972064140092 +transit,120.9956834242591,14.776568535294828 +transit,121.00247416998477,14.771164804176754 +transit,121.00926458008594,14.765760870872654 +transit,121.01605465469515,14.760356735469305 +transit,121.02284439394494,14.754952398053465 +transit,121.02963379796779,14.749547858711882 +transit,121.03642286689625,14.744143117531296 +transit,121.0432116008628,14.738738174598431 +TP1,121.05,14.73333303 +transit,121.051095723919,14.72546409823825 +transit,121.05219136923515,14.717595155954921 +transit,121.05328693599787,14.709726203155862 +transit,121.05438242425664,14.701857239846916 +transit,121.05547783406094,14.693988266033939 +transit,121.05657316546016,14.686119281722771 +transit,121.05766841850375,14.678250286919257 +transit,121.05876359324112,14.670381281629242 +transit,121.05985868972166,14.662512265858577 +transit,121.06095370799477,14.654643239613106 +transit,121.0620486481098,14.646774202898664 +transit,121.0631435101161,14.63890515572111 +transit,121.06423829406307,14.631036098086266 +MAO1,121.065333,14.62316703 +transit,121.06905300826244,14.614962521959232 +transit,121.07277274046876,14.606757948816796 +transit,121.07649219679926,14.598553310614683 +transit,121.08021137743422,14.590348607394908 +transit,121.08393028255385,14.582143839199444 +transit,121.08764891233832,14.573939006070276 +transit,121.09136726696777,14.56573410804936 +transit,121.09508534662227,14.557529145178671 +transit,121.09880315148189,14.549324117500145 +transit,121.1025206817266,14.54111902505572 +transit,121.10623793753639,14.532913867887324 +transit,121.10995491909114,14.524708646036885 +transit,121.11367162657073,14.516503359546299 +transit,121.117388060155,14.50829800845748 +transit,121.1211042200237,14.500092592812312 +transit,121.12482010635657,14.491887112652678 +transit,121.12853571933333,14.483681568020451 +transit,121.13225105913361,14.47547595895749 +transit,121.13596612593702,14.467270285505647 +transit,121.13968091992312,14.459064547706769 +transit,121.14339544127142,14.45085874560269 +transit,121.14710969016143,14.442652879235222 +transit,121.15082366677254,14.434446948646196 +transit,121.15453737128415,14.42624095387741 +transit,121.1582508038756,14.418034894970662 +transit,121.16196396472623,14.40982877196773 +transit,121.16567685401523,14.401622584910404 +transit,121.16938947192187,14.393416333840443 +transit,121.1731018186253,14.385210018799611 +transit,121.17681389430464,14.377003639829647 +transit,121.18052569913901,14.368797196972299 +transit,121.1842372333074,14.360590690269289 +transit,121.18794849698884,14.352384119762348 +transit,121.19165949036228,14.344177485493182 +transit,121.19537021360664,14.335970787503486 +transit,121.19908066690076,14.327764025834961 +transit,121.2027908504235,14.319557200529285 +transit,121.2065007643536,14.311350311628132 +transit,121.21021040886986,14.30314335917317 +transit,121.21391978415093,14.294936343206047 +transit,121.21762889037547,14.286729263768416 +transit,121.2213377277221,14.278522120901911 +transit,121.22504629636938,14.270314914648154 +transit,121.22875459649586,14.262107645048763 +transit,121.23246262827999,14.253900312145355 +transit,121.23617039190022,14.245692915979518 +transit,121.23987788753494,14.237485456592848 +transit,121.24358511536252,14.229277934026925 +transit,121.24729207556128,14.221070348323318 +transit,121.25099876830944,14.212862699523585 +transit,121.25470519378528,14.204654987669288 +transit,121.25841135216696,14.196447212801964 +transit,121.26211724363262,14.18823937496314 +transit,121.26582286836036,14.180031474194358 +transit,121.26952822652824,14.171823510537116 +transit,121.27323331831425,14.163615484032935 +transit,121.2769381438964,14.155407394723298 +transit,121.2806427034526,14.147199242649702 +transit,121.28434699716074,14.138991027853624 +transit,121.28805102519864,14.130782750376532 +transit,121.29175478774414,14.122574410259885 +transit,121.29545828497497,14.114366007545135 +transit,121.29916151706885,14.106157542273722 +transit,121.30286448420348,14.097949014487085 +transit,121.30656718655646,14.08974042422664 +transit,121.3102696243054,14.081531771533802 +transit,121.31397179762784,14.073323056449986 +transit,121.3176737067013,14.065114279016573 +transit,121.32137535170321,14.05690543927496 +transit,121.32507673281104,14.048696537266515 +transit,121.32877785020213,14.04048757303262 +transit,121.33247870405384,14.032278546614624 +transit,121.33617929454346,14.02406945805388 +transit,121.33987962184824,14.015860307391733 +transit,121.34357968614539,14.00765109466951 +transit,121.3472794876121,13.999441819928538 +transit,121.35097902642548,13.991232483210126 +transit,121.35467830276262,13.983023084555578 +transit,121.35837731680057,13.9748136240062 +transit,121.36207606871633,13.966604101603268 +transit,121.36577455868688,13.958394517388063 +transit,121.3694727868891,13.950184871401857 +transit,121.3731707534999,13.941975163685907 +transit,121.37686845869612,13.93376539428146 +transit,121.38056590265454,13.92555556322976 +transit,121.38426308555191,13.917345670572047 +transit,121.38796000756496,13.909135716349532 +transit,121.39165666887034,13.900925700603437 +transit,121.3953530696447,13.892715623374963 +transit,121.39904921006462,13.884505484705315 +transit,121.40274509030664,13.876295284635663 +transit,121.40644071054727,13.868085023207206 +transit,121.41013607096298,13.859874700461098 +transit,121.41383117173018,13.851664316438512 +transit,121.41752601302527,13.84345387118059 +transit,121.42122059502456,13.835243364728482 +transit,121.42491491790439,13.827032797123316 +transit,121.428608981841,13.818822168406216 +transit,121.43230278701058,13.810611478618304 +transit,121.43599633358934,13.802400727800679 +transit,121.43968962175342,13.794189915994446 +transit,121.44338265167887,13.78597904324069 +transit,121.44707542354179,13.777768109580496 +transit,121.45076793751815,13.769557115054928 +transit,121.45446019378396,13.76134605970505 +transit,121.45815219251513,13.753134943571922 +transit,121.46184393388755,13.744923766696585 +transit,121.46553541807705,13.736712529120073 +transit,121.46922664525948,13.728501230883413 +transit,121.47291761561057,13.720289872027625 +transit,121.47660832930606,13.712078452593715 +transit,121.48029878652163,13.703866972622688 +transit,121.48398898743292,13.695655432155535 +transit,121.48767893221556,13.687443831233237 +transit,121.49136862104507,13.679232169896766 +transit,121.495058054097,13.67102044818709 +transit,121.49874723154684,13.662808666145162 +transit,121.50243615357,13.654596823811936 +transit,121.50612482034191,13.646384921228343 +transit,121.50981323203793,13.638172958435316 +transit,121.51350138883335,13.629960935473784 +transit,121.51718929090346,13.621748852384647 +transit,121.52087693842353,13.613536709208814 +transit,121.52456433156871,13.60532450598718 +transit,121.5282514705142,13.597112242760629 +transit,121.5319383554351,13.588899919570041 +transit,121.53562498650648,13.580687536456287 +transit,121.5393113639034,13.572475093460218 +transit,121.54299748780082,13.564262590622697 +transit,121.54668335837373,13.55605002798456 +transit,121.55036897579704,13.547837405586638 +transit,121.55405434024563,13.539624723469759 +transit,121.5577394518943,13.531411981674745 +transit,121.56142431091791,13.523199180242393 +transit,121.56510891749117,13.514986319213511 +transit,121.5687932717888,13.506773398628885 +transit,121.5724773739855,13.498560418529294 +transit,121.57616122425588,13.490347378955521 +transit,121.57984482277456,13.482134279948319 +transit,121.58352816971609,13.47392112154845 +transit,121.58721126525498,13.46570790379666 +transit,121.5908941095657,13.457494626733688 +transit,121.59457670282269,13.449281290400265 +transit,121.59825904520038,13.44106789483711 +transit,121.60194113687308,13.432854440084938 +transit,121.60562297801513,13.424640926184447 +transit,121.60930456880082,13.416427353176337 +transit,121.61298590940439,13.408213721101292 +TP2,121.616667,13.40000003 +transit,121.60885689895416,13.404682816452143 +transit,121.60104649558956,13.409365359547875 +transit,121.59323578980056,13.414047659190004 +transit,121.58542478148156,13.418729715281337 +transit,121.57761347052694,13.423411527724678 +transit,121.56980185683109,13.42809309642281 +transit,121.56198994028843,13.43277442127851 +transit,121.55417772079338,13.437455502194558 +transit,121.54636519824032,13.442136339073716 +transit,121.53855237252374,13.446816931818734 +transit,121.53073924353802,13.451497280332362 +transit,121.52292581117764,13.456177384517337 +transit,121.51511207533704,13.460857244276388 +transit,121.50729803591068,13.465536859512236 +transit,121.49948369279302,13.470216230127596 +transit,121.49166904587854,13.474895356025165 +transit,121.48385409506173,13.479574237107645 +transit,121.47603884023708,13.484252873277716 +transit,121.46822328129907,13.488931264438063 +transit,121.46040741814224,13.493609410491347 +transit,121.45259125066107,13.498287311340237 +transit,121.4447747787501,13.502964966887383 +transit,121.43695800230387,13.507642377035422 +transit,121.42914092121687,13.512319541687 +transit,121.4213235353837,13.516996460744734 +transit,121.41350584469889,13.52167313411125 +transit,121.40568784905699,13.526349561689152 +transit,121.39786954835259,13.531025743381038 +transit,121.39005094248026,13.53570167908951 +transit,121.38223203133457,13.540377368717143 +transit,121.37441281481013,13.545052812166515 +transit,121.36659329280154,13.549728009340194 +transit,121.35877346520338,13.554402960140738 +transit,121.3509533319103,13.559077664470694 +transit,121.34313289281691,13.563752122232604 +transit,121.33531214781786,13.568426333328995 +transit,121.32749109680775,13.573100297662402 +transit,121.31966973968126,13.577774015135331 +transit,121.31184807633304,13.582447485650288 +transit,121.30402610665773,13.587120709109774 +transit,121.29620383055004,13.59179368541628 +transit,121.28838124790461,13.59646641447228 +transit,121.28055835861616,13.601138896180252 +transit,121.27273516257937,13.605811130442659 +transit,121.26491165968893,13.610483117161953 +transit,121.25708784983958,13.61515485624058 +transit,121.24926373292602,13.619826347580977 +transit,121.24143930884298,13.624497591085575 +transit,121.2336145774852,13.629168586656796 +transit,121.22578953874742,13.633839334197045 +transit,121.21796419252439,13.638509833608733 +transit,121.21013853871086,13.643180084794247 +transit,121.20231257720162,13.647850087655979 +transit,121.19448630789142,13.6525198420963 +transit,121.18665973067506,13.657189348017583 +transit,121.17883284544733,13.661858605322186 +transit,121.17100565210302,13.666527613912464 +transit,121.16317815053694,13.671196373690751 +transit,121.1553503406439,13.675864884559388 +transit,121.14752222231874,13.680533146420702 +transit,121.13969379545628,13.685201159177 +transit,121.13186505995137,13.6898689227306 +transit,121.12403601569883,13.694536436983796 +transit,121.11620666259356,13.69920370183888 +transit,121.10837700053037,13.703870717198136 +transit,121.10054702940418,13.70853748296383 +transit,121.09271674910985,13.713203999038237 +transit,121.08488615954226,13.717870265323603 +transit,121.07705526059632,13.722536281722183 +transit,121.06922405216693,13.727202048136217 +transit,121.06139253414901,13.731867564467928 +transit,121.05356070643747,13.736532830619538 +transit,121.04572856892723,13.741197846493264 +transit,121.03789612151326,13.745862611991306 +transit,121.03006336409047,13.750527127015868 +transit,121.02223029655383,13.755191391469129 +transit,121.0143969187983,13.759855405253267 +transit,121.00656323071884,13.764519168270452 +transit,120.99872923221045,13.769182680422844 +transit,120.9908949231681,13.7738459416126 +transit,120.9830603034868,13.778508951741857 +transit,120.97522537306153,13.783171710712756 +transit,120.96739013178733,13.787834218427415 +transit,120.95955457955918,13.792496474787962 +transit,120.95171871627214,13.79715847969649 +transit,120.94388254182124,13.801820233055116 +transit,120.93604605610152,13.806481734765917 +transit,120.92820925900803,13.811142984730987 +transit,120.92037215043582,13.815803982852387 +transit,120.91253473027999,13.820464729032192 +transit,120.9046969984356,13.82512522317246 +transit,120.89685895479772,13.829785465175233 +transit,120.88902059926147,13.83444545494255 +transit,120.88118193172193,13.839105192376438 +transit,120.87334295207422,13.843764677378928 +transit,120.86550366021348,13.848423909852029 +transit,120.8576640560348,13.85308288969774 +transit,120.84982413943335,13.85774161681806 +transit,120.84198391030425,13.862400091114976 +transit,120.83414336854266,13.867058312490467 +transit,120.82630251404373,13.871716280846499 +transit,120.81846134670265,13.876373996085038 +transit,120.81061986641458,13.88103145810803 +transit,120.80277807307472,13.885688666817417 +transit,120.79493596657825,13.89034562211514 +transit,120.78709354682039,13.895002323903118 +transit,120.77925081369634,13.89965877208327 +transit,120.77140776710131,13.904314966557509 +transit,120.76356440693054,13.908970907227724 +transit,120.75572073307927,13.913626593995817 +transit,120.74787674544274,13.918282026763661 +transit,120.7400324439162,13.922937205433131 +transit,120.73218782839493,13.927592129906097 +transit,120.72434289877417,13.932246800084409 +transit,120.71649765494922,13.936901215869911 +transit,120.70865209681536,13.941555377164446 +transit,120.7008062242679,13.946209283869846 +transit,120.69296003720211,13.95086293588793 +transit,120.68511353551334,13.955516333120501 +transit,120.67726671909688,13.960169475469373 +transit,120.6694195878481,13.964822362836333 +transit,120.66157214166229,13.969474995123171 +transit,120.65372438043484,13.974127372231665 +transit,120.64587630406108,13.978779494063577 +transit,120.63802791243637,13.98343136052067 +transit,120.6301792054561,13.988082971504696 +transit,120.62233018301566,13.992734326917393 +transit,120.6144808450104,13.997385426660493 +transit,120.60663119133577,14.002036270635728 +transit,120.59878122188714,14.006686858744802 +transit,120.59093093655993,14.01133719088943 +transit,120.58308033524956,14.015987266971308 +transit,120.57522941785149,14.02063708689212 +transit,120.56737818426113,14.025286650553555 +transit,120.55952663437395,14.029935957857278 +transit,120.5516747680854,14.034585008704955 +transit,120.54382258529097,14.039233802998234 +transit,120.5359700858861,14.043882340638765 +transit,120.52811726976628,14.048530621528187 +transit,120.52026413682704,14.053178645568119 +transit,120.51241068696383,14.057826412660184 +transit,120.50455692007222,14.062473922705996 +transit,120.49670283604766,14.067121175607145 +transit,120.48884843478574,14.071768171265235 +transit,120.48099371618197,14.076414909581842 +transit,120.47313868013188,14.081061390458546 +transit,120.46528332653106,14.085707613796908 +transit,120.45742765527504,14.090353579498489 +transit,120.44957166625943,14.09499928746483 +transit,120.44171535937977,14.099644737597474 +transit,120.43385873453167,14.10428992979796 +transit,120.42600179161073,14.108934863967795 +transit,120.41814453051254,14.113579540008503 +transit,120.41028695113273,14.11822395782158 +transit,120.40242905336693,14.12286811730853 +transit,120.39457083711076,14.127512018370826 +transit,120.38671230225987,14.132155660909964 +transit,120.3788534487099,14.136799044827397 +transit,120.37099427635653,14.141442170024593 +transit,120.36313478509541,14.146085036402994 +transit,120.35527497482222,14.150727643864053 +transit,120.34741484543267,14.155369992309202 +transit,120.33955439682241,14.160012081639858 +transit,120.33169362888718,14.164653911757439 +transit,120.32383254152268,14.169295482563356 +transit,120.31597113462463,14.173936793959003 +transit,120.30810940808878,14.178577845845775 +transit,120.30024736181085,14.183218638125043 +transit,120.29238499568658,14.187859170698184 +transit,120.28452230961175,14.19249944346656 +transit,120.2766593034821,14.197139456331524 +transit,120.26879597719343,14.20177920919442 +transit,120.26093233064152,14.206418701956586 +transit,120.25306836372216,14.21105793451935 +transit,120.24520407633115,14.215696906784025 +transit,120.2373394683643,14.220335618651925 +transit,120.22947453971743,14.224974070024347 +transit,120.22160929028637,14.229612260802586 +transit,120.21374371996696,14.234250190887922 +transit,120.20587782865503,14.23888786018163 +transit,120.19801161624646,14.243525268584978 +transit,120.19014508263712,14.248162415999214 +transit,120.18227822772285,14.252799302325593 +transit,120.17441105139956,14.25743592746535 +transit,120.16654355356313,14.262072291319715 +transit,120.15867573410947,14.26670839378991 +transit,120.15080759293448,14.271344234777144 +transit,120.14293912993409,14.275979814182621 +transit,120.13507034500422,14.280615131907531 +transit,120.12720123804081,14.28525018785307 +transit,120.1193318089398,14.2898849819204 +transit,120.11146205759717,14.294519514010698 +transit,120.10359198390884,14.299153784025119 +transit,120.09572158777083,14.303787791864814 +transit,120.08785086907909,14.308421537430918 +transit,120.07997982772963,14.313055020624567 +transit,120.07210846361845,14.317688241346882 +transit,120.06423677664154,14.322321199498983 +transit,120.05636476669494,14.326953894981964 +transit,120.04849243367467,14.331586327696932 +transit,120.04061977747678,14.336218497544966 +transit,120.0327467979973,14.34085040442715 +transit,120.02487349513228,14.345482048244548 +transit,120.01699986877782,14.350113428898224 +transit,120.00912591882997,14.354744546289226 +transit,120.0012516451848,14.359375400318594 +transit,119.99337704773842,14.364005990887367 +transit,119.98550212638693,14.368636317896572 +transit,119.97762688102645,14.373266381247218 +transit,119.96975131155308,14.377896180840319 +transit,119.96187541786297,14.382525716576863 +transit,119.95399919985225,14.387154988357846 +transit,119.94612265741705,14.391783996084245 +transit,119.93824579045356,14.396412739657029 +transit,119.93036859885792,14.401041218977165 +transit,119.92249108252634,14.405669433945606 +transit,119.91461324135496,14.410297384463295 +transit,119.90673507524,14.414925070431163 +transit,119.89885658407766,14.419552491750142 +transit,119.89097776776416,14.424179648321147 +transit,119.88309862619572,14.428806540045086 +transit,119.87521915926855,14.433433166822855 +transit,119.86733936687892,14.438059528555351 +transit,119.85945924892306,14.442685625143456 +transit,119.85157880529725,14.447311456488034 +transit,119.84369803589775,14.451937022489954 +transit,119.83581694062082,14.456562323050072 +transit,119.82793551936278,14.461187358069234 +transit,119.8200537720199,14.465812127448268 +transit,119.8121716984885,14.470436631088013 +transit,119.8042892986649,14.475060868889285 +transit,119.79640657244542,14.479684840752888 +transit,119.78852351972638,14.484308546579626 +transit,119.78064014040415,14.488931986270298 +transit,119.77275643437507,14.493555159725679 +transit,119.76487240153551,14.498178066846538 +transit,119.75698804178184,14.502800707533652 +transit,119.74910335501042,14.507423081687769 +transit,119.74121834111769,14.512045189209637 +TP3,119.733333,14.51666703 +transit,119.74245511347887,14.516859138136162 +transit,119.75157724268301,14.517050891614721 +transit,119.76069938758363,14.517242290430186 +transit,119.7698215481519,14.517433334577088 +transit,119.778943724359,14.517624024049958 +transit,119.78806591617612,14.517814358843355 +transit,119.79718812357443,14.518004338951831 +transit,119.80631034652511,14.518193964369956 +transit,119.81543258499933,14.518383235092298 +transit,119.82455483896827,14.518572151113457 +transit,119.8336771084031,14.518760712428026 +transit,119.84279939327499,14.51894891903061 +transit,119.8519216935551,14.519136770915836 +transit,119.8610440092146,14.519324268078323 +transit,119.87016634022466,14.519511410512713 +transit,119.87928868655644,14.519698198213655 +transit,119.8884110481811,14.519884631175808 +transit,119.8975334250698,14.520070709393838 +transit,119.90665581719368,14.52025643286243 +transit,119.91577822452392,14.520441801576267 +transit,119.92490064703168,14.52062681553005 +transit,119.93402308468808,14.520811474718489 +transit,119.94314553746429,14.520995779136301 +transit,119.95226800533146,14.521179728778218 +transit,119.96139048826073,14.521363323638978 +transit,119.97051298622326,14.521546563713331 +transit,119.97963549919015,14.52172944899604 +transit,119.9887580271326,14.52191197948187 +transit,119.99788057002172,14.522094155165606 +transit,120.00700312782864,14.522275976042032 +transit,120.01612570052451,14.522457442105951 +transit,120.02524828808046,14.522638553352174 +transit,120.03437089046764,14.52281930977552 +transit,120.04349350765715,14.522999711370826 +transit,120.05261613962014,14.523179758132923 +transit,120.06173878632774,14.52335945005667 +transit,120.07086144775107,14.523538787136921 +transit,120.07998412386125,14.523717769368552 +transit,120.0891068146294,14.523896396746444 +transit,120.09822952002666,14.524074669265486 +transit,120.10735224002414,14.524252586920579 +transit,120.11647497459296,14.524430149706639 +transit,120.12559772370423,14.524607357618583 +transit,120.13472048732906,14.524784210651344 +transit,120.14384326543858,14.524960708799867 +transit,120.15296605800388,14.525136852059099 +transit,120.1620888649961,14.525312640424003 +transit,120.17121168638631,14.525488073889557 +transit,120.18033452214566,14.525663152450734 +transit,120.1894573722452,14.525837876102537 +transit,120.19858023665608,14.526012244839965 +transit,120.20770311534939,14.526186258658022 +transit,120.21682600829621,14.526359917551739 +transit,120.22594891546765,14.526533221516154 +transit,120.23507183683482,14.5267061705463 +transit,120.2441947723688,14.526878764637232 +transit,120.25331772204069,14.527051003784026 +transit,120.26244068582157,14.52722288798174 +transit,120.27156366368254,14.527394417225459 +transit,120.28068665559469,14.527565591510283 +transit,120.2898096615291,14.527736410831311 +transit,120.29893268145686,14.527906875183666 +transit,120.30805571534906,14.528076984562459 +transit,120.31717876317676,14.528246738962837 +transit,120.32630182491106,14.528416138379937 +transit,120.33542490052302,14.528585182808916 +transit,120.34454798998375,14.528753872244932 +transit,120.3536710932643,14.52892220668317 +transit,120.36279421033575,14.529090186118813 +transit,120.37191734116917,14.529257810547046 +transit,120.38104048573562,14.529425079963088 +transit,120.3901636440062,14.529591994362148 +transit,120.39928681595194,14.529758553739445 +transit,120.40841000154394,14.529924758090225 +transit,120.41753320075324,14.530090607409731 +transit,120.42665641355092,14.530256101693213 +transit,120.43577963990803,14.530421240935938 +transit,120.44490287979563,14.530586025133196 +transit,120.4540261331848,14.530750454280257 +transit,120.46314940004656,14.53091452837242 +transit,120.47227268035199,14.531078247404999 +transit,120.48139597407214,14.531241611373302 +transit,120.49051928117807,14.531404620272665 +transit,120.4996426016408,14.531567274098414 +transit,120.50876593543141,14.531729572845906 +transit,120.51788928252093,14.53189151651049 +transit,120.52701264288042,14.532053105087536 +transit,120.53613601648091,14.532214338572425 +transit,120.54525940329346,14.532375216960544 +transit,120.5543828032891,14.532535740247281 +transit,120.56350621643887,14.532695908428057 +transit,120.5726296427138,14.532855721498283 +transit,120.58175308208494,14.53301517945339 +transit,120.59087653452333,14.53317428228881 +TP4,120.6,14.53333303 +transit,120.60891325177454,14.532211177408374 +transit,120.61782641362562,14.531088985787047 +transit,120.62673948553424,14.529966455166676 +transit,120.6356524674814,14.528843585577919 +transit,120.64456535944814,14.527720377051432 +transit,120.65347816141545,14.526596829617894 +transit,120.66239087336437,14.525472943307976 +transit,120.67130349527596,14.524348718152378 +transit,120.68021602713127,14.52322415418179 +transit,120.68912846891136,14.522099251426917 +transit,120.6980408205973,14.520974009918476 +transit,120.70695308217019,14.519848429687181 +transit,120.71586525361108,14.51872251076377 +transit,120.72477733490112,14.517596253178972 +transit,120.73368932602139,14.51646965696354 +transit,120.74260122695303,14.515342722148226 +transit,120.75151303767716,14.514215448763785 +transit,120.7604247581749,14.513087836840993 +transit,120.76933638842745,14.511959886410628 +transit,120.77824792841592,14.510831597503469 +transit,120.7871593781215,14.509702970150322 +transit,120.79607073752537,14.508574004381979 +transit,120.80498200660871,14.507444700229257 +transit,120.81389318535273,14.506315057722974 +transit,120.82280427373861,14.50518507689395 +transit,120.8317152717476,14.504054757773021 +transit,120.84062617936091,14.502924100391041 +transit,120.84953699655976,14.501793104778846 +transit,120.85844772332543,14.500661770967307 +transit,120.86735835963914,14.499530098987284 +transit,120.87626890548218,14.498398088869656 +transit,120.8851793608358,14.497265740645302 +transit,120.89408972568133,14.49613305434512 +RPLS,120.903,14.49500003 +transit,120.91103367798593,14.493834566218396 +transit,120.91906727200656,14.492668827652633 +transit,120.92710078205005,14.491502814328562 +transit,120.93513420810456,14.490336526272037 +transit,120.94316755015822,14.489169963508923 +transit,120.95120080819922,14.488003126065085 +transit,120.95923398221572,14.486836013966391 +transit,120.96726707219588,14.485668627238729 +transit,120.97530007812792,14.484500965907973 +TP5,120.983333,14.48333303 +transit,120.98888832080638,14.486111193273727 +transit,120.9944437799241,14.488889224610709 +transit,120.99999937737775,14.49166712398139 +transit,121.00555511319187,14.494444891356213 +transit,121.0111109873911,14.497222526705604 +TP6,121.016667,14.50000003 +transit,121.02291618161927,14.504167242662048 +transit,121.02916559692267,14.508334287533266 +transit,121.03541524597964,14.512501164557353 +transit,121.04166512885968,14.516667873678005 +transit,121.04791524563227,14.520834414838916 +transit,121.05416559636687,14.525000787983764 +transit,121.06041618113295,14.529166993056233 +TP7,121.066667,14.53333303 +transit,121.07583018072394,14.533882414209392 +transit,121.08499340670342,14.534431440154327 +transit,121.09415667791092,14.534980107818962 +transit,121.10331999431891,14.535528417187455 +transit,121.11248335589988,14.536076368243979 +transit,121.1216467626263,14.536623960972735 +transit,121.13081021447063,14.537171195357901 +transit,121.13997371140532,14.537718071383694 +transit,121.14913725340284,14.53826458903432 +transit,121.15830084043564,14.538810748294011 +transit,121.16746447247617,14.539356549147001 +transit,121.17662814949685,14.539901991577533 +transit,121.18579187147013,14.540447075569869 +transit,121.19495563836843,14.540991801108271 +transit,121.20411945016417,14.54153616817701 +transit,121.2132833068298,14.542080176760381 +transit,121.2224472083377,14.542623826842673 +transit,121.23161115466029,14.543167118408192 +transit,121.24077514576997,14.543710051441261 +transit,121.24993918163916,14.544252625926195 +transit,121.25910326224022,14.54479484184734 +transit,121.26826738754556,14.545336699189036 +transit,121.27743155752755,14.545878197935643 +transit,121.28659577215859,14.546419338071534 +transit,121.29576003141102,14.54696011958107 +transit,121.30492433525723,14.547500542448649 +transit,121.31408868366958,14.548040606658665 +transit,121.32325307662043,14.548580312195526 +transit,121.33241751408211,14.549119659043642 +transit,121.341581996027,14.549658647187448 +transit,121.35074652242741,14.550197276611378 +transit,121.3599110932557,14.55073554729988 +transit,121.3690757084842,14.551273459237406 +transit,121.37824036808523,14.55181101240843 +transit,121.3874050720311,14.552348206797427 +transit,121.39656982029415,14.552885042388887 +transit,121.40573461284667,14.553421519167301 +transit,121.414899449661,14.553957637117183 +transit,121.42406433070938,14.554493396223052 +transit,121.43322925596416,14.555028796469427 +transit,121.44239422539762,14.555563837840852 +transit,121.45155923898204,14.556098520321877 +transit,121.46072429668969,14.556632843897054 +transit,121.46988939849287,14.557166808550955 +transit,121.47905454436382,14.557700414268163 +transit,121.48821973427482,14.558233661033256 +transit,121.49738496819815,14.558766548830839 +transit,121.50655024610603,14.559299077645516 +transit,121.51571556797074,14.559831247461915 +transit,121.5248809337645,14.560363058264652 +transit,121.53404634345958,14.56089451003838 +transit,121.54321179702818,14.561425602767736 +transit,121.55237729444256,14.561956336437385 +transit,121.56154283567493,14.562486711032001 +transit,121.57070842069751,14.563016726536254 +transit,121.57987404948253,14.563546382934835 +transit,121.58903972200218,14.564075680212447 +transit,121.59820543822867,14.5646046183538 +transit,121.6073711981342,14.565133197343611 +transit,121.61653700169097,14.565661417166611 +transit,121.62570284887119,14.56618927780754 +transit,121.63486873964699,14.566716779251148 +transit,121.64403467399059,14.567243921482198 +transit,121.65320065187416,14.567770704485456 +transit,121.66236667326987,14.568297128245705 +transit,121.67153273814988,14.568823192747736 +transit,121.68069884648634,14.569348897976344 +transit,121.68986499825142,14.569874243916354 +transit,121.69903119341727,14.57039923055257 +transit,121.70819743195602,14.570923857869833 +transit,121.71736371383982,14.571448125852982 +transit,121.72653003904081,14.571972034486867 +transit,121.73569640753111,14.572495583756353 +transit,121.74486281928284,14.57301877364631 +transit,121.75402927426813,14.573541604141617 +transit,121.7631957724591,14.574064075227167 +transit,121.77236231382784,14.574586186887863 +transit,121.78152889834648,14.575107939108621 +transit,121.7906955259871,14.575629331874358 +transit,121.7998621967218,14.57615036517001 +transit,121.80902891052267,14.57667103898051 +transit,121.8181956673618,14.577191353290825 +transit,121.82736246721126,14.577711308085908 +transit,121.83652931004313,14.57823090335073 +transit,121.84569619582949,14.578750139070287 +transit,121.85486312454239,14.579269015229562 +transit,121.8640300961539,14.579787531813555 +transit,121.87319711063607,14.580305688807288 +transit,121.88236416796094,14.580823486195785 +transit,121.89153126810058,14.581340923964072 +transit,121.90069841102701,14.5818580020972 +transit,121.90986559671227,14.582374720580212 +transit,121.9190328251284,14.58289107939819 +transit,121.92820009624741,14.583407078536194 +transit,121.93736741004133,14.583922717979313 +transit,121.94653476648217,14.584437997712644 +transit,121.95570216554196,14.584952917721287 +transit,121.96486960719268,14.585467477990361 +transit,121.97403709140634,14.58598167850499 +transit,121.98320461815494,14.586495519250304 +transit,121.99237218741048,14.58700900021146 +transit,122.00153979914494,14.587522121373604 +transit,122.01070745333028,14.5880348827219 +transit,122.0198751499385,14.588547284241535 +transit,122.02904288894156,14.589059325917686 +transit,122.03821067031143,14.589571007735548 +transit,122.04737849402008,14.590082329680333 +transit,122.05654636003946,14.590593291737255 +transit,122.06571426834152,14.59110389389154 +transit,122.07488221889822,14.591614136128431 +transit,122.08405021168149,14.592124018433163 +transit,122.09321824666326,14.592633540791 +transit,122.10238632381547,14.593142703187215 +transit,122.11155444311005,14.593651505607074 +transit,122.12072260451893,14.594159948035873 +transit,122.12989080801403,14.594668030458902 +transit,122.13905905356724,14.595175752861477 +transit,122.14822734115047,14.595683115228915 +transit,122.15739567073565,14.59619011754654 +transit,122.16656404229467,14.596696759799693 +transit,122.1757324557994,14.59720304197372 +transit,122.18490091122176,14.597708964053986 +transit,122.19406940853362,14.598214526025854 +transit,122.20323794770685,14.598719727874704 +transit,122.21240652871334,14.599224569585928 +transit,122.22157515152496,14.599729051144925 +transit,122.23074381611356,14.600233172537102 +transit,122.23991252245101,14.600736933747877 +transit,122.24908127050917,14.60124033476269 +transit,122.25825006025988,14.60174337556697 +transit,122.26741889167498,14.602246056146171 +transit,122.27658776472633,14.602748376485765 +transit,122.28575667938576,14.6032503365712 +transit,122.29492563562509,14.603751936387978 +transit,122.30409463341616,14.604253175921576 +transit,122.31326367273077,14.604754055157505 +transit,122.32243275354075,14.605254574081268 +transit,122.33160187581792,14.605754732678392 +transit,122.34077103953409,14.60625453093441 +transit,122.34994024466104,14.60675396883486 +transit,122.3591094911706,14.6072530463653 +transit,122.36827877903453,14.607751763511283 +transit,122.37744810822463,14.60825012025839 +transit,122.38661747871268,14.6087481165922 +transit,122.39578689047046,14.609245752498305 +transit,122.40495634346976,14.609743027962317 +transit,122.41412583768232,14.610239942969839 +transit,122.42329537307994,14.610736497506496 +transit,122.43246494963434,14.611232691557927 +transit,122.44163456731731,14.61172852510977 +transit,122.45080422610057,14.61222399814768 +transit,122.45997392595588,14.612719110657332 +transit,122.46914366685498,14.613213862624384 +transit,122.47831344876961,14.613708254034531 +transit,122.4874832716715,14.61420228487347 +transit,122.49665313553236,14.614695955126896 +transit,122.50582304032393,14.615189264780534 +transit,122.51499298601792,14.615682213820106 +transit,122.52416297258604,14.616174802231347 +TP8,122.533333,14.61666703 +transit,122.52556561919452,14.621547870102633 +transit,122.51779789531567,14.626428449327847 +transit,122.51002982824683,14.631308767573683 +transit,122.50226141787151,14.636188824738152 +transit,122.49449266407314,14.641068620719285 +transit,122.48672356673521,14.64594815541507 +transit,122.47895412574117,14.650827428723506 +transit,122.47118434097452,14.65570644054257 +transit,122.46341421231872,14.66058519077024 +transit,122.4556437396573,14.665463679304477 +transit,122.44787292287376,14.670341906043225 +transit,122.44010176185158,14.675219870884417 +transit,122.43233025647429,14.680097573725998 +transit,122.42455840662541,14.684975014465873 +transit,122.41678621218847,14.689852193001954 +transit,122.40901367304701,14.694729109232135 +transit,122.40124078908458,14.699605763054308 +transit,122.39346756018472,14.704482154366342 +transit,122.38569398623098,14.709358283066104 +transit,122.37792006710694,14.714234149051446 +transit,122.37014580269616,14.719109752220218 +transit,122.36237119288224,14.723985092470246 +transit,122.35459623754872,14.728860169699349 +transit,122.34682093657923,14.733734983805347 +transit,122.33904528985737,14.738609534686038 +transit,122.33126929726672,14.743483822239215 +transit,122.32349295869092,14.748357846362651 +transit,122.31571627401357,14.753231606954119 +transit,122.3079392431183,14.758105103911376 +transit,122.30016186588877,14.762978337132163 +transit,122.29238414220859,14.767851306514233 +transit,122.28460607196142,14.772724011955296 +transit,122.27682765503093,14.777596453353075 +transit,122.26904889130076,14.782468630605276 +transit,122.26126978065459,14.787340543609588 +transit,122.25349032297609,14.7922121922637 +transit,122.24571051814895,14.797083576465276 +transit,122.23793036605687,14.801954696111991 +transit,122.23014986658353,14.806825551101488 +transit,122.22236901961266,14.811696141331407 +transit,122.21458782502795,14.816566466699378 +transit,122.20680628271313,14.821436527103023 +transit,122.19902439255192,14.826306322439951 +transit,122.19124215442805,14.831175852607759 +transit,122.18345956822529,14.836045117504034 +transit,122.17567663382735,14.84091411702635 +transit,122.16789335111802,14.845782851072276 +transit,122.16010971998104,14.850651319539361 +transit,122.15232574030018,14.855519522325157 +transit,122.14454141195925,14.860387459327194 +transit,122.136756734842,14.865255130442998 +transit,122.12897170883222,14.870122535570081 +transit,122.12118633381372,14.874989674605935 +transit,122.11340060967032,14.87985654744806 +transit,122.10561453628581,14.884723153993935 +transit,122.09782811354404,14.889589494141026 +transit,122.0900413413288,14.894455567786792 +transit,122.08225421952395,14.899321374828682 +transit,122.07446674801334,14.904186915164132 +transit,122.0666789266808,14.909052188690572 +transit,122.05889075541019,14.91391719530541 +transit,122.05110223408538,14.918781934906056 +transit,122.04331336259025,14.923646407389905 +transit,122.03552414080868,14.928510612654335 +transit,122.02773456862452,14.933374550596724 +transit,122.01994464592171,14.93823822111443 +transit,122.01215437258413,14.943101624104806 +transit,122.0043637484957,14.947964759465188 +transit,121.99657277354034,14.95282762709291 +transit,121.98878144760195,14.95769022688529 +transit,121.98098977056446,14.962552558739631 +transit,121.97319774231184,14.967414622553237 +transit,121.96540536272802,14.97227641822339 +transit,121.95761263169695,14.977137945647371 +transit,121.94981954910257,14.981999204722436 +transit,121.94202611482889,14.986860195345843 +transit,121.93423232875986,14.991720917414838 +transit,121.92643819077946,14.99658137082665 +transit,121.91864370077171,15.001441555478497 +transit,121.91084885862058,15.006301471267596 +transit,121.90305366421008,15.011161118091142 +transit,121.89525811742422,15.016020495846332 +transit,121.88746221814702,15.020879604430334 +transit,121.87966596626254,15.025738443740327 +transit,121.87186936165476,15.030597013673455 +transit,121.86407240420777,15.035455314126871 +transit,121.85627509380559,15.040313344997712 +transit,121.8484774303323,15.0451711061831 +transit,121.84067941367195,15.050028597580143 +transit,121.83288104370862,15.054885819085952 +transit,121.8250823203264,15.05974277059761 +transit,121.81728324340935,15.064599452012208 +transit,121.80948381284159,15.06945586322681 +transit,121.80168402850722,15.074312004138477 +transit,121.79388389029036,15.079167874644254 +transit,121.7860833980751,15.084023474641183 +transit,121.77828255174559,15.088878804026292 +transit,121.77048135118595,15.093733862696592 +transit,121.76267979628034,15.09858865054909 +transit,121.7548778869129,15.10344316748078 +transit,121.74707562296777,15.108297413388643 +transit,121.73927300432914,15.113151388169657 +transit,121.73147003088116,15.118005091720779 +transit,121.72366670250803,15.122858523938962 +transit,121.71586301909392,15.127711684721149 +transit,121.70805898052303,15.132564573964261 +transit,121.70025458667959,15.137417191565222 +transit,121.69244983744775,15.142269537420944 +transit,121.6846447327118,15.147121611428311 +transit,121.67683927235592,15.151973413484216 +transit,121.66903345626434,15.15682494348553 +transit,121.66122728432133,15.161676201329124 +transit,121.65342075641112,15.166527186911841 +transit,121.64561387241798,15.171377900130533 +transit,121.63780663222616,15.176228340882028 +transit,121.62999903571995,15.181078509063143 +transit,121.6221910827836,15.185928404570689 +transit,121.61438277330143,15.190778027301468 +transit,121.60657410715773,15.195627377152261 +transit,121.59876508423677,15.200476454019848 +transit,121.59095570442291,15.205325257800993 +transit,121.58314596760046,15.210173788392458 +transit,121.57533587365371,15.215022045690983 +transit,121.56752542246704,15.219870029593292 +transit,121.55971461392477,15.22471773999612 +transit,121.55190344791124,15.229565176796171 +transit,121.54409192431083,15.23441233989015 +transit,121.5362800430079,15.239259229174742 +transit,121.52846780388683,15.24410584454663 +transit,121.52065520683199,15.248952185902473 +transit,121.51284225172778,15.253798253138939 +transit,121.50502893845858,15.258644046152666 +transit,121.49721526690882,15.263489564840294 +transit,121.4894012369629,15.268334809098441 +transit,121.48158684850526,15.273179778823721 +transit,121.47377210142031,15.278024473912744 +transit,121.46595699559248,15.28286889426209 +transit,121.45814153090625,15.287713039768345 +transit,121.45032570724604,15.292556910328077 +transit,121.44250952449632,15.29740050583784 +transit,121.43469298254158,15.30224382619419 +transit,121.42687608126626,15.307086871293658 +transit,121.41905882055488,15.311929641032771 +transit,121.41124120029193,15.316772135308046 +transit,121.40342322036187,15.321614354015976 +transit,121.39560488064927,15.326456297053063 +transit,121.38778618103862,15.331297964315786 +transit,121.37996712141444,15.336139355700615 +transit,121.37214770166128,15.340980471104006 +transit,121.36432792166367,15.345821310422412 +transit,121.35650778130615,15.350661873552276 +transit,121.3486872804733,15.355502160390012 +transit,121.34086641904968,15.360342170832043 +transit,121.33304519691985,15.365181904774774 +transit,121.32522361396842,15.3700213621146 +transit,121.31740167007995,15.374860542747898 +transit,121.30957936513906,15.379699446571044 +transit,121.30175669903035,15.384538073480398 +transit,121.29393367163843,15.389376423372305 +transit,121.28611028284793,15.39421449614311 +transit,121.27828653254349,15.399052291689138 +transit,121.27046242060972,15.403889809906707 +transit,121.2626379469313,15.408727050692123 +transit,121.25481311139286,15.413564013941675 +transit,121.2469879138791,15.418400699551658 +transit,121.23916235427465,15.423237107418332 +transit,121.2313364324642,15.428073237437966 +transit,121.22351014833248,15.432909089506806 +transit,121.21568350176413,15.437744663521098 +transit,121.20785649264388,15.442579959377069 +transit,121.20002912085647,15.447414976970931 +transit,121.19220138628657,15.452249716198892 +transit,121.18437328881895,15.457084176957158 +transit,121.17654482833832,15.4619183591419 +transit,121.16871600472946,15.466752262649294 +transit,121.16088681787708,15.471585887375513 +transit,121.153057267666,15.476419233216696 +transit,121.14522735398094,15.481252300068983 +transit,121.1373970767067,15.486085087828513 +transit,121.12956643572808,15.490917596391396 +transit,121.12173543092986,15.495749825653744 +transit,121.11390406219684,15.500581775511655 +transit,121.10607232941386,15.505413445861208 +transit,121.09824023246571,15.51024483659848 +transit,121.09040777123724,15.51507594761953 +transit,121.08257494561329,15.51990677882042 +transit,121.0747417554787,15.52473733009718 +transit,121.06690820071832,15.529567601345844 +transit,121.05907428121701,15.534397592462433 +transit,121.05123999685966,15.539227303342948 +transit,121.04340534753115,15.544056733883396 +transit,121.03557033311634,15.548885883979748 +transit,121.02773495350016,15.553714753527995 +transit,121.01989920856751,15.558543342424088 +transit,121.0120630982033,15.563371650563985 +transit,121.00422662229244,15.568199677843625 +transit,120.99638978071987,15.573027424158942 +transit,120.98855257337054,15.577854889405847 +transit,120.9807150001294,15.582682073480255 +transit,120.97287706088137,15.587508976278063 +transit,120.96503875551146,15.592335597695147 +transit,120.95720008390462,15.59716193762739 +transit,120.94936104594584,15.601987995970662 +transit,120.94152164152011,15.606813772620804 +transit,120.93368187051243,15.611639267473658 +transit,120.92584173280781,15.616464480425057 +transit,120.91800122829126,15.621289411370824 +transit,120.91016035684781,15.626114060206762 +transit,120.9023191183625,15.630938426828667 +transit,120.89447751272036,15.635762511132329 +transit,120.88663553980643,15.640586313013518 +transit,120.87879319950581,15.645409832368003 +transit,120.87095049170354,15.650233069091534 +transit,120.8631074162847,15.65505602307985 +transit,120.85526397313437,15.659878694228684 +transit,120.84742016213767,15.664701082433753 +transit,120.83957598317967,15.669523187590764 +transit,120.83173143614549,15.674345009595418 +transit,120.82388652092027,15.679166548343394 +transit,120.81604123738913,15.683987803730375 +transit,120.80819558543719,15.688808775652017 +transit,120.80034956494961,15.69362946400397 +transit,120.79250317581156,15.698449868681891 +transit,120.78465641790818,15.703269989581393 +transit,120.77680929112465,15.708089826598103 +transit,120.76896179534616,15.712909379627623 +transit,120.76111393045788,15.717728648565553 +transit,120.75326569634504,15.72254763330748 +transit,120.74541709289281,15.727366333748977 +transit,120.73756811998645,15.732184749785599 +transit,120.72971877751114,15.737002881312911 +transit,120.72186906535215,15.741820728226447 +transit,120.71401898339471,15.746638290421732 +transit,120.70616853152407,15.75145556779429 +transit,120.69831770962548,15.756272560239628 +transit,120.69046651758426,15.761089267653242 +transit,120.68261495528562,15.765905689930612 +transit,120.67476302261487,15.770721826967218 +transit,120.66691071945732,15.775537678658523 +transit,120.65905804569827,15.780353244899969 +transit,120.65120500122303,15.785168525587002 +transit,120.64335158591693,15.789983520615053 +transit,120.6354977996653,15.794798229879532 +transit,120.62764364235348,15.799612653275858 +transit,120.6197891138668,15.804426790699411 +transit,120.61193421409065,15.809240642045587 +transit,120.60407894291038,15.814054207209752 +transit,120.59622330021138,15.818867486087273 +transit,120.588367285879,15.823680478573497 +transit,120.58051089979868,15.828493184563765 +transit,120.57265414185579,15.8333056039534 +transit,120.56479701193577,15.838117736637717 +transit,120.556939509924,15.842929582512037 +transit,120.54908163570596,15.84774114147164 +transit,120.54122338916706,15.852552413411813 +transit,120.53336477019276,15.857363398227829 +transit,120.5255057786685,15.862174095814947 +transit,120.51764641447977,15.866984506068418 +transit,120.50978667751204,15.871794628883478 +transit,120.50192656765077,15.876604464155356 +transit,120.49406608478148,15.88141401177927 +transit,120.48620522878967,15.886223271650417 +transit,120.47834399956085,15.891032243664 +transit,120.47048239698053,15.895840927715195 +transit,120.46262042093426,15.90064932369917 +transit,120.45475807130757,15.905457431511095 +transit,120.44689534798599,15.910265251046106 +transit,120.43903225085509,15.915072782199351 +transit,120.43116877980046,15.91988002486595 +transit,120.42330493470766,15.924686978941011 +transit,120.41544071546227,15.929493644319649 +transit,120.40757612194987,15.93430002089695 +transit,120.39971115405609,15.939106108567994 +transit,120.39184581166654,15.943911907227859 +transit,120.38398009466682,15.94871741677159 +transit,120.37611400294259,15.953522637094247 +transit,120.36824753637947,15.958327568090855 +transit,120.36038069486312,15.96313220965645 +transit,120.35251347827919,15.96793656168603 +transit,120.34464588651336,15.972740624074607 +transit,120.33677791945131,15.97754439671717 +transit,120.3289095769787,15.982347879508701 +transit,120.32104085898125,15.987151072344163 +transit,120.31317176534466,15.991953975118513 +transit,120.30530229595463,15.9967565877267 +transit,120.29743245069693,16.001558910063654 +transit,120.28956222945723,16.006360942024305 +transit,120.28169163212132,16.01116268350356 +transit,120.27382065857493,16.015964134396313 +transit,120.26594930870382,16.020765294597464 +transit,120.25807758239378,16.025566164001887 +transit,120.25020547953058,16.03036674250444 +RPUG,120.242333,16.03516703 +transit,120.24623823181024,16.027308305816007 +transit,120.25014315779546,16.019449504816514 +transit,120.25404777813486,16.011590627046164 +transit,120.25795209300753,16.003731672549574 +transit,120.26185610259255,15.995872641371351 +transit,120.26575980706895,15.98801353355609 +transit,120.26966320661572,15.980154349148401 +transit,120.2735663014118,15.972295088192846 +transit,120.27746909163608,15.964435750733996 +transit,120.28137157746741,15.956576336816413 +transit,120.28527375908462,15.948716846484638 +transit,120.28917563666643,15.940857279783213 +transit,120.29307721039159,15.93299763675666 +transit,120.29697848043877,15.925137917449488 +transit,120.30087944698658,15.917278121906211 +transit,120.30478011021364,15.909418250171314 +transit,120.30868047029847,15.90155830228928 +transit,120.31258052741956,15.893698278304585 +transit,120.31648028175536,15.885838178261688 +transit,120.3203797334843,15.877978002205033 +transit,120.32427888278474,15.870117750179068 +transit,120.32817772983499,15.862257422228218 +transit,120.33207627481332,15.854397018396904 +transit,120.33597451789798,15.846536538729532 +transit,120.33987245926716,15.83867598327049 +transit,120.34377009909898,15.83081535206418 +transit,120.34766743757156,15.822954645154963 +transit,120.35156447486294,15.815093862587212 +transit,120.35546121115117,15.807233004405274 +transit,120.35935764661417,15.7993720706535 +transit,120.36325378142989,15.791511061376225 +transit,120.36714961577621,15.783649976617763 +transit,120.37104514983096,15.775788816422434 +transit,120.37494038377194,15.767927580834526 +transit,120.3788353177769,15.760066269898346 +transit,120.38272995202355,15.752204883658163 +transit,120.38662428668954,15.744343422158245 +transit,120.39051832195248,15.736481885442863 +transit,120.39441205798998,15.728620273556256 +transit,120.39830549497955,15.720758586542665 +transit,120.40219863309868,15.712896824446311 +transit,120.4060914725248,15.705034987311416 +transit,120.40998401343533,15.697173075182189 +transit,120.41387625600763,15.689311088102823 +transit,120.417768200419,15.681449026117498 +transit,120.42165984684671,15.6735868892704 +transit,120.425551195468,15.665724677605683 +transit,120.42944224646006,15.657862391167502 +TP9,120.433333,15.65000003 +transit,120.43556823903522,15.64149172352093 +transit,120.43780329336165,15.632983387670583 +transit,120.44003816309964,15.624475022467013 +transit,120.44227284836951,15.615966627928293 +transit,120.44450734929154,15.607458204072472 +transit,120.44674166598597,15.59894975091761 +transit,120.44897579857302,15.590441268481753 +transit,120.45120974717285,15.581932756782956 +transit,120.45344351190562,15.57342421583926 +transit,120.45567709289142,15.564915645668703 +transit,120.45791049025034,15.556407046289324 +transit,120.46014370410239,15.547898417719157 +transit,120.46237673456761,15.539389759976224 +transit,120.46460958176594,15.530881073078557 +transit,120.46684224581733,15.522372357044167 +transit,120.46907472684168,15.513863611891091 +transit,120.47130702495885,15.505354837637327 +transit,120.47353914028865,15.496846034300894 +transit,120.47577107295092,15.4883372018998 +transit,120.4780028230654,15.479828340452036 +transit,120.4802343907518,15.471319449975615 +transit,120.48246577612984,15.462810530488522 +transit,120.48469697931918,15.454301582008759 +transit,120.48692800043943,15.445792604554313 +transit,120.4891588396102,15.43728359814316 +transit,120.49138949695102,15.428774562793299 +transit,120.49361997258144,15.420265498522689 +transit,120.49585026662093,15.41175640534931 +transit,120.49808037918895,15.403247283291138 +transit,120.50031031040493,15.394738132366136 +transit,120.50254006038826,15.386228952592264 +transit,120.50476962925826,15.377719743987488 +transit,120.50699901713428,15.369210506569756 +transit,120.5092282241356,15.360701240357029 +transit,120.51145725038145,15.352191945367249 +transit,120.51368609599108,15.343682621618361 +transit,120.51591476108365,15.335173269128315 +transit,120.5181432457783,15.32666388791504 +transit,120.52037155019418,15.318154477996474 +transit,120.52259967445035,15.309645039390544 +transit,120.52482761866585,15.301135572115179 +transit,120.5270553829597,15.292626076188302 +transit,120.5292829674509,15.284116551627838 +transit,120.53151037225837,15.275606998451693 +transit,120.53373759750103,15.267097416677787 +transit,120.53596464329776,15.258587806324032 +transit,120.5381915097674,15.250078167408322 +transit,120.54041819702879,15.241568499948567 +transit,120.54264470520067,15.233058803962667 +transit,120.54487103440181,15.224549079468511 +transit,120.54709718475091,15.216039326483996 +transit,120.54932315636665,15.207529545027002 +transit,120.55154894936767,15.199019735115417 +transit,120.55377456387261,15.19050989676712 +RPLC,120.556,15.18200003 +transit,120.56232759211345,15.175791398462003 +transit,120.568654814593,15.169582585856645 +transit,120.5749816676081,15.16337359227141 +transit,120.58130815132822,15.157164417793794 +transit,120.5876342659228,15.150955062511267 +transit,120.59396001156126,15.14474552651128 +transit,120.60028538841301,15.138535809881272 +transit,120.60661039664744,15.132325912708675 +transit,120.61293503643391,15.126115835080892 +transit,120.6192593079418,15.11990557708532 +transit,120.62558321134041,15.113695138809339 +transit,120.63190674679909,15.107484520340309 +transit,120.63822991448711,15.10127372176558 +transit,120.64455271457378,15.095062743172493 +transit,120.65087514722836,15.088851584648351 +transit,120.65719721262009,15.082640246280466 +transit,120.6635189109182,15.076428728156124 +transit,120.66984024229191,15.070217030362606 +transit,120.67616120691042,15.064005152987152 +transit,120.6824818049429,15.057793096117013 +transit,120.68880203655851,15.051580859839419 +transit,120.6951219019264,15.045368444241577 +transit,120.70144140121567,15.03915584941069 +transit,120.70776053459548,15.03294307543393 +transit,120.71407930223488,15.026730122398469 +transit,120.72039770430295,15.020516990391458 +transit,120.72671574096876,15.014303679500028 +transit,120.73303341240134,15.008090189811307 +transit,120.7393507187697,15.001876521412399 +transit,120.74566766024286,14.99566267439039 +transit,120.75198423698978,14.989448648832358 +transit,120.75830044917947,14.983234444825364 +transit,120.76461629698086,14.977020062456457 +transit,120.77093178056288,14.970805501812661 +transit,120.77724690009445,14.964590762980993 +transit,120.78356165574446,14.958375846048451 +transit,120.78987604768182,14.95216075110203 +transit,120.79619007607536,14.94594547822869 +transit,120.80250374109394,14.939730027515386 +transit,120.8088170429064,14.933514399049061 +transit,120.81512998168154,14.927298592916644 +transit,120.82144255758816,14.921082609205031 +transit,120.82775477079502,14.914866448001135 +transit,120.83406662147091,14.908650109391827 +transit,120.84037810978455,14.90243359346397 +transit,120.84668923590468,14.896216900304411 +RPUX,120.853,14.89000003 +transit,120.85979782446294,14.884600564854255 +transit,120.86659531051718,14.879200895697487 +transit,120.87339245829533,14.873801022616716 +transit,120.88018926793,14.868400945698953 +transit,120.88698573955382,14.863000665031208 +transit,120.89378187329942,14.857600180700459 +transit,120.90057766929938,14.852199492793686 +transit,120.90737312768633,14.846798601397856 +transit,120.91416824859287,14.841397506599918 +transit,120.92096303215158,14.835996208486819 +transit,120.92775747849507,14.830594707145481 +transit,120.9345515877559,14.825193002662823 +transit,120.94134536006668,14.819791095125751 +transit,120.94813879555998,14.814388984621152 +transit,120.95493189436837,14.808986671235916 +transit,120.96172465662443,14.803584155056903 +transit,120.96851708246069,14.798181436170978 +transit,120.97530917200974,14.792778514664978 +transit,120.98210092540413,14.78737539062574 +transit,120.9888923427764,14.781972064140092 +transit,120.9956834242591,14.776568535294828 +transit,121.00247416998477,14.771164804176754 +transit,121.00926458008594,14.765760870872654 +transit,121.01605465469515,14.760356735469305 +transit,121.02284439394494,14.754952398053465 +transit,121.02963379796779,14.749547858711882 +transit,121.03642286689625,14.744143117531296 +transit,121.0432116008628,14.738738174598431 +TP1,121.05,14.73333303 +transit,121.051095723919,14.72546409823825 +transit,121.05219136923515,14.717595155954921 +transit,121.05328693599787,14.709726203155862 +transit,121.05438242425664,14.701857239846916 +transit,121.05547783406094,14.693988266033939 +transit,121.05657316546016,14.686119281722771 +transit,121.05766841850375,14.678250286919257 +transit,121.05876359324112,14.670381281629242 +transit,121.05985868972166,14.662512265858577 +transit,121.06095370799477,14.654643239613106 +transit,121.0620486481098,14.646774202898664 +transit,121.0631435101161,14.63890515572111 +transit,121.06423829406307,14.631036098086266 +MAO1,121.065333,14.62316703 +transit,121.06905300826244,14.614962521959232 +transit,121.07277274046876,14.606757948816796 +transit,121.07649219679926,14.598553310614683 +transit,121.08021137743422,14.590348607394908 +transit,121.08393028255385,14.582143839199444 +transit,121.08764891233832,14.573939006070276 +transit,121.09136726696777,14.56573410804936 +transit,121.09508534662227,14.557529145178671 +transit,121.09880315148189,14.549324117500145 +transit,121.1025206817266,14.54111902505572 +transit,121.10623793753639,14.532913867887324 +transit,121.10995491909114,14.524708646036885 +transit,121.11367162657073,14.516503359546299 +transit,121.117388060155,14.50829800845748 +transit,121.1211042200237,14.500092592812312 +transit,121.12482010635657,14.491887112652678 +transit,121.12853571933333,14.483681568020451 +transit,121.13225105913361,14.47547595895749 +transit,121.13596612593702,14.467270285505647 +transit,121.13968091992312,14.459064547706769 +transit,121.14339544127142,14.45085874560269 +transit,121.14710969016143,14.442652879235222 +transit,121.15082366677254,14.434446948646196 +transit,121.15453737128415,14.42624095387741 +transit,121.1582508038756,14.418034894970662 +transit,121.16196396472623,14.40982877196773 +transit,121.16567685401523,14.401622584910404 +transit,121.16938947192187,14.393416333840443 +transit,121.1731018186253,14.385210018799611 +transit,121.17681389430464,14.377003639829647 +transit,121.18052569913901,14.368797196972299 +transit,121.1842372333074,14.360590690269289 +transit,121.18794849698884,14.352384119762348 +transit,121.19165949036228,14.344177485493182 +transit,121.19537021360664,14.335970787503486 +transit,121.19908066690076,14.327764025834961 +transit,121.2027908504235,14.319557200529285 +transit,121.2065007643536,14.311350311628132 +transit,121.21021040886986,14.30314335917317 +transit,121.21391978415093,14.294936343206047 +transit,121.21762889037547,14.286729263768416 +transit,121.2213377277221,14.278522120901911 +transit,121.22504629636938,14.270314914648154 +transit,121.22875459649586,14.262107645048763 +transit,121.23246262827999,14.253900312145355 +transit,121.23617039190022,14.245692915979518 +transit,121.23987788753494,14.237485456592848 +transit,121.24358511536252,14.229277934026925 +transit,121.24729207556128,14.221070348323318 +transit,121.25099876830944,14.212862699523585 +transit,121.25470519378528,14.204654987669288 +transit,121.25841135216696,14.196447212801964 +transit,121.26211724363262,14.18823937496314 +transit,121.26582286836036,14.180031474194358 +transit,121.26952822652824,14.171823510537116 +transit,121.27323331831425,14.163615484032935 +transit,121.2769381438964,14.155407394723298 +transit,121.2806427034526,14.147199242649702 +transit,121.28434699716074,14.138991027853624 +transit,121.28805102519864,14.130782750376532 +transit,121.29175478774414,14.122574410259885 +transit,121.29545828497497,14.114366007545135 +transit,121.29916151706885,14.106157542273722 +transit,121.30286448420348,14.097949014487085 +transit,121.30656718655646,14.08974042422664 +transit,121.3102696243054,14.081531771533802 +transit,121.31397179762784,14.073323056449986 +transit,121.3176737067013,14.065114279016573 +transit,121.32137535170321,14.05690543927496 +transit,121.32507673281104,14.048696537266515 +transit,121.32877785020213,14.04048757303262 +transit,121.33247870405384,14.032278546614624 +transit,121.33617929454346,14.02406945805388 +transit,121.33987962184824,14.015860307391733 +transit,121.34357968614539,14.00765109466951 +transit,121.3472794876121,13.999441819928538 +transit,121.35097902642548,13.991232483210126 +transit,121.35467830276262,13.983023084555578 +transit,121.35837731680057,13.9748136240062 +transit,121.36207606871633,13.966604101603268 +transit,121.36577455868688,13.958394517388063 +transit,121.3694727868891,13.950184871401857 +transit,121.3731707534999,13.941975163685907 +transit,121.37686845869612,13.93376539428146 +transit,121.38056590265454,13.92555556322976 +transit,121.38426308555191,13.917345670572047 +transit,121.38796000756496,13.909135716349532 +transit,121.39165666887034,13.900925700603437 +transit,121.3953530696447,13.892715623374963 +transit,121.39904921006462,13.884505484705315 +transit,121.40274509030664,13.876295284635663 +transit,121.40644071054727,13.868085023207206 +transit,121.41013607096298,13.859874700461098 +transit,121.41383117173018,13.851664316438512 +transit,121.41752601302527,13.84345387118059 +transit,121.42122059502456,13.835243364728482 +transit,121.42491491790439,13.827032797123316 +transit,121.428608981841,13.818822168406216 +transit,121.43230278701058,13.810611478618304 +transit,121.43599633358934,13.802400727800679 +transit,121.43968962175342,13.794189915994446 +transit,121.44338265167887,13.78597904324069 +transit,121.44707542354179,13.777768109580496 +transit,121.45076793751815,13.769557115054928 +transit,121.45446019378396,13.76134605970505 +transit,121.45815219251513,13.753134943571922 +transit,121.46184393388755,13.744923766696585 +transit,121.46553541807705,13.736712529120073 +transit,121.46922664525948,13.728501230883413 +transit,121.47291761561057,13.720289872027625 +transit,121.47660832930606,13.712078452593715 +transit,121.48029878652163,13.703866972622688 +transit,121.48398898743292,13.695655432155535 +transit,121.48767893221556,13.687443831233237 +transit,121.49136862104507,13.679232169896766 +transit,121.495058054097,13.67102044818709 +transit,121.49874723154684,13.662808666145162 +transit,121.50243615357,13.654596823811936 +transit,121.50612482034191,13.646384921228343 +transit,121.50981323203793,13.638172958435316 +transit,121.51350138883335,13.629960935473784 +transit,121.51718929090346,13.621748852384647 +transit,121.52087693842353,13.613536709208814 +transit,121.52456433156871,13.60532450598718 +transit,121.5282514705142,13.597112242760629 +transit,121.5319383554351,13.588899919570041 +transit,121.53562498650648,13.580687536456287 +transit,121.5393113639034,13.572475093460218 +transit,121.54299748780082,13.564262590622697 +transit,121.54668335837373,13.55605002798456 +transit,121.55036897579704,13.547837405586638 +transit,121.55405434024563,13.539624723469759 +transit,121.5577394518943,13.531411981674745 +transit,121.56142431091791,13.523199180242393 +transit,121.56510891749117,13.514986319213511 +transit,121.5687932717888,13.506773398628885 +transit,121.5724773739855,13.498560418529294 +transit,121.57616122425588,13.490347378955521 +transit,121.57984482277456,13.482134279948319 +transit,121.58352816971609,13.47392112154845 +transit,121.58721126525498,13.46570790379666 +transit,121.5908941095657,13.457494626733688 +transit,121.59457670282269,13.449281290400265 +transit,121.59825904520038,13.44106789483711 +transit,121.60194113687308,13.432854440084938 +transit,121.60562297801513,13.424640926184447 +transit,121.60930456880082,13.416427353176337 +transit,121.61298590940439,13.408213721101292 +TP2,121.616667,13.40000003 +transit,121.60885689895416,13.404682816452143 +transit,121.60104649558956,13.409365359547875 +transit,121.59323578980056,13.414047659190004 +transit,121.58542478148156,13.418729715281337 +transit,121.57761347052694,13.423411527724678 +transit,121.56980185683109,13.42809309642281 +transit,121.56198994028843,13.43277442127851 +transit,121.55417772079338,13.437455502194558 +transit,121.54636519824032,13.442136339073716 +transit,121.53855237252374,13.446816931818734 +transit,121.53073924353802,13.451497280332362 +transit,121.52292581117764,13.456177384517337 +transit,121.51511207533704,13.460857244276388 +transit,121.50729803591068,13.465536859512236 +transit,121.49948369279302,13.470216230127596 +transit,121.49166904587854,13.474895356025165 +transit,121.48385409506173,13.479574237107645 +transit,121.47603884023708,13.484252873277716 +transit,121.46822328129907,13.488931264438063 +transit,121.46040741814224,13.493609410491347 +transit,121.45259125066107,13.498287311340237 +transit,121.4447747787501,13.502964966887383 +transit,121.43695800230387,13.507642377035422 +transit,121.42914092121687,13.512319541687 +transit,121.4213235353837,13.516996460744734 +transit,121.41350584469889,13.52167313411125 +transit,121.40568784905699,13.526349561689152 +transit,121.39786954835259,13.531025743381038 +transit,121.39005094248026,13.53570167908951 +transit,121.38223203133457,13.540377368717143 +transit,121.37441281481013,13.545052812166515 +transit,121.36659329280154,13.549728009340194 +transit,121.35877346520338,13.554402960140738 +transit,121.3509533319103,13.559077664470694 +transit,121.34313289281691,13.563752122232604 +transit,121.33531214781786,13.568426333328995 +transit,121.32749109680775,13.573100297662402 +transit,121.31966973968126,13.577774015135331 +transit,121.31184807633304,13.582447485650288 +transit,121.30402610665773,13.587120709109774 +transit,121.29620383055004,13.59179368541628 +transit,121.28838124790461,13.59646641447228 +transit,121.28055835861616,13.601138896180252 +transit,121.27273516257937,13.605811130442659 +transit,121.26491165968893,13.610483117161953 +transit,121.25708784983958,13.61515485624058 +transit,121.24926373292602,13.619826347580977 +transit,121.24143930884298,13.624497591085575 +transit,121.2336145774852,13.629168586656796 +transit,121.22578953874742,13.633839334197045 +transit,121.21796419252439,13.638509833608733 +transit,121.21013853871086,13.643180084794247 +transit,121.20231257720162,13.647850087655979 +transit,121.19448630789142,13.6525198420963 +transit,121.18665973067506,13.657189348017583 +transit,121.17883284544733,13.661858605322186 +transit,121.17100565210302,13.666527613912464 +transit,121.16317815053694,13.671196373690751 +transit,121.1553503406439,13.675864884559388 +transit,121.14752222231874,13.680533146420702 +transit,121.13969379545628,13.685201159177 +transit,121.13186505995137,13.6898689227306 +transit,121.12403601569883,13.694536436983796 +transit,121.11620666259356,13.69920370183888 +transit,121.10837700053037,13.703870717198136 +transit,121.10054702940418,13.70853748296383 +transit,121.09271674910985,13.713203999038237 +transit,121.08488615954226,13.717870265323603 +transit,121.07705526059632,13.722536281722183 +transit,121.06922405216693,13.727202048136217 +transit,121.06139253414901,13.731867564467928 +transit,121.05356070643747,13.736532830619538 +transit,121.04572856892723,13.741197846493264 +transit,121.03789612151326,13.745862611991306 +transit,121.03006336409047,13.750527127015868 +transit,121.02223029655383,13.755191391469129 +transit,121.0143969187983,13.759855405253267 +transit,121.00656323071884,13.764519168270452 +transit,120.99872923221045,13.769182680422844 +transit,120.9908949231681,13.7738459416126 +transit,120.9830603034868,13.778508951741857 +transit,120.97522537306153,13.783171710712756 +transit,120.96739013178733,13.787834218427415 +transit,120.95955457955918,13.792496474787962 +transit,120.95171871627214,13.79715847969649 +transit,120.94388254182124,13.801820233055116 +transit,120.93604605610152,13.806481734765917 +transit,120.92820925900803,13.811142984730987 +transit,120.92037215043582,13.815803982852387 +transit,120.91253473027999,13.820464729032192 +transit,120.9046969984356,13.82512522317246 +transit,120.89685895479772,13.829785465175233 +transit,120.88902059926147,13.83444545494255 +transit,120.88118193172193,13.839105192376438 +transit,120.87334295207422,13.843764677378928 +transit,120.86550366021348,13.848423909852029 +transit,120.8576640560348,13.85308288969774 +transit,120.84982413943335,13.85774161681806 +transit,120.84198391030425,13.862400091114976 +transit,120.83414336854266,13.867058312490467 +transit,120.82630251404373,13.871716280846499 +transit,120.81846134670265,13.876373996085038 +transit,120.81061986641458,13.88103145810803 +transit,120.80277807307472,13.885688666817417 +transit,120.79493596657825,13.89034562211514 +transit,120.78709354682039,13.895002323903118 +transit,120.77925081369634,13.89965877208327 +transit,120.77140776710131,13.904314966557509 +transit,120.76356440693054,13.908970907227724 +transit,120.75572073307927,13.913626593995817 +transit,120.74787674544274,13.918282026763661 +transit,120.7400324439162,13.922937205433131 +transit,120.73218782839493,13.927592129906097 +transit,120.72434289877417,13.932246800084409 +transit,120.71649765494922,13.936901215869911 +transit,120.70865209681536,13.941555377164446 +transit,120.7008062242679,13.946209283869846 +transit,120.69296003720211,13.95086293588793 +transit,120.68511353551334,13.955516333120501 +transit,120.67726671909688,13.960169475469373 +transit,120.6694195878481,13.964822362836333 +transit,120.66157214166229,13.969474995123171 +transit,120.65372438043484,13.974127372231665 +transit,120.64587630406108,13.978779494063577 +transit,120.63802791243637,13.98343136052067 +transit,120.6301792054561,13.988082971504696 +transit,120.62233018301566,13.992734326917393 +transit,120.6144808450104,13.997385426660493 +transit,120.60663119133577,14.002036270635728 +transit,120.59878122188714,14.006686858744802 +transit,120.59093093655993,14.01133719088943 +transit,120.58308033524956,14.015987266971308 +transit,120.57522941785149,14.02063708689212 +transit,120.56737818426113,14.025286650553555 +transit,120.55952663437395,14.029935957857278 +transit,120.5516747680854,14.034585008704955 +transit,120.54382258529097,14.039233802998234 +transit,120.5359700858861,14.043882340638765 +transit,120.52811726976628,14.048530621528187 +transit,120.52026413682704,14.053178645568119 +transit,120.51241068696383,14.057826412660184 +transit,120.50455692007222,14.062473922705996 +transit,120.49670283604766,14.067121175607145 +transit,120.48884843478574,14.071768171265235 +transit,120.48099371618197,14.076414909581842 +transit,120.47313868013188,14.081061390458546 +transit,120.46528332653106,14.085707613796908 +transit,120.45742765527504,14.090353579498489 +transit,120.44957166625943,14.09499928746483 +transit,120.44171535937977,14.099644737597474 +transit,120.43385873453167,14.10428992979796 +transit,120.42600179161073,14.108934863967795 +transit,120.41814453051254,14.113579540008503 +transit,120.41028695113273,14.11822395782158 +transit,120.40242905336693,14.12286811730853 +transit,120.39457083711076,14.127512018370826 +transit,120.38671230225987,14.132155660909964 +transit,120.3788534487099,14.136799044827397 +transit,120.37099427635653,14.141442170024593 +transit,120.36313478509541,14.146085036402994 +transit,120.35527497482222,14.150727643864053 +transit,120.34741484543267,14.155369992309202 +transit,120.33955439682241,14.160012081639858 +transit,120.33169362888718,14.164653911757439 +transit,120.32383254152268,14.169295482563356 +transit,120.31597113462463,14.173936793959003 +transit,120.30810940808878,14.178577845845775 +transit,120.30024736181085,14.183218638125043 +transit,120.29238499568658,14.187859170698184 +transit,120.28452230961175,14.19249944346656 +transit,120.2766593034821,14.197139456331524 +transit,120.26879597719343,14.20177920919442 +transit,120.26093233064152,14.206418701956586 +transit,120.25306836372216,14.21105793451935 +transit,120.24520407633115,14.215696906784025 +transit,120.2373394683643,14.220335618651925 +transit,120.22947453971743,14.224974070024347 +transit,120.22160929028637,14.229612260802586 +transit,120.21374371996696,14.234250190887922 +transit,120.20587782865503,14.23888786018163 +transit,120.19801161624646,14.243525268584978 +transit,120.19014508263712,14.248162415999214 +transit,120.18227822772285,14.252799302325593 +transit,120.17441105139956,14.25743592746535 +transit,120.16654355356313,14.262072291319715 +transit,120.15867573410947,14.26670839378991 +transit,120.15080759293448,14.271344234777144 +transit,120.14293912993409,14.275979814182621 +transit,120.13507034500422,14.280615131907531 +transit,120.12720123804081,14.28525018785307 +transit,120.1193318089398,14.2898849819204 +transit,120.11146205759717,14.294519514010698 +transit,120.10359198390884,14.299153784025119 +transit,120.09572158777083,14.303787791864814 +transit,120.08785086907909,14.308421537430918 +transit,120.07997982772963,14.313055020624567 +transit,120.07210846361845,14.317688241346882 +transit,120.06423677664154,14.322321199498983 +transit,120.05636476669494,14.326953894981964 +transit,120.04849243367467,14.331586327696932 +transit,120.04061977747678,14.336218497544966 +transit,120.0327467979973,14.34085040442715 +transit,120.02487349513228,14.345482048244548 +transit,120.01699986877782,14.350113428898224 +transit,120.00912591882997,14.354744546289226 +transit,120.0012516451848,14.359375400318594 +transit,119.99337704773842,14.364005990887367 +transit,119.98550212638693,14.368636317896572 +transit,119.97762688102645,14.373266381247218 +transit,119.96975131155308,14.377896180840319 +transit,119.96187541786297,14.382525716576863 +transit,119.95399919985225,14.387154988357846 +transit,119.94612265741705,14.391783996084245 +transit,119.93824579045356,14.396412739657029 +transit,119.93036859885792,14.401041218977165 +transit,119.92249108252634,14.405669433945606 +transit,119.91461324135496,14.410297384463295 +transit,119.90673507524,14.414925070431163 +transit,119.89885658407766,14.419552491750142 +transit,119.89097776776416,14.424179648321147 +transit,119.88309862619572,14.428806540045086 +transit,119.87521915926855,14.433433166822855 +transit,119.86733936687892,14.438059528555351 +transit,119.85945924892306,14.442685625143456 +transit,119.85157880529725,14.447311456488034 +transit,119.84369803589775,14.451937022489954 +transit,119.83581694062082,14.456562323050072 +transit,119.82793551936278,14.461187358069234 +transit,119.8200537720199,14.465812127448268 +transit,119.8121716984885,14.470436631088013 +transit,119.8042892986649,14.475060868889285 +transit,119.79640657244542,14.479684840752888 +transit,119.78852351972638,14.484308546579626 +transit,119.78064014040415,14.488931986270298 +transit,119.77275643437507,14.493555159725679 +transit,119.76487240153551,14.498178066846538 +transit,119.75698804178184,14.502800707533652 +transit,119.74910335501042,14.507423081687769 +transit,119.74121834111769,14.512045189209637 +TP3,119.733333,14.51666703 +transit,119.74245511347887,14.516859138136162 +transit,119.75157724268301,14.517050891614721 +transit,119.76069938758363,14.517242290430186 +transit,119.7698215481519,14.517433334577088 +transit,119.778943724359,14.517624024049958 +transit,119.78806591617612,14.517814358843355 +transit,119.79718812357443,14.518004338951831 +transit,119.80631034652511,14.518193964369956 +transit,119.81543258499933,14.518383235092298 +transit,119.82455483896827,14.518572151113457 +transit,119.8336771084031,14.518760712428026 +transit,119.84279939327499,14.51894891903061 +transit,119.8519216935551,14.519136770915836 +transit,119.8610440092146,14.519324268078323 +transit,119.87016634022466,14.519511410512713 +transit,119.87928868655644,14.519698198213655 +transit,119.8884110481811,14.519884631175808 +transit,119.8975334250698,14.520070709393838 +transit,119.90665581719368,14.52025643286243 +transit,119.91577822452392,14.520441801576267 +transit,119.92490064703168,14.52062681553005 +transit,119.93402308468808,14.520811474718489 +transit,119.94314553746429,14.520995779136301 +transit,119.95226800533146,14.521179728778218 +transit,119.96139048826073,14.521363323638978 +transit,119.97051298622326,14.521546563713331 +transit,119.97963549919015,14.52172944899604 +transit,119.9887580271326,14.52191197948187 +transit,119.99788057002172,14.522094155165606 +transit,120.00700312782864,14.522275976042032 +transit,120.01612570052451,14.522457442105951 +transit,120.02524828808046,14.522638553352174 +transit,120.03437089046764,14.52281930977552 +transit,120.04349350765715,14.522999711370826 +transit,120.05261613962014,14.523179758132923 +transit,120.06173878632774,14.52335945005667 +transit,120.07086144775107,14.523538787136921 +transit,120.07998412386125,14.523717769368552 +transit,120.0891068146294,14.523896396746444 +transit,120.09822952002666,14.524074669265486 +transit,120.10735224002414,14.524252586920579 +transit,120.11647497459296,14.524430149706639 +transit,120.12559772370423,14.524607357618583 +transit,120.13472048732906,14.524784210651344 +transit,120.14384326543858,14.524960708799867 +transit,120.15296605800388,14.525136852059099 +transit,120.1620888649961,14.525312640424003 +transit,120.17121168638631,14.525488073889557 +transit,120.18033452214566,14.525663152450734 +transit,120.1894573722452,14.525837876102537 +transit,120.19858023665608,14.526012244839965 +transit,120.20770311534939,14.526186258658022 +transit,120.21682600829621,14.526359917551739 +transit,120.22594891546765,14.526533221516154 +transit,120.23507183683482,14.5267061705463 +transit,120.2441947723688,14.526878764637232 +transit,120.25331772204069,14.527051003784026 +transit,120.26244068582157,14.52722288798174 +transit,120.27156366368254,14.527394417225459 +transit,120.28068665559469,14.527565591510283 +transit,120.2898096615291,14.527736410831311 +transit,120.29893268145686,14.527906875183666 +transit,120.30805571534906,14.528076984562459 +transit,120.31717876317676,14.528246738962837 +transit,120.32630182491106,14.528416138379937 +transit,120.33542490052302,14.528585182808916 +transit,120.34454798998375,14.528753872244932 +transit,120.3536710932643,14.52892220668317 +transit,120.36279421033575,14.529090186118813 +transit,120.37191734116917,14.529257810547046 +transit,120.38104048573562,14.529425079963088 +transit,120.3901636440062,14.529591994362148 +transit,120.39928681595194,14.529758553739445 +transit,120.40841000154394,14.529924758090225 +transit,120.41753320075324,14.530090607409731 +transit,120.42665641355092,14.530256101693213 +transit,120.43577963990803,14.530421240935938 +transit,120.44490287979563,14.530586025133196 +transit,120.4540261331848,14.530750454280257 +transit,120.46314940004656,14.53091452837242 +transit,120.47227268035199,14.531078247404999 +transit,120.48139597407214,14.531241611373302 +transit,120.49051928117807,14.531404620272665 +transit,120.4996426016408,14.531567274098414 +transit,120.50876593543141,14.531729572845906 +transit,120.51788928252093,14.53189151651049 +transit,120.52701264288042,14.532053105087536 +transit,120.53613601648091,14.532214338572425 +transit,120.54525940329346,14.532375216960544 +transit,120.5543828032891,14.532535740247281 +transit,120.56350621643887,14.532695908428057 +transit,120.5726296427138,14.532855721498283 +transit,120.58175308208494,14.53301517945339 +transit,120.59087653452333,14.53317428228881 +TP4,120.6,14.53333303 +transit,120.60891325177454,14.532211177408374 +transit,120.61782641362562,14.531088985787047 +transit,120.62673948553424,14.529966455166676 +transit,120.6356524674814,14.528843585577919 +transit,120.64456535944814,14.527720377051432 +transit,120.65347816141545,14.526596829617894 +transit,120.66239087336437,14.525472943307976 +transit,120.67130349527596,14.524348718152378 +transit,120.68021602713127,14.52322415418179 +transit,120.68912846891136,14.522099251426917 +transit,120.6980408205973,14.520974009918476 +transit,120.70695308217019,14.519848429687181 +transit,120.71586525361108,14.51872251076377 +transit,120.72477733490112,14.517596253178972 +transit,120.73368932602139,14.51646965696354 +transit,120.74260122695303,14.515342722148226 +transit,120.75151303767716,14.514215448763785 +transit,120.7604247581749,14.513087836840993 +transit,120.76933638842745,14.511959886410628 +transit,120.77824792841592,14.510831597503469 +transit,120.7871593781215,14.509702970150322 +transit,120.79607073752537,14.508574004381979 +transit,120.80498200660871,14.507444700229257 +transit,120.81389318535273,14.506315057722974 +transit,120.82280427373861,14.50518507689395 +transit,120.8317152717476,14.504054757773021 +transit,120.84062617936091,14.502924100391041 +transit,120.84953699655976,14.501793104778846 +transit,120.85844772332543,14.500661770967307 +transit,120.86735835963914,14.499530098987284 +transit,120.87626890548218,14.498398088869656 +transit,120.8851793608358,14.497265740645302 +transit,120.89408972568133,14.49613305434512 +RPLS,120.903,14.49500003 +transit,120.91103367798593,14.493834566218396 +transit,120.91906727200656,14.492668827652633 +transit,120.92710078205005,14.491502814328562 +transit,120.93513420810456,14.490336526272037 +transit,120.94316755015822,14.489169963508923 +transit,120.95120080819922,14.488003126065085 +transit,120.95923398221572,14.486836013966391 +transit,120.96726707219588,14.485668627238729 +transit,120.97530007812792,14.484500965907973 +TP5,120.983333,14.48333303 +transit,120.98888832080638,14.486111193273727 +transit,120.9944437799241,14.488889224610709 +transit,120.99999937737775,14.49166712398139 +transit,121.00555511319187,14.494444891356213 +transit,121.0111109873911,14.497222526705604 +TP6,121.016667,14.50000003 +transit,121.02291618161927,14.504167242662048 +transit,121.02916559692267,14.508334287533266 +transit,121.03541524597964,14.512501164557353 +transit,121.04166512885968,14.516667873678005 +transit,121.04791524563227,14.520834414838916 +transit,121.05416559636687,14.525000787983764 +transit,121.06041618113295,14.529166993056233 +TP7,121.066667,14.53333303 +transit,121.07583018072394,14.533882414209392 +transit,121.08499340670342,14.534431440154327 +transit,121.09415667791092,14.534980107818962 +transit,121.10331999431891,14.535528417187455 +transit,121.11248335589988,14.536076368243979 +transit,121.1216467626263,14.536623960972735 +transit,121.13081021447063,14.537171195357901 +transit,121.13997371140532,14.537718071383694 +transit,121.14913725340284,14.53826458903432 +transit,121.15830084043564,14.538810748294011 +transit,121.16746447247617,14.539356549147001 +transit,121.17662814949685,14.539901991577533 +transit,121.18579187147013,14.540447075569869 +transit,121.19495563836843,14.540991801108271 +transit,121.20411945016417,14.54153616817701 +transit,121.2132833068298,14.542080176760381 +transit,121.2224472083377,14.542623826842673 +transit,121.23161115466029,14.543167118408192 +transit,121.24077514576997,14.543710051441261 +transit,121.24993918163916,14.544252625926195 +transit,121.25910326224022,14.54479484184734 +transit,121.26826738754556,14.545336699189036 +transit,121.27743155752755,14.545878197935643 +transit,121.28659577215859,14.546419338071534 +transit,121.29576003141102,14.54696011958107 +transit,121.30492433525723,14.547500542448649 +transit,121.31408868366958,14.548040606658665 +transit,121.32325307662043,14.548580312195526 +transit,121.33241751408211,14.549119659043642 +transit,121.341581996027,14.549658647187448 +transit,121.35074652242741,14.550197276611378 +transit,121.3599110932557,14.55073554729988 +transit,121.3690757084842,14.551273459237406 +transit,121.37824036808523,14.55181101240843 +transit,121.3874050720311,14.552348206797427 +transit,121.39656982029415,14.552885042388887 +transit,121.40573461284667,14.553421519167301 +transit,121.414899449661,14.553957637117183 +transit,121.42406433070938,14.554493396223052 +transit,121.43322925596416,14.555028796469427 +transit,121.44239422539762,14.555563837840852 +transit,121.45155923898204,14.556098520321877 +transit,121.46072429668969,14.556632843897054 +transit,121.46988939849287,14.557166808550955 +transit,121.47905454436382,14.557700414268163 +transit,121.48821973427482,14.558233661033256 +transit,121.49738496819815,14.558766548830839 +transit,121.50655024610603,14.559299077645516 +transit,121.51571556797074,14.559831247461915 +transit,121.5248809337645,14.560363058264652 +transit,121.53404634345958,14.56089451003838 +transit,121.54321179702818,14.561425602767736 +transit,121.55237729444256,14.561956336437385 +transit,121.56154283567493,14.562486711032001 +transit,121.57070842069751,14.563016726536254 +transit,121.57987404948253,14.563546382934835 +transit,121.58903972200218,14.564075680212447 +transit,121.59820543822867,14.5646046183538 +transit,121.6073711981342,14.565133197343611 +transit,121.61653700169097,14.565661417166611 +transit,121.62570284887119,14.56618927780754 +transit,121.63486873964699,14.566716779251148 +transit,121.64403467399059,14.567243921482198 +transit,121.65320065187416,14.567770704485456 +transit,121.66236667326987,14.568297128245705 +transit,121.67153273814988,14.568823192747736 +transit,121.68069884648634,14.569348897976344 +transit,121.68986499825142,14.569874243916354 +transit,121.69903119341727,14.57039923055257 +transit,121.70819743195602,14.570923857869833 +transit,121.71736371383982,14.571448125852982 +transit,121.72653003904081,14.571972034486867 +transit,121.73569640753111,14.572495583756353 +transit,121.74486281928284,14.57301877364631 +transit,121.75402927426813,14.573541604141617 +transit,121.7631957724591,14.574064075227167 +transit,121.77236231382784,14.574586186887863 +transit,121.78152889834648,14.575107939108621 +transit,121.7906955259871,14.575629331874358 +transit,121.7998621967218,14.57615036517001 +transit,121.80902891052267,14.57667103898051 +transit,121.8181956673618,14.577191353290825 +transit,121.82736246721126,14.577711308085908 +transit,121.83652931004313,14.57823090335073 +transit,121.84569619582949,14.578750139070287 +transit,121.85486312454239,14.579269015229562 +transit,121.8640300961539,14.579787531813555 +transit,121.87319711063607,14.580305688807288 +transit,121.88236416796094,14.580823486195785 +transit,121.89153126810058,14.581340923964072 +transit,121.90069841102701,14.5818580020972 +transit,121.90986559671227,14.582374720580212 +transit,121.9190328251284,14.58289107939819 +transit,121.92820009624741,14.583407078536194 +transit,121.93736741004133,14.583922717979313 +transit,121.94653476648217,14.584437997712644 +transit,121.95570216554196,14.584952917721287 +transit,121.96486960719268,14.585467477990361 +transit,121.97403709140634,14.58598167850499 +transit,121.98320461815494,14.586495519250304 +transit,121.99237218741048,14.58700900021146 +transit,122.00153979914494,14.587522121373604 +transit,122.01070745333028,14.5880348827219 +transit,122.0198751499385,14.588547284241535 +transit,122.02904288894156,14.589059325917686 +transit,122.03821067031143,14.589571007735548 +transit,122.04737849402008,14.590082329680333 +transit,122.05654636003946,14.590593291737255 +transit,122.06571426834152,14.59110389389154 +transit,122.07488221889822,14.591614136128431 +transit,122.08405021168149,14.592124018433163 +transit,122.09321824666326,14.592633540791 +transit,122.10238632381547,14.593142703187215 +transit,122.11155444311005,14.593651505607074 +transit,122.12072260451893,14.594159948035873 +transit,122.12989080801403,14.594668030458902 +transit,122.13905905356724,14.595175752861477 +transit,122.14822734115047,14.595683115228915 +transit,122.15739567073565,14.59619011754654 +transit,122.16656404229467,14.596696759799693 +transit,122.1757324557994,14.59720304197372 +transit,122.18490091122176,14.597708964053986 +transit,122.19406940853362,14.598214526025854 +transit,122.20323794770685,14.598719727874704 +transit,122.21240652871334,14.599224569585928 +transit,122.22157515152496,14.599729051144925 +transit,122.23074381611356,14.600233172537102 +transit,122.23991252245101,14.600736933747877 +transit,122.24908127050917,14.60124033476269 +transit,122.25825006025988,14.60174337556697 +transit,122.26741889167498,14.602246056146171 +transit,122.27658776472633,14.602748376485765 +transit,122.28575667938576,14.6032503365712 +transit,122.29492563562509,14.603751936387978 +transit,122.30409463341616,14.604253175921576 +transit,122.31326367273077,14.604754055157505 +transit,122.32243275354075,14.605254574081268 +transit,122.33160187581792,14.605754732678392 +transit,122.34077103953409,14.60625453093441 +transit,122.34994024466104,14.60675396883486 +transit,122.3591094911706,14.6072530463653 +transit,122.36827877903453,14.607751763511283 +transit,122.37744810822463,14.60825012025839 +transit,122.38661747871268,14.6087481165922 +transit,122.39578689047046,14.609245752498305 +transit,122.40495634346976,14.609743027962317 +transit,122.41412583768232,14.610239942969839 +transit,122.42329537307994,14.610736497506496 +transit,122.43246494963434,14.611232691557927 +transit,122.44163456731731,14.61172852510977 +transit,122.45080422610057,14.61222399814768 +transit,122.45997392595588,14.612719110657332 +transit,122.46914366685498,14.613213862624384 +transit,122.47831344876961,14.613708254034531 +transit,122.4874832716715,14.61420228487347 +transit,122.49665313553236,14.614695955126896 +transit,122.50582304032393,14.615189264780534 +transit,122.51499298601792,14.615682213820106 +transit,122.52416297258604,14.616174802231347 +TP8,122.533333,14.61666703 +transit,122.52556561919452,14.621547870102633 +transit,122.51779789531567,14.626428449327847 +transit,122.51002982824683,14.631308767573683 +transit,122.50226141787151,14.636188824738152 +transit,122.49449266407314,14.641068620719285 +transit,122.48672356673521,14.64594815541507 +transit,122.47895412574117,14.650827428723506 +transit,122.47118434097452,14.65570644054257 +transit,122.46341421231872,14.66058519077024 +transit,122.4556437396573,14.665463679304477 +transit,122.44787292287376,14.670341906043225 +transit,122.44010176185158,14.675219870884417 +transit,122.43233025647429,14.680097573725998 +transit,122.42455840662541,14.684975014465873 +transit,122.41678621218847,14.689852193001954 +transit,122.40901367304701,14.694729109232135 +transit,122.40124078908458,14.699605763054308 +transit,122.39346756018472,14.704482154366342 +transit,122.38569398623098,14.709358283066104 +transit,122.37792006710694,14.714234149051446 +transit,122.37014580269616,14.719109752220218 +transit,122.36237119288224,14.723985092470246 +transit,122.35459623754872,14.728860169699349 +transit,122.34682093657923,14.733734983805347 +transit,122.33904528985737,14.738609534686038 +transit,122.33126929726672,14.743483822239215 +transit,122.32349295869092,14.748357846362651 +transit,122.31571627401357,14.753231606954119 +transit,122.3079392431183,14.758105103911376 +transit,122.30016186588877,14.762978337132163 +transit,122.29238414220859,14.767851306514233 +transit,122.28460607196142,14.772724011955296 +transit,122.27682765503093,14.777596453353075 +transit,122.26904889130076,14.782468630605276 +transit,122.26126978065459,14.787340543609588 +transit,122.25349032297609,14.7922121922637 +transit,122.24571051814895,14.797083576465276 +transit,122.23793036605687,14.801954696111991 +transit,122.23014986658353,14.806825551101488 +transit,122.22236901961266,14.811696141331407 +transit,122.21458782502795,14.816566466699378 +transit,122.20680628271313,14.821436527103023 +transit,122.19902439255192,14.826306322439951 +transit,122.19124215442805,14.831175852607759 +transit,122.18345956822529,14.836045117504034 +transit,122.17567663382735,14.84091411702635 +transit,122.16789335111802,14.845782851072276 +transit,122.16010971998104,14.850651319539361 +transit,122.15232574030018,14.855519522325157 +transit,122.14454141195925,14.860387459327194 +transit,122.136756734842,14.865255130442998 +transit,122.12897170883222,14.870122535570081 +transit,122.12118633381372,14.874989674605935 +transit,122.11340060967032,14.87985654744806 +transit,122.10561453628581,14.884723153993935 +transit,122.09782811354404,14.889589494141026 +transit,122.0900413413288,14.894455567786792 +transit,122.08225421952395,14.899321374828682 +transit,122.07446674801334,14.904186915164132 +transit,122.0666789266808,14.909052188690572 +transit,122.05889075541019,14.91391719530541 +transit,122.05110223408538,14.918781934906056 +transit,122.04331336259025,14.923646407389905 +transit,122.03552414080868,14.928510612654335 +transit,122.02773456862452,14.933374550596724 +transit,122.01994464592171,14.93823822111443 +transit,122.01215437258413,14.943101624104806 +transit,122.0043637484957,14.947964759465188 +transit,121.99657277354034,14.95282762709291 +transit,121.98878144760195,14.95769022688529 +transit,121.98098977056446,14.962552558739631 +transit,121.97319774231184,14.967414622553237 +transit,121.96540536272802,14.97227641822339 +transit,121.95761263169695,14.977137945647371 +transit,121.94981954910257,14.981999204722436 +transit,121.94202611482889,14.986860195345843 +transit,121.93423232875986,14.991720917414838 +transit,121.92643819077946,14.99658137082665 +transit,121.91864370077171,15.001441555478497 +transit,121.91084885862058,15.006301471267596 +transit,121.90305366421008,15.011161118091142 +transit,121.89525811742422,15.016020495846332 +transit,121.88746221814702,15.020879604430334 +transit,121.87966596626254,15.025738443740327 +transit,121.87186936165476,15.030597013673455 +transit,121.86407240420777,15.035455314126871 +transit,121.85627509380559,15.040313344997712 +transit,121.8484774303323,15.0451711061831 +transit,121.84067941367195,15.050028597580143 +transit,121.83288104370862,15.054885819085952 +transit,121.8250823203264,15.05974277059761 +transit,121.81728324340935,15.064599452012208 +transit,121.80948381284159,15.06945586322681 +transit,121.80168402850722,15.074312004138477 +transit,121.79388389029036,15.079167874644254 +transit,121.7860833980751,15.084023474641183 +transit,121.77828255174559,15.088878804026292 +transit,121.77048135118595,15.093733862696592 +transit,121.76267979628034,15.09858865054909 +transit,121.7548778869129,15.10344316748078 +transit,121.74707562296777,15.108297413388643 +transit,121.73927300432914,15.113151388169657 +transit,121.73147003088116,15.118005091720779 +transit,121.72366670250803,15.122858523938962 +transit,121.71586301909392,15.127711684721149 +transit,121.70805898052303,15.132564573964261 +transit,121.70025458667959,15.137417191565222 +transit,121.69244983744775,15.142269537420944 +transit,121.6846447327118,15.147121611428311 +transit,121.67683927235592,15.151973413484216 +transit,121.66903345626434,15.15682494348553 +transit,121.66122728432133,15.161676201329124 +transit,121.65342075641112,15.166527186911841 +transit,121.64561387241798,15.171377900130533 +transit,121.63780663222616,15.176228340882028 +transit,121.62999903571995,15.181078509063143 +transit,121.6221910827836,15.185928404570689 +transit,121.61438277330143,15.190778027301468 +transit,121.60657410715773,15.195627377152261 +transit,121.59876508423677,15.200476454019848 +transit,121.59095570442291,15.205325257800993 +transit,121.58314596760046,15.210173788392458 +transit,121.57533587365371,15.215022045690983 +transit,121.56752542246704,15.219870029593292 +transit,121.55971461392477,15.22471773999612 +transit,121.55190344791124,15.229565176796171 +transit,121.54409192431083,15.23441233989015 +transit,121.5362800430079,15.239259229174742 +transit,121.52846780388683,15.24410584454663 +transit,121.52065520683199,15.248952185902473 +transit,121.51284225172778,15.253798253138939 +transit,121.50502893845858,15.258644046152666 +transit,121.49721526690882,15.263489564840294 +transit,121.4894012369629,15.268334809098441 +transit,121.48158684850526,15.273179778823721 +transit,121.47377210142031,15.278024473912744 +transit,121.46595699559248,15.28286889426209 +transit,121.45814153090625,15.287713039768345 +transit,121.45032570724604,15.292556910328077 +transit,121.44250952449632,15.29740050583784 +transit,121.43469298254158,15.30224382619419 +transit,121.42687608126626,15.307086871293658 +transit,121.41905882055488,15.311929641032771 +transit,121.41124120029193,15.316772135308046 +transit,121.40342322036187,15.321614354015976 +transit,121.39560488064927,15.326456297053063 +transit,121.38778618103862,15.331297964315786 +transit,121.37996712141444,15.336139355700615 +transit,121.37214770166128,15.340980471104006 +transit,121.36432792166367,15.345821310422412 +transit,121.35650778130615,15.350661873552276 +transit,121.3486872804733,15.355502160390012 +transit,121.34086641904968,15.360342170832043 +transit,121.33304519691985,15.365181904774774 +transit,121.32522361396842,15.3700213621146 +transit,121.31740167007995,15.374860542747898 +transit,121.30957936513906,15.379699446571044 +transit,121.30175669903035,15.384538073480398 +transit,121.29393367163843,15.389376423372305 +transit,121.28611028284793,15.39421449614311 +transit,121.27828653254349,15.399052291689138 +transit,121.27046242060972,15.403889809906707 +transit,121.2626379469313,15.408727050692123 +transit,121.25481311139286,15.413564013941675 +transit,121.2469879138791,15.418400699551658 +transit,121.23916235427465,15.423237107418332 +transit,121.2313364324642,15.428073237437966 +transit,121.22351014833248,15.432909089506806 +transit,121.21568350176413,15.437744663521098 +transit,121.20785649264388,15.442579959377069 +transit,121.20002912085647,15.447414976970931 +transit,121.19220138628657,15.452249716198892 +transit,121.18437328881895,15.457084176957158 +transit,121.17654482833832,15.4619183591419 +transit,121.16871600472946,15.466752262649294 +transit,121.16088681787708,15.471585887375513 +transit,121.153057267666,15.476419233216696 +transit,121.14522735398094,15.481252300068983 +transit,121.1373970767067,15.486085087828513 +transit,121.12956643572808,15.490917596391396 +transit,121.12173543092986,15.495749825653744 +transit,121.11390406219684,15.500581775511655 +transit,121.10607232941386,15.505413445861208 +transit,121.09824023246571,15.51024483659848 +transit,121.09040777123724,15.51507594761953 +transit,121.08257494561329,15.51990677882042 +transit,121.0747417554787,15.52473733009718 +transit,121.06690820071832,15.529567601345844 +transit,121.05907428121701,15.534397592462433 +transit,121.05123999685966,15.539227303342948 +transit,121.04340534753115,15.544056733883396 +transit,121.03557033311634,15.548885883979748 +transit,121.02773495350016,15.553714753527995 +transit,121.01989920856751,15.558543342424088 +transit,121.0120630982033,15.563371650563985 +transit,121.00422662229244,15.568199677843625 +transit,120.99638978071987,15.573027424158942 +transit,120.98855257337054,15.577854889405847 +transit,120.9807150001294,15.582682073480255 +transit,120.97287706088137,15.587508976278063 +transit,120.96503875551146,15.592335597695147 +transit,120.95720008390462,15.59716193762739 +transit,120.94936104594584,15.601987995970662 +transit,120.94152164152011,15.606813772620804 +transit,120.93368187051243,15.611639267473658 +transit,120.92584173280781,15.616464480425057 +transit,120.91800122829126,15.621289411370824 +transit,120.91016035684781,15.626114060206762 +transit,120.9023191183625,15.630938426828667 +transit,120.89447751272036,15.635762511132329 +transit,120.88663553980643,15.640586313013518 +transit,120.87879319950581,15.645409832368003 +transit,120.87095049170354,15.650233069091534 +transit,120.8631074162847,15.65505602307985 +transit,120.85526397313437,15.659878694228684 +transit,120.84742016213767,15.664701082433753 +transit,120.83957598317967,15.669523187590764 +transit,120.83173143614549,15.674345009595418 +transit,120.82388652092027,15.679166548343394 +transit,120.81604123738913,15.683987803730375 +transit,120.80819558543719,15.688808775652017 +transit,120.80034956494961,15.69362946400397 +transit,120.79250317581156,15.698449868681891 +transit,120.78465641790818,15.703269989581393 +transit,120.77680929112465,15.708089826598103 +transit,120.76896179534616,15.712909379627623 +transit,120.76111393045788,15.717728648565553 +transit,120.75326569634504,15.72254763330748 +transit,120.74541709289281,15.727366333748977 +transit,120.73756811998645,15.732184749785599 +transit,120.72971877751114,15.737002881312911 +transit,120.72186906535215,15.741820728226447 +transit,120.71401898339471,15.746638290421732 +transit,120.70616853152407,15.75145556779429 +transit,120.69831770962548,15.756272560239628 +transit,120.69046651758426,15.761089267653242 +transit,120.68261495528562,15.765905689930612 +transit,120.67476302261487,15.770721826967218 +transit,120.66691071945732,15.775537678658523 +transit,120.65905804569827,15.780353244899969 +transit,120.65120500122303,15.785168525587002 +transit,120.64335158591693,15.789983520615053 +transit,120.6354977996653,15.794798229879532 +transit,120.62764364235348,15.799612653275858 +transit,120.6197891138668,15.804426790699411 +transit,120.61193421409065,15.809240642045587 +transit,120.60407894291038,15.814054207209752 +transit,120.59622330021138,15.818867486087273 +transit,120.588367285879,15.823680478573497 +transit,120.58051089979868,15.828493184563765 +transit,120.57265414185579,15.8333056039534 +transit,120.56479701193577,15.838117736637717 +transit,120.556939509924,15.842929582512037 +transit,120.54908163570596,15.84774114147164 +transit,120.54122338916706,15.852552413411813 +transit,120.53336477019276,15.857363398227829 +transit,120.5255057786685,15.862174095814947 +transit,120.51764641447977,15.866984506068418 +transit,120.50978667751204,15.871794628883478 +transit,120.50192656765077,15.876604464155356 +transit,120.49406608478148,15.88141401177927 +transit,120.48620522878967,15.886223271650417 +transit,120.47834399956085,15.891032243664 +transit,120.47048239698053,15.895840927715195 +transit,120.46262042093426,15.90064932369917 +transit,120.45475807130757,15.905457431511095 +transit,120.44689534798599,15.910265251046106 +transit,120.43903225085509,15.915072782199351 +transit,120.43116877980046,15.91988002486595 +transit,120.42330493470766,15.924686978941011 +transit,120.41544071546227,15.929493644319649 +transit,120.40757612194987,15.93430002089695 +transit,120.39971115405609,15.939106108567994 +transit,120.39184581166654,15.943911907227859 +transit,120.38398009466682,15.94871741677159 +transit,120.37611400294259,15.953522637094247 +transit,120.36824753637947,15.958327568090855 +transit,120.36038069486312,15.96313220965645 +transit,120.35251347827919,15.96793656168603 +transit,120.34464588651336,15.972740624074607 +transit,120.33677791945131,15.97754439671717 +transit,120.3289095769787,15.982347879508701 +transit,120.32104085898125,15.987151072344163 +transit,120.31317176534466,15.991953975118513 +transit,120.30530229595463,15.9967565877267 +transit,120.29743245069693,16.001558910063654 +transit,120.28956222945723,16.006360942024305 +transit,120.28169163212132,16.01116268350356 +transit,120.27382065857493,16.015964134396313 +transit,120.26594930870382,16.020765294597464 +transit,120.25807758239378,16.025566164001887 +transit,120.25020547953058,16.03036674250444 +RPUG,120.242333,16.03516703 +transit,120.24623823181024,16.027308305816007 +transit,120.25014315779546,16.019449504816514 +transit,120.25404777813486,16.011590627046164 +transit,120.25795209300753,16.003731672549574 +transit,120.26185610259255,15.995872641371351 +transit,120.26575980706895,15.98801353355609 +transit,120.26966320661572,15.980154349148401 +transit,120.2735663014118,15.972295088192846 +transit,120.27746909163608,15.964435750733996 +transit,120.28137157746741,15.956576336816413 +transit,120.28527375908462,15.948716846484638 +transit,120.28917563666643,15.940857279783213 +transit,120.29307721039159,15.93299763675666 +transit,120.29697848043877,15.925137917449488 +transit,120.30087944698658,15.917278121906211 +transit,120.30478011021364,15.909418250171314 +transit,120.30868047029847,15.90155830228928 +transit,120.31258052741956,15.893698278304585 +transit,120.31648028175536,15.885838178261688 +transit,120.3203797334843,15.877978002205033 +transit,120.32427888278474,15.870117750179068 +transit,120.32817772983499,15.862257422228218 +transit,120.33207627481332,15.854397018396904 +transit,120.33597451789798,15.846536538729532 +transit,120.33987245926716,15.83867598327049 +transit,120.34377009909898,15.83081535206418 +transit,120.34766743757156,15.822954645154963 +transit,120.35156447486294,15.815093862587212 +transit,120.35546121115117,15.807233004405274 +transit,120.35935764661417,15.7993720706535 +transit,120.36325378142989,15.791511061376225 +transit,120.36714961577621,15.783649976617763 +transit,120.37104514983096,15.775788816422434 +transit,120.37494038377194,15.767927580834526 +transit,120.3788353177769,15.760066269898346 +transit,120.38272995202355,15.752204883658163 +transit,120.38662428668954,15.744343422158245 +transit,120.39051832195248,15.736481885442863 +transit,120.39441205798998,15.728620273556256 +transit,120.39830549497955,15.720758586542665 +transit,120.40219863309868,15.712896824446311 +transit,120.4060914725248,15.705034987311416 +transit,120.40998401343533,15.697173075182189 +transit,120.41387625600763,15.689311088102823 +transit,120.417768200419,15.681449026117498 +transit,120.42165984684671,15.6735868892704 +transit,120.425551195468,15.665724677605683 +transit,120.42944224646006,15.657862391167502 +TP9,120.433333,15.65000003 +transit,120.43556823903522,15.64149172352093 +transit,120.43780329336165,15.632983387670583 +transit,120.44003816309964,15.624475022467013 +transit,120.44227284836951,15.615966627928293 +transit,120.44450734929154,15.607458204072472 +transit,120.44674166598597,15.59894975091761 +transit,120.44897579857302,15.590441268481753 +transit,120.45120974717285,15.581932756782956 +transit,120.45344351190562,15.57342421583926 +transit,120.45567709289142,15.564915645668703 +transit,120.45791049025034,15.556407046289324 +transit,120.46014370410239,15.547898417719157 +transit,120.46237673456761,15.539389759976224 +transit,120.46460958176594,15.530881073078557 +transit,120.46684224581733,15.522372357044167 +transit,120.46907472684168,15.513863611891091 +transit,120.47130702495885,15.505354837637327 +transit,120.47353914028865,15.496846034300894 +transit,120.47577107295092,15.4883372018998 +transit,120.4780028230654,15.479828340452036 +transit,120.4802343907518,15.471319449975615 +transit,120.48246577612984,15.462810530488522 +transit,120.48469697931918,15.454301582008759 +transit,120.48692800043943,15.445792604554313 +transit,120.4891588396102,15.43728359814316 +transit,120.49138949695102,15.428774562793299 +transit,120.49361997258144,15.420265498522689 +transit,120.49585026662093,15.41175640534931 +transit,120.49808037918895,15.403247283291138 +transit,120.50031031040493,15.394738132366136 +transit,120.50254006038826,15.386228952592264 +transit,120.50476962925826,15.377719743987488 +transit,120.50699901713428,15.369210506569756 +transit,120.5092282241356,15.360701240357029 +transit,120.51145725038145,15.352191945367249 +transit,120.51368609599108,15.343682621618361 +transit,120.51591476108365,15.335173269128315 +transit,120.5181432457783,15.32666388791504 +transit,120.52037155019418,15.318154477996474 +transit,120.52259967445035,15.309645039390544 +transit,120.52482761866585,15.301135572115179 +transit,120.5270553829597,15.292626076188302 +transit,120.5292829674509,15.284116551627838 +transit,120.53151037225837,15.275606998451693 +transit,120.53373759750103,15.267097416677787 +transit,120.53596464329776,15.258587806324032 +transit,120.5381915097674,15.250078167408322 +transit,120.54041819702879,15.241568499948567 +transit,120.54264470520067,15.233058803962667 +transit,120.54487103440181,15.224549079468511 +transit,120.54709718475091,15.216039326483996 +transit,120.54932315636665,15.207529545027002 +transit,120.55154894936767,15.199019735115417 +transit,120.55377456387261,15.19050989676712 +RPLC,120.556,15.18200003 +transit,120.56232759211345,15.175791398462003 +transit,120.568654814593,15.169582585856645 +transit,120.5749816676081,15.16337359227141 +transit,120.58130815132822,15.157164417793794 +transit,120.5876342659228,15.150955062511267 +transit,120.59396001156126,15.14474552651128 +transit,120.60028538841301,15.138535809881272 +transit,120.60661039664744,15.132325912708675 +transit,120.61293503643391,15.126115835080892 +transit,120.6192593079418,15.11990557708532 +transit,120.62558321134041,15.113695138809339 +transit,120.63190674679909,15.107484520340309 +transit,120.63822991448711,15.10127372176558 +transit,120.64455271457378,15.095062743172493 +transit,120.65087514722836,15.088851584648351 +transit,120.65719721262009,15.082640246280466 +transit,120.6635189109182,15.076428728156124 +transit,120.66984024229191,15.070217030362606 +transit,120.67616120691042,15.064005152987152 +transit,120.6824818049429,15.057793096117013 +transit,120.68880203655851,15.051580859839419 +transit,120.6951219019264,15.045368444241577 +transit,120.70144140121567,15.03915584941069 +transit,120.70776053459548,15.03294307543393 +transit,120.71407930223488,15.026730122398469 +transit,120.72039770430295,15.020516990391458 +transit,120.72671574096876,15.014303679500028 +transit,120.73303341240134,15.008090189811307 +transit,120.7393507187697,15.001876521412399 +transit,120.74566766024286,14.99566267439039 +transit,120.75198423698978,14.989448648832358 +transit,120.75830044917947,14.983234444825364 +transit,120.76461629698086,14.977020062456457 +transit,120.77093178056288,14.970805501812661 +transit,120.77724690009445,14.964590762980993 +transit,120.78356165574446,14.958375846048451 +transit,120.78987604768182,14.95216075110203 +transit,120.79619007607536,14.94594547822869 +transit,120.80250374109394,14.939730027515386 +transit,120.8088170429064,14.933514399049061 +transit,120.81512998168154,14.927298592916644 +transit,120.82144255758816,14.921082609205031 +transit,120.82775477079502,14.914866448001135 +transit,120.83406662147091,14.908650109391827 +transit,120.84037810978455,14.90243359346397 +transit,120.84668923590468,14.896216900304411 +RPUX,120.853,14.89000003 +transit,120.85979782446294,14.884600564854255 +transit,120.86659531051718,14.879200895697487 +transit,120.87339245829533,14.873801022616716 +transit,120.88018926793,14.868400945698953 +transit,120.88698573955382,14.863000665031208 +transit,120.89378187329942,14.857600180700459 +transit,120.90057766929938,14.852199492793686 +transit,120.90737312768633,14.846798601397856 +transit,120.91416824859287,14.841397506599918 +transit,120.92096303215158,14.835996208486819 +transit,120.92775747849507,14.830594707145481 +transit,120.9345515877559,14.825193002662823 +transit,120.94134536006668,14.819791095125751 +transit,120.94813879555998,14.814388984621152 +transit,120.95493189436837,14.808986671235916 +transit,120.96172465662443,14.803584155056903 +transit,120.96851708246069,14.798181436170978 +transit,120.97530917200974,14.792778514664978 +transit,120.98210092540413,14.78737539062574 +transit,120.9888923427764,14.781972064140092 +transit,120.9956834242591,14.776568535294828 +transit,121.00247416998477,14.771164804176754 +transit,121.00926458008594,14.765760870872654 +transit,121.01605465469515,14.760356735469305 +transit,121.02284439394494,14.754952398053465 +transit,121.02963379796779,14.749547858711882 +transit,121.03642286689625,14.744143117531296 +transit,121.0432116008628,14.738738174598431 +TP1,121.05,14.73333303 +transit,121.051095723919,14.72546409823825 +transit,121.05219136923515,14.717595155954921 +transit,121.05328693599787,14.709726203155862 +transit,121.05438242425664,14.701857239846916 +transit,121.05547783406094,14.693988266033939 +transit,121.05657316546016,14.686119281722771 +transit,121.05766841850375,14.678250286919257 +transit,121.05876359324112,14.670381281629242 +transit,121.05985868972166,14.662512265858577 +transit,121.06095370799477,14.654643239613106 +transit,121.0620486481098,14.646774202898664 +transit,121.0631435101161,14.63890515572111 +transit,121.06423829406307,14.631036098086266 +MAO1,121.065333,14.62316703 +transit,121.06905300826244,14.614962521959232 +transit,121.07277274046876,14.606757948816796 +transit,121.07649219679926,14.598553310614683 +transit,121.08021137743422,14.590348607394908 +transit,121.08393028255385,14.582143839199444 +transit,121.08764891233832,14.573939006070276 +transit,121.09136726696777,14.56573410804936 +transit,121.09508534662227,14.557529145178671 +transit,121.09880315148189,14.549324117500145 +transit,121.1025206817266,14.54111902505572 +transit,121.10623793753639,14.532913867887324 +transit,121.10995491909114,14.524708646036885 +transit,121.11367162657073,14.516503359546299 +transit,121.117388060155,14.50829800845748 +transit,121.1211042200237,14.500092592812312 +transit,121.12482010635657,14.491887112652678 +transit,121.12853571933333,14.483681568020451 +transit,121.13225105913361,14.47547595895749 +transit,121.13596612593702,14.467270285505647 +transit,121.13968091992312,14.459064547706769 +transit,121.14339544127142,14.45085874560269 +transit,121.14710969016143,14.442652879235222 +transit,121.15082366677254,14.434446948646196 +transit,121.15453737128415,14.42624095387741 +transit,121.1582508038756,14.418034894970662 +transit,121.16196396472623,14.40982877196773 +transit,121.16567685401523,14.401622584910404 +transit,121.16938947192187,14.393416333840443 +transit,121.1731018186253,14.385210018799611 +transit,121.17681389430464,14.377003639829647 +transit,121.18052569913901,14.368797196972299 +transit,121.1842372333074,14.360590690269289 +transit,121.18794849698884,14.352384119762348 +transit,121.19165949036228,14.344177485493182 +transit,121.19537021360664,14.335970787503486 +transit,121.19908066690076,14.327764025834961 +transit,121.2027908504235,14.319557200529285 +transit,121.2065007643536,14.311350311628132 +transit,121.21021040886986,14.30314335917317 +transit,121.21391978415093,14.294936343206047 +transit,121.21762889037547,14.286729263768416 +transit,121.2213377277221,14.278522120901911 +transit,121.22504629636938,14.270314914648154 +transit,121.22875459649586,14.262107645048763 +transit,121.23246262827999,14.253900312145355 +transit,121.23617039190022,14.245692915979518 +transit,121.23987788753494,14.237485456592848 +transit,121.24358511536252,14.229277934026925 +transit,121.24729207556128,14.221070348323318 +transit,121.25099876830944,14.212862699523585 +transit,121.25470519378528,14.204654987669288 +transit,121.25841135216696,14.196447212801964 +transit,121.26211724363262,14.18823937496314 +transit,121.26582286836036,14.180031474194358 +transit,121.26952822652824,14.171823510537116 +transit,121.27323331831425,14.163615484032935 +transit,121.2769381438964,14.155407394723298 +transit,121.2806427034526,14.147199242649702 +transit,121.28434699716074,14.138991027853624 +transit,121.28805102519864,14.130782750376532 +transit,121.29175478774414,14.122574410259885 +transit,121.29545828497497,14.114366007545135 +transit,121.29916151706885,14.106157542273722 +transit,121.30286448420348,14.097949014487085 +transit,121.30656718655646,14.08974042422664 +transit,121.3102696243054,14.081531771533802 +transit,121.31397179762784,14.073323056449986 +transit,121.3176737067013,14.065114279016573 +transit,121.32137535170321,14.05690543927496 +transit,121.32507673281104,14.048696537266515 +transit,121.32877785020213,14.04048757303262 +transit,121.33247870405384,14.032278546614624 +transit,121.33617929454346,14.02406945805388 +transit,121.33987962184824,14.015860307391733 +transit,121.34357968614539,14.00765109466951 +transit,121.3472794876121,13.999441819928538 +transit,121.35097902642548,13.991232483210126 +transit,121.35467830276262,13.983023084555578 +transit,121.35837731680057,13.9748136240062 +transit,121.36207606871633,13.966604101603268 +transit,121.36577455868688,13.958394517388063 +transit,121.3694727868891,13.950184871401857 +transit,121.3731707534999,13.941975163685907 +transit,121.37686845869612,13.93376539428146 +transit,121.38056590265454,13.92555556322976 +transit,121.38426308555191,13.917345670572047 +transit,121.38796000756496,13.909135716349532 +transit,121.39165666887034,13.900925700603437 +transit,121.3953530696447,13.892715623374963 +transit,121.39904921006462,13.884505484705315 +transit,121.40274509030664,13.876295284635663 +transit,121.40644071054727,13.868085023207206 +transit,121.41013607096298,13.859874700461098 +transit,121.41383117173018,13.851664316438512 +transit,121.41752601302527,13.84345387118059 +transit,121.42122059502456,13.835243364728482 +transit,121.42491491790439,13.827032797123316 +transit,121.428608981841,13.818822168406216 +transit,121.43230278701058,13.810611478618304 +transit,121.43599633358934,13.802400727800679 +transit,121.43968962175342,13.794189915994446 +transit,121.44338265167887,13.78597904324069 +transit,121.44707542354179,13.777768109580496 +transit,121.45076793751815,13.769557115054928 +transit,121.45446019378396,13.76134605970505 +transit,121.45815219251513,13.753134943571922 +transit,121.46184393388755,13.744923766696585 +transit,121.46553541807705,13.736712529120073 +transit,121.46922664525948,13.728501230883413 +transit,121.47291761561057,13.720289872027625 +transit,121.47660832930606,13.712078452593715 +transit,121.48029878652163,13.703866972622688 +transit,121.48398898743292,13.695655432155535 +transit,121.48767893221556,13.687443831233237 +transit,121.49136862104507,13.679232169896766 +transit,121.495058054097,13.67102044818709 +transit,121.49874723154684,13.662808666145162 +transit,121.50243615357,13.654596823811936 +transit,121.50612482034191,13.646384921228343 +transit,121.50981323203793,13.638172958435316 +transit,121.51350138883335,13.629960935473784 +transit,121.51718929090346,13.621748852384647 +transit,121.52087693842353,13.613536709208814 +transit,121.52456433156871,13.60532450598718 +transit,121.5282514705142,13.597112242760629 +transit,121.5319383554351,13.588899919570041 +transit,121.53562498650648,13.580687536456287 +transit,121.5393113639034,13.572475093460218 +transit,121.54299748780082,13.564262590622697 +transit,121.54668335837373,13.55605002798456 +transit,121.55036897579704,13.547837405586638 +transit,121.55405434024563,13.539624723469759 +transit,121.5577394518943,13.531411981674745 +transit,121.56142431091791,13.523199180242393 +transit,121.56510891749117,13.514986319213511 +transit,121.5687932717888,13.506773398628885 +transit,121.5724773739855,13.498560418529294 +transit,121.57616122425588,13.490347378955521 +transit,121.57984482277456,13.482134279948319 +transit,121.58352816971609,13.47392112154845 +transit,121.58721126525498,13.46570790379666 +transit,121.5908941095657,13.457494626733688 +transit,121.59457670282269,13.449281290400265 +transit,121.59825904520038,13.44106789483711 +transit,121.60194113687308,13.432854440084938 +transit,121.60562297801513,13.424640926184447 +transit,121.60930456880082,13.416427353176337 +transit,121.61298590940439,13.408213721101292 +TP2,121.616667,13.40000003 +transit,121.60885689895416,13.404682816452143 +transit,121.60104649558956,13.409365359547875 +transit,121.59323578980056,13.414047659190004 +transit,121.58542478148156,13.418729715281337 +transit,121.57761347052694,13.423411527724678 +transit,121.56980185683109,13.42809309642281 +transit,121.56198994028843,13.43277442127851 +transit,121.55417772079338,13.437455502194558 +transit,121.54636519824032,13.442136339073716 +transit,121.53855237252374,13.446816931818734 +transit,121.53073924353802,13.451497280332362 +transit,121.52292581117764,13.456177384517337 +transit,121.51511207533704,13.460857244276388 +transit,121.50729803591068,13.465536859512236 +transit,121.49948369279302,13.470216230127596 +transit,121.49166904587854,13.474895356025165 +transit,121.48385409506173,13.479574237107645 +transit,121.47603884023708,13.484252873277716 +transit,121.46822328129907,13.488931264438063 +transit,121.46040741814224,13.493609410491347 +transit,121.45259125066107,13.498287311340237 +transit,121.4447747787501,13.502964966887383 +transit,121.43695800230387,13.507642377035422 +transit,121.42914092121687,13.512319541687 +transit,121.4213235353837,13.516996460744734 +transit,121.41350584469889,13.52167313411125 +transit,121.40568784905699,13.526349561689152 +transit,121.39786954835259,13.531025743381038 +transit,121.39005094248026,13.53570167908951 +transit,121.38223203133457,13.540377368717143 +transit,121.37441281481013,13.545052812166515 +transit,121.36659329280154,13.549728009340194 +transit,121.35877346520338,13.554402960140738 +transit,121.3509533319103,13.559077664470694 +transit,121.34313289281691,13.563752122232604 +transit,121.33531214781786,13.568426333328995 +transit,121.32749109680775,13.573100297662402 +transit,121.31966973968126,13.577774015135331 +transit,121.31184807633304,13.582447485650288 +transit,121.30402610665773,13.587120709109774 +transit,121.29620383055004,13.59179368541628 +transit,121.28838124790461,13.59646641447228 +transit,121.28055835861616,13.601138896180252 +transit,121.27273516257937,13.605811130442659 +transit,121.26491165968893,13.610483117161953 +transit,121.25708784983958,13.61515485624058 +transit,121.24926373292602,13.619826347580977 +transit,121.24143930884298,13.624497591085575 +transit,121.2336145774852,13.629168586656796 +transit,121.22578953874742,13.633839334197045 +transit,121.21796419252439,13.638509833608733 +transit,121.21013853871086,13.643180084794247 +transit,121.20231257720162,13.647850087655979 +transit,121.19448630789142,13.6525198420963 +transit,121.18665973067506,13.657189348017583 +transit,121.17883284544733,13.661858605322186 +transit,121.17100565210302,13.666527613912464 +transit,121.16317815053694,13.671196373690751 +transit,121.1553503406439,13.675864884559388 +transit,121.14752222231874,13.680533146420702 +transit,121.13969379545628,13.685201159177 +transit,121.13186505995137,13.6898689227306 +transit,121.12403601569883,13.694536436983796 +transit,121.11620666259356,13.69920370183888 +transit,121.10837700053037,13.703870717198136 +transit,121.10054702940418,13.70853748296383 +transit,121.09271674910985,13.713203999038237 +transit,121.08488615954226,13.717870265323603 +transit,121.07705526059632,13.722536281722183 +transit,121.06922405216693,13.727202048136217 +transit,121.06139253414901,13.731867564467928 +transit,121.05356070643747,13.736532830619538 +transit,121.04572856892723,13.741197846493264 +transit,121.03789612151326,13.745862611991306 +transit,121.03006336409047,13.750527127015868 +transit,121.02223029655383,13.755191391469129 +transit,121.0143969187983,13.759855405253267 +transit,121.00656323071884,13.764519168270452 +transit,120.99872923221045,13.769182680422844 +transit,120.9908949231681,13.7738459416126 +transit,120.9830603034868,13.778508951741857 +transit,120.97522537306153,13.783171710712756 +transit,120.96739013178733,13.787834218427415 +transit,120.95955457955918,13.792496474787962 +transit,120.95171871627214,13.79715847969649 +transit,120.94388254182124,13.801820233055116 +transit,120.93604605610152,13.806481734765917 +transit,120.92820925900803,13.811142984730987 +transit,120.92037215043582,13.815803982852387 +transit,120.91253473027999,13.820464729032192 +transit,120.9046969984356,13.82512522317246 +transit,120.89685895479772,13.829785465175233 +transit,120.88902059926147,13.83444545494255 +transit,120.88118193172193,13.839105192376438 +transit,120.87334295207422,13.843764677378928 +transit,120.86550366021348,13.848423909852029 +transit,120.8576640560348,13.85308288969774 +transit,120.84982413943335,13.85774161681806 +transit,120.84198391030425,13.862400091114976 +transit,120.83414336854266,13.867058312490467 +transit,120.82630251404373,13.871716280846499 +transit,120.81846134670265,13.876373996085038 +transit,120.81061986641458,13.88103145810803 +transit,120.80277807307472,13.885688666817417 +transit,120.79493596657825,13.89034562211514 +transit,120.78709354682039,13.895002323903118 +transit,120.77925081369634,13.89965877208327 +transit,120.77140776710131,13.904314966557509 +transit,120.76356440693054,13.908970907227724 +transit,120.75572073307927,13.913626593995817 +transit,120.74787674544274,13.918282026763661 +transit,120.7400324439162,13.922937205433131 +transit,120.73218782839493,13.927592129906097 +transit,120.72434289877417,13.932246800084409 +transit,120.71649765494922,13.936901215869911 +transit,120.70865209681536,13.941555377164446 +transit,120.7008062242679,13.946209283869846 +transit,120.69296003720211,13.95086293588793 +transit,120.68511353551334,13.955516333120501 +transit,120.67726671909688,13.960169475469373 +transit,120.6694195878481,13.964822362836333 +transit,120.66157214166229,13.969474995123171 +transit,120.65372438043484,13.974127372231665 +transit,120.64587630406108,13.978779494063577 +transit,120.63802791243637,13.98343136052067 +transit,120.6301792054561,13.988082971504696 +transit,120.62233018301566,13.992734326917393 +transit,120.6144808450104,13.997385426660493 +transit,120.60663119133577,14.002036270635728 +transit,120.59878122188714,14.006686858744802 +transit,120.59093093655993,14.01133719088943 +transit,120.58308033524956,14.015987266971308 +transit,120.57522941785149,14.02063708689212 +transit,120.56737818426113,14.025286650553555 +transit,120.55952663437395,14.029935957857278 +transit,120.5516747680854,14.034585008704955 +transit,120.54382258529097,14.039233802998234 +transit,120.5359700858861,14.043882340638765 +transit,120.52811726976628,14.048530621528187 +transit,120.52026413682704,14.053178645568119 +transit,120.51241068696383,14.057826412660184 +transit,120.50455692007222,14.062473922705996 +transit,120.49670283604766,14.067121175607145 +transit,120.48884843478574,14.071768171265235 +transit,120.48099371618197,14.076414909581842 +transit,120.47313868013188,14.081061390458546 +transit,120.46528332653106,14.085707613796908 +transit,120.45742765527504,14.090353579498489 +transit,120.44957166625943,14.09499928746483 +transit,120.44171535937977,14.099644737597474 +transit,120.43385873453167,14.10428992979796 +transit,120.42600179161073,14.108934863967795 +transit,120.41814453051254,14.113579540008503 +transit,120.41028695113273,14.11822395782158 +transit,120.40242905336693,14.12286811730853 +transit,120.39457083711076,14.127512018370826 +transit,120.38671230225987,14.132155660909964 +transit,120.3788534487099,14.136799044827397 +transit,120.37099427635653,14.141442170024593 +transit,120.36313478509541,14.146085036402994 +transit,120.35527497482222,14.150727643864053 +transit,120.34741484543267,14.155369992309202 +transit,120.33955439682241,14.160012081639858 +transit,120.33169362888718,14.164653911757439 +transit,120.32383254152268,14.169295482563356 +transit,120.31597113462463,14.173936793959003 +transit,120.30810940808878,14.178577845845775 +transit,120.30024736181085,14.183218638125043 +transit,120.29238499568658,14.187859170698184 +transit,120.28452230961175,14.19249944346656 +transit,120.2766593034821,14.197139456331524 +transit,120.26879597719343,14.20177920919442 +transit,120.26093233064152,14.206418701956586 +transit,120.25306836372216,14.21105793451935 +transit,120.24520407633115,14.215696906784025 +transit,120.2373394683643,14.220335618651925 +transit,120.22947453971743,14.224974070024347 +transit,120.22160929028637,14.229612260802586 +transit,120.21374371996696,14.234250190887922 +transit,120.20587782865503,14.23888786018163 +transit,120.19801161624646,14.243525268584978 +transit,120.19014508263712,14.248162415999214 +transit,120.18227822772285,14.252799302325593 +transit,120.17441105139956,14.25743592746535 +transit,120.16654355356313,14.262072291319715 +transit,120.15867573410947,14.26670839378991 +transit,120.15080759293448,14.271344234777144 +transit,120.14293912993409,14.275979814182621 +transit,120.13507034500422,14.280615131907531 +transit,120.12720123804081,14.28525018785307 +transit,120.1193318089398,14.2898849819204 +transit,120.11146205759717,14.294519514010698 +transit,120.10359198390884,14.299153784025119 +transit,120.09572158777083,14.303787791864814 +transit,120.08785086907909,14.308421537430918 +transit,120.07997982772963,14.313055020624567 +transit,120.07210846361845,14.317688241346882 +transit,120.06423677664154,14.322321199498983 +transit,120.05636476669494,14.326953894981964 +transit,120.04849243367467,14.331586327696932 +transit,120.04061977747678,14.336218497544966 +transit,120.0327467979973,14.34085040442715 +transit,120.02487349513228,14.345482048244548 +transit,120.01699986877782,14.350113428898224 +transit,120.00912591882997,14.354744546289226 +transit,120.0012516451848,14.359375400318594 +transit,119.99337704773842,14.364005990887367 +transit,119.98550212638693,14.368636317896572 +transit,119.97762688102645,14.373266381247218 +transit,119.96975131155308,14.377896180840319 +transit,119.96187541786297,14.382525716576863 +transit,119.95399919985225,14.387154988357846 +transit,119.94612265741705,14.391783996084245 +transit,119.93824579045356,14.396412739657029 +transit,119.93036859885792,14.401041218977165 +transit,119.92249108252634,14.405669433945606 +transit,119.91461324135496,14.410297384463295 +transit,119.90673507524,14.414925070431163 +transit,119.89885658407766,14.419552491750142 +transit,119.89097776776416,14.424179648321147 +transit,119.88309862619572,14.428806540045086 +transit,119.87521915926855,14.433433166822855 +transit,119.86733936687892,14.438059528555351 +transit,119.85945924892306,14.442685625143456 +transit,119.85157880529725,14.447311456488034 +transit,119.84369803589775,14.451937022489954 +transit,119.83581694062082,14.456562323050072 +transit,119.82793551936278,14.461187358069234 +transit,119.8200537720199,14.465812127448268 +transit,119.8121716984885,14.470436631088013 +transit,119.8042892986649,14.475060868889285 +transit,119.79640657244542,14.479684840752888 +transit,119.78852351972638,14.484308546579626 +transit,119.78064014040415,14.488931986270298 +transit,119.77275643437507,14.493555159725679 +transit,119.76487240153551,14.498178066846538 +transit,119.75698804178184,14.502800707533652 +transit,119.74910335501042,14.507423081687769 +transit,119.74121834111769,14.512045189209637 +TP3,119.733333,14.51666703 +transit,119.74245511347887,14.516859138136162 +transit,119.75157724268301,14.517050891614721 +transit,119.76069938758363,14.517242290430186 +transit,119.7698215481519,14.517433334577088 +transit,119.778943724359,14.517624024049958 +transit,119.78806591617612,14.517814358843355 +transit,119.79718812357443,14.518004338951831 +transit,119.80631034652511,14.518193964369956 +transit,119.81543258499933,14.518383235092298 +transit,119.82455483896827,14.518572151113457 +transit,119.8336771084031,14.518760712428026 +transit,119.84279939327499,14.51894891903061 +transit,119.8519216935551,14.519136770915836 +transit,119.8610440092146,14.519324268078323 +transit,119.87016634022466,14.519511410512713 +transit,119.87928868655644,14.519698198213655 +transit,119.8884110481811,14.519884631175808 +transit,119.8975334250698,14.520070709393838 +transit,119.90665581719368,14.52025643286243 +transit,119.91577822452392,14.520441801576267 +transit,119.92490064703168,14.52062681553005 +transit,119.93402308468808,14.520811474718489 +transit,119.94314553746429,14.520995779136301 +transit,119.95226800533146,14.521179728778218 +transit,119.96139048826073,14.521363323638978 +transit,119.97051298622326,14.521546563713331 +transit,119.97963549919015,14.52172944899604 +transit,119.9887580271326,14.52191197948187 +transit,119.99788057002172,14.522094155165606 +transit,120.00700312782864,14.522275976042032 +transit,120.01612570052451,14.522457442105951 +transit,120.02524828808046,14.522638553352174 +transit,120.03437089046764,14.52281930977552 +transit,120.04349350765715,14.522999711370826 +transit,120.05261613962014,14.523179758132923 +transit,120.06173878632774,14.52335945005667 +transit,120.07086144775107,14.523538787136921 +transit,120.07998412386125,14.523717769368552 +transit,120.0891068146294,14.523896396746444 +transit,120.09822952002666,14.524074669265486 +transit,120.10735224002414,14.524252586920579 +transit,120.11647497459296,14.524430149706639 +transit,120.12559772370423,14.524607357618583 +transit,120.13472048732906,14.524784210651344 +transit,120.14384326543858,14.524960708799867 +transit,120.15296605800388,14.525136852059099 +transit,120.1620888649961,14.525312640424003 +transit,120.17121168638631,14.525488073889557 +transit,120.18033452214566,14.525663152450734 +transit,120.1894573722452,14.525837876102537 +transit,120.19858023665608,14.526012244839965 +transit,120.20770311534939,14.526186258658022 +transit,120.21682600829621,14.526359917551739 +transit,120.22594891546765,14.526533221516154 +transit,120.23507183683482,14.5267061705463 +transit,120.2441947723688,14.526878764637232 +transit,120.25331772204069,14.527051003784026 +transit,120.26244068582157,14.52722288798174 +transit,120.27156366368254,14.527394417225459 +transit,120.28068665559469,14.527565591510283 +transit,120.2898096615291,14.527736410831311 +transit,120.29893268145686,14.527906875183666 +transit,120.30805571534906,14.528076984562459 +transit,120.31717876317676,14.528246738962837 +transit,120.32630182491106,14.528416138379937 +transit,120.33542490052302,14.528585182808916 +transit,120.34454798998375,14.528753872244932 +transit,120.3536710932643,14.52892220668317 +transit,120.36279421033575,14.529090186118813 +transit,120.37191734116917,14.529257810547046 +transit,120.38104048573562,14.529425079963088 +transit,120.3901636440062,14.529591994362148 +transit,120.39928681595194,14.529758553739445 +transit,120.40841000154394,14.529924758090225 +transit,120.41753320075324,14.530090607409731 +transit,120.42665641355092,14.530256101693213 +transit,120.43577963990803,14.530421240935938 +transit,120.44490287979563,14.530586025133196 +transit,120.4540261331848,14.530750454280257 +transit,120.46314940004656,14.53091452837242 +transit,120.47227268035199,14.531078247404999 +transit,120.48139597407214,14.531241611373302 +transit,120.49051928117807,14.531404620272665 +transit,120.4996426016408,14.531567274098414 +transit,120.50876593543141,14.531729572845906 +transit,120.51788928252093,14.53189151651049 +transit,120.52701264288042,14.532053105087536 +transit,120.53613601648091,14.532214338572425 +transit,120.54525940329346,14.532375216960544 +transit,120.5543828032891,14.532535740247281 +transit,120.56350621643887,14.532695908428057 +transit,120.5726296427138,14.532855721498283 +transit,120.58175308208494,14.53301517945339 +transit,120.59087653452333,14.53317428228881 +TP4,120.6,14.53333303 +transit,120.60891325177454,14.532211177408374 +transit,120.61782641362562,14.531088985787047 +transit,120.62673948553424,14.529966455166676 +transit,120.6356524674814,14.528843585577919 +transit,120.64456535944814,14.527720377051432 +transit,120.65347816141545,14.526596829617894 +transit,120.66239087336437,14.525472943307976 +transit,120.67130349527596,14.524348718152378 +transit,120.68021602713127,14.52322415418179 +transit,120.68912846891136,14.522099251426917 +transit,120.6980408205973,14.520974009918476 +transit,120.70695308217019,14.519848429687181 +transit,120.71586525361108,14.51872251076377 +transit,120.72477733490112,14.517596253178972 +transit,120.73368932602139,14.51646965696354 +transit,120.74260122695303,14.515342722148226 +transit,120.75151303767716,14.514215448763785 +transit,120.7604247581749,14.513087836840993 +transit,120.76933638842745,14.511959886410628 +transit,120.77824792841592,14.510831597503469 +transit,120.7871593781215,14.509702970150322 +transit,120.79607073752537,14.508574004381979 +transit,120.80498200660871,14.507444700229257 +transit,120.81389318535273,14.506315057722974 +transit,120.82280427373861,14.50518507689395 +transit,120.8317152717476,14.504054757773021 +transit,120.84062617936091,14.502924100391041 +transit,120.84953699655976,14.501793104778846 +transit,120.85844772332543,14.500661770967307 +transit,120.86735835963914,14.499530098987284 +transit,120.87626890548218,14.498398088869656 +transit,120.8851793608358,14.497265740645302 +transit,120.89408972568133,14.49613305434512 +RPLS,120.903,14.49500003 +transit,120.91103367798593,14.493834566218396 +transit,120.91906727200656,14.492668827652633 +transit,120.92710078205005,14.491502814328562 +transit,120.93513420810456,14.490336526272037 +transit,120.94316755015822,14.489169963508923 +transit,120.95120080819922,14.488003126065085 +transit,120.95923398221572,14.486836013966391 +transit,120.96726707219588,14.485668627238729 +transit,120.97530007812792,14.484500965907973 +TP5,120.983333,14.48333303 +transit,120.98888832080638,14.486111193273727 +transit,120.9944437799241,14.488889224610709 +transit,120.99999937737775,14.49166712398139 +transit,121.00555511319187,14.494444891356213 +transit,121.0111109873911,14.497222526705604 +TP6,121.016667,14.50000003 +transit,121.02291618161927,14.504167242662048 +transit,121.02916559692267,14.508334287533266 +transit,121.03541524597964,14.512501164557353 +transit,121.04166512885968,14.516667873678005 +transit,121.04791524563227,14.520834414838916 +transit,121.05416559636687,14.525000787983764 +transit,121.06041618113295,14.529166993056233 +TP7,121.066667,14.53333303 +transit,121.07583018072394,14.533882414209392 +transit,121.08499340670342,14.534431440154327 +transit,121.09415667791092,14.534980107818962 +transit,121.10331999431891,14.535528417187455 +transit,121.11248335589988,14.536076368243979 +transit,121.1216467626263,14.536623960972735 +transit,121.13081021447063,14.537171195357901 +transit,121.13997371140532,14.537718071383694 +transit,121.14913725340284,14.53826458903432 +transit,121.15830084043564,14.538810748294011 +transit,121.16746447247617,14.539356549147001 +transit,121.17662814949685,14.539901991577533 +transit,121.18579187147013,14.540447075569869 +transit,121.19495563836843,14.540991801108271 +transit,121.20411945016417,14.54153616817701 +transit,121.2132833068298,14.542080176760381 +transit,121.2224472083377,14.542623826842673 +transit,121.23161115466029,14.543167118408192 +transit,121.24077514576997,14.543710051441261 +transit,121.24993918163916,14.544252625926195 +transit,121.25910326224022,14.54479484184734 +transit,121.26826738754556,14.545336699189036 +transit,121.27743155752755,14.545878197935643 +transit,121.28659577215859,14.546419338071534 +transit,121.29576003141102,14.54696011958107 +transit,121.30492433525723,14.547500542448649 +transit,121.31408868366958,14.548040606658665 +transit,121.32325307662043,14.548580312195526 +transit,121.33241751408211,14.549119659043642 +transit,121.341581996027,14.549658647187448 +transit,121.35074652242741,14.550197276611378 +transit,121.3599110932557,14.55073554729988 +transit,121.3690757084842,14.551273459237406 +transit,121.37824036808523,14.55181101240843 +transit,121.3874050720311,14.552348206797427 +transit,121.39656982029415,14.552885042388887 +transit,121.40573461284667,14.553421519167301 +transit,121.414899449661,14.553957637117183 +transit,121.42406433070938,14.554493396223052 +transit,121.43322925596416,14.555028796469427 +transit,121.44239422539762,14.555563837840852 +transit,121.45155923898204,14.556098520321877 +transit,121.46072429668969,14.556632843897054 +transit,121.46988939849287,14.557166808550955 +transit,121.47905454436382,14.557700414268163 +transit,121.48821973427482,14.558233661033256 +transit,121.49738496819815,14.558766548830839 +transit,121.50655024610603,14.559299077645516 +transit,121.51571556797074,14.559831247461915 +transit,121.5248809337645,14.560363058264652 +transit,121.53404634345958,14.56089451003838 +transit,121.54321179702818,14.561425602767736 +transit,121.55237729444256,14.561956336437385 +transit,121.56154283567493,14.562486711032001 +transit,121.57070842069751,14.563016726536254 +transit,121.57987404948253,14.563546382934835 +transit,121.58903972200218,14.564075680212447 +transit,121.59820543822867,14.5646046183538 +transit,121.6073711981342,14.565133197343611 +transit,121.61653700169097,14.565661417166611 +transit,121.62570284887119,14.56618927780754 +transit,121.63486873964699,14.566716779251148 +transit,121.64403467399059,14.567243921482198 +transit,121.65320065187416,14.567770704485456 +transit,121.66236667326987,14.568297128245705 +transit,121.67153273814988,14.568823192747736 +transit,121.68069884648634,14.569348897976344 +transit,121.68986499825142,14.569874243916354 +transit,121.69903119341727,14.57039923055257 +transit,121.70819743195602,14.570923857869833 +transit,121.71736371383982,14.571448125852982 +transit,121.72653003904081,14.571972034486867 +transit,121.73569640753111,14.572495583756353 +transit,121.74486281928284,14.57301877364631 +transit,121.75402927426813,14.573541604141617 +transit,121.7631957724591,14.574064075227167 +transit,121.77236231382784,14.574586186887863 +transit,121.78152889834648,14.575107939108621 +transit,121.7906955259871,14.575629331874358 +transit,121.7998621967218,14.57615036517001 +transit,121.80902891052267,14.57667103898051 +transit,121.8181956673618,14.577191353290825 +transit,121.82736246721126,14.577711308085908 +transit,121.83652931004313,14.57823090335073 +transit,121.84569619582949,14.578750139070287 +transit,121.85486312454239,14.579269015229562 +transit,121.8640300961539,14.579787531813555 +transit,121.87319711063607,14.580305688807288 +transit,121.88236416796094,14.580823486195785 +transit,121.89153126810058,14.581340923964072 +transit,121.90069841102701,14.5818580020972 +transit,121.90986559671227,14.582374720580212 +transit,121.9190328251284,14.58289107939819 +transit,121.92820009624741,14.583407078536194 +transit,121.93736741004133,14.583922717979313 +transit,121.94653476648217,14.584437997712644 +transit,121.95570216554196,14.584952917721287 +transit,121.96486960719268,14.585467477990361 +transit,121.97403709140634,14.58598167850499 +transit,121.98320461815494,14.586495519250304 +transit,121.99237218741048,14.58700900021146 +transit,122.00153979914494,14.587522121373604 +transit,122.01070745333028,14.5880348827219 +transit,122.0198751499385,14.588547284241535 +transit,122.02904288894156,14.589059325917686 +transit,122.03821067031143,14.589571007735548 +transit,122.04737849402008,14.590082329680333 +transit,122.05654636003946,14.590593291737255 +transit,122.06571426834152,14.59110389389154 +transit,122.07488221889822,14.591614136128431 +transit,122.08405021168149,14.592124018433163 +transit,122.09321824666326,14.592633540791 +transit,122.10238632381547,14.593142703187215 +transit,122.11155444311005,14.593651505607074 +transit,122.12072260451893,14.594159948035873 +transit,122.12989080801403,14.594668030458902 +transit,122.13905905356724,14.595175752861477 +transit,122.14822734115047,14.595683115228915 +transit,122.15739567073565,14.59619011754654 +transit,122.16656404229467,14.596696759799693 +transit,122.1757324557994,14.59720304197372 +transit,122.18490091122176,14.597708964053986 +transit,122.19406940853362,14.598214526025854 +transit,122.20323794770685,14.598719727874704 +transit,122.21240652871334,14.599224569585928 +transit,122.22157515152496,14.599729051144925 +transit,122.23074381611356,14.600233172537102 +transit,122.23991252245101,14.600736933747877 +transit,122.24908127050917,14.60124033476269 +transit,122.25825006025988,14.60174337556697 +transit,122.26741889167498,14.602246056146171 +transit,122.27658776472633,14.602748376485765 +transit,122.28575667938576,14.6032503365712 +transit,122.29492563562509,14.603751936387978 +transit,122.30409463341616,14.604253175921576 +transit,122.31326367273077,14.604754055157505 +transit,122.32243275354075,14.605254574081268 +transit,122.33160187581792,14.605754732678392 +transit,122.34077103953409,14.60625453093441 +transit,122.34994024466104,14.60675396883486 +transit,122.3591094911706,14.6072530463653 +transit,122.36827877903453,14.607751763511283 +transit,122.37744810822463,14.60825012025839 +transit,122.38661747871268,14.6087481165922 +transit,122.39578689047046,14.609245752498305 +transit,122.40495634346976,14.609743027962317 +transit,122.41412583768232,14.610239942969839 +transit,122.42329537307994,14.610736497506496 +transit,122.43246494963434,14.611232691557927 +transit,122.44163456731731,14.61172852510977 +transit,122.45080422610057,14.61222399814768 +transit,122.45997392595588,14.612719110657332 +transit,122.46914366685498,14.613213862624384 +transit,122.47831344876961,14.613708254034531 +transit,122.4874832716715,14.61420228487347 +transit,122.49665313553236,14.614695955126896 +transit,122.50582304032393,14.615189264780534 +transit,122.51499298601792,14.615682213820106 +transit,122.52416297258604,14.616174802231347 +TP8,122.533333,14.61666703 +transit,122.52556561919452,14.621547870102633 +transit,122.51779789531567,14.626428449327847 +transit,122.51002982824683,14.631308767573683 +transit,122.50226141787151,14.636188824738152 +transit,122.49449266407314,14.641068620719285 +transit,122.48672356673521,14.64594815541507 +transit,122.47895412574117,14.650827428723506 +transit,122.47118434097452,14.65570644054257 +transit,122.46341421231872,14.66058519077024 +transit,122.4556437396573,14.665463679304477 +transit,122.44787292287376,14.670341906043225 +transit,122.44010176185158,14.675219870884417 +transit,122.43233025647429,14.680097573725998 +transit,122.42455840662541,14.684975014465873 +transit,122.41678621218847,14.689852193001954 +transit,122.40901367304701,14.694729109232135 +transit,122.40124078908458,14.699605763054308 +transit,122.39346756018472,14.704482154366342 +transit,122.38569398623098,14.709358283066104 +transit,122.37792006710694,14.714234149051446 +transit,122.37014580269616,14.719109752220218 +transit,122.36237119288224,14.723985092470246 +transit,122.35459623754872,14.728860169699349 +transit,122.34682093657923,14.733734983805347 +transit,122.33904528985737,14.738609534686038 +transit,122.33126929726672,14.743483822239215 +transit,122.32349295869092,14.748357846362651 +transit,122.31571627401357,14.753231606954119 +transit,122.3079392431183,14.758105103911376 +transit,122.30016186588877,14.762978337132163 +transit,122.29238414220859,14.767851306514233 +transit,122.28460607196142,14.772724011955296 +transit,122.27682765503093,14.777596453353075 +transit,122.26904889130076,14.782468630605276 +transit,122.26126978065459,14.787340543609588 +transit,122.25349032297609,14.7922121922637 +transit,122.24571051814895,14.797083576465276 +transit,122.23793036605687,14.801954696111991 +transit,122.23014986658353,14.806825551101488 +transit,122.22236901961266,14.811696141331407 +transit,122.21458782502795,14.816566466699378 +transit,122.20680628271313,14.821436527103023 +transit,122.19902439255192,14.826306322439951 +transit,122.19124215442805,14.831175852607759 +transit,122.18345956822529,14.836045117504034 +transit,122.17567663382735,14.84091411702635 +transit,122.16789335111802,14.845782851072276 +transit,122.16010971998104,14.850651319539361 +transit,122.15232574030018,14.855519522325157 +transit,122.14454141195925,14.860387459327194 +transit,122.136756734842,14.865255130442998 +transit,122.12897170883222,14.870122535570081 +transit,122.12118633381372,14.874989674605935 +transit,122.11340060967032,14.87985654744806 +transit,122.10561453628581,14.884723153993935 +transit,122.09782811354404,14.889589494141026 +transit,122.0900413413288,14.894455567786792 +transit,122.08225421952395,14.899321374828682 +transit,122.07446674801334,14.904186915164132 +transit,122.0666789266808,14.909052188690572 +transit,122.05889075541019,14.91391719530541 +transit,122.05110223408538,14.918781934906056 +transit,122.04331336259025,14.923646407389905 +transit,122.03552414080868,14.928510612654335 +transit,122.02773456862452,14.933374550596724 +transit,122.01994464592171,14.93823822111443 +transit,122.01215437258413,14.943101624104806 +transit,122.0043637484957,14.947964759465188 +transit,121.99657277354034,14.95282762709291 +transit,121.98878144760195,14.95769022688529 +transit,121.98098977056446,14.962552558739631 +transit,121.97319774231184,14.967414622553237 +transit,121.96540536272802,14.97227641822339 +transit,121.95761263169695,14.977137945647371 +transit,121.94981954910257,14.981999204722436 +transit,121.94202611482889,14.986860195345843 +transit,121.93423232875986,14.991720917414838 +transit,121.92643819077946,14.99658137082665 +transit,121.91864370077171,15.001441555478497 +transit,121.91084885862058,15.006301471267596 +transit,121.90305366421008,15.011161118091142 +transit,121.89525811742422,15.016020495846332 +transit,121.88746221814702,15.020879604430334 +transit,121.87966596626254,15.025738443740327 +transit,121.87186936165476,15.030597013673455 +transit,121.86407240420777,15.035455314126871 +transit,121.85627509380559,15.040313344997712 +transit,121.8484774303323,15.0451711061831 +transit,121.84067941367195,15.050028597580143 +transit,121.83288104370862,15.054885819085952 +transit,121.8250823203264,15.05974277059761 +transit,121.81728324340935,15.064599452012208 +transit,121.80948381284159,15.06945586322681 +transit,121.80168402850722,15.074312004138477 +transit,121.79388389029036,15.079167874644254 +transit,121.7860833980751,15.084023474641183 +transit,121.77828255174559,15.088878804026292 +transit,121.77048135118595,15.093733862696592 +transit,121.76267979628034,15.09858865054909 +transit,121.7548778869129,15.10344316748078 +transit,121.74707562296777,15.108297413388643 +transit,121.73927300432914,15.113151388169657 +transit,121.73147003088116,15.118005091720779 +transit,121.72366670250803,15.122858523938962 +transit,121.71586301909392,15.127711684721149 +transit,121.70805898052303,15.132564573964261 +transit,121.70025458667959,15.137417191565222 +transit,121.69244983744775,15.142269537420944 +transit,121.6846447327118,15.147121611428311 +transit,121.67683927235592,15.151973413484216 +transit,121.66903345626434,15.15682494348553 +transit,121.66122728432133,15.161676201329124 +transit,121.65342075641112,15.166527186911841 +transit,121.64561387241798,15.171377900130533 +transit,121.63780663222616,15.176228340882028 +transit,121.62999903571995,15.181078509063143 +transit,121.6221910827836,15.185928404570689 +transit,121.61438277330143,15.190778027301468 +transit,121.60657410715773,15.195627377152261 +transit,121.59876508423677,15.200476454019848 +transit,121.59095570442291,15.205325257800993 +transit,121.58314596760046,15.210173788392458 +transit,121.57533587365371,15.215022045690983 +transit,121.56752542246704,15.219870029593292 +transit,121.55971461392477,15.22471773999612 +transit,121.55190344791124,15.229565176796171 +transit,121.54409192431083,15.23441233989015 +transit,121.5362800430079,15.239259229174742 +transit,121.52846780388683,15.24410584454663 +transit,121.52065520683199,15.248952185902473 +transit,121.51284225172778,15.253798253138939 +transit,121.50502893845858,15.258644046152666 +transit,121.49721526690882,15.263489564840294 +transit,121.4894012369629,15.268334809098441 +transit,121.48158684850526,15.273179778823721 +transit,121.47377210142031,15.278024473912744 +transit,121.46595699559248,15.28286889426209 +transit,121.45814153090625,15.287713039768345 +transit,121.45032570724604,15.292556910328077 +transit,121.44250952449632,15.29740050583784 +transit,121.43469298254158,15.30224382619419 +transit,121.42687608126626,15.307086871293658 +transit,121.41905882055488,15.311929641032771 +transit,121.41124120029193,15.316772135308046 +transit,121.40342322036187,15.321614354015976 +transit,121.39560488064927,15.326456297053063 +transit,121.38778618103862,15.331297964315786 +transit,121.37996712141444,15.336139355700615 +transit,121.37214770166128,15.340980471104006 +transit,121.36432792166367,15.345821310422412 +transit,121.35650778130615,15.350661873552276 +transit,121.3486872804733,15.355502160390012 +transit,121.34086641904968,15.360342170832043 +transit,121.33304519691985,15.365181904774774 +transit,121.32522361396842,15.3700213621146 +transit,121.31740167007995,15.374860542747898 +transit,121.30957936513906,15.379699446571044 +transit,121.30175669903035,15.384538073480398 +transit,121.29393367163843,15.389376423372305 +transit,121.28611028284793,15.39421449614311 +transit,121.27828653254349,15.399052291689138 +transit,121.27046242060972,15.403889809906707 +transit,121.2626379469313,15.408727050692123 +transit,121.25481311139286,15.413564013941675 +transit,121.2469879138791,15.418400699551658 +transit,121.23916235427465,15.423237107418332 +transit,121.2313364324642,15.428073237437966 +transit,121.22351014833248,15.432909089506806 +transit,121.21568350176413,15.437744663521098 +transit,121.20785649264388,15.442579959377069 +transit,121.20002912085647,15.447414976970931 +transit,121.19220138628657,15.452249716198892 +transit,121.18437328881895,15.457084176957158 +transit,121.17654482833832,15.4619183591419 +transit,121.16871600472946,15.466752262649294 +transit,121.16088681787708,15.471585887375513 +transit,121.153057267666,15.476419233216696 +transit,121.14522735398094,15.481252300068983 +transit,121.1373970767067,15.486085087828513 +transit,121.12956643572808,15.490917596391396 +transit,121.12173543092986,15.495749825653744 +transit,121.11390406219684,15.500581775511655 +transit,121.10607232941386,15.505413445861208 +transit,121.09824023246571,15.51024483659848 +transit,121.09040777123724,15.51507594761953 +transit,121.08257494561329,15.51990677882042 +transit,121.0747417554787,15.52473733009718 +transit,121.06690820071832,15.529567601345844 +transit,121.05907428121701,15.534397592462433 +transit,121.05123999685966,15.539227303342948 +transit,121.04340534753115,15.544056733883396 +transit,121.03557033311634,15.548885883979748 +transit,121.02773495350016,15.553714753527995 +transit,121.01989920856751,15.558543342424088 +transit,121.0120630982033,15.563371650563985 +transit,121.00422662229244,15.568199677843625 +transit,120.99638978071987,15.573027424158942 +transit,120.98855257337054,15.577854889405847 +transit,120.9807150001294,15.582682073480255 +transit,120.97287706088137,15.587508976278063 +transit,120.96503875551146,15.592335597695147 +transit,120.95720008390462,15.59716193762739 +transit,120.94936104594584,15.601987995970662 +transit,120.94152164152011,15.606813772620804 +transit,120.93368187051243,15.611639267473658 +transit,120.92584173280781,15.616464480425057 +transit,120.91800122829126,15.621289411370824 +transit,120.91016035684781,15.626114060206762 +transit,120.9023191183625,15.630938426828667 +transit,120.89447751272036,15.635762511132329 +transit,120.88663553980643,15.640586313013518 +transit,120.87879319950581,15.645409832368003 +transit,120.87095049170354,15.650233069091534 +transit,120.8631074162847,15.65505602307985 +transit,120.85526397313437,15.659878694228684 +transit,120.84742016213767,15.664701082433753 +transit,120.83957598317967,15.669523187590764 +transit,120.83173143614549,15.674345009595418 +transit,120.82388652092027,15.679166548343394 +transit,120.81604123738913,15.683987803730375 +transit,120.80819558543719,15.688808775652017 +transit,120.80034956494961,15.69362946400397 +transit,120.79250317581156,15.698449868681891 +transit,120.78465641790818,15.703269989581393 +transit,120.77680929112465,15.708089826598103 +transit,120.76896179534616,15.712909379627623 +transit,120.76111393045788,15.717728648565553 +transit,120.75326569634504,15.72254763330748 +transit,120.74541709289281,15.727366333748977 +transit,120.73756811998645,15.732184749785599 +transit,120.72971877751114,15.737002881312911 +transit,120.72186906535215,15.741820728226447 +transit,120.71401898339471,15.746638290421732 +transit,120.70616853152407,15.75145556779429 +transit,120.69831770962548,15.756272560239628 +transit,120.69046651758426,15.761089267653242 +transit,120.68261495528562,15.765905689930612 +transit,120.67476302261487,15.770721826967218 +transit,120.66691071945732,15.775537678658523 +transit,120.65905804569827,15.780353244899969 +transit,120.65120500122303,15.785168525587002 +transit,120.64335158591693,15.789983520615053 +transit,120.6354977996653,15.794798229879532 +transit,120.62764364235348,15.799612653275858 +transit,120.6197891138668,15.804426790699411 +transit,120.61193421409065,15.809240642045587 +transit,120.60407894291038,15.814054207209752 +transit,120.59622330021138,15.818867486087273 +transit,120.588367285879,15.823680478573497 +transit,120.58051089979868,15.828493184563765 +transit,120.57265414185579,15.8333056039534 +transit,120.56479701193577,15.838117736637717 +transit,120.556939509924,15.842929582512037 +transit,120.54908163570596,15.84774114147164 +transit,120.54122338916706,15.852552413411813 +transit,120.53336477019276,15.857363398227829 +transit,120.5255057786685,15.862174095814947 +transit,120.51764641447977,15.866984506068418 +transit,120.50978667751204,15.871794628883478 +transit,120.50192656765077,15.876604464155356 +transit,120.49406608478148,15.88141401177927 +transit,120.48620522878967,15.886223271650417 +transit,120.47834399956085,15.891032243664 +transit,120.47048239698053,15.895840927715195 +transit,120.46262042093426,15.90064932369917 +transit,120.45475807130757,15.905457431511095 +transit,120.44689534798599,15.910265251046106 +transit,120.43903225085509,15.915072782199351 +transit,120.43116877980046,15.91988002486595 +transit,120.42330493470766,15.924686978941011 +transit,120.41544071546227,15.929493644319649 +transit,120.40757612194987,15.93430002089695 +transit,120.39971115405609,15.939106108567994 +transit,120.39184581166654,15.943911907227859 +transit,120.38398009466682,15.94871741677159 +transit,120.37611400294259,15.953522637094247 +transit,120.36824753637947,15.958327568090855 +transit,120.36038069486312,15.96313220965645 +transit,120.35251347827919,15.96793656168603 +transit,120.34464588651336,15.972740624074607 +transit,120.33677791945131,15.97754439671717 +transit,120.3289095769787,15.982347879508701 +transit,120.32104085898125,15.987151072344163 +transit,120.31317176534466,15.991953975118513 +transit,120.30530229595463,15.9967565877267 +transit,120.29743245069693,16.001558910063654 +transit,120.28956222945723,16.006360942024305 +transit,120.28169163212132,16.01116268350356 +transit,120.27382065857493,16.015964134396313 +transit,120.26594930870382,16.020765294597464 +transit,120.25807758239378,16.025566164001887 +transit,120.25020547953058,16.03036674250444 +RPUG,120.242333,16.03516703 +transit,120.24623823181024,16.027308305816007 +transit,120.25014315779546,16.019449504816514 +transit,120.25404777813486,16.011590627046164 +transit,120.25795209300753,16.003731672549574 +transit,120.26185610259255,15.995872641371351 +transit,120.26575980706895,15.98801353355609 +transit,120.26966320661572,15.980154349148401 +transit,120.2735663014118,15.972295088192846 +transit,120.27746909163608,15.964435750733996 +transit,120.28137157746741,15.956576336816413 +transit,120.28527375908462,15.948716846484638 +transit,120.28917563666643,15.940857279783213 +transit,120.29307721039159,15.93299763675666 +transit,120.29697848043877,15.925137917449488 +transit,120.30087944698658,15.917278121906211 +transit,120.30478011021364,15.909418250171314 +transit,120.30868047029847,15.90155830228928 +transit,120.31258052741956,15.893698278304585 +transit,120.31648028175536,15.885838178261688 +transit,120.3203797334843,15.877978002205033 +transit,120.32427888278474,15.870117750179068 +transit,120.32817772983499,15.862257422228218 +transit,120.33207627481332,15.854397018396904 +transit,120.33597451789798,15.846536538729532 +transit,120.33987245926716,15.83867598327049 +transit,120.34377009909898,15.83081535206418 +transit,120.34766743757156,15.822954645154963 +transit,120.35156447486294,15.815093862587212 +transit,120.35546121115117,15.807233004405274 +transit,120.35935764661417,15.7993720706535 +transit,120.36325378142989,15.791511061376225 +transit,120.36714961577621,15.783649976617763 +transit,120.37104514983096,15.775788816422434 +transit,120.37494038377194,15.767927580834526 +transit,120.3788353177769,15.760066269898346 +transit,120.38272995202355,15.752204883658163 +transit,120.38662428668954,15.744343422158245 +transit,120.39051832195248,15.736481885442863 +transit,120.39441205798998,15.728620273556256 +transit,120.39830549497955,15.720758586542665 +transit,120.40219863309868,15.712896824446311 +transit,120.4060914725248,15.705034987311416 +transit,120.40998401343533,15.697173075182189 +transit,120.41387625600763,15.689311088102823 +transit,120.417768200419,15.681449026117498 +transit,120.42165984684671,15.6735868892704 +transit,120.425551195468,15.665724677605683 +transit,120.42944224646006,15.657862391167502 +TP9,120.433333,15.65000003 +transit,120.43556823903522,15.64149172352093 +transit,120.43780329336165,15.632983387670583 +transit,120.44003816309964,15.624475022467013 +transit,120.44227284836951,15.615966627928293 +transit,120.44450734929154,15.607458204072472 +transit,120.44674166598597,15.59894975091761 +transit,120.44897579857302,15.590441268481753 +transit,120.45120974717285,15.581932756782956 +transit,120.45344351190562,15.57342421583926 +transit,120.45567709289142,15.564915645668703 +transit,120.45791049025034,15.556407046289324 +transit,120.46014370410239,15.547898417719157 +transit,120.46237673456761,15.539389759976224 +transit,120.46460958176594,15.530881073078557 +transit,120.46684224581733,15.522372357044167 +transit,120.46907472684168,15.513863611891091 +transit,120.47130702495885,15.505354837637327 +transit,120.47353914028865,15.496846034300894 +transit,120.47577107295092,15.4883372018998 +transit,120.4780028230654,15.479828340452036 +transit,120.4802343907518,15.471319449975615 +transit,120.48246577612984,15.462810530488522 +transit,120.48469697931918,15.454301582008759 +transit,120.48692800043943,15.445792604554313 +transit,120.4891588396102,15.43728359814316 +transit,120.49138949695102,15.428774562793299 +transit,120.49361997258144,15.420265498522689 +transit,120.49585026662093,15.41175640534931 +transit,120.49808037918895,15.403247283291138 +transit,120.50031031040493,15.394738132366136 +transit,120.50254006038826,15.386228952592264 +transit,120.50476962925826,15.377719743987488 +transit,120.50699901713428,15.369210506569756 +transit,120.5092282241356,15.360701240357029 +transit,120.51145725038145,15.352191945367249 +transit,120.51368609599108,15.343682621618361 +transit,120.51591476108365,15.335173269128315 +transit,120.5181432457783,15.32666388791504 +transit,120.52037155019418,15.318154477996474 +transit,120.52259967445035,15.309645039390544 +transit,120.52482761866585,15.301135572115179 +transit,120.5270553829597,15.292626076188302 +transit,120.5292829674509,15.284116551627838 +transit,120.53151037225837,15.275606998451693 +transit,120.53373759750103,15.267097416677787 +transit,120.53596464329776,15.258587806324032 +transit,120.5381915097674,15.250078167408322 +transit,120.54041819702879,15.241568499948567 +transit,120.54264470520067,15.233058803962667 +transit,120.54487103440181,15.224549079468511 +transit,120.54709718475091,15.216039326483996 +transit,120.54932315636665,15.207529545027002 +transit,120.55154894936767,15.199019735115417 +transit,120.55377456387261,15.19050989676712 +RPLC,120.556,15.18200003 diff --git a/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/Seoul/Seoul_waypoints.csv b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/Seoul/Seoul_waypoints.csv new file mode 100644 index 0000000..608d9f2 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/Seoul/Seoul_waypoints.csv @@ -0,0 +1,3280 @@ +city,utc_adjust +Seoul,9 +waypoint,lon,lat +Osan_Air_Base,127.029641,37.090216 +transit,127.03161577106769,37.098671784237766 +transit,127.03359098110742,37.10712752349574 +transit,127.03556663034959,37.11558321775572 +transit,127.0375427190247,37.12403886699943 +transit,127.0395192473634,37.13249447120862 +transit,127.0414962155965,37.14095003036505 +transit,127.0434736239549,37.149405544450424 +transit,127.04545147266968,37.15786101344646 +transit,127.04742976197205,37.166316437334864 +transit,127.04940849209335,37.174771816097355 +transit,127.05138766326506,37.183227149715606 +transit,127.05336727571878,37.191682438171306 +transit,127.0553473296863,37.200137681446115 +transit,127.0573278253995,37.20859287952169 +transit,127.05930876309041,37.21704803237971 +transit,127.06129014299123,37.22550314000179 +transit,127.06327196533424,37.23395820236958 +transit,127.0652542303519,37.242413219464694 +transit,127.06723693827682,37.250868191268744 +transit,127.06922008934171,37.259323117763344 +transit,127.07120368377944,37.267777998930086 +transit,127.07318772182305,37.27623283475055 +transit,127.07517220370565,37.28468762520632 +transit,127.07715712966055,37.29314237027896 +transit,127.07914249992118,37.30159706995002 +transit,127.08112831472108,37.31005172420105 +transit,127.083114574294,37.31850633301361 +transit,127.08510127887378,37.326960896369194 +transit,127.08708842869439,37.33541541424934 +transit,127.08907602398997,37.34386988663557 +transit,127.09106406499478,37.35232431350934 +transit,127.09305255194326,37.3607786948522 +transit,127.09504148506994,37.36923303064559 +transit,127.09703086460951,37.377687320871 +transit,127.0990206907968,37.38614156550987 +transit,127.10101096386681,37.394595764543666 +transit,127.10300168405463,37.40304991795383 +transit,127.10499285159554,37.4115040257218 +transit,127.10698446672491,37.419958087828995 +transit,127.1089765296783,37.42841210425683 +transit,127.11096904069139,37.436866074986696 +Seoul_Air_Base,127.112962,37.44532 +transit,127.11407498046337,37.45295479173879 +transit,127.11518818720195,37.46058956310631 +transit,127.11630162032382,37.46822431409691 +transit,127.11741527993712,37.47585904470489 +transit,127.11852916615004,37.48349375492461 +transit,127.11964327907083,37.491128444750345 +transit,127.12075761880781,37.49876311417644 +transit,127.12187218546937,37.506397763197214 +transit,127.12298697916394,37.514032391806964 +WP3,127.124102,37.521667 +transit,127.12526711539714,37.529744874276616 +transit,127.12643248211599,37.5378227259795 +transit,127.12759810028365,37.54590055510202 +transit,127.12876397002731,37.553978361637625 +transit,127.12993009147425,37.5620561455797 +transit,127.13109646475178,37.57013390692162 +transit,127.13226308998733,37.578211645656786 +transit,127.1334299673084,37.5862893617786 +transit,127.13459709684253,37.59436705528044 +transit,127.13576447871735,37.602444726155696 +transit,127.13693211306057,37.61052237439777 +WP4,127.1381,37.6186 +transit,127.14364453767999,37.625276476825675 +transit,127.1491900672499,37.63195268550096 +transit,127.15473658908718,37.638628625916944 +transit,127.16028410356938,37.645304297964664 +transit,127.16583261107426,37.651979701535154 +transit,127.17138211197964,37.658654836519354 +transit,127.17693260666354,37.66532970280818 +transit,127.18248409550407,37.67200430029247 +transit,127.1880365788795,37.67867862886307 +transit,127.19359005716825,37.68535268841071 +transit,127.19914453074885,37.692026478826136 +WP5,127.2047,37.6987 +transit,127.21343162856657,37.69498506001787 +transit,127.22216238580884,37.69126947121904 +transit,127.23089227177877,37.68755323375334 +transit,127.23962128652845,37.68383634777065 +transit,127.24834943011,37.68011881342078 +transit,127.25707670257566,37.67640063085357 +transit,127.26580310397777,37.67268180021881 +transit,127.27452863436872,37.668962321666314 +transit,127.28325329380102,37.66524219534583 +transit,127.29197708232722,37.661521421407144 +WP6,127.3007,37.6578 +transit,127.29453584893454,37.651393473860075 +transit,127.28837275688147,37.64498661870998 +transit,127.28221072346766,37.63857943467867 +transit,127.27604974832009,37.63217192189511 +transit,127.26988983106587,37.62576408048816 +transit,127.2637309713322,37.61935591058667 +transit,127.2575731687464,37.6129474123194 +transit,127.25141642293593,37.60653858581509 +transit,127.24526073352834,37.6001294312024 +transit,127.23910610015128,37.59371994860995 +transit,127.23295252243254,37.587310138166316 +WP7,127.2268,37.5809 +transit,127.21638252952877,37.58155732946605 +transit,127.2059648760039,37.58221373949572 +transit,127.19554703967407,37.582869230051394 +transit,127.18512902078798,37.583523801095545 +transit,127.1747108195944,37.58417745259067 +transit,127.16429243634211,37.58483018449934 +transit,127.15387387127997,37.58548199678414 +transit,127.14345512465685,37.58613288940776 +transit,127.13303619672169,37.586782862332875 +transit,127.12261708772343,37.587431915522274 +transit,127.1121977979111,37.58808004893876 +transit,127.10177832753372,37.58872726254518 +transit,127.09135867684041,37.58937355630448 +transit,127.0809388460803,37.590018930179596 +transit,127.07051883550254,37.59066338413358 +transit,127.06009864535636,37.59130691812946 +transit,127.049678275891,37.591949532130364 +transit,127.03925772735576,37.59259122609948 +WP8,127.028837,37.593232 +transit,127.01935000915947,37.59035223573776 +transit,127.00986374945408,37.587471707613254 +transit,127.00037822094507,37.584590415763365 +transit,126.99089342369354,37.581708360324924 +transit,126.98140935776048,37.578825541434824 +transit,126.97192602320682,37.57594195922991 +transit,126.96244342009334,37.57305761384708 +transit,126.95296154848067,37.57017250542322 +transit,126.94348040842941,37.567286634095225 +WP9,126.934,37.5644 +transit,126.9239441281553,37.563741280950744 +transit,126.91388843350545,37.563081705350264 +transit,126.90383291627336,37.562421273233745 +transit,126.89377757668187,37.56175998463641 +transit,126.88372241495378,37.561097839593536 +transit,126.87366743131189,37.56043483814044 +transit,126.86361262597892,37.55977098031248 +transit,126.85355799917757,37.55910626614505 +transit,126.84350355113051,37.55844069567361 +transit,126.83344928206037,37.55777426893365 +transit,126.82339519218971,37.5571069859607 +transit,126.8133412817411,37.55643884679037 +transit,126.80328755093704,37.55576985145824 +Gimpo,126.793234,37.5551 +transit,126.78314130688592,37.55226094497491 +transit,126.77304937954926,37.54942102596066 +transit,126.76295821808608,37.54658024310982 +transit,126.75286782259226,37.54373859657502 +transit,126.74277819316359,37.540896086508845 +transit,126.73268932989569,37.53805271306393 +transit,126.72260123288407,37.535208476392924 +transit,126.71251390222407,37.532363376648476 +transit,126.70242733801095,37.529517413983264 +transit,126.69234154033975,37.52667058854996 +transit,126.68225650930546,37.523822900501294 +transit,126.67217224500286,37.52097434998996 +transit,126.66208874752661,37.5181249371687 +transit,126.65200601697127,37.515274662190244 +transit,126.64192405343123,37.51242352520736 +transit,126.63184285700075,37.50957152637284 +transit,126.62176242777396,37.50671866583945 +transit,126.61168276584482,37.503864943760014 +transit,126.6016038713072,37.50101036028733 +transit,126.59152574425481,37.49815491557424 +transit,126.58144838478123,37.495298609773606 +transit,126.57137179297986,37.49244144303827 +transit,126.56129596894404,37.4895834155211 +transit,126.55122091276692,37.486724527375024 +transit,126.54114662454151,37.48386477875292 +transit,126.53107310436073,37.48100416980772 +transit,126.5210003523173,37.47814270069233 +transit,126.51092836850385,37.475280371559734 +transit,126.50085715301286,37.47241718256288 +transit,126.49078670593667,37.469553133854745 +transit,126.48071702736748,37.466688225588314 +transit,126.47064811739735,37.4638224579166 +transit,126.46057997611821,37.4609558309926 +transit,126.45051260362189,37.45808834496938 +Incheon,126.440446,37.45522 +transit,126.42921794251579,37.45530214985653 +transit,126.41798986062939,37.45538323296906 +transit,126.40676175465964,37.455463249332205 +transit,126.39553362492536,37.455542198940634 +transit,126.38430547174536,37.45562008178912 +transit,126.37307729543852,37.45569689787249 +transit,126.36184909632365,37.45577264718565 +transit,126.35062087471961,37.45584732972356 +transit,126.33939263094526,37.455920945481296 +transit,126.32816436531947,37.45599349445393 +transit,126.31693607816108,37.456064976636675 +transit,126.305707769789,37.45613539202477 +transit,126.29447944052208,37.45620474061356 +transit,126.28325109067923,37.45627302239843 +transit,126.27202272057933,37.456340237374846 +transit,126.26079433054127,37.456406385538344 +transit,126.24956592088398,37.45647146688455 +transit,126.23833749192633,37.456535481409134 +transit,126.22710904398726,37.456598429107835 +transit,126.21588057738566,37.45666030997649 +transit,126.20465209244048,37.456721124011 +transit,126.19342358947063,37.45678087120731 +transit,126.18219506879505,37.45683955156145 +transit,126.17096653073268,37.456897165069556 +transit,126.15973797560245,37.45695371172777 +transit,126.14850940372332,37.457009191532364 +transit,126.13728081541423,37.457063604479636 +transit,126.12605221099413,37.45711695056598 +transit,126.114823590782,37.45716922978786 +transit,126.10359495509678,37.457220442141804 +transit,126.09236630425747,37.45727058762442 +transit,126.081137638583,37.45731966623236 +transit,126.06990895839236,37.45736767796238 +transit,126.05868026400455,37.45741462281129 +transit,126.04745155573853,37.45746050077597 +transit,126.03622283391331,37.45750531185339 +transit,126.02499409884786,37.45754905604056 +transit,126.01376535086118,37.45759173333458 +transit,126.00253659027227,37.457633343732624 +transit,125.99130781740013,37.45767388723192 +transit,125.98007903256375,37.457713363829775 +transit,125.96885023608216,37.457751773523576 +transit,125.95762142827436,37.45778911631078 +transit,125.94639260945938,37.45782539218889 +transit,125.93516377995621,37.45786060115551 +transit,125.9239349400839,37.4578947432083 +transit,125.91270609016144,37.457927818345 +transit,125.90147723050787,37.4579598265634 +transit,125.89024836144222,37.457990767861396 +transit,125.87901948328351,37.4580206422369 +transit,125.86779059635079,37.45804944968797 +transit,125.85656170096308,37.45807719021268 +transit,125.84533279743943,37.458103863809164 +transit,125.83410388609886,37.45812947047568 +transit,125.82287496726042,37.458154010210514 +transit,125.81164604124316,37.45817748301205 +transit,125.80041710836613,37.45819988887872 +transit,125.78918816894836,37.45822122780903 +transit,125.77795922330891,37.45824149980157 +transit,125.76673027176683,37.458260704855 +transit,125.75550131464117,37.45827884296804 +transit,125.74427235225099,37.4582959141395 +transit,125.73304338491533,37.458311918368224 +transit,125.72181441295325,37.45832685565315 +transit,125.71058543668383,37.45834072599331 +transit,125.6993564564261,37.45835352938775 +transit,125.68812747249915,37.45836526583566 +transit,125.676898485222,37.458375935336235 +transit,125.66566949491374,37.458385537888766 +transit,125.65444050189345,37.45839407349262 +transit,125.64321150648014,37.45840154214723 +transit,125.63198250899292,37.4584079438521 +transit,125.62075350975084,37.45841327860682 +transit,125.60952450907295,37.45841754641101 +transit,125.59829550727835,37.458420747264405 +transit,125.58706650468608,37.45842288116679 +transit,125.5758375016152,37.45842394811801 +transit,125.5646084983848,37.45842394811801 +transit,125.55337949531392,37.45842288116679 +transit,125.54215049272165,37.458420747264405 +transit,125.53092149092704,37.45841754641101 +transit,125.51969249024916,37.45841327860682 +transit,125.50846349100708,37.45840794385211 +transit,125.49723449351985,37.45840154214723 +transit,125.48600549810655,37.45839407349262 +transit,125.47477650508625,37.458385537888766 +transit,125.463547514778,37.458375935336235 +transit,125.45231852750085,37.45836526583566 +transit,125.4410895435739,37.45835352938775 +transit,125.42986056331617,37.45834072599331 +transit,125.41863158704673,37.45832685565315 +transit,125.40740261508466,37.45831191836822 +transit,125.39617364774901,37.4582959141395 +transit,125.38494468535883,37.45827884296804 +transit,125.37371572823317,37.458260704855 +transit,125.36248677669109,37.458241499801574 +transit,125.35125783105164,37.45822122780903 +transit,125.34002889163386,37.45819988887872 +transit,125.32879995875683,37.45817748301205 +transit,125.31757103273958,37.458154010210514 +transit,125.30634211390114,37.45812947047568 +transit,125.29511320256057,37.458103863809164 +transit,125.28388429903691,37.45807719021267 +transit,125.27265540364921,37.45804944968798 +transit,125.26142651671648,37.45802064223691 +transit,125.25019763855778,37.457990767861396 +transit,125.23896876949213,37.4579598265634 +transit,125.22773990983856,37.457927818345 +transit,125.2165110599161,37.4578947432083 +transit,125.20528222004378,37.45786060115551 +transit,125.19405339054062,37.45782539218889 +transit,125.18282457172562,37.45778911631078 +transit,125.17159576391784,37.457751773523576 +transit,125.16036696743625,37.457713363829775 +transit,125.14913818259987,37.45767388723192 +transit,125.13790940972773,37.45763334373262 +transit,125.12668064913882,37.45759173333458 +transit,125.11545190115214,37.45754905604056 +transit,125.10422316608668,37.45750531185339 +transit,125.09299444426146,37.45746050077597 +transit,125.08176573599545,37.45741462281129 +transit,125.07053704160764,37.45736767796238 +transit,125.059308361417,37.45731966623236 +transit,125.04807969574253,37.45727058762442 +transit,125.03685104490322,37.45722044214181 +transit,125.02562240921799,37.45716922978786 +transit,125.01439378900587,37.457116950565975 +transit,125.00316518458577,37.457063604479636 +transit,124.99193659627667,37.45700919153236 +transit,124.98070802439754,37.45695371172777 +transit,124.96947946926731,37.456897165069556 +transit,124.95825093120494,37.45683955156145 +transit,124.94702241052937,37.45678087120731 +transit,124.93579390755951,37.456721124011 +transit,124.92456542261434,37.45666030997649 +transit,124.91333695601274,37.456598429107835 +transit,124.90210850807367,37.456535481409134 +transit,124.89088007911602,37.45647146688455 +transit,124.87965166945871,37.456406385538344 +transit,124.86842327942067,37.456340237374846 +transit,124.85719490932077,37.45627302239843 +transit,124.84596655947792,37.456204740613565 +transit,124.834738230211,37.45613539202477 +transit,124.82350992183892,37.456064976636675 +transit,124.81228163468053,37.45599349445393 +transit,124.80105336905474,37.455920945481296 +transit,124.78982512528039,37.45584732972357 +transit,124.77859690367634,37.45577264718565 +transit,124.76736870456148,37.45569689787249 +transit,124.75614052825463,37.455620081789114 +transit,124.74491237507463,37.455542198940634 +transit,124.73368424534036,37.455463249332205 +transit,124.7224561393706,37.45538323296906 +transit,124.7112280574842,37.45530214985653 +WP12,124.7,37.45522 +transit,124.7,37.446261186348565 +transit,124.7,37.43730235908327 +transit,124.7,37.42834351820521 +transit,124.7,37.419384663715554 +transit,124.7,37.410425795615396 +transit,124.7,37.40146691390587 +transit,124.7,37.3925080185881 +transit,124.7,37.383549109663235 +transit,124.7,37.37459018713238 +transit,124.7,37.36563125099668 +transit,124.7,37.356672301257255 +transit,124.7,37.34771333791525 +transit,124.7,37.338754360971805 +transit,124.7,37.32979537042805 +transit,124.7,37.32083636628513 +transit,124.7,37.31187734854418 +transit,124.7,37.30291831720634 +transit,124.7,37.29395927227276 +transit,124.7,37.28500021374457 +transit,124.7,37.27604114162291 +transit,124.7,37.26708205590896 +transit,124.7,37.25812295660385 +transit,124.7,37.249163843708715 +transit,124.7,37.240204717224714 +transit,124.7,37.231245577153004 +transit,124.7,37.22228642349475 +transit,124.7,37.21332725625107 +transit,124.7,37.204368075423154 +transit,124.7,37.195408881012156 +transit,124.7,37.18644967301921 +transit,124.7,37.17749045144549 +transit,124.7,37.16853121629218 +transit,124.7,37.15957196756041 +transit,124.7,37.15061270525136 +transit,124.7,37.14165342936619 +transit,124.7,37.132694139906064 +transit,124.7,37.12373483687216 +transit,124.7,37.11477552026563 +transit,124.7,37.105816190087666 +transit,124.7,37.09685684633942 +transit,124.7,37.087897489022076 +transit,124.7,37.07893811813682 +transit,124.7,37.0699787336848 +transit,124.7,37.06101933566721 +transit,124.7,37.052059924085235 +transit,124.7,37.04310049894004 +transit,124.7,37.03414106023282 +transit,124.7,37.02518160796475 +transit,124.7,37.016222142137 +transit,124.7,37.007262662750776 +transit,124.7,36.99830316980727 +transit,124.7,36.98934366330766 +transit,124.7,36.980384143253126 +transit,124.7,36.971424609644856 +transit,124.7,36.96246506248407 +transit,124.7,36.95350550177193 +transit,124.7,36.94454592750965 +transit,124.7,36.935586339698425 +transit,124.7,36.926626738339436 +transit,124.7,36.9176671234339 +transit,124.7,36.90870749498301 +transit,124.7,36.899747852987964 +transit,124.7,36.89078819744997 +transit,124.7,36.881828528370235 +transit,124.7,36.872868845749956 +transit,124.7,36.86390914959035 +transit,124.7,36.85494943989261 +transit,124.7,36.84598971665795 +transit,124.7,36.83702997988758 +transit,124.7,36.828070229582714 +transit,124.7,36.819110465744586 +transit,124.7,36.81015068837438 +transit,124.7,36.80119089747332 +transit,124.7,36.79223109304264 +transit,124.7,36.78327127508353 +transit,124.7,36.77431144359723 +transit,124.7,36.76535159858497 +transit,124.7,36.75639174004794 +transit,124.7,36.74743186798739 +transit,124.7,36.73847198240453 +transit,124.7,36.72951208330061 +transit,124.7,36.72055217067684 +transit,124.7,36.71159224453446 +transit,124.7,36.70263230487467 +transit,124.7,36.693672351698744 +transit,124.7,36.68471238500789 +transit,124.7,36.675752404803355 +transit,124.7,36.66679241108636 +transit,124.7,36.65783240385816 +transit,124.7,36.64887238311998 +transit,124.7,36.63991234887306 +transit,124.7,36.63095230111865 +transit,124.7,36.62199223985799 +transit,124.7,36.61303216509232 +transit,124.7,36.60407207682289 +transit,124.7,36.59511197505095 +transit,124.7,36.58615185977773 +transit,124.7,36.57719173100449 +transit,124.7,36.568231588732495 +transit,124.7,36.55927143296297 +transit,124.7,36.55031126369719 +transit,124.7,36.5413510809364 +transit,124.7,36.53239088468187 +transit,124.7,36.52343067493482 +transit,124.7,36.51447045169656 +transit,124.7,36.5055102149683 +transit,124.7,36.49654996475134 +transit,124.7,36.48758970104692 +transit,124.7,36.47862942385631 +transit,124.7,36.46966913318079 +transit,124.7,36.46070882902159 +transit,124.7,36.45174851138001 +transit,124.7,36.442788180257324 +transit,124.7,36.43382783565477 +transit,124.7,36.42486747757365 +transit,124.7,36.41590710601522 +transit,124.7,36.406946720980756 +transit,124.7,36.39798632247154 +transit,124.7,36.389025910488854 +transit,124.7,36.38006548503396 +transit,124.7,36.371105046108156 +transit,124.7,36.362144593712706 +transit,124.7,36.3531841278489 +transit,124.7,36.344223648518025 +transit,124.7,36.33526315572137 +transit,124.7,36.32630264946022 +transit,124.7,36.317342129735835 +transit,124.7,36.30838159654954 +transit,124.7,36.299421049902605 +transit,124.7,36.29046048979634 +transit,124.7,36.28149991623202 +transit,124.7,36.27253932921095 +transit,124.7,36.26357872873442 +transit,124.7,36.25461811480373 +transit,124.7,36.24565748742018 +transit,124.7,36.23669684658507 +transit,124.7,36.22773619229969 +transit,124.7,36.218775524565366 +transit,124.7,36.20981484338337 +transit,124.7,36.20085414875503 +transit,124.7,36.191893440681646 +transit,124.7,36.18293271916453 +transit,124.7,36.173971984204975 +transit,124.7,36.165011235804315 +transit,124.7,36.156050473963845 +transit,124.7,36.14708969868489 +transit,124.7,36.13812890996875 +transit,124.7,36.12916810781674 +transit,124.7,36.12020729223019 +transit,124.7,36.11124646321043 +transit,124.7,36.10228562075874 +transit,124.7,36.09332476487647 +transit,124.7,36.08436389556494 +transit,124.7,36.07540301282546 +transit,124.7,36.06644211665937 +transit,124.7,36.057481207067994 +transit,124.7,36.04852028405265 +transit,124.7,36.03955934761468 +transit,124.7,36.03059839775539 +transit,124.7,36.02163743447614 +transit,124.7,36.012676457778255 +transit,124.7,36.003715467663056 +transit,124.7,35.99475446413189 +transit,124.7,35.98579344718609 +transit,124.7,35.976832416827 +transit,124.7,35.96787137305596 +transit,124.7,35.9589103158743 +transit,124.7,35.94994924528336 +transit,124.7,35.9409881612845 +transit,124.7,35.93202706387906 +transit,124.7,35.923065953068374 +transit,124.7,35.9141048288538 +transit,124.7,35.90514369123669 +transit,124.7,35.89618254021839 +transit,124.7,35.88722137580024 +transit,124.7,35.8782601979836 +transit,124.7,35.86929900676983 +transit,124.7,35.86033780216028 +transit,124.7,35.85137658415631 +transit,124.7,35.84241535275928 +transit,124.7,35.833454107970546 +transit,124.7,35.82449284979147 +transit,124.7,35.8155315782234 +transit,124.7,35.80657029326772 +transit,124.7,35.79760899492579 +transit,124.7,35.78864768319896 +transit,124.7,35.77968635808861 +transit,124.7,35.770725019596114 +transit,124.7,35.76176366772283 +transit,124.7,35.75280230247014 +transit,124.7,35.74384092383941 +transit,124.7,35.734879531832 +transit,124.7,35.72591812644932 +transit,124.7,35.71695670769272 +transit,124.7,35.70799527556357 +transit,124.7,35.699033830063286 +transit,124.7,35.6900723711932 +transit,124.7,35.68111089895474 +transit,124.7,35.67214941334926 +transit,124.7,35.66318791437815 +transit,124.7,35.6542264020428 +transit,124.7,35.6452648763446 +transit,124.7,35.63630333728493 +transit,124.7,35.62734178486517 +transit,124.7,35.61838021908674 +transit,124.7,35.60941863995101 +transit,124.7,35.600457047459386 +transit,124.7,35.59149544161325 +transit,124.7,35.58253382241401 +transit,124.7,35.57357218986305 +transit,124.7,35.56461054396177 +transit,124.7,35.555648884711594 +transit,124.7,35.5466872121139 +transit,124.7,35.53772552617009 +transit,124.7,35.528763826881594 +transit,124.7,35.51980211424979 +transit,124.7,35.51084038827609 +transit,124.7,35.50187864896191 +transit,124.7,35.49291689630865 +transit,124.7,35.483955130317725 +transit,124.7,35.47499335099055 +transit,124.7,35.46603155832854 +transit,124.7,35.4570697523331 +transit,124.7,35.448107933005666 +transit,124.7,35.43914610034762 +transit,124.7,35.43018425436041 +transit,124.7,35.421222395045454 +transit,124.7,35.41226052240416 +transit,124.7,35.40329863643796 +transit,124.7,35.39433673714828 +transit,124.7,35.385374824536534 +transit,124.7,35.37641289860415 +transit,124.7,35.36745095935257 +transit,124.7,35.3584890067832 +transit,124.7,35.349527040897485 +transit,124.7,35.34056506169687 +transit,124.7,35.33160306918277 +transit,124.7,35.32264106335661 +transit,124.7,35.313679044219846 +transit,124.7,35.304717011773924 +transit,124.7,35.29575496602024 +transit,124.7,35.28679290696027 +transit,124.7,35.27783083459545 +transit,124.7,35.26886874892721 +transit,124.7,35.259906649957 +transit,124.7,35.25094453768627 +transit,124.7,35.24198241211646 +transit,124.7,35.23302027324902 +transit,124.7,35.22405812108539 +transit,124.7,35.21509595562703 +transit,124.7,35.20613377687539 +transit,124.7,35.19717158483192 +transit,124.7,35.18820937949809 +transit,124.7,35.17924716087532 +transit,124.7,35.1702849289651 +transit,124.7,35.161322683768866 +transit,124.7,35.152360425288094 +transit,124.7,35.143398153524245 +transit,124.7,35.13443586847877 +transit,124.7,35.12547357015313 +transit,124.7,35.11651125854879 +transit,124.7,35.10754893366723 +transit,124.7,35.09858659550991 +transit,124.7,35.089624244078294 +transit,124.7,35.08066187937385 +transit,124.7,35.07169950139806 +transit,124.7,35.06273711015239 +transit,124.7,35.053774705638304 +transit,124.7,35.04481228785729 +transit,124.7,35.035849856810835 +transit,124.7,35.026887412500386 +transit,124.7,35.017924954927445 +transit,124.7,35.00896248409349 +WP3,124.7,35.0 +transit,124.7,35.00896248409349 +transit,124.7,35.017924954927445 +transit,124.7,35.026887412500386 +transit,124.7,35.035849856810835 +transit,124.7,35.04481228785729 +transit,124.7,35.053774705638304 +transit,124.7,35.06273711015238 +transit,124.7,35.07169950139806 +transit,124.7,35.08066187937385 +transit,124.7,35.0896242440783 +transit,124.7,35.09858659550991 +transit,124.7,35.10754893366723 +transit,124.7,35.11651125854879 +transit,124.7,35.125473570153126 +transit,124.7,35.13443586847877 +transit,124.7,35.143398153524245 +transit,124.7,35.152360425288094 +transit,124.7,35.161322683768866 +transit,124.7,35.170284928965096 +transit,124.7,35.17924716087532 +transit,124.7,35.18820937949809 +transit,124.7,35.19717158483192 +transit,124.7,35.20613377687539 +transit,124.7,35.215095955627035 +transit,124.7,35.224058121085385 +transit,124.7,35.23302027324901 +transit,124.7,35.24198241211646 +transit,124.7,35.25094453768627 +transit,124.7,35.25990664995701 +transit,124.7,35.26886874892721 +transit,124.7,35.277830834595456 +transit,124.7,35.28679290696028 +transit,124.7,35.29575496602025 +transit,124.7,35.30471701177392 +transit,124.7,35.31367904421986 +transit,124.7,35.32264106335662 +transit,124.7,35.33160306918277 +transit,124.7,35.340565061696864 +transit,124.7,35.34952704089749 +transit,124.7,35.3584890067832 +transit,124.7,35.36745095935257 +transit,124.7,35.376412898604144 +transit,124.7,35.385374824536534 +transit,124.7,35.39433673714827 +transit,124.7,35.40329863643796 +transit,124.7,35.41226052240416 +transit,124.7,35.421222395045454 +transit,124.7,35.43018425436042 +transit,124.7,35.43914610034762 +transit,124.7,35.448107933005666 +transit,124.7,35.45706975233311 +transit,124.7,35.466031558328545 +transit,124.7,35.47499335099055 +transit,124.7,35.483955130317725 +transit,124.7,35.49291689630864 +transit,124.7,35.50187864896191 +transit,124.7,35.51084038827609 +transit,124.7,35.51980211424979 +transit,124.7,35.52876382688159 +transit,124.7,35.5377255261701 +transit,124.7,35.5466872121139 +transit,124.7,35.55564888471159 +transit,124.7,35.56461054396177 +transit,124.7,35.57357218986304 +transit,124.7,35.58253382241401 +transit,124.7,35.59149544161325 +transit,124.7,35.60045704745938 +transit,124.7,35.60941863995101 +transit,124.7,35.61838021908673 +transit,124.7,35.62734178486517 +transit,124.7,35.63630333728493 +transit,124.7,35.6452648763446 +transit,124.7,35.6542264020428 +transit,124.7,35.66318791437815 +transit,124.7,35.67214941334926 +transit,124.7,35.681110898954735 +transit,124.7,35.6900723711932 +transit,124.7,35.69903383006328 +transit,124.7,35.70799527556357 +transit,124.7,35.71695670769272 +transit,124.7,35.72591812644932 +transit,124.7,35.734879531832 +transit,124.7,35.74384092383941 +transit,124.7,35.75280230247014 +transit,124.7,35.76176366772283 +transit,124.7,35.770725019596114 +transit,124.7,35.77968635808862 +transit,124.7,35.78864768319896 +transit,124.7,35.79760899492579 +transit,124.7,35.806570293267725 +transit,124.7,35.8155315782234 +transit,124.7,35.82449284979147 +transit,124.7,35.833454107970546 +transit,124.7,35.84241535275928 +transit,124.7,35.85137658415631 +transit,124.7,35.86033780216028 +transit,124.7,35.86929900676983 +transit,124.7,35.8782601979836 +transit,124.7,35.887221375800245 +transit,124.7,35.89618254021839 +transit,124.7,35.90514369123669 +transit,124.7,35.91410482885381 +transit,124.7,35.923065953068374 +transit,124.7,35.93202706387906 +transit,124.7,35.9409881612845 +transit,124.7,35.94994924528336 +transit,124.7,35.9589103158743 +transit,124.7,35.96787137305596 +transit,124.7,35.976832416827 +transit,124.7,35.98579344718609 +transit,124.7,35.99475446413188 +transit,124.7,36.003715467663056 +transit,124.7,36.01267645777825 +transit,124.7,36.02163743447614 +transit,124.7,36.03059839775539 +transit,124.7,36.03955934761467 +transit,124.7,36.04852028405264 +transit,124.7,36.057481207067994 +transit,124.7,36.06644211665938 +transit,124.7,36.07540301282546 +transit,124.7,36.08436389556495 +transit,124.7,36.09332476487647 +transit,124.7,36.102285620758735 +transit,124.7,36.11124646321043 +transit,124.7,36.12020729223019 +transit,124.7,36.12916810781674 +transit,124.7,36.13812890996875 +transit,124.7,36.14708969868489 +transit,124.7,36.156050473963845 +transit,124.7,36.165011235804315 +transit,124.7,36.17397198420498 +transit,124.7,36.18293271916453 +transit,124.7,36.19189344068165 +transit,124.7,36.200854148755035 +transit,124.7,36.20981484338337 +transit,124.7,36.21877552456536 +transit,124.7,36.227736192299695 +transit,124.7,36.23669684658507 +transit,124.7,36.24565748742018 +transit,124.7,36.25461811480373 +transit,124.7,36.26357872873443 +transit,124.7,36.27253932921095 +transit,124.7,36.281499916232015 +transit,124.7,36.29046048979634 +transit,124.7,36.29942104990261 +transit,124.7,36.30838159654954 +transit,124.7,36.31734212973584 +transit,124.7,36.3263026494602 +transit,124.7,36.33526315572137 +transit,124.7,36.34422364851803 +transit,124.7,36.3531841278489 +transit,124.7,36.36214459371271 +transit,124.7,36.371105046108156 +transit,124.7,36.38006548503396 +transit,124.7,36.38902591048885 +transit,124.7,36.39798632247154 +transit,124.7,36.406946720980756 +transit,124.7,36.41590710601522 +transit,124.7,36.42486747757365 +transit,124.7,36.433827835654775 +transit,124.7,36.44278818025732 +transit,124.7,36.45174851138002 +transit,124.7,36.4607088290216 +transit,124.7,36.46966913318078 +transit,124.7,36.47862942385631 +transit,124.7,36.48758970104692 +transit,124.7,36.496549964751345 +transit,124.7,36.50551021496831 +transit,124.7,36.51447045169656 +transit,124.7,36.523430674934836 +transit,124.7,36.53239088468187 +transit,124.7,36.5413510809364 +transit,124.7,36.55031126369719 +transit,124.7,36.559271432962966 +transit,124.7,36.56823158873249 +transit,124.7,36.5771917310045 +transit,124.7,36.58615185977772 +transit,124.7,36.59511197505095 +transit,124.7,36.60407207682289 +transit,124.7,36.61303216509232 +transit,124.7,36.62199223985798 +transit,124.7,36.63095230111865 +transit,124.7,36.63991234887306 +transit,124.7,36.64887238311998 +transit,124.7,36.65783240385816 +transit,124.7,36.666792411086355 +transit,124.7,36.675752404803355 +transit,124.7,36.68471238500789 +transit,124.7,36.69367235169875 +transit,124.7,36.70263230487467 +transit,124.7,36.71159224453445 +transit,124.7,36.72055217067685 +transit,124.7,36.72951208330062 +transit,124.7,36.73847198240453 +transit,124.7,36.74743186798739 +transit,124.7,36.75639174004794 +transit,124.7,36.765351598584964 +transit,124.7,36.774311443597234 +transit,124.7,36.78327127508353 +transit,124.7,36.79223109304264 +transit,124.7,36.80119089747332 +transit,124.7,36.81015068837438 +transit,124.7,36.81911046574458 +transit,124.7,36.82807022958272 +transit,124.7,36.83702997988758 +transit,124.7,36.84598971665795 +transit,124.7,36.8549494398926 +transit,124.7,36.86390914959034 +transit,124.7,36.872868845749956 +transit,124.7,36.881828528370235 +transit,124.7,36.89078819744997 +transit,124.7,36.899747852987964 +transit,124.7,36.90870749498301 +transit,124.7,36.9176671234339 +transit,124.7,36.92662673833944 +transit,124.7,36.935586339698425 +transit,124.7,36.94454592750965 +transit,124.7,36.95350550177193 +transit,124.7,36.96246506248406 +transit,124.7,36.971424609644856 +transit,124.7,36.980384143253126 +transit,124.7,36.98934366330766 +transit,124.7,36.998303169807265 +transit,124.7,37.007262662750776 +transit,124.7,37.01622214213701 +transit,124.7,37.02518160796475 +transit,124.7,37.03414106023281 +transit,124.7,37.04310049894004 +transit,124.7,37.052059924085235 +transit,124.7,37.06101933566722 +transit,124.7,37.0699787336848 +transit,124.7,37.07893811813681 +transit,124.7,37.08789748902208 +transit,124.7,37.09685684633942 +transit,124.7,37.105816190087666 +transit,124.7,37.11477552026564 +transit,124.7,37.12373483687216 +transit,124.7,37.132694139906064 +transit,124.7,37.14165342936619 +transit,124.7,37.150612705251355 +transit,124.7,37.15957196756041 +transit,124.7,37.16853121629218 +transit,124.7,37.1774904514455 +transit,124.7,37.18644967301921 +transit,124.7,37.19540888101215 +transit,124.7,37.20436807542316 +transit,124.7,37.21332725625107 +transit,124.7,37.22228642349475 +transit,124.7,37.23124557715301 +transit,124.7,37.24020471722471 +transit,124.7,37.249163843708715 +transit,124.7,37.25812295660384 +transit,124.7,37.26708205590896 +transit,124.7,37.27604114162291 +transit,124.7,37.28500021374457 +transit,124.7,37.29395927227276 +transit,124.7,37.302918317206334 +transit,124.7,37.31187734854418 +transit,124.7,37.32083636628513 +transit,124.7,37.32979537042806 +transit,124.7,37.33875436097181 +transit,124.7,37.34771333791525 +transit,124.7,37.35667230125725 +transit,124.7,37.36563125099668 +transit,124.7,37.37459018713238 +transit,124.7,37.38354910966323 +transit,124.7,37.39250801858811 +transit,124.7,37.40146691390587 +transit,124.7,37.410425795615396 +transit,124.7,37.41938466371556 +transit,124.7,37.42834351820521 +transit,124.7,37.43730235908326 +transit,124.7,37.44626118634857 +WP12,124.7,37.45522 +transit,124.7112280574842,37.45530214985653 +transit,124.7224561393706,37.45538323296906 +transit,124.73368424534036,37.455463249332205 +transit,124.74491237507463,37.455542198940634 +transit,124.75614052825463,37.45562008178912 +transit,124.76736870456148,37.45569689787249 +transit,124.77859690367634,37.45577264718565 +transit,124.78982512528039,37.45584732972356 +transit,124.80105336905474,37.455920945481296 +transit,124.81228163468053,37.45599349445393 +transit,124.82350992183892,37.456064976636675 +transit,124.834738230211,37.45613539202477 +transit,124.84596655947792,37.45620474061356 +transit,124.85719490932077,37.45627302239843 +transit,124.86842327942067,37.456340237374846 +transit,124.87965166945872,37.456406385538344 +transit,124.89088007911602,37.45647146688455 +transit,124.90210850807367,37.456535481409134 +transit,124.91333695601274,37.456598429107835 +transit,124.92456542261434,37.45666030997649 +transit,124.93579390755951,37.456721124011 +transit,124.94702241052937,37.45678087120731 +transit,124.95825093120494,37.45683955156145 +transit,124.96947946926731,37.456897165069556 +transit,124.98070802439754,37.45695371172777 +transit,124.99193659627667,37.457009191532364 +transit,125.00316518458577,37.457063604479636 +transit,125.01439378900587,37.45711695056598 +transit,125.025622409218,37.45716922978786 +transit,125.03685104490322,37.457220442141804 +transit,125.04807969574253,37.45727058762442 +transit,125.059308361417,37.45731966623236 +transit,125.07053704160764,37.45736767796238 +transit,125.08176573599545,37.45741462281129 +transit,125.09299444426146,37.45746050077597 +transit,125.10422316608668,37.45750531185339 +transit,125.11545190115214,37.45754905604056 +transit,125.12668064913882,37.45759173333458 +transit,125.13790940972773,37.457633343732624 +transit,125.14913818259987,37.45767388723192 +transit,125.16036696743625,37.457713363829775 +transit,125.17159576391784,37.457751773523576 +transit,125.18282457172563,37.45778911631078 +transit,125.19405339054062,37.45782539218889 +transit,125.20528222004378,37.45786060115551 +transit,125.2165110599161,37.4578947432083 +transit,125.22773990983856,37.457927818345 +transit,125.23896876949213,37.4579598265634 +transit,125.25019763855778,37.457990767861396 +transit,125.26142651671648,37.4580206422369 +transit,125.27265540364921,37.45804944968797 +transit,125.28388429903691,37.45807719021268 +transit,125.29511320256057,37.458103863809164 +transit,125.30634211390114,37.45812947047568 +transit,125.31757103273958,37.458154010210514 +transit,125.32879995875683,37.45817748301205 +transit,125.34002889163386,37.45819988887872 +transit,125.35125783105164,37.45822122780903 +transit,125.36248677669109,37.45824149980157 +transit,125.37371572823317,37.458260704855 +transit,125.38494468535883,37.45827884296804 +transit,125.39617364774901,37.4582959141395 +transit,125.40740261508466,37.458311918368224 +transit,125.41863158704675,37.45832685565315 +transit,125.42986056331617,37.45834072599331 +transit,125.4410895435739,37.45835352938775 +transit,125.45231852750085,37.45836526583566 +transit,125.463547514778,37.458375935336235 +transit,125.47477650508625,37.458385537888766 +transit,125.48600549810655,37.45839407349262 +transit,125.49723449351985,37.45840154214723 +transit,125.50846349100708,37.4584079438521 +transit,125.51969249024916,37.45841327860682 +transit,125.53092149092704,37.45841754641101 +transit,125.54215049272165,37.458420747264405 +transit,125.55337949531392,37.45842288116679 +transit,125.5646084983848,37.45842394811801 +transit,125.5758375016152,37.45842394811801 +transit,125.58706650468608,37.45842288116679 +transit,125.59829550727835,37.458420747264405 +transit,125.60952450907295,37.45841754641101 +transit,125.62075350975084,37.45841327860682 +transit,125.63198250899292,37.45840794385211 +transit,125.64321150648014,37.45840154214723 +transit,125.65444050189345,37.45839407349262 +transit,125.66566949491374,37.458385537888766 +transit,125.676898485222,37.458375935336235 +transit,125.68812747249915,37.45836526583566 +transit,125.6993564564261,37.45835352938775 +transit,125.71058543668383,37.45834072599331 +transit,125.72181441295326,37.45832685565315 +transit,125.73304338491533,37.45831191836822 +transit,125.74427235225099,37.4582959141395 +transit,125.75550131464117,37.45827884296804 +transit,125.76673027176683,37.458260704855 +transit,125.77795922330891,37.458241499801574 +transit,125.78918816894836,37.45822122780903 +transit,125.80041710836613,37.45819988887872 +transit,125.81164604124316,37.45817748301205 +transit,125.82287496726042,37.458154010210514 +transit,125.83410388609886,37.45812947047568 +transit,125.84533279743943,37.458103863809164 +transit,125.85656170096308,37.45807719021267 +transit,125.86779059635079,37.45804944968798 +transit,125.87901948328351,37.45802064223691 +transit,125.89024836144222,37.457990767861396 +transit,125.90147723050787,37.4579598265634 +transit,125.91270609016144,37.457927818345 +transit,125.9239349400839,37.4578947432083 +transit,125.93516377995621,37.45786060115551 +transit,125.94639260945938,37.45782539218889 +transit,125.95762142827438,37.45778911631078 +transit,125.96885023608216,37.457751773523576 +transit,125.98007903256375,37.457713363829775 +transit,125.99130781740013,37.45767388723192 +transit,126.00253659027227,37.45763334373262 +transit,126.01376535086118,37.45759173333458 +transit,126.02499409884786,37.45754905604056 +transit,126.03622283391331,37.45750531185339 +transit,126.04745155573853,37.45746050077597 +transit,126.05868026400455,37.45741462281129 +transit,126.06990895839236,37.45736767796238 +transit,126.081137638583,37.45731966623236 +transit,126.09236630425747,37.45727058762442 +transit,126.10359495509678,37.45722044214181 +transit,126.11482359078201,37.45716922978786 +transit,126.12605221099413,37.457116950565975 +transit,126.13728081541423,37.457063604479636 +transit,126.14850940372332,37.45700919153236 +transit,126.15973797560245,37.45695371172777 +transit,126.17096653073268,37.456897165069556 +transit,126.18219506879505,37.45683955156145 +transit,126.19342358947063,37.45678087120731 +transit,126.20465209244048,37.456721124011 +transit,126.21588057738566,37.45666030997649 +transit,126.22710904398726,37.456598429107835 +transit,126.23833749192633,37.456535481409134 +transit,126.24956592088398,37.45647146688455 +transit,126.26079433054129,37.456406385538344 +transit,126.27202272057933,37.456340237374846 +transit,126.28325109067923,37.45627302239843 +transit,126.29447944052208,37.456204740613565 +transit,126.305707769789,37.45613539202477 +transit,126.31693607816108,37.456064976636675 +transit,126.32816436531947,37.45599349445393 +transit,126.33939263094526,37.455920945481296 +transit,126.35062087471961,37.45584732972357 +transit,126.36184909632365,37.45577264718565 +transit,126.37307729543852,37.45569689787249 +transit,126.38430547174536,37.455620081789114 +transit,126.39553362492536,37.455542198940634 +transit,126.40676175465964,37.455463249332205 +transit,126.41798986062939,37.45538323296906 +transit,126.42921794251579,37.45530214985653 +Incheon,126.440446,37.45522 +transit,126.45051260362189,37.458088344969404 +transit,126.46057997611821,37.46095583099262 +transit,126.47064811739735,37.463822457916606 +transit,126.48071702736749,37.46668822558833 +transit,126.49078670593667,37.46955313385475 +transit,126.50085715301287,37.47241718256289 +transit,126.51092836850387,37.47528037155975 +transit,126.5210003523173,37.478142700692345 +transit,126.53107310436073,37.481004169807726 +transit,126.54114662454153,37.48386477875294 +transit,126.55122091276691,37.48672452737504 +transit,126.56129596894404,37.489583415521125 +transit,126.57137179297986,37.492441443038274 +transit,126.58144838478123,37.49529860977361 +transit,126.59152574425481,37.49815491557426 +transit,126.6016038713072,37.501010360287346 +transit,126.61168276584482,37.50386494376002 +transit,126.62176242777396,37.506718665839465 +transit,126.63184285700075,37.509571526372845 +transit,126.64192405343123,37.512423525207375 +transit,126.65200601697127,37.51527466219026 +transit,126.66208874752661,37.51812493716871 +transit,126.67217224500286,37.52097434998998 +transit,126.68225650930546,37.52382290050131 +transit,126.69234154033975,37.52667058854998 +transit,126.70242733801096,37.52951741398328 +transit,126.71251390222407,37.53236337664849 +transit,126.72260123288407,37.53520847639294 +transit,126.73268932989569,37.53805271306395 +transit,126.74277819316359,37.54089608650886 +transit,126.75286782259226,37.54373859657503 +transit,126.76295821808608,37.546580243109844 +transit,126.77304937954928,37.54942102596067 +transit,126.78314130688592,37.55226094497492 +Gimpo,126.793234,37.5551 +transit,126.80328755093704,37.55576985145824 +transit,126.8133412817411,37.556438846790364 +transit,126.82339519218971,37.5571069859607 +transit,126.83344928206037,37.55777426893365 +transit,126.84350355113051,37.5584406956736 +transit,126.85355799917757,37.55910626614505 +transit,126.86361262597892,37.55977098031248 +transit,126.87366743131189,37.56043483814044 +transit,126.88372241495378,37.56109783959354 +transit,126.89377757668187,37.56175998463641 +transit,126.90383291627336,37.562421273233745 +transit,126.91388843350545,37.563081705350264 +transit,126.9239441281553,37.563741280950744 +WP9,126.934,37.5644 +transit,126.94348040842942,37.567286634095225 +transit,126.95296154848067,37.570172505423216 +transit,126.96244342009334,37.57305761384708 +transit,126.97192602320682,37.57594195922991 +transit,126.9814093577605,37.57882554143482 +transit,126.99089342369354,37.581708360324924 +transit,127.00037822094507,37.584590415763365 +transit,127.0098637494541,37.587471707613254 +transit,127.01935000915948,37.59035223573776 +WP8,127.028837,37.593232 +transit,127.03925772735576,37.59259122609948 +transit,127.049678275891,37.591949532130364 +transit,127.06009864535636,37.59130691812946 +transit,127.07051883550254,37.59066338413357 +transit,127.0809388460803,37.5900189301796 +transit,127.09135867684041,37.58937355630448 +transit,127.10177832753372,37.58872726254518 +transit,127.1121977979111,37.58808004893876 +transit,127.12261708772343,37.587431915522274 +transit,127.13303619672169,37.586782862332875 +transit,127.14345512465685,37.58613288940776 +transit,127.15387387127997,37.58548199678413 +transit,127.16429243634211,37.58483018449934 +transit,127.1747108195944,37.58417745259068 +transit,127.18512902078798,37.583523801095545 +transit,127.19554703967407,37.5828692300514 +transit,127.2059648760039,37.58221373949572 +transit,127.21638252952877,37.58155732946605 +WP7,127.2268,37.5809 +transit,127.23295252243253,37.58731013816631 +transit,127.23910610015128,37.59371994860996 +transit,127.24526073352834,37.6001294312024 +transit,127.25141642293593,37.60653858581509 +transit,127.2575731687464,37.6129474123194 +transit,127.26373097133218,37.61935591058666 +transit,127.26988983106587,37.62576408048816 +transit,127.27604974832009,37.63217192189511 +transit,127.28221072346766,37.63857943467867 +transit,127.28837275688147,37.64498661870998 +transit,127.29453584893454,37.651393473860075 +WP6,127.3007,37.6578 +transit,127.29197708232722,37.661521421407144 +transit,127.28325329380102,37.66524219534583 +transit,127.27452863436872,37.668962321666314 +transit,127.26580310397777,37.67268180021882 +transit,127.25707670257566,37.67640063085358 +transit,127.24834943011,37.68011881342078 +transit,127.23962128652843,37.68383634777065 +transit,127.23089227177876,37.68755323375334 +transit,127.22216238580883,37.691269471219044 +transit,127.21343162856657,37.69498506001788 +WP5,127.2047,37.6987 +transit,127.19914453074887,37.692026478826136 +transit,127.19359005716825,37.68535268841072 +transit,127.1880365788795,37.67867862886307 +transit,127.18248409550407,37.67200430029248 +transit,127.17693260666354,37.66532970280817 +transit,127.17138211197965,37.658654836519354 +transit,127.16583261107425,37.651979701535154 +transit,127.1602841035694,37.64530429796467 +transit,127.15473658908718,37.63862862591694 +transit,127.1491900672499,37.63195268550096 +transit,127.14364453767999,37.62527647682568 +WP4,127.1381,37.6186 +transit,127.13693211306057,37.61052237439777 +transit,127.13576447871735,37.602444726155696 +transit,127.13459709684253,37.59436705528044 +transit,127.1334299673084,37.5862893617786 +transit,127.13226308998733,37.578211645656786 +transit,127.13109646475178,37.57013390692161 +transit,127.12993009147425,37.5620561455797 +transit,127.12876397002731,37.55397836163763 +transit,127.12759810028365,37.54590055510203 +transit,127.12643248211599,37.537822725979495 +transit,127.12526711539714,37.529744874276616 +WP3,127.124102,37.521667 +transit,127.12298697916394,37.514032391806964 +transit,127.12187218546937,37.50639776319721 +transit,127.12075761880781,37.49876311417644 +transit,127.11964327907083,37.49112844475035 +transit,127.11852916615004,37.4834937549246 +transit,127.11741527993712,37.4758590447049 +transit,127.11630162032382,37.46822431409691 +transit,127.11518818720195,37.46058956310631 +transit,127.11407498046337,37.45295479173878 +Seoul_Air_Base,127.112962,37.44532 +transit,127.1066925294896,37.43839083921136 +transit,127.10042421498869,37.431461337800904 +transit,127.09415705605048,37.42453149591249 +transit,127.08789105222827,37.41760131368982 +transit,127.08162620307557,37.41067079127659 +transit,127.07536250814601,37.403739928816385 +transit,127.06909996699342,37.39680872645275 +transit,127.06283857917172,37.389877184329166 +transit,127.05657834423506,37.38294530258906 +transit,127.0503192617377,37.37601308137576 +transit,127.04406133123405,37.36908052083256 +transit,127.03780455227867,37.3621476211027 +transit,127.03154892442635,37.35521438232931 +transit,127.02529444723194,37.348280804655516 +transit,127.0190411202505,37.34134688822431 +transit,127.01278894303722,37.33441263317869 +transit,127.00653791514749,37.327478039661536 +transit,127.00028803613678,37.320543107815695 +transit,126.99403930556078,37.31360783778394 +transit,126.9877917229753,37.306672229708994 +transit,126.98154528793634,37.29973628373349 +WP25,126.9753,37.2928 +transit,126.97903106148158,37.286449497224005 +transit,126.98276149592735,37.280098870032944 +transit,126.98649130357502,37.27374811847357 +transit,126.9902204846622,37.26739724259265 +transit,126.99394903942638,37.26104624243692 +transit,126.99767696810498,37.2546951180531 +transit,127.00140427093532,37.24834386948789 +transit,127.00513094815463,37.241992496787965 +Suwon_Air_Base,127.008857,37.235641 +transit,127.01669082843866,37.22926631967048 +transit,127.02452333802698,37.222891114381575 +transit,127.03235452918393,37.2165153843387 +transit,127.04018440232842,37.21013912974715 +transit,127.0480129578793,37.20376235081221 +transit,127.05584019625533,37.197385047739054 +transit,127.06366611787519,37.19100722073276 +transit,127.07149072315752,37.18462886999835 +transit,127.07931401252088,37.17824999574078 +transit,127.08713598638373,37.1718705981649 +transit,127.0949566451645,37.16549067747551 +transit,127.10277598928153,37.15911023387733 +transit,127.11059401915306,37.152729267574976 +transit,127.11841073519732,37.14634777877303 +transit,127.12622613783242,37.13996576767595 +transit,127.1340402274764,37.13358323448817 +transit,127.14185300454727,37.127200179414 +transit,127.14966446946292,37.1208166026577 +transit,127.1574746226412,37.11443250442345 +transit,127.1652834644999,37.108047884915344 +transit,127.17309099545665,37.10166274433741 +transit,127.18089721592914,37.095277082893595 +transit,127.18870212633487,37.088890900787774 +transit,127.19650572709138,37.08250419822373 +transit,127.20430801861602,37.0761169754052 +transit,127.21210900132617,37.069729232535806 +transit,127.21990867563906,37.06334096981913 +transit,127.22770704197191,37.05695218745866 +transit,127.23550410074185,37.0505628856578 +transit,127.24329985236588,37.04417306461988 +transit,127.25109429726102,37.0377827245482 +transit,127.25888743584417,37.0313918656459 +transit,127.26667926853214,37.02500048811611 +transit,127.27446979574172,37.01860859216187 +transit,127.28225901788957,37.01221617798612 +transit,127.29004693539233,37.00582324579175 +transit,127.29783354866653,36.99942979578157 +transit,127.30561885812864,36.9930358281583 +transit,127.31340286419507,36.986641343124596 +transit,127.32118556728213,36.98024634088303 +transit,127.32896696780608,36.97385082163611 +transit,127.33674706618311,36.96745478558627 +transit,127.34452586282933,36.96105823293584 +transit,127.35230335816075,36.9546611638871 +transit,127.36007955259338,36.948263578642255 +transit,127.36785444654306,36.94186547740343 +transit,127.37562804042564,36.93546686037267 +transit,127.38340033465686,36.929067727751935 +transit,127.39117132965237,36.922668079743126 +transit,127.39894102582781,36.91626791654806 +transit,127.40670942359867,36.90986723836849 +transit,127.41447652338043,36.90346604540608 +transit,127.42224232558846,36.89706433786242 +transit,127.43000683063805,36.89066211593904 +transit,127.43777003894446,36.88425937983737 +transit,127.44553195092287,36.87785612975876 +transit,127.45329256698831,36.87145236590454 +transit,127.46105188755584,36.865048088475895 +transit,127.4688099130404,36.858643297673986 +transit,127.47656664385684,36.85223799369986 +transit,127.48432208041997,36.84583217675452 +transit,127.4920762231445,36.83942584703888 +transit,127.4998290724451,36.83301900475377 +transit,127.5075806287363,36.82661165009997 +transit,127.51533089243267,36.82020378327814 +transit,127.52307986394858,36.81379540448893 +transit,127.53082754369842,36.80738651393285 +transit,127.53857393209645,36.80097711181038 +transit,127.5463190295569,36.7945671983219 +transit,127.5540628364939,36.78815677366774 +transit,127.56180535332149,36.78174583804811 +transit,127.56954658045366,36.77533439166319 +transit,127.57728651830435,36.76892243471307 +transit,127.58502516728738,36.76250996739776 +transit,127.59276252781652,36.7560969899172 +transit,127.60049860030546,36.74968350247124 +transit,127.60823338516781,36.743269505259704 +transit,127.61596688281713,36.73685499848227 +transit,127.62369909366689,36.73043998233859 +transit,127.63143001813046,36.724024457028236 +transit,127.6391596566212,36.71760842275068 +transit,127.64688800955234,36.711191879705346 +transit,127.65461507733703,36.704774828091594 +transit,127.66234086038841,36.69835726810865 +transit,127.6700653591195,36.69193919995574 +transit,127.67778857394323,36.68552062383196 +transit,127.68551050527249,36.67910153993637 +transit,127.69323115352007,36.67268194846792 +transit,127.70095051909871,36.666261849625506 +transit,127.70866860242107,36.65984124360795 +transit,127.71638540389974,36.65342013061399 +transit,127.72410092394718,36.646998510842316 +transit,127.73181516297586,36.64057638449149 +transit,127.73952812139812,36.63415375176006 +transit,127.74723979962626,36.62773061284646 +transit,127.75495019807246,36.62130696794907 +transit,127.76265931714887,36.61488281726617 +transit,127.77036715726756,36.608458160996 +transit,127.77807371884049,36.60203299933671 +transit,127.78577900227957,36.59560733248637 +transit,127.79348300799664,36.58918116064297 +transit,127.80118573640347,36.582754484004454 +transit,127.80888718791172,36.576327302768675 +transit,127.81658736293303,36.56989961713339 +transit,127.82428626187891,36.56347142729633 +transit,127.83198388516082,36.5570427334551 +transit,127.83968023319017,36.55061353580727 +transit,127.84737530637824,36.54418383455033 +transit,127.85506910513628,36.53775362988168 +transit,127.86276162987544,36.53132292199865 +transit,127.87045288100681,36.524891711098505 +transit,127.8781428589414,36.51845999737842 +transit,127.88583156409014,36.51202778103554 +transit,127.89351899686389,36.50559506226688 +transit,127.90120515767345,36.49916184126939 +transit,127.90889004692951,36.49272811824 +transit,127.91657366504269,36.4862938933755 +transit,127.92425601242357,36.47985916687264 +transit,127.93193708948264,36.4734239389281 +transit,127.93961689663028,36.46698820973847 +transit,127.94729543427685,36.46055197950026 +transit,127.95497270283258,36.454115248409934 +transit,127.96264870270767,36.44767801666387 +transit,127.9703234343122,36.44124028445837 +transit,127.97799689805622,36.43480205198965 +transit,127.98566909434969,36.42836331945388 +transit,127.99334002360247,36.42192408704713 +transit,128.00100968622436,36.41548435496543 +transit,128.00867808262512,36.409044123404676 +transit,128.01634521321438,36.40260339256078 +transit,128.02401107840168,36.396162162629494 +transit,128.03167567859657,36.38972043380655 +transit,128.03933901420845,36.383278206287585 +transit,128.04700108564668,36.37683548026815 +transit,128.05466189332054,36.37039225594376 +transit,128.06232143763918,36.36394853350985 +transit,128.06997971901177,36.35750431316175 +transit,128.0776367378473,36.35105959509473 +transit,128.0852924945548,36.344614379504 +transit,128.09294698954315,36.33816866658471 +transit,128.10060022322114,36.331722456531885 +transit,128.10825219599752,36.325275749540516 +transit,128.11590290828093,36.31882854580553 +transit,128.12355236048,36.31238084552176 +transit,128.13120055300323,36.30593264888396 +transit,128.13884748625904,36.299483956086824 +transit,128.14649316065578,36.293034767324976 +transit,128.15413757660173,36.28658508279296 +transit,128.16178073450513,36.280134902685255 +transit,128.1694226347741,36.273684227196256 +transit,128.17706327781667,36.26723305652028 +transit,128.18470266404086,36.260781390851605 +transit,128.1923407938545,36.25432923038439 +transit,128.19997766766548,36.24787657531277 +transit,128.2076132858815,36.24142342583077 +transit,128.21524764891026,36.23496978213233 +transit,128.22288075715934,36.22851564441138 +transit,128.23051261103626,36.222061012861715 +transit,128.2381432109485,36.21560588767709 +transit,128.24577255730333,36.209150269051186 +transit,128.25340065050813,36.20269415717759 +transit,128.26102749097006,36.19623755224983 +transit,128.26865307909625,36.18978045446139 +transit,128.2762774152938,36.183322864005625 +transit,128.28390049996966,36.17686478107585 +transit,128.29152233353074,36.17040620586532 +transit,128.29914291638386,36.163947138567174 +transit,128.30676224893577,36.157487579374546 +transit,128.31438033159313,36.151027528480434 +transit,128.32199716476256,36.14456698607778 +transit,128.3296127488506,36.13810595235948 +transit,128.33722708426362,36.13164442751835 +transit,128.344840171408,36.12518241174709 +transit,128.3524520106901,36.11871990523839 +transit,128.36006260251605,36.11225690818482 +transit,128.36767194729202,36.105793420778916 +transit,128.3752800454241,36.09932944321311 +transit,128.38288689731817,36.092864975679774 +transit,128.39049250338022,36.086400018371215 +transit,128.398096864016,36.07993457147967 +transit,128.40569997963132,36.07346863519728 +transit,128.41330185063185,36.067002209716144 +transit,128.42090247742314,36.06053529522827 +transit,128.4285018604107,36.054067891925605 +WP27,128.4361,36.0476 +transit,128.4285018604107,36.054067891925605 +transit,128.42090247742314,36.06053529522827 +transit,128.41330185063183,36.067002209716144 +transit,128.40569997963132,36.07346863519728 +transit,128.398096864016,36.07993457147967 +transit,128.3904925033802,36.086400018371215 +transit,128.38288689731817,36.092864975679774 +transit,128.37528004542406,36.099329443213115 +transit,128.36767194729202,36.105793420778916 +transit,128.36006260251605,36.11225690818482 +transit,128.3524520106901,36.118719905238386 +transit,128.344840171408,36.12518241174709 +transit,128.33722708426362,36.131644427518346 +transit,128.32961274885056,36.13810595235949 +transit,128.32199716476256,36.14456698607779 +transit,128.31438033159313,36.151027528480434 +transit,128.30676224893577,36.15748757937454 +transit,128.29914291638386,36.16394713856719 +transit,128.29152233353074,36.170406205865305 +transit,128.28390049996966,36.17686478107585 +transit,128.2762774152938,36.18332286400562 +transit,128.26865307909625,36.189780454461385 +transit,128.26102749097006,36.19623755224983 +transit,128.25340065050813,36.20269415717758 +transit,128.24577255730333,36.209150269051186 +transit,128.2381432109485,36.2156058876771 +transit,128.23051261103626,36.222061012861715 +transit,128.22288075715934,36.22851564441139 +transit,128.21524764891026,36.23496978213233 +transit,128.2076132858815,36.24142342583076 +transit,128.19997766766548,36.24787657531277 +transit,128.1923407938545,36.25432923038439 +transit,128.18470266404086,36.260781390851605 +transit,128.17706327781667,36.26723305652028 +transit,128.1694226347741,36.27368422719625 +transit,128.16178073450513,36.280134902685255 +transit,128.15413757660173,36.28658508279296 +transit,128.14649316065575,36.29303476732498 +transit,128.138847486259,36.29948395608682 +transit,128.13120055300323,36.30593264888395 +transit,128.12355236048,36.312380845521766 +transit,128.11590290828093,36.31882854580553 +transit,128.10825219599752,36.32527574954052 +transit,128.10060022322114,36.331722456531885 +transit,128.09294698954315,36.3381686665847 +transit,128.0852924945548,36.344614379504 +transit,128.0776367378473,36.35105959509473 +transit,128.06997971901177,36.35750431316175 +transit,128.06232143763918,36.36394853350985 +transit,128.0546618933205,36.37039225594376 +transit,128.04700108564668,36.37683548026814 +transit,128.03933901420845,36.38327820628757 +transit,128.03167567859657,36.389720433806545 +transit,128.02401107840168,36.396162162629494 +transit,128.01634521321435,36.402603392560785 +transit,128.00867808262512,36.409044123404676 +transit,128.00100968622436,36.41548435496542 +transit,127.99334002360247,36.42192408704714 +transit,127.98566909434969,36.42836331945388 +transit,127.97799689805622,36.43480205198965 +transit,127.97032343431219,36.44124028445836 +transit,127.96264870270765,36.44767801666387 +transit,127.95497270283258,36.454115248409934 +transit,127.94729543427684,36.46055197950025 +transit,127.93961689663028,36.46698820973845 +transit,127.93193708948264,36.47342393892809 +transit,127.92425601242357,36.479859166872636 +transit,127.91657366504269,36.486293893375496 +transit,127.9088900469295,36.49272811824 +transit,127.90120515767345,36.49916184126939 +transit,127.8935189968639,36.50559506226687 +transit,127.88583156409014,36.51202778103554 +transit,127.8781428589414,36.51845999737842 +transit,127.87045288100681,36.5248917110985 +transit,127.86276162987544,36.531322921998644 +transit,127.85506910513627,36.53775362988168 +transit,127.84737530637824,36.544183834550324 +transit,127.83968023319017,36.550613535807265 +transit,127.83198388516082,36.55704273345509 +transit,127.82428626187891,36.56347142729632 +transit,127.81658736293302,36.56989961713339 +transit,127.80888718791172,36.57632730276867 +transit,127.80118573640347,36.582754484004454 +transit,127.79348300799664,36.58918116064297 +transit,127.78577900227957,36.59560733248637 +transit,127.77807371884047,36.602032999336714 +transit,127.77036715726756,36.608458160995994 +transit,127.76265931714887,36.61488281726617 +transit,127.75495019807246,36.62130696794906 +transit,127.74723979962626,36.627730612846456 +transit,127.73952812139812,36.63415375176006 +transit,127.73181516297586,36.64057638449148 +transit,127.72410092394718,36.64699851084231 +transit,127.71638540389972,36.65342013061399 +transit,127.70866860242108,36.65984124360794 +transit,127.70095051909871,36.6662618496255 +transit,127.69323115352007,36.67268194846792 +transit,127.68551050527248,36.67910153993637 +transit,127.67778857394323,36.685520623831955 +transit,127.67006535911949,36.69193919995574 +transit,127.66234086038841,36.698357268108644 +transit,127.65461507733703,36.70477482809159 +transit,127.64688800955233,36.71119187970535 +transit,127.63915965662119,36.717608422750686 +transit,127.63143001813046,36.72402445702823 +transit,127.62369909366687,36.73043998233859 +transit,127.61596688281712,36.73685499848227 +transit,127.60823338516781,36.743269505259704 +transit,127.60049860030544,36.74968350247125 +transit,127.59276252781652,36.7560969899172 +transit,127.58502516728737,36.76250996739776 +transit,127.57728651830435,36.76892243471307 +transit,127.56954658045366,36.77533439166319 +transit,127.56180535332149,36.7817458380481 +transit,127.5540628364939,36.78815677366773 +transit,127.5463190295569,36.7945671983219 +transit,127.53857393209647,36.800977111810376 +transit,127.53082754369842,36.807386513932855 +transit,127.52307986394858,36.81379540448893 +transit,127.51533089243266,36.820203783278146 +transit,127.5075806287363,36.82661165009996 +transit,127.49982907244508,36.833019004753766 +transit,127.4920762231445,36.839425847038875 +transit,127.48432208041996,36.84583217675452 +transit,127.47656664385684,36.852237993699866 +transit,127.4688099130404,36.85864329767398 +transit,127.46105188755585,36.86504808847589 +transit,127.45329256698831,36.87145236590454 +transit,127.44553195092286,36.877856129758754 +transit,127.43777003894446,36.88425937983736 +transit,127.43000683063806,36.89066211593903 +transit,127.42224232558844,36.897064337862425 +transit,127.41447652338043,36.90346604540608 +transit,127.40670942359867,36.909867238368484 +transit,127.3989410258278,36.91626791654806 +transit,127.39117132965237,36.922668079743126 +transit,127.38340033465686,36.92906772775193 +transit,127.37562804042564,36.935466860372664 +transit,127.36785444654305,36.94186547740343 +transit,127.36007955259336,36.94826357864226 +transit,127.35230335816075,36.954661163887096 +transit,127.34452586282931,36.96105823293584 +transit,127.33674706618311,36.96745478558627 +transit,127.32896696780608,36.97385082163611 +transit,127.32118556728213,36.98024634088302 +transit,127.31340286419507,36.98664134312459 +transit,127.30561885812862,36.9930358281583 +transit,127.29783354866652,36.99942979578157 +transit,127.29004693539233,37.00582324579175 +transit,127.28225901788957,37.01221617798612 +transit,127.27446979574172,37.01860859216186 +transit,127.26667926853214,37.02500048811611 +transit,127.25888743584416,37.031391865645894 +transit,127.25109429726102,37.037782724548194 +transit,127.24329985236588,37.04417306461988 +transit,127.23550410074185,37.05056288565779 +transit,127.22770704197191,37.05695218745866 +transit,127.21990867563906,37.06334096981913 +transit,127.21210900132617,37.06972923253581 +transit,127.20430801861602,37.07611697540519 +transit,127.19650572709138,37.082504198223724 +transit,127.18870212633489,37.08889090078777 +transit,127.18089721592914,37.095277082893595 +transit,127.17309099545665,37.10166274433742 +transit,127.16528346449988,37.10804788491534 +transit,127.1574746226412,37.11443250442345 +transit,127.14966446946292,37.120816602657705 +transit,127.14185300454727,37.127200179414 +transit,127.1340402274764,37.13358323448817 +transit,127.1262261378324,37.13996576767595 +transit,127.11841073519732,37.14634777877302 +transit,127.11059401915306,37.152729267574976 +transit,127.10277598928151,37.15911023387732 +transit,127.0949566451645,37.16549067747551 +transit,127.08713598638373,37.1718705981649 +transit,127.07931401252087,37.17824999574078 +transit,127.07149072315752,37.18462886999835 +transit,127.06366611787519,37.19100722073276 +transit,127.05584019625532,37.19738504773905 +transit,127.0480129578793,37.20376235081222 +transit,127.04018440232842,37.210139129747155 +transit,127.03235452918392,37.21651538433869 +transit,127.02452333802698,37.22289111438158 +transit,127.01669082843866,37.22926631967048 +Suwon_Air_Base,127.008857,37.235641 +transit,127.00513094815463,37.241992496787965 +transit,127.00140427093532,37.24834386948789 +transit,126.99767696810498,37.2546951180531 +transit,126.99394903942637,37.26104624243692 +transit,126.99022048466219,37.26739724259265 +transit,126.98649130357501,37.27374811847358 +transit,126.98276149592735,37.280098870032944 +transit,126.97903106148158,37.28644949722402 +WP25,126.9753,37.2928 +transit,126.98154528793634,37.29973628373348 +transit,126.9877917229753,37.30667222970899 +transit,126.99403930556078,37.31360783778394 +transit,127.00028803613678,37.32054310781569 +transit,127.00653791514749,37.32747803966153 +transit,127.01278894303724,37.33441263317868 +transit,127.0190411202505,37.34134688822431 +transit,127.02529444723194,37.34828080465551 +transit,127.03154892442635,37.35521438232931 +transit,127.03780455227867,37.36214762110269 +transit,127.04406133123403,37.36908052083256 +transit,127.0503192617377,37.376013081375746 +transit,127.05657834423508,37.38294530258906 +transit,127.06283857917174,37.38987718432916 +transit,127.06909996699342,37.39680872645274 +transit,127.07536250814603,37.40373992881637 +transit,127.08162620307557,37.41067079127659 +transit,127.08789105222827,37.417601313689815 +transit,127.09415705605048,37.42453149591249 +transit,127.10042421498869,37.431461337800904 +transit,127.10669252948959,37.438390839211344 +Seoul_Air_Base,127.112962,37.44532 +transit,127.11407498046337,37.45295479173879 +transit,127.11518818720195,37.46058956310631 +transit,127.11630162032382,37.46822431409691 +transit,127.11741527993712,37.47585904470489 +transit,127.11852916615004,37.48349375492461 +transit,127.11964327907083,37.491128444750345 +transit,127.12075761880781,37.49876311417644 +transit,127.12187218546937,37.506397763197214 +transit,127.12298697916394,37.514032391806964 +WP3,127.124102,37.521667 +transit,127.12526711539714,37.529744874276616 +transit,127.12643248211599,37.5378227259795 +transit,127.12759810028365,37.54590055510202 +transit,127.12876397002731,37.553978361637625 +transit,127.12993009147425,37.5620561455797 +transit,127.13109646475178,37.57013390692162 +transit,127.13226308998733,37.578211645656786 +transit,127.1334299673084,37.5862893617786 +transit,127.13459709684253,37.59436705528044 +transit,127.13576447871735,37.602444726155696 +transit,127.13693211306057,37.61052237439777 +WP4,127.1381,37.6186 +transit,127.14364453767999,37.625276476825675 +transit,127.1491900672499,37.63195268550096 +transit,127.15473658908718,37.638628625916944 +transit,127.16028410356938,37.645304297964664 +transit,127.16583261107426,37.651979701535154 +transit,127.17138211197964,37.658654836519354 +transit,127.17693260666354,37.66532970280818 +transit,127.18248409550407,37.67200430029247 +transit,127.1880365788795,37.67867862886307 +transit,127.19359005716825,37.68535268841071 +transit,127.19914453074885,37.692026478826136 +WP5,127.2047,37.6987 +transit,127.21343162856657,37.69498506001787 +transit,127.22216238580884,37.69126947121904 +transit,127.23089227177877,37.68755323375334 +transit,127.23962128652845,37.68383634777065 +transit,127.24834943011,37.68011881342078 +transit,127.25707670257566,37.67640063085357 +transit,127.26580310397777,37.67268180021881 +transit,127.27452863436872,37.668962321666314 +transit,127.28325329380102,37.66524219534583 +transit,127.29197708232722,37.661521421407144 +WP6,127.3007,37.6578 +transit,127.29453584893454,37.651393473860075 +transit,127.28837275688147,37.64498661870998 +transit,127.28221072346766,37.63857943467867 +transit,127.27604974832009,37.63217192189511 +transit,127.26988983106587,37.62576408048816 +transit,127.2637309713322,37.61935591058667 +transit,127.2575731687464,37.6129474123194 +transit,127.25141642293593,37.60653858581509 +transit,127.24526073352834,37.6001294312024 +transit,127.23910610015128,37.59371994860995 +transit,127.23295252243254,37.587310138166316 +WP7,127.2268,37.5809 +transit,127.21638252952877,37.58155732946605 +transit,127.2059648760039,37.58221373949572 +transit,127.19554703967407,37.582869230051394 +transit,127.18512902078798,37.583523801095545 +transit,127.1747108195944,37.58417745259067 +transit,127.16429243634211,37.58483018449934 +transit,127.15387387127997,37.58548199678414 +transit,127.14345512465685,37.58613288940776 +transit,127.13303619672169,37.586782862332875 +transit,127.12261708772343,37.587431915522274 +transit,127.1121977979111,37.58808004893876 +transit,127.10177832753372,37.58872726254518 +transit,127.09135867684041,37.58937355630448 +transit,127.0809388460803,37.590018930179596 +transit,127.07051883550254,37.59066338413358 +transit,127.06009864535636,37.59130691812946 +transit,127.049678275891,37.591949532130364 +transit,127.03925772735576,37.59259122609948 +WP8,127.028837,37.593232 +transit,127.01935000915947,37.59035223573776 +transit,127.00986374945408,37.587471707613254 +transit,127.00037822094507,37.584590415763365 +transit,126.99089342369354,37.581708360324924 +transit,126.98140935776048,37.578825541434824 +transit,126.97192602320682,37.57594195922991 +transit,126.96244342009334,37.57305761384708 +transit,126.95296154848067,37.57017250542322 +transit,126.94348040842941,37.567286634095225 +WP9,126.934,37.5644 +transit,126.9239441281553,37.563741280950744 +transit,126.91388843350545,37.563081705350264 +transit,126.90383291627336,37.562421273233745 +transit,126.89377757668187,37.56175998463641 +transit,126.88372241495378,37.561097839593536 +transit,126.87366743131189,37.56043483814044 +transit,126.86361262597892,37.55977098031248 +transit,126.85355799917757,37.55910626614505 +transit,126.84350355113051,37.55844069567361 +transit,126.83344928206037,37.55777426893365 +transit,126.82339519218971,37.5571069859607 +transit,126.8133412817411,37.55643884679037 +transit,126.80328755093704,37.55576985145824 +Gimpo,126.793234,37.5551 +transit,126.78314130688592,37.55226094497491 +transit,126.77304937954926,37.54942102596066 +transit,126.76295821808608,37.54658024310982 +transit,126.75286782259226,37.54373859657502 +transit,126.74277819316359,37.540896086508845 +transit,126.73268932989569,37.53805271306393 +transit,126.72260123288407,37.535208476392924 +transit,126.71251390222407,37.532363376648476 +transit,126.70242733801095,37.529517413983264 +transit,126.69234154033975,37.52667058854996 +transit,126.68225650930546,37.523822900501294 +transit,126.67217224500286,37.52097434998996 +transit,126.66208874752661,37.5181249371687 +transit,126.65200601697127,37.515274662190244 +transit,126.64192405343123,37.51242352520736 +transit,126.63184285700075,37.50957152637284 +transit,126.62176242777396,37.50671866583945 +transit,126.61168276584482,37.503864943760014 +transit,126.6016038713072,37.50101036028733 +transit,126.59152574425481,37.49815491557424 +transit,126.58144838478123,37.495298609773606 +transit,126.57137179297986,37.49244144303827 +transit,126.56129596894404,37.4895834155211 +transit,126.55122091276692,37.486724527375024 +transit,126.54114662454151,37.48386477875292 +transit,126.53107310436073,37.48100416980772 +transit,126.5210003523173,37.47814270069233 +transit,126.51092836850385,37.475280371559734 +transit,126.50085715301286,37.47241718256288 +transit,126.49078670593667,37.469553133854745 +transit,126.48071702736748,37.466688225588314 +transit,126.47064811739735,37.4638224579166 +transit,126.46057997611821,37.4609558309926 +transit,126.45051260362189,37.45808834496938 +Incheon,126.440446,37.45522 +transit,126.42921794251579,37.45530214985653 +transit,126.41798986062939,37.45538323296906 +transit,126.40676175465964,37.455463249332205 +transit,126.39553362492536,37.455542198940634 +transit,126.38430547174536,37.45562008178912 +transit,126.37307729543852,37.45569689787249 +transit,126.36184909632365,37.45577264718565 +transit,126.35062087471961,37.45584732972356 +transit,126.33939263094526,37.455920945481296 +transit,126.32816436531947,37.45599349445393 +transit,126.31693607816108,37.456064976636675 +transit,126.305707769789,37.45613539202477 +transit,126.29447944052208,37.45620474061356 +transit,126.28325109067923,37.45627302239843 +transit,126.27202272057933,37.456340237374846 +transit,126.26079433054127,37.456406385538344 +transit,126.24956592088398,37.45647146688455 +transit,126.23833749192633,37.456535481409134 +transit,126.22710904398726,37.456598429107835 +transit,126.21588057738566,37.45666030997649 +transit,126.20465209244048,37.456721124011 +transit,126.19342358947063,37.45678087120731 +transit,126.18219506879505,37.45683955156145 +transit,126.17096653073268,37.456897165069556 +transit,126.15973797560245,37.45695371172777 +transit,126.14850940372332,37.457009191532364 +transit,126.13728081541423,37.457063604479636 +transit,126.12605221099413,37.45711695056598 +transit,126.114823590782,37.45716922978786 +transit,126.10359495509678,37.457220442141804 +transit,126.09236630425747,37.45727058762442 +transit,126.081137638583,37.45731966623236 +transit,126.06990895839236,37.45736767796238 +transit,126.05868026400455,37.45741462281129 +transit,126.04745155573853,37.45746050077597 +transit,126.03622283391331,37.45750531185339 +transit,126.02499409884786,37.45754905604056 +transit,126.01376535086118,37.45759173333458 +transit,126.00253659027227,37.457633343732624 +transit,125.99130781740013,37.45767388723192 +transit,125.98007903256375,37.457713363829775 +transit,125.96885023608216,37.457751773523576 +transit,125.95762142827436,37.45778911631078 +transit,125.94639260945938,37.45782539218889 +transit,125.93516377995621,37.45786060115551 +transit,125.9239349400839,37.4578947432083 +transit,125.91270609016144,37.457927818345 +transit,125.90147723050787,37.4579598265634 +transit,125.89024836144222,37.457990767861396 +transit,125.87901948328351,37.4580206422369 +transit,125.86779059635079,37.45804944968797 +transit,125.85656170096308,37.45807719021268 +transit,125.84533279743943,37.458103863809164 +transit,125.83410388609886,37.45812947047568 +transit,125.82287496726042,37.458154010210514 +transit,125.81164604124316,37.45817748301205 +transit,125.80041710836613,37.45819988887872 +transit,125.78918816894836,37.45822122780903 +transit,125.77795922330891,37.45824149980157 +transit,125.76673027176683,37.458260704855 +transit,125.75550131464117,37.45827884296804 +transit,125.74427235225099,37.4582959141395 +transit,125.73304338491533,37.458311918368224 +transit,125.72181441295325,37.45832685565315 +transit,125.71058543668383,37.45834072599331 +transit,125.6993564564261,37.45835352938775 +transit,125.68812747249915,37.45836526583566 +transit,125.676898485222,37.458375935336235 +transit,125.66566949491374,37.458385537888766 +transit,125.65444050189345,37.45839407349262 +transit,125.64321150648014,37.45840154214723 +transit,125.63198250899292,37.4584079438521 +transit,125.62075350975084,37.45841327860682 +transit,125.60952450907295,37.45841754641101 +transit,125.59829550727835,37.458420747264405 +transit,125.58706650468608,37.45842288116679 +transit,125.5758375016152,37.45842394811801 +transit,125.5646084983848,37.45842394811801 +transit,125.55337949531392,37.45842288116679 +transit,125.54215049272165,37.458420747264405 +transit,125.53092149092704,37.45841754641101 +transit,125.51969249024916,37.45841327860682 +transit,125.50846349100708,37.45840794385211 +transit,125.49723449351985,37.45840154214723 +transit,125.48600549810655,37.45839407349262 +transit,125.47477650508625,37.458385537888766 +transit,125.463547514778,37.458375935336235 +transit,125.45231852750085,37.45836526583566 +transit,125.4410895435739,37.45835352938775 +transit,125.42986056331617,37.45834072599331 +transit,125.41863158704673,37.45832685565315 +transit,125.40740261508466,37.45831191836822 +transit,125.39617364774901,37.4582959141395 +transit,125.38494468535883,37.45827884296804 +transit,125.37371572823317,37.458260704855 +transit,125.36248677669109,37.458241499801574 +transit,125.35125783105164,37.45822122780903 +transit,125.34002889163386,37.45819988887872 +transit,125.32879995875683,37.45817748301205 +transit,125.31757103273958,37.458154010210514 +transit,125.30634211390114,37.45812947047568 +transit,125.29511320256057,37.458103863809164 +transit,125.28388429903691,37.45807719021267 +transit,125.27265540364921,37.45804944968798 +transit,125.26142651671648,37.45802064223691 +transit,125.25019763855778,37.457990767861396 +transit,125.23896876949213,37.4579598265634 +transit,125.22773990983856,37.457927818345 +transit,125.2165110599161,37.4578947432083 +transit,125.20528222004378,37.45786060115551 +transit,125.19405339054062,37.45782539218889 +transit,125.18282457172562,37.45778911631078 +transit,125.17159576391784,37.457751773523576 +transit,125.16036696743625,37.457713363829775 +transit,125.14913818259987,37.45767388723192 +transit,125.13790940972773,37.45763334373262 +transit,125.12668064913882,37.45759173333458 +transit,125.11545190115214,37.45754905604056 +transit,125.10422316608668,37.45750531185339 +transit,125.09299444426146,37.45746050077597 +transit,125.08176573599545,37.45741462281129 +transit,125.07053704160764,37.45736767796238 +transit,125.059308361417,37.45731966623236 +transit,125.04807969574253,37.45727058762442 +transit,125.03685104490322,37.45722044214181 +transit,125.02562240921799,37.45716922978786 +transit,125.01439378900587,37.457116950565975 +transit,125.00316518458577,37.457063604479636 +transit,124.99193659627667,37.45700919153236 +transit,124.98070802439754,37.45695371172777 +transit,124.96947946926731,37.456897165069556 +transit,124.95825093120494,37.45683955156145 +transit,124.94702241052937,37.45678087120731 +transit,124.93579390755951,37.456721124011 +transit,124.92456542261434,37.45666030997649 +transit,124.91333695601274,37.456598429107835 +transit,124.90210850807367,37.456535481409134 +transit,124.89088007911602,37.45647146688455 +transit,124.87965166945871,37.456406385538344 +transit,124.86842327942067,37.456340237374846 +transit,124.85719490932077,37.45627302239843 +transit,124.84596655947792,37.456204740613565 +transit,124.834738230211,37.45613539202477 +transit,124.82350992183892,37.456064976636675 +transit,124.81228163468053,37.45599349445393 +transit,124.80105336905474,37.455920945481296 +transit,124.78982512528039,37.45584732972357 +transit,124.77859690367634,37.45577264718565 +transit,124.76736870456148,37.45569689787249 +transit,124.75614052825463,37.455620081789114 +transit,124.74491237507463,37.455542198940634 +transit,124.73368424534036,37.455463249332205 +transit,124.7224561393706,37.45538323296906 +transit,124.7112280574842,37.45530214985653 +WP12,124.7,37.45522 +transit,124.7,37.446261186348565 +transit,124.7,37.43730235908327 +transit,124.7,37.42834351820521 +transit,124.7,37.419384663715554 +transit,124.7,37.410425795615396 +transit,124.7,37.40146691390587 +transit,124.7,37.3925080185881 +transit,124.7,37.383549109663235 +transit,124.7,37.37459018713238 +transit,124.7,37.36563125099668 +transit,124.7,37.356672301257255 +transit,124.7,37.34771333791525 +transit,124.7,37.338754360971805 +transit,124.7,37.32979537042805 +transit,124.7,37.32083636628513 +transit,124.7,37.31187734854418 +transit,124.7,37.30291831720634 +transit,124.7,37.29395927227276 +transit,124.7,37.28500021374457 +transit,124.7,37.27604114162291 +transit,124.7,37.26708205590896 +transit,124.7,37.25812295660385 +transit,124.7,37.249163843708715 +transit,124.7,37.240204717224714 +transit,124.7,37.231245577153004 +transit,124.7,37.22228642349475 +transit,124.7,37.21332725625107 +transit,124.7,37.204368075423154 +transit,124.7,37.195408881012156 +transit,124.7,37.18644967301921 +transit,124.7,37.17749045144549 +transit,124.7,37.16853121629218 +transit,124.7,37.15957196756041 +transit,124.7,37.15061270525136 +transit,124.7,37.14165342936619 +transit,124.7,37.132694139906064 +transit,124.7,37.12373483687216 +transit,124.7,37.11477552026563 +transit,124.7,37.105816190087666 +transit,124.7,37.09685684633942 +transit,124.7,37.087897489022076 +transit,124.7,37.07893811813682 +transit,124.7,37.0699787336848 +transit,124.7,37.06101933566721 +transit,124.7,37.052059924085235 +transit,124.7,37.04310049894004 +transit,124.7,37.03414106023282 +transit,124.7,37.02518160796475 +transit,124.7,37.016222142137 +transit,124.7,37.007262662750776 +transit,124.7,36.99830316980727 +transit,124.7,36.98934366330766 +transit,124.7,36.980384143253126 +transit,124.7,36.971424609644856 +transit,124.7,36.96246506248407 +transit,124.7,36.95350550177193 +transit,124.7,36.94454592750965 +transit,124.7,36.935586339698425 +transit,124.7,36.926626738339436 +transit,124.7,36.9176671234339 +transit,124.7,36.90870749498301 +transit,124.7,36.899747852987964 +transit,124.7,36.89078819744997 +transit,124.7,36.881828528370235 +transit,124.7,36.872868845749956 +transit,124.7,36.86390914959035 +transit,124.7,36.85494943989261 +transit,124.7,36.84598971665795 +transit,124.7,36.83702997988758 +transit,124.7,36.828070229582714 +transit,124.7,36.819110465744586 +transit,124.7,36.81015068837438 +transit,124.7,36.80119089747332 +transit,124.7,36.79223109304264 +transit,124.7,36.78327127508353 +transit,124.7,36.77431144359723 +transit,124.7,36.76535159858497 +transit,124.7,36.75639174004794 +transit,124.7,36.74743186798739 +transit,124.7,36.73847198240453 +transit,124.7,36.72951208330061 +transit,124.7,36.72055217067684 +transit,124.7,36.71159224453446 +transit,124.7,36.70263230487467 +transit,124.7,36.693672351698744 +transit,124.7,36.68471238500789 +transit,124.7,36.675752404803355 +transit,124.7,36.66679241108636 +transit,124.7,36.65783240385816 +transit,124.7,36.64887238311998 +transit,124.7,36.63991234887306 +transit,124.7,36.63095230111865 +transit,124.7,36.62199223985799 +transit,124.7,36.61303216509232 +transit,124.7,36.60407207682289 +transit,124.7,36.59511197505095 +transit,124.7,36.58615185977773 +transit,124.7,36.57719173100449 +transit,124.7,36.568231588732495 +transit,124.7,36.55927143296297 +transit,124.7,36.55031126369719 +transit,124.7,36.5413510809364 +transit,124.7,36.53239088468187 +transit,124.7,36.52343067493482 +transit,124.7,36.51447045169656 +transit,124.7,36.5055102149683 +transit,124.7,36.49654996475134 +transit,124.7,36.48758970104692 +transit,124.7,36.47862942385631 +transit,124.7,36.46966913318079 +transit,124.7,36.46070882902159 +transit,124.7,36.45174851138001 +transit,124.7,36.442788180257324 +transit,124.7,36.43382783565477 +transit,124.7,36.42486747757365 +transit,124.7,36.41590710601522 +transit,124.7,36.406946720980756 +transit,124.7,36.39798632247154 +transit,124.7,36.389025910488854 +transit,124.7,36.38006548503396 +transit,124.7,36.371105046108156 +transit,124.7,36.362144593712706 +transit,124.7,36.3531841278489 +transit,124.7,36.344223648518025 +transit,124.7,36.33526315572137 +transit,124.7,36.32630264946022 +transit,124.7,36.317342129735835 +transit,124.7,36.30838159654954 +transit,124.7,36.299421049902605 +transit,124.7,36.29046048979634 +transit,124.7,36.28149991623202 +transit,124.7,36.27253932921095 +transit,124.7,36.26357872873442 +transit,124.7,36.25461811480373 +transit,124.7,36.24565748742018 +transit,124.7,36.23669684658507 +transit,124.7,36.22773619229969 +transit,124.7,36.218775524565366 +transit,124.7,36.20981484338337 +transit,124.7,36.20085414875503 +transit,124.7,36.191893440681646 +transit,124.7,36.18293271916453 +transit,124.7,36.173971984204975 +transit,124.7,36.165011235804315 +transit,124.7,36.156050473963845 +transit,124.7,36.14708969868489 +transit,124.7,36.13812890996875 +transit,124.7,36.12916810781674 +transit,124.7,36.12020729223019 +transit,124.7,36.11124646321043 +transit,124.7,36.10228562075874 +transit,124.7,36.09332476487647 +transit,124.7,36.08436389556494 +transit,124.7,36.07540301282546 +transit,124.7,36.06644211665937 +transit,124.7,36.057481207067994 +transit,124.7,36.04852028405265 +transit,124.7,36.03955934761468 +transit,124.7,36.03059839775539 +transit,124.7,36.02163743447614 +transit,124.7,36.012676457778255 +transit,124.7,36.003715467663056 +transit,124.7,35.99475446413189 +transit,124.7,35.98579344718609 +transit,124.7,35.976832416827 +transit,124.7,35.96787137305596 +transit,124.7,35.9589103158743 +transit,124.7,35.94994924528336 +transit,124.7,35.9409881612845 +transit,124.7,35.93202706387906 +transit,124.7,35.923065953068374 +transit,124.7,35.9141048288538 +transit,124.7,35.90514369123669 +transit,124.7,35.89618254021839 +transit,124.7,35.88722137580024 +transit,124.7,35.8782601979836 +transit,124.7,35.86929900676983 +transit,124.7,35.86033780216028 +transit,124.7,35.85137658415631 +transit,124.7,35.84241535275928 +transit,124.7,35.833454107970546 +transit,124.7,35.82449284979147 +transit,124.7,35.8155315782234 +transit,124.7,35.80657029326772 +transit,124.7,35.79760899492579 +transit,124.7,35.78864768319896 +transit,124.7,35.77968635808861 +transit,124.7,35.770725019596114 +transit,124.7,35.76176366772283 +transit,124.7,35.75280230247014 +transit,124.7,35.74384092383941 +transit,124.7,35.734879531832 +transit,124.7,35.72591812644932 +transit,124.7,35.71695670769272 +transit,124.7,35.70799527556357 +transit,124.7,35.699033830063286 +transit,124.7,35.6900723711932 +transit,124.7,35.68111089895474 +transit,124.7,35.67214941334926 +transit,124.7,35.66318791437815 +transit,124.7,35.6542264020428 +transit,124.7,35.6452648763446 +transit,124.7,35.63630333728493 +transit,124.7,35.62734178486517 +transit,124.7,35.61838021908674 +transit,124.7,35.60941863995101 +transit,124.7,35.600457047459386 +transit,124.7,35.59149544161325 +transit,124.7,35.58253382241401 +transit,124.7,35.57357218986305 +transit,124.7,35.56461054396177 +transit,124.7,35.555648884711594 +transit,124.7,35.5466872121139 +transit,124.7,35.53772552617009 +transit,124.7,35.528763826881594 +transit,124.7,35.51980211424979 +transit,124.7,35.51084038827609 +transit,124.7,35.50187864896191 +transit,124.7,35.49291689630865 +transit,124.7,35.483955130317725 +transit,124.7,35.47499335099055 +transit,124.7,35.46603155832854 +transit,124.7,35.4570697523331 +transit,124.7,35.448107933005666 +transit,124.7,35.43914610034762 +transit,124.7,35.43018425436041 +transit,124.7,35.421222395045454 +transit,124.7,35.41226052240416 +transit,124.7,35.40329863643796 +transit,124.7,35.39433673714828 +transit,124.7,35.385374824536534 +transit,124.7,35.37641289860415 +transit,124.7,35.36745095935257 +transit,124.7,35.3584890067832 +transit,124.7,35.349527040897485 +transit,124.7,35.34056506169687 +transit,124.7,35.33160306918277 +transit,124.7,35.32264106335661 +transit,124.7,35.313679044219846 +transit,124.7,35.304717011773924 +transit,124.7,35.29575496602024 +transit,124.7,35.28679290696027 +transit,124.7,35.27783083459545 +transit,124.7,35.26886874892721 +transit,124.7,35.259906649957 +transit,124.7,35.25094453768627 +transit,124.7,35.24198241211646 +transit,124.7,35.23302027324902 +transit,124.7,35.22405812108539 +transit,124.7,35.21509595562703 +transit,124.7,35.20613377687539 +transit,124.7,35.19717158483192 +transit,124.7,35.18820937949809 +transit,124.7,35.17924716087532 +transit,124.7,35.1702849289651 +transit,124.7,35.161322683768866 +transit,124.7,35.152360425288094 +transit,124.7,35.143398153524245 +transit,124.7,35.13443586847877 +transit,124.7,35.12547357015313 +transit,124.7,35.11651125854879 +transit,124.7,35.10754893366723 +transit,124.7,35.09858659550991 +transit,124.7,35.089624244078294 +transit,124.7,35.08066187937385 +transit,124.7,35.07169950139806 +transit,124.7,35.06273711015239 +transit,124.7,35.053774705638304 +transit,124.7,35.04481228785729 +transit,124.7,35.035849856810835 +transit,124.7,35.026887412500386 +transit,124.7,35.017924954927445 +transit,124.7,35.00896248409349 +WP3,124.7,35.0 +transit,124.7,35.00896248409349 +transit,124.7,35.017924954927445 +transit,124.7,35.026887412500386 +transit,124.7,35.035849856810835 +transit,124.7,35.04481228785729 +transit,124.7,35.053774705638304 +transit,124.7,35.06273711015238 +transit,124.7,35.07169950139806 +transit,124.7,35.08066187937385 +transit,124.7,35.0896242440783 +transit,124.7,35.09858659550991 +transit,124.7,35.10754893366723 +transit,124.7,35.11651125854879 +transit,124.7,35.125473570153126 +transit,124.7,35.13443586847877 +transit,124.7,35.143398153524245 +transit,124.7,35.152360425288094 +transit,124.7,35.161322683768866 +transit,124.7,35.170284928965096 +transit,124.7,35.17924716087532 +transit,124.7,35.18820937949809 +transit,124.7,35.19717158483192 +transit,124.7,35.20613377687539 +transit,124.7,35.215095955627035 +transit,124.7,35.224058121085385 +transit,124.7,35.23302027324901 +transit,124.7,35.24198241211646 +transit,124.7,35.25094453768627 +transit,124.7,35.25990664995701 +transit,124.7,35.26886874892721 +transit,124.7,35.277830834595456 +transit,124.7,35.28679290696028 +transit,124.7,35.29575496602025 +transit,124.7,35.30471701177392 +transit,124.7,35.31367904421986 +transit,124.7,35.32264106335662 +transit,124.7,35.33160306918277 +transit,124.7,35.340565061696864 +transit,124.7,35.34952704089749 +transit,124.7,35.3584890067832 +transit,124.7,35.36745095935257 +transit,124.7,35.376412898604144 +transit,124.7,35.385374824536534 +transit,124.7,35.39433673714827 +transit,124.7,35.40329863643796 +transit,124.7,35.41226052240416 +transit,124.7,35.421222395045454 +transit,124.7,35.43018425436042 +transit,124.7,35.43914610034762 +transit,124.7,35.448107933005666 +transit,124.7,35.45706975233311 +transit,124.7,35.466031558328545 +transit,124.7,35.47499335099055 +transit,124.7,35.483955130317725 +transit,124.7,35.49291689630864 +transit,124.7,35.50187864896191 +transit,124.7,35.51084038827609 +transit,124.7,35.51980211424979 +transit,124.7,35.52876382688159 +transit,124.7,35.5377255261701 +transit,124.7,35.5466872121139 +transit,124.7,35.55564888471159 +transit,124.7,35.56461054396177 +transit,124.7,35.57357218986304 +transit,124.7,35.58253382241401 +transit,124.7,35.59149544161325 +transit,124.7,35.60045704745938 +transit,124.7,35.60941863995101 +transit,124.7,35.61838021908673 +transit,124.7,35.62734178486517 +transit,124.7,35.63630333728493 +transit,124.7,35.6452648763446 +transit,124.7,35.6542264020428 +transit,124.7,35.66318791437815 +transit,124.7,35.67214941334926 +transit,124.7,35.681110898954735 +transit,124.7,35.6900723711932 +transit,124.7,35.69903383006328 +transit,124.7,35.70799527556357 +transit,124.7,35.71695670769272 +transit,124.7,35.72591812644932 +transit,124.7,35.734879531832 +transit,124.7,35.74384092383941 +transit,124.7,35.75280230247014 +transit,124.7,35.76176366772283 +transit,124.7,35.770725019596114 +transit,124.7,35.77968635808862 +transit,124.7,35.78864768319896 +transit,124.7,35.79760899492579 +transit,124.7,35.806570293267725 +transit,124.7,35.8155315782234 +transit,124.7,35.82449284979147 +transit,124.7,35.833454107970546 +transit,124.7,35.84241535275928 +transit,124.7,35.85137658415631 +transit,124.7,35.86033780216028 +transit,124.7,35.86929900676983 +transit,124.7,35.8782601979836 +transit,124.7,35.887221375800245 +transit,124.7,35.89618254021839 +transit,124.7,35.90514369123669 +transit,124.7,35.91410482885381 +transit,124.7,35.923065953068374 +transit,124.7,35.93202706387906 +transit,124.7,35.9409881612845 +transit,124.7,35.94994924528336 +transit,124.7,35.9589103158743 +transit,124.7,35.96787137305596 +transit,124.7,35.976832416827 +transit,124.7,35.98579344718609 +transit,124.7,35.99475446413188 +transit,124.7,36.003715467663056 +transit,124.7,36.01267645777825 +transit,124.7,36.02163743447614 +transit,124.7,36.03059839775539 +transit,124.7,36.03955934761467 +transit,124.7,36.04852028405264 +transit,124.7,36.057481207067994 +transit,124.7,36.06644211665938 +transit,124.7,36.07540301282546 +transit,124.7,36.08436389556495 +transit,124.7,36.09332476487647 +transit,124.7,36.102285620758735 +transit,124.7,36.11124646321043 +transit,124.7,36.12020729223019 +transit,124.7,36.12916810781674 +transit,124.7,36.13812890996875 +transit,124.7,36.14708969868489 +transit,124.7,36.156050473963845 +transit,124.7,36.165011235804315 +transit,124.7,36.17397198420498 +transit,124.7,36.18293271916453 +transit,124.7,36.19189344068165 +transit,124.7,36.200854148755035 +transit,124.7,36.20981484338337 +transit,124.7,36.21877552456536 +transit,124.7,36.227736192299695 +transit,124.7,36.23669684658507 +transit,124.7,36.24565748742018 +transit,124.7,36.25461811480373 +transit,124.7,36.26357872873443 +transit,124.7,36.27253932921095 +transit,124.7,36.281499916232015 +transit,124.7,36.29046048979634 +transit,124.7,36.29942104990261 +transit,124.7,36.30838159654954 +transit,124.7,36.31734212973584 +transit,124.7,36.3263026494602 +transit,124.7,36.33526315572137 +transit,124.7,36.34422364851803 +transit,124.7,36.3531841278489 +transit,124.7,36.36214459371271 +transit,124.7,36.371105046108156 +transit,124.7,36.38006548503396 +transit,124.7,36.38902591048885 +transit,124.7,36.39798632247154 +transit,124.7,36.406946720980756 +transit,124.7,36.41590710601522 +transit,124.7,36.42486747757365 +transit,124.7,36.433827835654775 +transit,124.7,36.44278818025732 +transit,124.7,36.45174851138002 +transit,124.7,36.4607088290216 +transit,124.7,36.46966913318078 +transit,124.7,36.47862942385631 +transit,124.7,36.48758970104692 +transit,124.7,36.496549964751345 +transit,124.7,36.50551021496831 +transit,124.7,36.51447045169656 +transit,124.7,36.523430674934836 +transit,124.7,36.53239088468187 +transit,124.7,36.5413510809364 +transit,124.7,36.55031126369719 +transit,124.7,36.559271432962966 +transit,124.7,36.56823158873249 +transit,124.7,36.5771917310045 +transit,124.7,36.58615185977772 +transit,124.7,36.59511197505095 +transit,124.7,36.60407207682289 +transit,124.7,36.61303216509232 +transit,124.7,36.62199223985798 +transit,124.7,36.63095230111865 +transit,124.7,36.63991234887306 +transit,124.7,36.64887238311998 +transit,124.7,36.65783240385816 +transit,124.7,36.666792411086355 +transit,124.7,36.675752404803355 +transit,124.7,36.68471238500789 +transit,124.7,36.69367235169875 +transit,124.7,36.70263230487467 +transit,124.7,36.71159224453445 +transit,124.7,36.72055217067685 +transit,124.7,36.72951208330062 +transit,124.7,36.73847198240453 +transit,124.7,36.74743186798739 +transit,124.7,36.75639174004794 +transit,124.7,36.765351598584964 +transit,124.7,36.774311443597234 +transit,124.7,36.78327127508353 +transit,124.7,36.79223109304264 +transit,124.7,36.80119089747332 +transit,124.7,36.81015068837438 +transit,124.7,36.81911046574458 +transit,124.7,36.82807022958272 +transit,124.7,36.83702997988758 +transit,124.7,36.84598971665795 +transit,124.7,36.8549494398926 +transit,124.7,36.86390914959034 +transit,124.7,36.872868845749956 +transit,124.7,36.881828528370235 +transit,124.7,36.89078819744997 +transit,124.7,36.899747852987964 +transit,124.7,36.90870749498301 +transit,124.7,36.9176671234339 +transit,124.7,36.92662673833944 +transit,124.7,36.935586339698425 +transit,124.7,36.94454592750965 +transit,124.7,36.95350550177193 +transit,124.7,36.96246506248406 +transit,124.7,36.971424609644856 +transit,124.7,36.980384143253126 +transit,124.7,36.98934366330766 +transit,124.7,36.998303169807265 +transit,124.7,37.007262662750776 +transit,124.7,37.01622214213701 +transit,124.7,37.02518160796475 +transit,124.7,37.03414106023281 +transit,124.7,37.04310049894004 +transit,124.7,37.052059924085235 +transit,124.7,37.06101933566722 +transit,124.7,37.0699787336848 +transit,124.7,37.07893811813681 +transit,124.7,37.08789748902208 +transit,124.7,37.09685684633942 +transit,124.7,37.105816190087666 +transit,124.7,37.11477552026564 +transit,124.7,37.12373483687216 +transit,124.7,37.132694139906064 +transit,124.7,37.14165342936619 +transit,124.7,37.150612705251355 +transit,124.7,37.15957196756041 +transit,124.7,37.16853121629218 +transit,124.7,37.1774904514455 +transit,124.7,37.18644967301921 +transit,124.7,37.19540888101215 +transit,124.7,37.20436807542316 +transit,124.7,37.21332725625107 +transit,124.7,37.22228642349475 +transit,124.7,37.23124557715301 +transit,124.7,37.24020471722471 +transit,124.7,37.249163843708715 +transit,124.7,37.25812295660384 +transit,124.7,37.26708205590896 +transit,124.7,37.27604114162291 +transit,124.7,37.28500021374457 +transit,124.7,37.29395927227276 +transit,124.7,37.302918317206334 +transit,124.7,37.31187734854418 +transit,124.7,37.32083636628513 +transit,124.7,37.32979537042806 +transit,124.7,37.33875436097181 +transit,124.7,37.34771333791525 +transit,124.7,37.35667230125725 +transit,124.7,37.36563125099668 +transit,124.7,37.37459018713238 +transit,124.7,37.38354910966323 +transit,124.7,37.39250801858811 +transit,124.7,37.40146691390587 +transit,124.7,37.410425795615396 +transit,124.7,37.41938466371556 +transit,124.7,37.42834351820521 +transit,124.7,37.43730235908326 +transit,124.7,37.44626118634857 +WP12,124.7,37.45522 +transit,124.7112280574842,37.45530214985653 +transit,124.7224561393706,37.45538323296906 +transit,124.73368424534036,37.455463249332205 +transit,124.74491237507463,37.455542198940634 +transit,124.75614052825463,37.45562008178912 +transit,124.76736870456148,37.45569689787249 +transit,124.77859690367634,37.45577264718565 +transit,124.78982512528039,37.45584732972356 +transit,124.80105336905474,37.455920945481296 +transit,124.81228163468053,37.45599349445393 +transit,124.82350992183892,37.456064976636675 +transit,124.834738230211,37.45613539202477 +transit,124.84596655947792,37.45620474061356 +transit,124.85719490932077,37.45627302239843 +transit,124.86842327942067,37.456340237374846 +transit,124.87965166945872,37.456406385538344 +transit,124.89088007911602,37.45647146688455 +transit,124.90210850807367,37.456535481409134 +transit,124.91333695601274,37.456598429107835 +transit,124.92456542261434,37.45666030997649 +transit,124.93579390755951,37.456721124011 +transit,124.94702241052937,37.45678087120731 +transit,124.95825093120494,37.45683955156145 +transit,124.96947946926731,37.456897165069556 +transit,124.98070802439754,37.45695371172777 +transit,124.99193659627667,37.457009191532364 +transit,125.00316518458577,37.457063604479636 +transit,125.01439378900587,37.45711695056598 +transit,125.025622409218,37.45716922978786 +transit,125.03685104490322,37.457220442141804 +transit,125.04807969574253,37.45727058762442 +transit,125.059308361417,37.45731966623236 +transit,125.07053704160764,37.45736767796238 +transit,125.08176573599545,37.45741462281129 +transit,125.09299444426146,37.45746050077597 +transit,125.10422316608668,37.45750531185339 +transit,125.11545190115214,37.45754905604056 +transit,125.12668064913882,37.45759173333458 +transit,125.13790940972773,37.457633343732624 +transit,125.14913818259987,37.45767388723192 +transit,125.16036696743625,37.457713363829775 +transit,125.17159576391784,37.457751773523576 +transit,125.18282457172563,37.45778911631078 +transit,125.19405339054062,37.45782539218889 +transit,125.20528222004378,37.45786060115551 +transit,125.2165110599161,37.4578947432083 +transit,125.22773990983856,37.457927818345 +transit,125.23896876949213,37.4579598265634 +transit,125.25019763855778,37.457990767861396 +transit,125.26142651671648,37.4580206422369 +transit,125.27265540364921,37.45804944968797 +transit,125.28388429903691,37.45807719021268 +transit,125.29511320256057,37.458103863809164 +transit,125.30634211390114,37.45812947047568 +transit,125.31757103273958,37.458154010210514 +transit,125.32879995875683,37.45817748301205 +transit,125.34002889163386,37.45819988887872 +transit,125.35125783105164,37.45822122780903 +transit,125.36248677669109,37.45824149980157 +transit,125.37371572823317,37.458260704855 +transit,125.38494468535883,37.45827884296804 +transit,125.39617364774901,37.4582959141395 +transit,125.40740261508466,37.458311918368224 +transit,125.41863158704675,37.45832685565315 +transit,125.42986056331617,37.45834072599331 +transit,125.4410895435739,37.45835352938775 +transit,125.45231852750085,37.45836526583566 +transit,125.463547514778,37.458375935336235 +transit,125.47477650508625,37.458385537888766 +transit,125.48600549810655,37.45839407349262 +transit,125.49723449351985,37.45840154214723 +transit,125.50846349100708,37.4584079438521 +transit,125.51969249024916,37.45841327860682 +transit,125.53092149092704,37.45841754641101 +transit,125.54215049272165,37.458420747264405 +transit,125.55337949531392,37.45842288116679 +transit,125.5646084983848,37.45842394811801 +transit,125.5758375016152,37.45842394811801 +transit,125.58706650468608,37.45842288116679 +transit,125.59829550727835,37.458420747264405 +transit,125.60952450907295,37.45841754641101 +transit,125.62075350975084,37.45841327860682 +transit,125.63198250899292,37.45840794385211 +transit,125.64321150648014,37.45840154214723 +transit,125.65444050189345,37.45839407349262 +transit,125.66566949491374,37.458385537888766 +transit,125.676898485222,37.458375935336235 +transit,125.68812747249915,37.45836526583566 +transit,125.6993564564261,37.45835352938775 +transit,125.71058543668383,37.45834072599331 +transit,125.72181441295326,37.45832685565315 +transit,125.73304338491533,37.45831191836822 +transit,125.74427235225099,37.4582959141395 +transit,125.75550131464117,37.45827884296804 +transit,125.76673027176683,37.458260704855 +transit,125.77795922330891,37.458241499801574 +transit,125.78918816894836,37.45822122780903 +transit,125.80041710836613,37.45819988887872 +transit,125.81164604124316,37.45817748301205 +transit,125.82287496726042,37.458154010210514 +transit,125.83410388609886,37.45812947047568 +transit,125.84533279743943,37.458103863809164 +transit,125.85656170096308,37.45807719021267 +transit,125.86779059635079,37.45804944968798 +transit,125.87901948328351,37.45802064223691 +transit,125.89024836144222,37.457990767861396 +transit,125.90147723050787,37.4579598265634 +transit,125.91270609016144,37.457927818345 +transit,125.9239349400839,37.4578947432083 +transit,125.93516377995621,37.45786060115551 +transit,125.94639260945938,37.45782539218889 +transit,125.95762142827438,37.45778911631078 +transit,125.96885023608216,37.457751773523576 +transit,125.98007903256375,37.457713363829775 +transit,125.99130781740013,37.45767388723192 +transit,126.00253659027227,37.45763334373262 +transit,126.01376535086118,37.45759173333458 +transit,126.02499409884786,37.45754905604056 +transit,126.03622283391331,37.45750531185339 +transit,126.04745155573853,37.45746050077597 +transit,126.05868026400455,37.45741462281129 +transit,126.06990895839236,37.45736767796238 +transit,126.081137638583,37.45731966623236 +transit,126.09236630425747,37.45727058762442 +transit,126.10359495509678,37.45722044214181 +transit,126.11482359078201,37.45716922978786 +transit,126.12605221099413,37.457116950565975 +transit,126.13728081541423,37.457063604479636 +transit,126.14850940372332,37.45700919153236 +transit,126.15973797560245,37.45695371172777 +transit,126.17096653073268,37.456897165069556 +transit,126.18219506879505,37.45683955156145 +transit,126.19342358947063,37.45678087120731 +transit,126.20465209244048,37.456721124011 +transit,126.21588057738566,37.45666030997649 +transit,126.22710904398726,37.456598429107835 +transit,126.23833749192633,37.456535481409134 +transit,126.24956592088398,37.45647146688455 +transit,126.26079433054129,37.456406385538344 +transit,126.27202272057933,37.456340237374846 +transit,126.28325109067923,37.45627302239843 +transit,126.29447944052208,37.456204740613565 +transit,126.305707769789,37.45613539202477 +transit,126.31693607816108,37.456064976636675 +transit,126.32816436531947,37.45599349445393 +transit,126.33939263094526,37.455920945481296 +transit,126.35062087471961,37.45584732972357 +transit,126.36184909632365,37.45577264718565 +transit,126.37307729543852,37.45569689787249 +transit,126.38430547174536,37.455620081789114 +transit,126.39553362492536,37.455542198940634 +transit,126.40676175465964,37.455463249332205 +transit,126.41798986062939,37.45538323296906 +transit,126.42921794251579,37.45530214985653 +Incheon,126.440446,37.45522 +transit,126.45051260362189,37.458088344969404 +transit,126.46057997611821,37.46095583099262 +transit,126.47064811739735,37.463822457916606 +transit,126.48071702736749,37.46668822558833 +transit,126.49078670593667,37.46955313385475 +transit,126.50085715301287,37.47241718256289 +transit,126.51092836850387,37.47528037155975 +transit,126.5210003523173,37.478142700692345 +transit,126.53107310436073,37.481004169807726 +transit,126.54114662454153,37.48386477875294 +transit,126.55122091276691,37.48672452737504 +transit,126.56129596894404,37.489583415521125 +transit,126.57137179297986,37.492441443038274 +transit,126.58144838478123,37.49529860977361 +transit,126.59152574425481,37.49815491557426 +transit,126.6016038713072,37.501010360287346 +transit,126.61168276584482,37.50386494376002 +transit,126.62176242777396,37.506718665839465 +transit,126.63184285700075,37.509571526372845 +transit,126.64192405343123,37.512423525207375 +transit,126.65200601697127,37.51527466219026 +transit,126.66208874752661,37.51812493716871 +transit,126.67217224500286,37.52097434998998 +transit,126.68225650930546,37.52382290050131 +transit,126.69234154033975,37.52667058854998 +transit,126.70242733801096,37.52951741398328 +transit,126.71251390222407,37.53236337664849 +transit,126.72260123288407,37.53520847639294 +transit,126.73268932989569,37.53805271306395 +transit,126.74277819316359,37.54089608650886 +transit,126.75286782259226,37.54373859657503 +transit,126.76295821808608,37.546580243109844 +transit,126.77304937954928,37.54942102596067 +transit,126.78314130688592,37.55226094497492 +Gimpo,126.793234,37.5551 +transit,126.80328755093704,37.55576985145824 +transit,126.8133412817411,37.556438846790364 +transit,126.82339519218971,37.5571069859607 +transit,126.83344928206037,37.55777426893365 +transit,126.84350355113051,37.5584406956736 +transit,126.85355799917757,37.55910626614505 +transit,126.86361262597892,37.55977098031248 +transit,126.87366743131189,37.56043483814044 +transit,126.88372241495378,37.56109783959354 +transit,126.89377757668187,37.56175998463641 +transit,126.90383291627336,37.562421273233745 +transit,126.91388843350545,37.563081705350264 +transit,126.9239441281553,37.563741280950744 +WP9,126.934,37.5644 +transit,126.94348040842942,37.567286634095225 +transit,126.95296154848067,37.570172505423216 +transit,126.96244342009334,37.57305761384708 +transit,126.97192602320682,37.57594195922991 +transit,126.9814093577605,37.57882554143482 +transit,126.99089342369354,37.581708360324924 +transit,127.00037822094507,37.584590415763365 +transit,127.0098637494541,37.587471707613254 +transit,127.01935000915948,37.59035223573776 +WP8,127.028837,37.593232 +transit,127.03925772735576,37.59259122609948 +transit,127.049678275891,37.591949532130364 +transit,127.06009864535636,37.59130691812946 +transit,127.07051883550254,37.59066338413357 +transit,127.0809388460803,37.5900189301796 +transit,127.09135867684041,37.58937355630448 +transit,127.10177832753372,37.58872726254518 +transit,127.1121977979111,37.58808004893876 +transit,127.12261708772343,37.587431915522274 +transit,127.13303619672169,37.586782862332875 +transit,127.14345512465685,37.58613288940776 +transit,127.15387387127997,37.58548199678413 +transit,127.16429243634211,37.58483018449934 +transit,127.1747108195944,37.58417745259068 +transit,127.18512902078798,37.583523801095545 +transit,127.19554703967407,37.5828692300514 +transit,127.2059648760039,37.58221373949572 +transit,127.21638252952877,37.58155732946605 +WP7,127.2268,37.5809 +transit,127.23295252243253,37.58731013816631 +transit,127.23910610015128,37.59371994860996 +transit,127.24526073352834,37.6001294312024 +transit,127.25141642293593,37.60653858581509 +transit,127.2575731687464,37.6129474123194 +transit,127.26373097133218,37.61935591058666 +transit,127.26988983106587,37.62576408048816 +transit,127.27604974832009,37.63217192189511 +transit,127.28221072346766,37.63857943467867 +transit,127.28837275688147,37.64498661870998 +transit,127.29453584893454,37.651393473860075 +WP6,127.3007,37.6578 +transit,127.29197708232722,37.661521421407144 +transit,127.28325329380102,37.66524219534583 +transit,127.27452863436872,37.668962321666314 +transit,127.26580310397777,37.67268180021882 +transit,127.25707670257566,37.67640063085358 +transit,127.24834943011,37.68011881342078 +transit,127.23962128652843,37.68383634777065 +transit,127.23089227177876,37.68755323375334 +transit,127.22216238580883,37.691269471219044 +transit,127.21343162856657,37.69498506001788 +WP5,127.2047,37.6987 +transit,127.19914453074887,37.692026478826136 +transit,127.19359005716825,37.68535268841072 +transit,127.1880365788795,37.67867862886307 +transit,127.18248409550407,37.67200430029248 +transit,127.17693260666354,37.66532970280817 +transit,127.17138211197965,37.658654836519354 +transit,127.16583261107425,37.651979701535154 +transit,127.1602841035694,37.64530429796467 +transit,127.15473658908718,37.63862862591694 +transit,127.1491900672499,37.63195268550096 +transit,127.14364453767999,37.62527647682568 +WP4,127.1381,37.6186 +transit,127.13693211306057,37.61052237439777 +transit,127.13576447871735,37.602444726155696 +transit,127.13459709684253,37.59436705528044 +transit,127.1334299673084,37.5862893617786 +transit,127.13226308998733,37.578211645656786 +transit,127.13109646475178,37.57013390692161 +transit,127.12993009147425,37.5620561455797 +transit,127.12876397002731,37.55397836163763 +transit,127.12759810028365,37.54590055510203 +transit,127.12643248211599,37.537822725979495 +transit,127.12526711539714,37.529744874276616 +WP3,127.124102,37.521667 +transit,127.12298697916394,37.514032391806964 +transit,127.12187218546937,37.50639776319721 +transit,127.12075761880781,37.49876311417644 +transit,127.11964327907083,37.49112844475035 +transit,127.11852916615004,37.4834937549246 +transit,127.11741527993712,37.4758590447049 +transit,127.11630162032382,37.46822431409691 +transit,127.11518818720195,37.46058956310631 +transit,127.11407498046337,37.45295479173878 +Seoul_Air_Base,127.112962,37.44532 +transit,127.1066925294896,37.43839083921136 +transit,127.10042421498869,37.431461337800904 +transit,127.09415705605048,37.42453149591249 +transit,127.08789105222827,37.41760131368982 +transit,127.08162620307557,37.41067079127659 +transit,127.07536250814601,37.403739928816385 +transit,127.06909996699342,37.39680872645275 +transit,127.06283857917172,37.389877184329166 +transit,127.05657834423506,37.38294530258906 +transit,127.0503192617377,37.37601308137576 +transit,127.04406133123405,37.36908052083256 +transit,127.03780455227867,37.3621476211027 +transit,127.03154892442635,37.35521438232931 +transit,127.02529444723194,37.348280804655516 +transit,127.0190411202505,37.34134688822431 +transit,127.01278894303722,37.33441263317869 +transit,127.00653791514749,37.327478039661536 +transit,127.00028803613678,37.320543107815695 +transit,126.99403930556078,37.31360783778394 +transit,126.9877917229753,37.306672229708994 +transit,126.98154528793634,37.29973628373349 +WP25,126.9753,37.2928 +transit,126.97903106148158,37.286449497224005 +transit,126.98276149592735,37.280098870032944 +transit,126.98649130357502,37.27374811847357 +transit,126.9902204846622,37.26739724259265 +transit,126.99394903942638,37.26104624243692 +transit,126.99767696810498,37.2546951180531 +transit,127.00140427093532,37.24834386948789 +transit,127.00513094815463,37.241992496787965 +Suwon_Air_Base,127.008857,37.235641 +transit,127.01669082843866,37.22926631967048 +transit,127.02452333802698,37.222891114381575 +transit,127.03235452918393,37.2165153843387 +transit,127.04018440232842,37.21013912974715 +transit,127.0480129578793,37.20376235081221 +transit,127.05584019625533,37.197385047739054 +transit,127.06366611787519,37.19100722073276 +transit,127.07149072315752,37.18462886999835 +transit,127.07931401252088,37.17824999574078 +transit,127.08713598638373,37.1718705981649 +transit,127.0949566451645,37.16549067747551 +transit,127.10277598928153,37.15911023387733 +transit,127.11059401915306,37.152729267574976 +transit,127.11841073519732,37.14634777877303 +transit,127.12622613783242,37.13996576767595 +transit,127.1340402274764,37.13358323448817 +transit,127.14185300454727,37.127200179414 +transit,127.14966446946292,37.1208166026577 +transit,127.1574746226412,37.11443250442345 +transit,127.1652834644999,37.108047884915344 +transit,127.17309099545665,37.10166274433741 +transit,127.18089721592914,37.095277082893595 +transit,127.18870212633487,37.088890900787774 +transit,127.19650572709138,37.08250419822373 +transit,127.20430801861602,37.0761169754052 +transit,127.21210900132617,37.069729232535806 +transit,127.21990867563906,37.06334096981913 +transit,127.22770704197191,37.05695218745866 +transit,127.23550410074185,37.0505628856578 +transit,127.24329985236588,37.04417306461988 +transit,127.25109429726102,37.0377827245482 +transit,127.25888743584417,37.0313918656459 +transit,127.26667926853214,37.02500048811611 +transit,127.27446979574172,37.01860859216187 +transit,127.28225901788957,37.01221617798612 +transit,127.29004693539233,37.00582324579175 +transit,127.29783354866653,36.99942979578157 +transit,127.30561885812864,36.9930358281583 +transit,127.31340286419507,36.986641343124596 +transit,127.32118556728213,36.98024634088303 +transit,127.32896696780608,36.97385082163611 +transit,127.33674706618311,36.96745478558627 +transit,127.34452586282933,36.96105823293584 +transit,127.35230335816075,36.9546611638871 +transit,127.36007955259338,36.948263578642255 +transit,127.36785444654306,36.94186547740343 +transit,127.37562804042564,36.93546686037267 +transit,127.38340033465686,36.929067727751935 +transit,127.39117132965237,36.922668079743126 +transit,127.39894102582781,36.91626791654806 +transit,127.40670942359867,36.90986723836849 +transit,127.41447652338043,36.90346604540608 +transit,127.42224232558846,36.89706433786242 +transit,127.43000683063805,36.89066211593904 +transit,127.43777003894446,36.88425937983737 +transit,127.44553195092287,36.87785612975876 +transit,127.45329256698831,36.87145236590454 +transit,127.46105188755584,36.865048088475895 +transit,127.4688099130404,36.858643297673986 +transit,127.47656664385684,36.85223799369986 +transit,127.48432208041997,36.84583217675452 +transit,127.4920762231445,36.83942584703888 +transit,127.4998290724451,36.83301900475377 +transit,127.5075806287363,36.82661165009997 +transit,127.51533089243267,36.82020378327814 +transit,127.52307986394858,36.81379540448893 +transit,127.53082754369842,36.80738651393285 +transit,127.53857393209645,36.80097711181038 +transit,127.5463190295569,36.7945671983219 +transit,127.5540628364939,36.78815677366774 +transit,127.56180535332149,36.78174583804811 +transit,127.56954658045366,36.77533439166319 +transit,127.57728651830435,36.76892243471307 +transit,127.58502516728738,36.76250996739776 +transit,127.59276252781652,36.7560969899172 +transit,127.60049860030546,36.74968350247124 +transit,127.60823338516781,36.743269505259704 +transit,127.61596688281713,36.73685499848227 +transit,127.62369909366689,36.73043998233859 +transit,127.63143001813046,36.724024457028236 +transit,127.6391596566212,36.71760842275068 +transit,127.64688800955234,36.711191879705346 +transit,127.65461507733703,36.704774828091594 +transit,127.66234086038841,36.69835726810865 +transit,127.6700653591195,36.69193919995574 +transit,127.67778857394323,36.68552062383196 +transit,127.68551050527249,36.67910153993637 +transit,127.69323115352007,36.67268194846792 +transit,127.70095051909871,36.666261849625506 +transit,127.70866860242107,36.65984124360795 +transit,127.71638540389974,36.65342013061399 +transit,127.72410092394718,36.646998510842316 +transit,127.73181516297586,36.64057638449149 +transit,127.73952812139812,36.63415375176006 +transit,127.74723979962626,36.62773061284646 +transit,127.75495019807246,36.62130696794907 +transit,127.76265931714887,36.61488281726617 +transit,127.77036715726756,36.608458160996 +transit,127.77807371884049,36.60203299933671 +transit,127.78577900227957,36.59560733248637 +transit,127.79348300799664,36.58918116064297 +transit,127.80118573640347,36.582754484004454 +transit,127.80888718791172,36.576327302768675 +transit,127.81658736293303,36.56989961713339 +transit,127.82428626187891,36.56347142729633 +transit,127.83198388516082,36.5570427334551 +transit,127.83968023319017,36.55061353580727 +transit,127.84737530637824,36.54418383455033 +transit,127.85506910513628,36.53775362988168 +transit,127.86276162987544,36.53132292199865 +transit,127.87045288100681,36.524891711098505 +transit,127.8781428589414,36.51845999737842 +transit,127.88583156409014,36.51202778103554 +transit,127.89351899686389,36.50559506226688 +transit,127.90120515767345,36.49916184126939 +transit,127.90889004692951,36.49272811824 +transit,127.91657366504269,36.4862938933755 +transit,127.92425601242357,36.47985916687264 +transit,127.93193708948264,36.4734239389281 +transit,127.93961689663028,36.46698820973847 +transit,127.94729543427685,36.46055197950026 +transit,127.95497270283258,36.454115248409934 +transit,127.96264870270767,36.44767801666387 +transit,127.9703234343122,36.44124028445837 +transit,127.97799689805622,36.43480205198965 +transit,127.98566909434969,36.42836331945388 +transit,127.99334002360247,36.42192408704713 +transit,128.00100968622436,36.41548435496543 +transit,128.00867808262512,36.409044123404676 +transit,128.01634521321438,36.40260339256078 +transit,128.02401107840168,36.396162162629494 +transit,128.03167567859657,36.38972043380655 +transit,128.03933901420845,36.383278206287585 +transit,128.04700108564668,36.37683548026815 +transit,128.05466189332054,36.37039225594376 +transit,128.06232143763918,36.36394853350985 +transit,128.06997971901177,36.35750431316175 +transit,128.0776367378473,36.35105959509473 +transit,128.0852924945548,36.344614379504 +transit,128.09294698954315,36.33816866658471 +transit,128.10060022322114,36.331722456531885 +transit,128.10825219599752,36.325275749540516 +transit,128.11590290828093,36.31882854580553 +transit,128.12355236048,36.31238084552176 +transit,128.13120055300323,36.30593264888396 +transit,128.13884748625904,36.299483956086824 +transit,128.14649316065578,36.293034767324976 +transit,128.15413757660173,36.28658508279296 +transit,128.16178073450513,36.280134902685255 +transit,128.1694226347741,36.273684227196256 +transit,128.17706327781667,36.26723305652028 +transit,128.18470266404086,36.260781390851605 +transit,128.1923407938545,36.25432923038439 +transit,128.19997766766548,36.24787657531277 +transit,128.2076132858815,36.24142342583077 +transit,128.21524764891026,36.23496978213233 +transit,128.22288075715934,36.22851564441138 +transit,128.23051261103626,36.222061012861715 +transit,128.2381432109485,36.21560588767709 +transit,128.24577255730333,36.209150269051186 +transit,128.25340065050813,36.20269415717759 +transit,128.26102749097006,36.19623755224983 +transit,128.26865307909625,36.18978045446139 +transit,128.2762774152938,36.183322864005625 +transit,128.28390049996966,36.17686478107585 +transit,128.29152233353074,36.17040620586532 +transit,128.29914291638386,36.163947138567174 +transit,128.30676224893577,36.157487579374546 +transit,128.31438033159313,36.151027528480434 +transit,128.32199716476256,36.14456698607778 +transit,128.3296127488506,36.13810595235948 +transit,128.33722708426362,36.13164442751835 +transit,128.344840171408,36.12518241174709 +transit,128.3524520106901,36.11871990523839 +transit,128.36006260251605,36.11225690818482 +transit,128.36767194729202,36.105793420778916 +transit,128.3752800454241,36.09932944321311 +transit,128.38288689731817,36.092864975679774 +transit,128.39049250338022,36.086400018371215 +transit,128.398096864016,36.07993457147967 +transit,128.40569997963132,36.07346863519728 +transit,128.41330185063185,36.067002209716144 +transit,128.42090247742314,36.06053529522827 +transit,128.4285018604107,36.054067891925605 +WP27,128.4361,36.0476 +transit,128.4285018604107,36.054067891925605 +transit,128.42090247742314,36.06053529522827 +transit,128.41330185063183,36.067002209716144 +transit,128.40569997963132,36.07346863519728 +transit,128.398096864016,36.07993457147967 +transit,128.3904925033802,36.086400018371215 +transit,128.38288689731817,36.092864975679774 +transit,128.37528004542406,36.099329443213115 +transit,128.36767194729202,36.105793420778916 +transit,128.36006260251605,36.11225690818482 +transit,128.3524520106901,36.118719905238386 +transit,128.344840171408,36.12518241174709 +transit,128.33722708426362,36.131644427518346 +transit,128.32961274885056,36.13810595235949 +transit,128.32199716476256,36.14456698607779 +transit,128.31438033159313,36.151027528480434 +transit,128.30676224893577,36.15748757937454 +transit,128.29914291638386,36.16394713856719 +transit,128.29152233353074,36.170406205865305 +transit,128.28390049996966,36.17686478107585 +transit,128.2762774152938,36.18332286400562 +transit,128.26865307909625,36.189780454461385 +transit,128.26102749097006,36.19623755224983 +transit,128.25340065050813,36.20269415717758 +transit,128.24577255730333,36.209150269051186 +transit,128.2381432109485,36.2156058876771 +transit,128.23051261103626,36.222061012861715 +transit,128.22288075715934,36.22851564441139 +transit,128.21524764891026,36.23496978213233 +transit,128.2076132858815,36.24142342583076 +transit,128.19997766766548,36.24787657531277 +transit,128.1923407938545,36.25432923038439 +transit,128.18470266404086,36.260781390851605 +transit,128.17706327781667,36.26723305652028 +transit,128.1694226347741,36.27368422719625 +transit,128.16178073450513,36.280134902685255 +transit,128.15413757660173,36.28658508279296 +transit,128.14649316065575,36.29303476732498 +transit,128.138847486259,36.29948395608682 +transit,128.13120055300323,36.30593264888395 +transit,128.12355236048,36.312380845521766 +transit,128.11590290828093,36.31882854580553 +transit,128.10825219599752,36.32527574954052 +transit,128.10060022322114,36.331722456531885 +transit,128.09294698954315,36.3381686665847 +transit,128.0852924945548,36.344614379504 +transit,128.0776367378473,36.35105959509473 +transit,128.06997971901177,36.35750431316175 +transit,128.06232143763918,36.36394853350985 +transit,128.0546618933205,36.37039225594376 +transit,128.04700108564668,36.37683548026814 +transit,128.03933901420845,36.38327820628757 +transit,128.03167567859657,36.389720433806545 +transit,128.02401107840168,36.396162162629494 +transit,128.01634521321435,36.402603392560785 +transit,128.00867808262512,36.409044123404676 +transit,128.00100968622436,36.41548435496542 +transit,127.99334002360247,36.42192408704714 +transit,127.98566909434969,36.42836331945388 +transit,127.97799689805622,36.43480205198965 +transit,127.97032343431219,36.44124028445836 +transit,127.96264870270765,36.44767801666387 +transit,127.95497270283258,36.454115248409934 +transit,127.94729543427684,36.46055197950025 +transit,127.93961689663028,36.46698820973845 +transit,127.93193708948264,36.47342393892809 +transit,127.92425601242357,36.479859166872636 +transit,127.91657366504269,36.486293893375496 +transit,127.9088900469295,36.49272811824 +transit,127.90120515767345,36.49916184126939 +transit,127.8935189968639,36.50559506226687 +transit,127.88583156409014,36.51202778103554 +transit,127.8781428589414,36.51845999737842 +transit,127.87045288100681,36.5248917110985 +transit,127.86276162987544,36.531322921998644 +transit,127.85506910513627,36.53775362988168 +transit,127.84737530637824,36.544183834550324 +transit,127.83968023319017,36.550613535807265 +transit,127.83198388516082,36.55704273345509 +transit,127.82428626187891,36.56347142729632 +transit,127.81658736293302,36.56989961713339 +transit,127.80888718791172,36.57632730276867 +transit,127.80118573640347,36.582754484004454 +transit,127.79348300799664,36.58918116064297 +transit,127.78577900227957,36.59560733248637 +transit,127.77807371884047,36.602032999336714 +transit,127.77036715726756,36.608458160995994 +transit,127.76265931714887,36.61488281726617 +transit,127.75495019807246,36.62130696794906 +transit,127.74723979962626,36.627730612846456 +transit,127.73952812139812,36.63415375176006 +transit,127.73181516297586,36.64057638449148 +transit,127.72410092394718,36.64699851084231 +transit,127.71638540389972,36.65342013061399 +transit,127.70866860242108,36.65984124360794 +transit,127.70095051909871,36.6662618496255 +transit,127.69323115352007,36.67268194846792 +transit,127.68551050527248,36.67910153993637 +transit,127.67778857394323,36.685520623831955 +transit,127.67006535911949,36.69193919995574 +transit,127.66234086038841,36.698357268108644 +transit,127.65461507733703,36.70477482809159 +transit,127.64688800955233,36.71119187970535 +transit,127.63915965662119,36.717608422750686 +transit,127.63143001813046,36.72402445702823 +transit,127.62369909366687,36.73043998233859 +transit,127.61596688281712,36.73685499848227 +transit,127.60823338516781,36.743269505259704 +transit,127.60049860030544,36.74968350247125 +transit,127.59276252781652,36.7560969899172 +transit,127.58502516728737,36.76250996739776 +transit,127.57728651830435,36.76892243471307 +transit,127.56954658045366,36.77533439166319 +transit,127.56180535332149,36.7817458380481 +transit,127.5540628364939,36.78815677366773 +transit,127.5463190295569,36.7945671983219 +transit,127.53857393209647,36.800977111810376 +transit,127.53082754369842,36.807386513932855 +transit,127.52307986394858,36.81379540448893 +transit,127.51533089243266,36.820203783278146 +transit,127.5075806287363,36.82661165009996 +transit,127.49982907244508,36.833019004753766 +transit,127.4920762231445,36.839425847038875 +transit,127.48432208041996,36.84583217675452 +transit,127.47656664385684,36.852237993699866 +transit,127.4688099130404,36.85864329767398 +transit,127.46105188755585,36.86504808847589 +transit,127.45329256698831,36.87145236590454 +transit,127.44553195092286,36.877856129758754 +transit,127.43777003894446,36.88425937983736 +transit,127.43000683063806,36.89066211593903 +transit,127.42224232558844,36.897064337862425 +transit,127.41447652338043,36.90346604540608 +transit,127.40670942359867,36.909867238368484 +transit,127.3989410258278,36.91626791654806 +transit,127.39117132965237,36.922668079743126 +transit,127.38340033465686,36.92906772775193 +transit,127.37562804042564,36.935466860372664 +transit,127.36785444654305,36.94186547740343 +transit,127.36007955259336,36.94826357864226 +transit,127.35230335816075,36.954661163887096 +transit,127.34452586282931,36.96105823293584 +transit,127.33674706618311,36.96745478558627 +transit,127.32896696780608,36.97385082163611 +transit,127.32118556728213,36.98024634088302 +transit,127.31340286419507,36.98664134312459 +transit,127.30561885812862,36.9930358281583 +transit,127.29783354866652,36.99942979578157 +transit,127.29004693539233,37.00582324579175 +transit,127.28225901788957,37.01221617798612 +transit,127.27446979574172,37.01860859216186 +transit,127.26667926853214,37.02500048811611 +transit,127.25888743584416,37.031391865645894 +transit,127.25109429726102,37.037782724548194 +transit,127.24329985236588,37.04417306461988 +transit,127.23550410074185,37.05056288565779 +transit,127.22770704197191,37.05695218745866 +transit,127.21990867563906,37.06334096981913 +transit,127.21210900132617,37.06972923253581 +transit,127.20430801861602,37.07611697540519 +transit,127.19650572709138,37.082504198223724 +transit,127.18870212633489,37.08889090078777 +transit,127.18089721592914,37.095277082893595 +transit,127.17309099545665,37.10166274433742 +transit,127.16528346449988,37.10804788491534 +transit,127.1574746226412,37.11443250442345 +transit,127.14966446946292,37.120816602657705 +transit,127.14185300454727,37.127200179414 +transit,127.1340402274764,37.13358323448817 +transit,127.1262261378324,37.13996576767595 +transit,127.11841073519732,37.14634777877302 +transit,127.11059401915306,37.152729267574976 +transit,127.10277598928151,37.15911023387732 +transit,127.0949566451645,37.16549067747551 +transit,127.08713598638373,37.1718705981649 +transit,127.07931401252087,37.17824999574078 +transit,127.07149072315752,37.18462886999835 +transit,127.06366611787519,37.19100722073276 +transit,127.05584019625532,37.19738504773905 +transit,127.0480129578793,37.20376235081222 +transit,127.04018440232842,37.210139129747155 +transit,127.03235452918392,37.21651538433869 +transit,127.02452333802698,37.22289111438158 +transit,127.01669082843866,37.22926631967048 +Suwon_Air_Base,127.008857,37.235641 +transit,127.00513094815463,37.241992496787965 +transit,127.00140427093532,37.24834386948789 +transit,126.99767696810498,37.2546951180531 +transit,126.99394903942637,37.26104624243692 +transit,126.99022048466219,37.26739724259265 +transit,126.98649130357501,37.27374811847358 +transit,126.98276149592735,37.280098870032944 +transit,126.97903106148158,37.28644949722402 +WP25,126.9753,37.2928 +transit,126.98154528793634,37.29973628373348 +transit,126.9877917229753,37.30667222970899 +transit,126.99403930556078,37.31360783778394 +transit,127.00028803613678,37.32054310781569 +transit,127.00653791514749,37.32747803966153 +transit,127.01278894303724,37.33441263317868 +transit,127.0190411202505,37.34134688822431 +transit,127.02529444723194,37.34828080465551 +transit,127.03154892442635,37.35521438232931 +transit,127.03780455227867,37.36214762110269 +transit,127.04406133123403,37.36908052083256 +transit,127.0503192617377,37.376013081375746 +transit,127.05657834423508,37.38294530258906 +transit,127.06283857917174,37.38987718432916 +transit,127.06909996699342,37.39680872645274 +transit,127.07536250814603,37.40373992881637 +transit,127.08162620307557,37.41067079127659 +transit,127.08789105222827,37.417601313689815 +transit,127.09415705605048,37.42453149591249 +transit,127.10042421498869,37.431461337800904 +transit,127.10669252948959,37.438390839211344 +Seoul_Air_Base,127.112962,37.44532 +transit,127.11407498046337,37.45295479173879 +transit,127.11518818720195,37.46058956310631 +transit,127.11630162032382,37.46822431409691 +transit,127.11741527993712,37.47585904470489 +transit,127.11852916615004,37.48349375492461 +transit,127.11964327907083,37.491128444750345 +transit,127.12075761880781,37.49876311417644 +transit,127.12187218546937,37.506397763197214 +transit,127.12298697916394,37.514032391806964 +WP3,127.124102,37.521667 +transit,127.12526711539714,37.529744874276616 +transit,127.12643248211599,37.5378227259795 +transit,127.12759810028365,37.54590055510202 +transit,127.12876397002731,37.553978361637625 +transit,127.12993009147425,37.5620561455797 +transit,127.13109646475178,37.57013390692162 +transit,127.13226308998733,37.578211645656786 +transit,127.1334299673084,37.5862893617786 +transit,127.13459709684253,37.59436705528044 +transit,127.13576447871735,37.602444726155696 +transit,127.13693211306057,37.61052237439777 +WP4,127.1381,37.6186 +transit,127.14364453767999,37.625276476825675 +transit,127.1491900672499,37.63195268550096 +transit,127.15473658908718,37.638628625916944 +transit,127.16028410356938,37.645304297964664 +transit,127.16583261107426,37.651979701535154 +transit,127.17138211197964,37.658654836519354 +transit,127.17693260666354,37.66532970280818 +transit,127.18248409550407,37.67200430029247 +transit,127.1880365788795,37.67867862886307 +transit,127.19359005716825,37.68535268841071 +transit,127.19914453074885,37.692026478826136 +WP5,127.2047,37.6987 +transit,127.21343162856657,37.69498506001787 +transit,127.22216238580884,37.69126947121904 +transit,127.23089227177877,37.68755323375334 +transit,127.23962128652845,37.68383634777065 +transit,127.24834943011,37.68011881342078 +transit,127.25707670257566,37.67640063085357 +transit,127.26580310397777,37.67268180021881 +transit,127.27452863436872,37.668962321666314 +transit,127.28325329380102,37.66524219534583 +transit,127.29197708232722,37.661521421407144 +WP6,127.3007,37.6578 +transit,127.29674227467392,37.64957899698307 +transit,127.29278542177502,37.641357849734945 +transit,127.28882944086675,37.63313655832447 +transit,127.28487433151281,37.624915122820475 +transit,127.2809200932771,37.61669354329172 +transit,127.27696672572382,37.60847181980696 +transit,127.27301422841735,37.60024995243488 +transit,127.26906260092234,37.592027941244154 +transit,127.26511184280368,37.583805786303394 +transit,127.2611619536265,37.5755834876812 +transit,127.25721293295616,37.56736104544609 +transit,127.25326478035826,37.55913845966662 +transit,127.24931749539866,37.550915730411205 +transit,127.24537107764343,37.54269285774832 +transit,127.24142552665889,37.534469841746336 +transit,127.23748084201159,37.52624668247362 +transit,127.23353702326837,37.518023379998475 +transit,127.22959406999622,37.5097999343892 +transit,127.22565198176245,37.501576345714014 +transit,127.22171075813456,37.49335261404114 +transit,127.2177703986803,37.48512873943874 +transit,127.21383090296766,37.476904721974925 +transit,127.20989227056486,37.4686805617178 +transit,127.2059545010404,37.460456258735405 +transit,127.20201759396292,37.452231813095764 +transit,127.1980815489014,37.444007224866844 +transit,127.194146365425,37.435782494116594 +transit,127.19021204310314,37.42755762091289 +transit,127.18627858150548,37.41933260532362 +transit,127.18234598020187,37.4111074474166 +transit,127.17841423876246,37.402882147259604 +transit,127.17448335675759,37.394656704920386 +transit,127.17055333375788,37.38643112046667 +transit,127.16662416933413,37.37820539396613 +transit,127.1626958630574,37.36997952548637 +transit,127.158768414499,37.361753515095025 +transit,127.15484182323047,37.35352736285964 +transit,127.15091608882358,37.34530106884773 +transit,127.14699121085032,37.3370746331268 +transit,127.14306718888294,37.32884805576426 +transit,127.13914402249392,37.32062133682758 +transit,127.13522171125595,37.31239447638408 +transit,127.13130025474197,37.304167474501114 +transit,127.12737965252519,37.295940331245994 +transit,127.12345990417899,37.287713046685965 +transit,127.119541009277,37.27948562088826 +transit,127.11562296739314,37.27125805392004 +transit,127.1117057781015,37.2630303458485 +transit,127.1077894409764,37.25480249674071 +transit,127.10387395559245,37.24657450666377 +transit,127.09995932152444,37.238346375684706 +transit,127.09604553834743,37.230118103870524 +transit,127.09213260563669,37.221889691288176 +transit,127.0882205229677,37.2136611380046 +transit,127.08430928991625,37.20543244408668 +transit,127.08039890605826,37.197203609601274 +transit,127.07648937096997,37.18897463461519 +transit,127.0725806842278,37.18074551919522 +transit,127.06867284540841,37.17251626340809 +transit,127.06476585408873,37.164286867320506 +transit,127.06085970984586,37.15605733099914 +transit,127.05695441225716,37.14782765451063 +transit,127.05304996090022,37.13959783792155 +transit,127.04914635535289,37.131367881298466 +transit,127.0452435951932,37.123137784707914 +transit,127.04134167999943,37.11490754821636 +transit,127.03744060935011,37.10667717189025 +transit,127.03354038282397,37.098446655796 +Osan_Air_Base,127.029641,37.090216 diff --git a/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/all_plans/Manila_waypoints.csv b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/all_plans/Manila_waypoints.csv new file mode 100644 index 0000000..4fdba11 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/all_plans/Manila_waypoints.csv @@ -0,0 +1,3571 @@ +city,utc_adjust +Manila,8 +waypoint,lon,lat +RPLC,120.556,15.18200003 +transit,120.56232759211345,15.175791398462003 +transit,120.568654814593,15.169582585856645 +transit,120.5749816676081,15.16337359227141 +transit,120.58130815132822,15.157164417793794 +transit,120.5876342659228,15.150955062511267 +transit,120.59396001156126,15.14474552651128 +transit,120.60028538841301,15.138535809881272 +transit,120.60661039664744,15.132325912708675 +transit,120.61293503643391,15.126115835080892 +transit,120.6192593079418,15.11990557708532 +transit,120.62558321134041,15.113695138809339 +transit,120.63190674679909,15.107484520340309 +transit,120.63822991448711,15.10127372176558 +transit,120.64455271457378,15.095062743172493 +transit,120.65087514722836,15.088851584648351 +transit,120.65719721262009,15.082640246280466 +transit,120.6635189109182,15.076428728156124 +transit,120.66984024229191,15.070217030362606 +transit,120.67616120691042,15.064005152987152 +transit,120.6824818049429,15.057793096117013 +transit,120.68880203655851,15.051580859839419 +transit,120.6951219019264,15.045368444241577 +transit,120.70144140121567,15.03915584941069 +transit,120.70776053459548,15.03294307543393 +transit,120.71407930223488,15.026730122398469 +transit,120.72039770430295,15.020516990391458 +transit,120.72671574096876,15.014303679500028 +transit,120.73303341240134,15.008090189811307 +transit,120.7393507187697,15.001876521412399 +transit,120.74566766024286,14.99566267439039 +transit,120.75198423698978,14.989448648832358 +transit,120.75830044917947,14.983234444825364 +transit,120.76461629698086,14.977020062456457 +transit,120.77093178056288,14.970805501812661 +transit,120.77724690009445,14.964590762980993 +transit,120.78356165574446,14.958375846048451 +transit,120.78987604768182,14.95216075110203 +transit,120.79619007607536,14.94594547822869 +transit,120.80250374109394,14.939730027515386 +transit,120.8088170429064,14.933514399049061 +transit,120.81512998168154,14.927298592916644 +transit,120.82144255758816,14.921082609205031 +transit,120.82775477079502,14.914866448001135 +transit,120.83406662147091,14.908650109391827 +transit,120.84037810978455,14.90243359346397 +transit,120.84668923590468,14.896216900304411 +RPUX,120.853,14.89000003 +transit,120.85979782446294,14.884600564854255 +transit,120.86659531051718,14.879200895697487 +transit,120.87339245829533,14.873801022616716 +transit,120.88018926793,14.868400945698953 +transit,120.88698573955382,14.863000665031208 +transit,120.89378187329942,14.857600180700459 +transit,120.90057766929938,14.852199492793686 +transit,120.90737312768633,14.846798601397856 +transit,120.91416824859287,14.841397506599918 +transit,120.92096303215158,14.835996208486819 +transit,120.92775747849507,14.830594707145481 +transit,120.9345515877559,14.825193002662823 +transit,120.94134536006668,14.819791095125751 +transit,120.94813879555998,14.814388984621152 +transit,120.95493189436837,14.808986671235916 +transit,120.96172465662443,14.803584155056903 +transit,120.96851708246069,14.798181436170978 +transit,120.97530917200974,14.792778514664978 +transit,120.98210092540413,14.78737539062574 +transit,120.9888923427764,14.781972064140092 +transit,120.9956834242591,14.776568535294828 +transit,121.00247416998477,14.771164804176754 +transit,121.00926458008594,14.765760870872654 +transit,121.01605465469515,14.760356735469305 +transit,121.02284439394494,14.754952398053465 +transit,121.02963379796779,14.749547858711882 +transit,121.03642286689625,14.744143117531296 +transit,121.0432116008628,14.738738174598431 +TP1,121.05,14.73333303 +transit,121.051095723919,14.72546409823825 +transit,121.05219136923515,14.717595155954921 +transit,121.05328693599787,14.709726203155862 +transit,121.05438242425664,14.701857239846916 +transit,121.05547783406094,14.693988266033939 +transit,121.05657316546016,14.686119281722771 +transit,121.05766841850375,14.678250286919257 +transit,121.05876359324112,14.670381281629242 +transit,121.05985868972166,14.662512265858577 +transit,121.06095370799477,14.654643239613106 +transit,121.0620486481098,14.646774202898664 +transit,121.0631435101161,14.63890515572111 +transit,121.06423829406307,14.631036098086266 +MAO1,121.065333,14.62316703 +transit,121.06905300826244,14.614962521959232 +transit,121.07277274046876,14.606757948816796 +transit,121.07649219679926,14.598553310614683 +transit,121.08021137743422,14.590348607394908 +transit,121.08393028255385,14.582143839199444 +transit,121.08764891233832,14.573939006070276 +transit,121.09136726696777,14.56573410804936 +transit,121.09508534662227,14.557529145178671 +transit,121.09880315148189,14.549324117500145 +transit,121.1025206817266,14.54111902505572 +transit,121.10623793753639,14.532913867887324 +transit,121.10995491909114,14.524708646036885 +transit,121.11367162657073,14.516503359546299 +transit,121.117388060155,14.50829800845748 +transit,121.1211042200237,14.500092592812312 +transit,121.12482010635657,14.491887112652678 +transit,121.12853571933333,14.483681568020451 +transit,121.13225105913361,14.47547595895749 +transit,121.13596612593702,14.467270285505647 +transit,121.13968091992312,14.459064547706769 +transit,121.14339544127142,14.45085874560269 +transit,121.14710969016143,14.442652879235222 +transit,121.15082366677254,14.434446948646196 +transit,121.15453737128415,14.42624095387741 +transit,121.1582508038756,14.418034894970662 +transit,121.16196396472623,14.40982877196773 +transit,121.16567685401523,14.401622584910404 +transit,121.16938947192187,14.393416333840443 +transit,121.1731018186253,14.385210018799611 +transit,121.17681389430464,14.377003639829647 +transit,121.18052569913901,14.368797196972299 +transit,121.1842372333074,14.360590690269289 +transit,121.18794849698884,14.352384119762348 +transit,121.19165949036228,14.344177485493182 +transit,121.19537021360664,14.335970787503486 +transit,121.19908066690076,14.327764025834961 +transit,121.2027908504235,14.319557200529285 +transit,121.2065007643536,14.311350311628132 +transit,121.21021040886986,14.30314335917317 +transit,121.21391978415093,14.294936343206047 +transit,121.21762889037547,14.286729263768416 +transit,121.2213377277221,14.278522120901911 +transit,121.22504629636938,14.270314914648154 +transit,121.22875459649586,14.262107645048763 +transit,121.23246262827999,14.253900312145355 +transit,121.23617039190022,14.245692915979518 +transit,121.23987788753494,14.237485456592848 +transit,121.24358511536252,14.229277934026925 +transit,121.24729207556128,14.221070348323318 +transit,121.25099876830944,14.212862699523585 +transit,121.25470519378528,14.204654987669288 +transit,121.25841135216696,14.196447212801964 +transit,121.26211724363262,14.18823937496314 +transit,121.26582286836036,14.180031474194358 +transit,121.26952822652824,14.171823510537116 +transit,121.27323331831425,14.163615484032935 +transit,121.2769381438964,14.155407394723298 +transit,121.2806427034526,14.147199242649702 +transit,121.28434699716074,14.138991027853624 +transit,121.28805102519864,14.130782750376532 +transit,121.29175478774414,14.122574410259885 +transit,121.29545828497497,14.114366007545135 +transit,121.29916151706885,14.106157542273722 +transit,121.30286448420348,14.097949014487085 +transit,121.30656718655646,14.08974042422664 +transit,121.3102696243054,14.081531771533802 +transit,121.31397179762784,14.073323056449986 +transit,121.3176737067013,14.065114279016573 +transit,121.32137535170321,14.05690543927496 +transit,121.32507673281104,14.048696537266515 +transit,121.32877785020213,14.04048757303262 +transit,121.33247870405384,14.032278546614624 +transit,121.33617929454346,14.02406945805388 +transit,121.33987962184824,14.015860307391733 +transit,121.34357968614539,14.00765109466951 +transit,121.3472794876121,13.999441819928538 +transit,121.35097902642548,13.991232483210126 +transit,121.35467830276262,13.983023084555578 +transit,121.35837731680057,13.9748136240062 +transit,121.36207606871633,13.966604101603268 +transit,121.36577455868688,13.958394517388063 +transit,121.3694727868891,13.950184871401857 +transit,121.3731707534999,13.941975163685907 +transit,121.37686845869612,13.93376539428146 +transit,121.38056590265454,13.92555556322976 +transit,121.38426308555191,13.917345670572047 +transit,121.38796000756496,13.909135716349532 +transit,121.39165666887034,13.900925700603437 +transit,121.3953530696447,13.892715623374963 +transit,121.39904921006462,13.884505484705315 +transit,121.40274509030664,13.876295284635663 +transit,121.40644071054727,13.868085023207206 +transit,121.41013607096298,13.859874700461098 +transit,121.41383117173018,13.851664316438512 +transit,121.41752601302527,13.84345387118059 +transit,121.42122059502456,13.835243364728482 +transit,121.42491491790439,13.827032797123316 +transit,121.428608981841,13.818822168406216 +transit,121.43230278701058,13.810611478618304 +transit,121.43599633358934,13.802400727800679 +transit,121.43968962175342,13.794189915994446 +transit,121.44338265167887,13.78597904324069 +transit,121.44707542354179,13.777768109580496 +transit,121.45076793751815,13.769557115054928 +transit,121.45446019378396,13.76134605970505 +transit,121.45815219251513,13.753134943571922 +transit,121.46184393388755,13.744923766696585 +transit,121.46553541807705,13.736712529120073 +transit,121.46922664525948,13.728501230883413 +transit,121.47291761561057,13.720289872027625 +transit,121.47660832930606,13.712078452593715 +transit,121.48029878652163,13.703866972622688 +transit,121.48398898743292,13.695655432155535 +transit,121.48767893221556,13.687443831233237 +transit,121.49136862104507,13.679232169896766 +transit,121.495058054097,13.67102044818709 +transit,121.49874723154684,13.662808666145162 +transit,121.50243615357,13.654596823811936 +transit,121.50612482034191,13.646384921228343 +transit,121.50981323203793,13.638172958435316 +transit,121.51350138883335,13.629960935473784 +transit,121.51718929090346,13.621748852384647 +transit,121.52087693842353,13.613536709208814 +transit,121.52456433156871,13.60532450598718 +transit,121.5282514705142,13.597112242760629 +transit,121.5319383554351,13.588899919570041 +transit,121.53562498650648,13.580687536456287 +transit,121.5393113639034,13.572475093460218 +transit,121.54299748780082,13.564262590622697 +transit,121.54668335837373,13.55605002798456 +transit,121.55036897579704,13.547837405586638 +transit,121.55405434024563,13.539624723469759 +transit,121.5577394518943,13.531411981674745 +transit,121.56142431091791,13.523199180242393 +transit,121.56510891749117,13.514986319213511 +transit,121.5687932717888,13.506773398628885 +transit,121.5724773739855,13.498560418529294 +transit,121.57616122425588,13.490347378955521 +transit,121.57984482277456,13.482134279948319 +transit,121.58352816971609,13.47392112154845 +transit,121.58721126525498,13.46570790379666 +transit,121.5908941095657,13.457494626733688 +transit,121.59457670282269,13.449281290400265 +transit,121.59825904520038,13.44106789483711 +transit,121.60194113687308,13.432854440084938 +transit,121.60562297801513,13.424640926184447 +transit,121.60930456880082,13.416427353176337 +transit,121.61298590940439,13.408213721101292 +TP2,121.616667,13.40000003 +transit,121.60885689895416,13.404682816452143 +transit,121.60104649558956,13.409365359547875 +transit,121.59323578980056,13.414047659190004 +transit,121.58542478148156,13.418729715281337 +transit,121.57761347052694,13.423411527724678 +transit,121.56980185683109,13.42809309642281 +transit,121.56198994028843,13.43277442127851 +transit,121.55417772079338,13.437455502194558 +transit,121.54636519824032,13.442136339073716 +transit,121.53855237252374,13.446816931818734 +transit,121.53073924353802,13.451497280332362 +transit,121.52292581117764,13.456177384517337 +transit,121.51511207533704,13.460857244276388 +transit,121.50729803591068,13.465536859512236 +transit,121.49948369279302,13.470216230127596 +transit,121.49166904587854,13.474895356025165 +transit,121.48385409506173,13.479574237107645 +transit,121.47603884023708,13.484252873277716 +transit,121.46822328129907,13.488931264438063 +transit,121.46040741814224,13.493609410491347 +transit,121.45259125066107,13.498287311340237 +transit,121.4447747787501,13.502964966887383 +transit,121.43695800230387,13.507642377035422 +transit,121.42914092121687,13.512319541687 +transit,121.4213235353837,13.516996460744734 +transit,121.41350584469889,13.52167313411125 +transit,121.40568784905699,13.526349561689152 +transit,121.39786954835259,13.531025743381038 +transit,121.39005094248026,13.53570167908951 +transit,121.38223203133457,13.540377368717143 +transit,121.37441281481013,13.545052812166515 +transit,121.36659329280154,13.549728009340194 +transit,121.35877346520338,13.554402960140738 +transit,121.3509533319103,13.559077664470694 +transit,121.34313289281691,13.563752122232604 +transit,121.33531214781786,13.568426333328995 +transit,121.32749109680775,13.573100297662402 +transit,121.31966973968126,13.577774015135331 +transit,121.31184807633304,13.582447485650288 +transit,121.30402610665773,13.587120709109774 +transit,121.29620383055004,13.59179368541628 +transit,121.28838124790461,13.59646641447228 +transit,121.28055835861616,13.601138896180252 +transit,121.27273516257937,13.605811130442659 +transit,121.26491165968893,13.610483117161953 +transit,121.25708784983958,13.61515485624058 +transit,121.24926373292602,13.619826347580977 +transit,121.24143930884298,13.624497591085575 +transit,121.2336145774852,13.629168586656796 +transit,121.22578953874742,13.633839334197045 +transit,121.21796419252439,13.638509833608733 +transit,121.21013853871086,13.643180084794247 +transit,121.20231257720162,13.647850087655979 +transit,121.19448630789142,13.6525198420963 +transit,121.18665973067506,13.657189348017583 +transit,121.17883284544733,13.661858605322186 +transit,121.17100565210302,13.666527613912464 +transit,121.16317815053694,13.671196373690751 +transit,121.1553503406439,13.675864884559388 +transit,121.14752222231874,13.680533146420702 +transit,121.13969379545628,13.685201159177 +transit,121.13186505995137,13.6898689227306 +transit,121.12403601569883,13.694536436983796 +transit,121.11620666259356,13.69920370183888 +transit,121.10837700053037,13.703870717198136 +transit,121.10054702940418,13.70853748296383 +transit,121.09271674910985,13.713203999038237 +transit,121.08488615954226,13.717870265323603 +transit,121.07705526059632,13.722536281722183 +transit,121.06922405216693,13.727202048136217 +transit,121.06139253414901,13.731867564467928 +transit,121.05356070643747,13.736532830619538 +transit,121.04572856892723,13.741197846493264 +transit,121.03789612151326,13.745862611991306 +transit,121.03006336409047,13.750527127015868 +transit,121.02223029655383,13.755191391469129 +transit,121.0143969187983,13.759855405253267 +transit,121.00656323071884,13.764519168270452 +transit,120.99872923221045,13.769182680422844 +transit,120.9908949231681,13.7738459416126 +transit,120.9830603034868,13.778508951741857 +transit,120.97522537306153,13.783171710712756 +transit,120.96739013178733,13.787834218427415 +transit,120.95955457955918,13.792496474787962 +transit,120.95171871627214,13.79715847969649 +transit,120.94388254182124,13.801820233055116 +transit,120.93604605610152,13.806481734765917 +transit,120.92820925900803,13.811142984730987 +transit,120.92037215043582,13.815803982852387 +transit,120.91253473027999,13.820464729032192 +transit,120.9046969984356,13.82512522317246 +transit,120.89685895479772,13.829785465175233 +transit,120.88902059926147,13.83444545494255 +transit,120.88118193172193,13.839105192376438 +transit,120.87334295207422,13.843764677378928 +transit,120.86550366021348,13.848423909852029 +transit,120.8576640560348,13.85308288969774 +transit,120.84982413943335,13.85774161681806 +transit,120.84198391030425,13.862400091114976 +transit,120.83414336854266,13.867058312490467 +transit,120.82630251404373,13.871716280846499 +transit,120.81846134670265,13.876373996085038 +transit,120.81061986641458,13.88103145810803 +transit,120.80277807307472,13.885688666817417 +transit,120.79493596657825,13.89034562211514 +transit,120.78709354682039,13.895002323903118 +transit,120.77925081369634,13.89965877208327 +transit,120.77140776710131,13.904314966557509 +transit,120.76356440693054,13.908970907227724 +transit,120.75572073307927,13.913626593995817 +transit,120.74787674544274,13.918282026763661 +transit,120.7400324439162,13.922937205433131 +transit,120.73218782839493,13.927592129906097 +transit,120.72434289877417,13.932246800084409 +transit,120.71649765494922,13.936901215869911 +transit,120.70865209681536,13.941555377164446 +transit,120.7008062242679,13.946209283869846 +transit,120.69296003720211,13.95086293588793 +transit,120.68511353551334,13.955516333120501 +transit,120.67726671909688,13.960169475469373 +transit,120.6694195878481,13.964822362836333 +transit,120.66157214166229,13.969474995123171 +transit,120.65372438043484,13.974127372231665 +transit,120.64587630406108,13.978779494063577 +transit,120.63802791243637,13.98343136052067 +transit,120.6301792054561,13.988082971504696 +transit,120.62233018301566,13.992734326917393 +transit,120.6144808450104,13.997385426660493 +transit,120.60663119133577,14.002036270635728 +transit,120.59878122188714,14.006686858744802 +transit,120.59093093655993,14.01133719088943 +transit,120.58308033524956,14.015987266971308 +transit,120.57522941785149,14.02063708689212 +transit,120.56737818426113,14.025286650553555 +transit,120.55952663437395,14.029935957857278 +transit,120.5516747680854,14.034585008704955 +transit,120.54382258529097,14.039233802998234 +transit,120.5359700858861,14.043882340638765 +transit,120.52811726976628,14.048530621528187 +transit,120.52026413682704,14.053178645568119 +transit,120.51241068696383,14.057826412660184 +transit,120.50455692007222,14.062473922705996 +transit,120.49670283604766,14.067121175607145 +transit,120.48884843478574,14.071768171265235 +transit,120.48099371618197,14.076414909581842 +transit,120.47313868013188,14.081061390458546 +transit,120.46528332653106,14.085707613796908 +transit,120.45742765527504,14.090353579498489 +transit,120.44957166625943,14.09499928746483 +transit,120.44171535937977,14.099644737597474 +transit,120.43385873453167,14.10428992979796 +transit,120.42600179161073,14.108934863967795 +transit,120.41814453051254,14.113579540008503 +transit,120.41028695113273,14.11822395782158 +transit,120.40242905336693,14.12286811730853 +transit,120.39457083711076,14.127512018370826 +transit,120.38671230225987,14.132155660909964 +transit,120.3788534487099,14.136799044827397 +transit,120.37099427635653,14.141442170024593 +transit,120.36313478509541,14.146085036402994 +transit,120.35527497482222,14.150727643864053 +transit,120.34741484543267,14.155369992309202 +transit,120.33955439682241,14.160012081639858 +transit,120.33169362888718,14.164653911757439 +transit,120.32383254152268,14.169295482563356 +transit,120.31597113462463,14.173936793959003 +transit,120.30810940808878,14.178577845845775 +transit,120.30024736181085,14.183218638125043 +transit,120.29238499568658,14.187859170698184 +transit,120.28452230961175,14.19249944346656 +transit,120.2766593034821,14.197139456331524 +transit,120.26879597719343,14.20177920919442 +transit,120.26093233064152,14.206418701956586 +transit,120.25306836372216,14.21105793451935 +transit,120.24520407633115,14.215696906784025 +transit,120.2373394683643,14.220335618651925 +transit,120.22947453971743,14.224974070024347 +transit,120.22160929028637,14.229612260802586 +transit,120.21374371996696,14.234250190887922 +transit,120.20587782865503,14.23888786018163 +transit,120.19801161624646,14.243525268584978 +transit,120.19014508263712,14.248162415999214 +transit,120.18227822772285,14.252799302325593 +transit,120.17441105139956,14.25743592746535 +transit,120.16654355356313,14.262072291319715 +transit,120.15867573410947,14.26670839378991 +transit,120.15080759293448,14.271344234777144 +transit,120.14293912993409,14.275979814182621 +transit,120.13507034500422,14.280615131907531 +transit,120.12720123804081,14.28525018785307 +transit,120.1193318089398,14.2898849819204 +transit,120.11146205759717,14.294519514010698 +transit,120.10359198390884,14.299153784025119 +transit,120.09572158777083,14.303787791864814 +transit,120.08785086907909,14.308421537430918 +transit,120.07997982772963,14.313055020624567 +transit,120.07210846361845,14.317688241346882 +transit,120.06423677664154,14.322321199498983 +transit,120.05636476669494,14.326953894981964 +transit,120.04849243367467,14.331586327696932 +transit,120.04061977747678,14.336218497544966 +transit,120.0327467979973,14.34085040442715 +transit,120.02487349513228,14.345482048244548 +transit,120.01699986877782,14.350113428898224 +transit,120.00912591882997,14.354744546289226 +transit,120.0012516451848,14.359375400318594 +transit,119.99337704773842,14.364005990887367 +transit,119.98550212638693,14.368636317896572 +transit,119.97762688102645,14.373266381247218 +transit,119.96975131155308,14.377896180840319 +transit,119.96187541786297,14.382525716576863 +transit,119.95399919985225,14.387154988357846 +transit,119.94612265741705,14.391783996084245 +transit,119.93824579045356,14.396412739657029 +transit,119.93036859885792,14.401041218977165 +transit,119.92249108252634,14.405669433945606 +transit,119.91461324135496,14.410297384463295 +transit,119.90673507524,14.414925070431163 +transit,119.89885658407766,14.419552491750142 +transit,119.89097776776416,14.424179648321147 +transit,119.88309862619572,14.428806540045086 +transit,119.87521915926855,14.433433166822855 +transit,119.86733936687892,14.438059528555351 +transit,119.85945924892306,14.442685625143456 +transit,119.85157880529725,14.447311456488034 +transit,119.84369803589775,14.451937022489954 +transit,119.83581694062082,14.456562323050072 +transit,119.82793551936278,14.461187358069234 +transit,119.8200537720199,14.465812127448268 +transit,119.8121716984885,14.470436631088013 +transit,119.8042892986649,14.475060868889285 +transit,119.79640657244542,14.479684840752888 +transit,119.78852351972638,14.484308546579626 +transit,119.78064014040415,14.488931986270298 +transit,119.77275643437507,14.493555159725679 +transit,119.76487240153551,14.498178066846538 +transit,119.75698804178184,14.502800707533652 +transit,119.74910335501042,14.507423081687769 +transit,119.74121834111769,14.512045189209637 +TP3,119.733333,14.51666703 +transit,119.74245511347887,14.516859138136162 +transit,119.75157724268301,14.517050891614721 +transit,119.76069938758363,14.517242290430186 +transit,119.7698215481519,14.517433334577088 +transit,119.778943724359,14.517624024049958 +transit,119.78806591617612,14.517814358843355 +transit,119.79718812357443,14.518004338951831 +transit,119.80631034652511,14.518193964369956 +transit,119.81543258499933,14.518383235092298 +transit,119.82455483896827,14.518572151113457 +transit,119.8336771084031,14.518760712428026 +transit,119.84279939327499,14.51894891903061 +transit,119.8519216935551,14.519136770915836 +transit,119.8610440092146,14.519324268078323 +transit,119.87016634022466,14.519511410512713 +transit,119.87928868655644,14.519698198213655 +transit,119.8884110481811,14.519884631175808 +transit,119.8975334250698,14.520070709393838 +transit,119.90665581719368,14.52025643286243 +transit,119.91577822452392,14.520441801576267 +transit,119.92490064703168,14.52062681553005 +transit,119.93402308468808,14.520811474718489 +transit,119.94314553746429,14.520995779136301 +transit,119.95226800533146,14.521179728778218 +transit,119.96139048826073,14.521363323638978 +transit,119.97051298622326,14.521546563713331 +transit,119.97963549919015,14.52172944899604 +transit,119.9887580271326,14.52191197948187 +transit,119.99788057002172,14.522094155165606 +transit,120.00700312782864,14.522275976042032 +transit,120.01612570052451,14.522457442105951 +transit,120.02524828808046,14.522638553352174 +transit,120.03437089046764,14.52281930977552 +transit,120.04349350765715,14.522999711370826 +transit,120.05261613962014,14.523179758132923 +transit,120.06173878632774,14.52335945005667 +transit,120.07086144775107,14.523538787136921 +transit,120.07998412386125,14.523717769368552 +transit,120.0891068146294,14.523896396746444 +transit,120.09822952002666,14.524074669265486 +transit,120.10735224002414,14.524252586920579 +transit,120.11647497459296,14.524430149706639 +transit,120.12559772370423,14.524607357618583 +transit,120.13472048732906,14.524784210651344 +transit,120.14384326543858,14.524960708799867 +transit,120.15296605800388,14.525136852059099 +transit,120.1620888649961,14.525312640424003 +transit,120.17121168638631,14.525488073889557 +transit,120.18033452214566,14.525663152450734 +transit,120.1894573722452,14.525837876102537 +transit,120.19858023665608,14.526012244839965 +transit,120.20770311534939,14.526186258658022 +transit,120.21682600829621,14.526359917551739 +transit,120.22594891546765,14.526533221516154 +transit,120.23507183683482,14.5267061705463 +transit,120.2441947723688,14.526878764637232 +transit,120.25331772204069,14.527051003784026 +transit,120.26244068582157,14.52722288798174 +transit,120.27156366368254,14.527394417225459 +transit,120.28068665559469,14.527565591510283 +transit,120.2898096615291,14.527736410831311 +transit,120.29893268145686,14.527906875183666 +transit,120.30805571534906,14.528076984562459 +transit,120.31717876317676,14.528246738962837 +transit,120.32630182491106,14.528416138379937 +transit,120.33542490052302,14.528585182808916 +transit,120.34454798998375,14.528753872244932 +transit,120.3536710932643,14.52892220668317 +transit,120.36279421033575,14.529090186118813 +transit,120.37191734116917,14.529257810547046 +transit,120.38104048573562,14.529425079963088 +transit,120.3901636440062,14.529591994362148 +transit,120.39928681595194,14.529758553739445 +transit,120.40841000154394,14.529924758090225 +transit,120.41753320075324,14.530090607409731 +transit,120.42665641355092,14.530256101693213 +transit,120.43577963990803,14.530421240935938 +transit,120.44490287979563,14.530586025133196 +transit,120.4540261331848,14.530750454280257 +transit,120.46314940004656,14.53091452837242 +transit,120.47227268035199,14.531078247404999 +transit,120.48139597407214,14.531241611373302 +transit,120.49051928117807,14.531404620272665 +transit,120.4996426016408,14.531567274098414 +transit,120.50876593543141,14.531729572845906 +transit,120.51788928252093,14.53189151651049 +transit,120.52701264288042,14.532053105087536 +transit,120.53613601648091,14.532214338572425 +transit,120.54525940329346,14.532375216960544 +transit,120.5543828032891,14.532535740247281 +transit,120.56350621643887,14.532695908428057 +transit,120.5726296427138,14.532855721498283 +transit,120.58175308208494,14.53301517945339 +transit,120.59087653452333,14.53317428228881 +TP4,120.6,14.53333303 +transit,120.60891325177454,14.532211177408374 +transit,120.61782641362562,14.531088985787047 +transit,120.62673948553424,14.529966455166676 +transit,120.6356524674814,14.528843585577919 +transit,120.64456535944814,14.527720377051432 +transit,120.65347816141545,14.526596829617894 +transit,120.66239087336437,14.525472943307976 +transit,120.67130349527596,14.524348718152378 +transit,120.68021602713127,14.52322415418179 +transit,120.68912846891136,14.522099251426917 +transit,120.6980408205973,14.520974009918476 +transit,120.70695308217019,14.519848429687181 +transit,120.71586525361108,14.51872251076377 +transit,120.72477733490112,14.517596253178972 +transit,120.73368932602139,14.51646965696354 +transit,120.74260122695303,14.515342722148226 +transit,120.75151303767716,14.514215448763785 +transit,120.7604247581749,14.513087836840993 +transit,120.76933638842745,14.511959886410628 +transit,120.77824792841592,14.510831597503469 +transit,120.7871593781215,14.509702970150322 +transit,120.79607073752537,14.508574004381979 +transit,120.80498200660871,14.507444700229257 +transit,120.81389318535273,14.506315057722974 +transit,120.82280427373861,14.50518507689395 +transit,120.8317152717476,14.504054757773021 +transit,120.84062617936091,14.502924100391041 +transit,120.84953699655976,14.501793104778846 +transit,120.85844772332543,14.500661770967307 +transit,120.86735835963914,14.499530098987284 +transit,120.87626890548218,14.498398088869656 +transit,120.8851793608358,14.497265740645302 +transit,120.89408972568133,14.49613305434512 +RPLS,120.903,14.49500003 +transit,120.91103367798593,14.493834566218396 +transit,120.91906727200656,14.492668827652633 +transit,120.92710078205005,14.491502814328562 +transit,120.93513420810456,14.490336526272037 +transit,120.94316755015822,14.489169963508923 +transit,120.95120080819922,14.488003126065085 +transit,120.95923398221572,14.486836013966391 +transit,120.96726707219588,14.485668627238729 +transit,120.97530007812792,14.484500965907973 +TP5,120.983333,14.48333303 +transit,120.98888832080638,14.486111193273727 +transit,120.9944437799241,14.488889224610709 +transit,120.99999937737775,14.49166712398139 +transit,121.00555511319187,14.494444891356213 +transit,121.0111109873911,14.497222526705604 +TP6,121.016667,14.50000003 +transit,121.02291618161927,14.504167242662048 +transit,121.02916559692267,14.508334287533266 +transit,121.03541524597964,14.512501164557353 +transit,121.04166512885968,14.516667873678005 +transit,121.04791524563227,14.520834414838916 +transit,121.05416559636687,14.525000787983764 +transit,121.06041618113295,14.529166993056233 +TP7,121.066667,14.53333303 +transit,121.07583018072394,14.533882414209392 +transit,121.08499340670342,14.534431440154327 +transit,121.09415667791092,14.534980107818962 +transit,121.10331999431891,14.535528417187455 +transit,121.11248335589988,14.536076368243979 +transit,121.1216467626263,14.536623960972735 +transit,121.13081021447063,14.537171195357901 +transit,121.13997371140532,14.537718071383694 +transit,121.14913725340284,14.53826458903432 +transit,121.15830084043564,14.538810748294011 +transit,121.16746447247617,14.539356549147001 +transit,121.17662814949685,14.539901991577533 +transit,121.18579187147013,14.540447075569869 +transit,121.19495563836843,14.540991801108271 +transit,121.20411945016417,14.54153616817701 +transit,121.2132833068298,14.542080176760381 +transit,121.2224472083377,14.542623826842673 +transit,121.23161115466029,14.543167118408192 +transit,121.24077514576997,14.543710051441261 +transit,121.24993918163916,14.544252625926195 +transit,121.25910326224022,14.54479484184734 +transit,121.26826738754556,14.545336699189036 +transit,121.27743155752755,14.545878197935643 +transit,121.28659577215859,14.546419338071534 +transit,121.29576003141102,14.54696011958107 +transit,121.30492433525723,14.547500542448649 +transit,121.31408868366958,14.548040606658665 +transit,121.32325307662043,14.548580312195526 +transit,121.33241751408211,14.549119659043642 +transit,121.341581996027,14.549658647187448 +transit,121.35074652242741,14.550197276611378 +transit,121.3599110932557,14.55073554729988 +transit,121.3690757084842,14.551273459237406 +transit,121.37824036808523,14.55181101240843 +transit,121.3874050720311,14.552348206797427 +transit,121.39656982029415,14.552885042388887 +transit,121.40573461284667,14.553421519167301 +transit,121.414899449661,14.553957637117183 +transit,121.42406433070938,14.554493396223052 +transit,121.43322925596416,14.555028796469427 +transit,121.44239422539762,14.555563837840852 +transit,121.45155923898204,14.556098520321877 +transit,121.46072429668969,14.556632843897054 +transit,121.46988939849287,14.557166808550955 +transit,121.47905454436382,14.557700414268163 +transit,121.48821973427482,14.558233661033256 +transit,121.49738496819815,14.558766548830839 +transit,121.50655024610603,14.559299077645516 +transit,121.51571556797074,14.559831247461915 +transit,121.5248809337645,14.560363058264652 +transit,121.53404634345958,14.56089451003838 +transit,121.54321179702818,14.561425602767736 +transit,121.55237729444256,14.561956336437385 +transit,121.56154283567493,14.562486711032001 +transit,121.57070842069751,14.563016726536254 +transit,121.57987404948253,14.563546382934835 +transit,121.58903972200218,14.564075680212447 +transit,121.59820543822867,14.5646046183538 +transit,121.6073711981342,14.565133197343611 +transit,121.61653700169097,14.565661417166611 +transit,121.62570284887119,14.56618927780754 +transit,121.63486873964699,14.566716779251148 +transit,121.64403467399059,14.567243921482198 +transit,121.65320065187416,14.567770704485456 +transit,121.66236667326987,14.568297128245705 +transit,121.67153273814988,14.568823192747736 +transit,121.68069884648634,14.569348897976344 +transit,121.68986499825142,14.569874243916354 +transit,121.69903119341727,14.57039923055257 +transit,121.70819743195602,14.570923857869833 +transit,121.71736371383982,14.571448125852982 +transit,121.72653003904081,14.571972034486867 +transit,121.73569640753111,14.572495583756353 +transit,121.74486281928284,14.57301877364631 +transit,121.75402927426813,14.573541604141617 +transit,121.7631957724591,14.574064075227167 +transit,121.77236231382784,14.574586186887863 +transit,121.78152889834648,14.575107939108621 +transit,121.7906955259871,14.575629331874358 +transit,121.7998621967218,14.57615036517001 +transit,121.80902891052267,14.57667103898051 +transit,121.8181956673618,14.577191353290825 +transit,121.82736246721126,14.577711308085908 +transit,121.83652931004313,14.57823090335073 +transit,121.84569619582949,14.578750139070287 +transit,121.85486312454239,14.579269015229562 +transit,121.8640300961539,14.579787531813555 +transit,121.87319711063607,14.580305688807288 +transit,121.88236416796094,14.580823486195785 +transit,121.89153126810058,14.581340923964072 +transit,121.90069841102701,14.5818580020972 +transit,121.90986559671227,14.582374720580212 +transit,121.9190328251284,14.58289107939819 +transit,121.92820009624741,14.583407078536194 +transit,121.93736741004133,14.583922717979313 +transit,121.94653476648217,14.584437997712644 +transit,121.95570216554196,14.584952917721287 +transit,121.96486960719268,14.585467477990361 +transit,121.97403709140634,14.58598167850499 +transit,121.98320461815494,14.586495519250304 +transit,121.99237218741048,14.58700900021146 +transit,122.00153979914494,14.587522121373604 +transit,122.01070745333028,14.5880348827219 +transit,122.0198751499385,14.588547284241535 +transit,122.02904288894156,14.589059325917686 +transit,122.03821067031143,14.589571007735548 +transit,122.04737849402008,14.590082329680333 +transit,122.05654636003946,14.590593291737255 +transit,122.06571426834152,14.59110389389154 +transit,122.07488221889822,14.591614136128431 +transit,122.08405021168149,14.592124018433163 +transit,122.09321824666326,14.592633540791 +transit,122.10238632381547,14.593142703187215 +transit,122.11155444311005,14.593651505607074 +transit,122.12072260451893,14.594159948035873 +transit,122.12989080801403,14.594668030458902 +transit,122.13905905356724,14.595175752861477 +transit,122.14822734115047,14.595683115228915 +transit,122.15739567073565,14.59619011754654 +transit,122.16656404229467,14.596696759799693 +transit,122.1757324557994,14.59720304197372 +transit,122.18490091122176,14.597708964053986 +transit,122.19406940853362,14.598214526025854 +transit,122.20323794770685,14.598719727874704 +transit,122.21240652871334,14.599224569585928 +transit,122.22157515152496,14.599729051144925 +transit,122.23074381611356,14.600233172537102 +transit,122.23991252245101,14.600736933747877 +transit,122.24908127050917,14.60124033476269 +transit,122.25825006025988,14.60174337556697 +transit,122.26741889167498,14.602246056146171 +transit,122.27658776472633,14.602748376485765 +transit,122.28575667938576,14.6032503365712 +transit,122.29492563562509,14.603751936387978 +transit,122.30409463341616,14.604253175921576 +transit,122.31326367273077,14.604754055157505 +transit,122.32243275354075,14.605254574081268 +transit,122.33160187581792,14.605754732678392 +transit,122.34077103953409,14.60625453093441 +transit,122.34994024466104,14.60675396883486 +transit,122.3591094911706,14.6072530463653 +transit,122.36827877903453,14.607751763511283 +transit,122.37744810822463,14.60825012025839 +transit,122.38661747871268,14.6087481165922 +transit,122.39578689047046,14.609245752498305 +transit,122.40495634346976,14.609743027962317 +transit,122.41412583768232,14.610239942969839 +transit,122.42329537307994,14.610736497506496 +transit,122.43246494963434,14.611232691557927 +transit,122.44163456731731,14.61172852510977 +transit,122.45080422610057,14.61222399814768 +transit,122.45997392595588,14.612719110657332 +transit,122.46914366685498,14.613213862624384 +transit,122.47831344876961,14.613708254034531 +transit,122.4874832716715,14.61420228487347 +transit,122.49665313553236,14.614695955126896 +transit,122.50582304032393,14.615189264780534 +transit,122.51499298601792,14.615682213820106 +transit,122.52416297258604,14.616174802231347 +TP8,122.533333,14.61666703 +transit,122.52556561919452,14.621547870102633 +transit,122.51779789531567,14.626428449327847 +transit,122.51002982824683,14.631308767573683 +transit,122.50226141787151,14.636188824738152 +transit,122.49449266407314,14.641068620719285 +transit,122.48672356673521,14.64594815541507 +transit,122.47895412574117,14.650827428723506 +transit,122.47118434097452,14.65570644054257 +transit,122.46341421231872,14.66058519077024 +transit,122.4556437396573,14.665463679304477 +transit,122.44787292287376,14.670341906043225 +transit,122.44010176185158,14.675219870884417 +transit,122.43233025647429,14.680097573725998 +transit,122.42455840662541,14.684975014465873 +transit,122.41678621218847,14.689852193001954 +transit,122.40901367304701,14.694729109232135 +transit,122.40124078908458,14.699605763054308 +transit,122.39346756018472,14.704482154366342 +transit,122.38569398623098,14.709358283066104 +transit,122.37792006710694,14.714234149051446 +transit,122.37014580269616,14.719109752220218 +transit,122.36237119288224,14.723985092470246 +transit,122.35459623754872,14.728860169699349 +transit,122.34682093657923,14.733734983805347 +transit,122.33904528985737,14.738609534686038 +transit,122.33126929726672,14.743483822239215 +transit,122.32349295869092,14.748357846362651 +transit,122.31571627401357,14.753231606954119 +transit,122.3079392431183,14.758105103911376 +transit,122.30016186588877,14.762978337132163 +transit,122.29238414220859,14.767851306514233 +transit,122.28460607196142,14.772724011955296 +transit,122.27682765503093,14.777596453353075 +transit,122.26904889130076,14.782468630605276 +transit,122.26126978065459,14.787340543609588 +transit,122.25349032297609,14.7922121922637 +transit,122.24571051814895,14.797083576465276 +transit,122.23793036605687,14.801954696111991 +transit,122.23014986658353,14.806825551101488 +transit,122.22236901961266,14.811696141331407 +transit,122.21458782502795,14.816566466699378 +transit,122.20680628271313,14.821436527103023 +transit,122.19902439255192,14.826306322439951 +transit,122.19124215442805,14.831175852607759 +transit,122.18345956822529,14.836045117504034 +transit,122.17567663382735,14.84091411702635 +transit,122.16789335111802,14.845782851072276 +transit,122.16010971998104,14.850651319539361 +transit,122.15232574030018,14.855519522325157 +transit,122.14454141195925,14.860387459327194 +transit,122.136756734842,14.865255130442998 +transit,122.12897170883222,14.870122535570081 +transit,122.12118633381372,14.874989674605935 +transit,122.11340060967032,14.87985654744806 +transit,122.10561453628581,14.884723153993935 +transit,122.09782811354404,14.889589494141026 +transit,122.0900413413288,14.894455567786792 +transit,122.08225421952395,14.899321374828682 +transit,122.07446674801334,14.904186915164132 +transit,122.0666789266808,14.909052188690572 +transit,122.05889075541019,14.91391719530541 +transit,122.05110223408538,14.918781934906056 +transit,122.04331336259025,14.923646407389905 +transit,122.03552414080868,14.928510612654335 +transit,122.02773456862452,14.933374550596724 +transit,122.01994464592171,14.93823822111443 +transit,122.01215437258413,14.943101624104806 +transit,122.0043637484957,14.947964759465188 +transit,121.99657277354034,14.95282762709291 +transit,121.98878144760195,14.95769022688529 +transit,121.98098977056446,14.962552558739631 +transit,121.97319774231184,14.967414622553237 +transit,121.96540536272802,14.97227641822339 +transit,121.95761263169695,14.977137945647371 +transit,121.94981954910257,14.981999204722436 +transit,121.94202611482889,14.986860195345843 +transit,121.93423232875986,14.991720917414838 +transit,121.92643819077946,14.99658137082665 +transit,121.91864370077171,15.001441555478497 +transit,121.91084885862058,15.006301471267596 +transit,121.90305366421008,15.011161118091142 +transit,121.89525811742422,15.016020495846332 +transit,121.88746221814702,15.020879604430334 +transit,121.87966596626254,15.025738443740327 +transit,121.87186936165476,15.030597013673455 +transit,121.86407240420777,15.035455314126871 +transit,121.85627509380559,15.040313344997712 +transit,121.8484774303323,15.0451711061831 +transit,121.84067941367195,15.050028597580143 +transit,121.83288104370862,15.054885819085952 +transit,121.8250823203264,15.05974277059761 +transit,121.81728324340935,15.064599452012208 +transit,121.80948381284159,15.06945586322681 +transit,121.80168402850722,15.074312004138477 +transit,121.79388389029036,15.079167874644254 +transit,121.7860833980751,15.084023474641183 +transit,121.77828255174559,15.088878804026292 +transit,121.77048135118595,15.093733862696592 +transit,121.76267979628034,15.09858865054909 +transit,121.7548778869129,15.10344316748078 +transit,121.74707562296777,15.108297413388643 +transit,121.73927300432914,15.113151388169657 +transit,121.73147003088116,15.118005091720779 +transit,121.72366670250803,15.122858523938962 +transit,121.71586301909392,15.127711684721149 +transit,121.70805898052303,15.132564573964261 +transit,121.70025458667959,15.137417191565222 +transit,121.69244983744775,15.142269537420944 +transit,121.6846447327118,15.147121611428311 +transit,121.67683927235592,15.151973413484216 +transit,121.66903345626434,15.15682494348553 +transit,121.66122728432133,15.161676201329124 +transit,121.65342075641112,15.166527186911841 +transit,121.64561387241798,15.171377900130533 +transit,121.63780663222616,15.176228340882028 +transit,121.62999903571995,15.181078509063143 +transit,121.6221910827836,15.185928404570689 +transit,121.61438277330143,15.190778027301468 +transit,121.60657410715773,15.195627377152261 +transit,121.59876508423677,15.200476454019848 +transit,121.59095570442291,15.205325257800993 +transit,121.58314596760046,15.210173788392458 +transit,121.57533587365371,15.215022045690983 +transit,121.56752542246704,15.219870029593292 +transit,121.55971461392477,15.22471773999612 +transit,121.55190344791124,15.229565176796171 +transit,121.54409192431083,15.23441233989015 +transit,121.5362800430079,15.239259229174742 +transit,121.52846780388683,15.24410584454663 +transit,121.52065520683199,15.248952185902473 +transit,121.51284225172778,15.253798253138939 +transit,121.50502893845858,15.258644046152666 +transit,121.49721526690882,15.263489564840294 +transit,121.4894012369629,15.268334809098441 +transit,121.48158684850526,15.273179778823721 +transit,121.47377210142031,15.278024473912744 +transit,121.46595699559248,15.28286889426209 +transit,121.45814153090625,15.287713039768345 +transit,121.45032570724604,15.292556910328077 +transit,121.44250952449632,15.29740050583784 +transit,121.43469298254158,15.30224382619419 +transit,121.42687608126626,15.307086871293658 +transit,121.41905882055488,15.311929641032771 +transit,121.41124120029193,15.316772135308046 +transit,121.40342322036187,15.321614354015976 +transit,121.39560488064927,15.326456297053063 +transit,121.38778618103862,15.331297964315786 +transit,121.37996712141444,15.336139355700615 +transit,121.37214770166128,15.340980471104006 +transit,121.36432792166367,15.345821310422412 +transit,121.35650778130615,15.350661873552276 +transit,121.3486872804733,15.355502160390012 +transit,121.34086641904968,15.360342170832043 +transit,121.33304519691985,15.365181904774774 +transit,121.32522361396842,15.3700213621146 +transit,121.31740167007995,15.374860542747898 +transit,121.30957936513906,15.379699446571044 +transit,121.30175669903035,15.384538073480398 +transit,121.29393367163843,15.389376423372305 +transit,121.28611028284793,15.39421449614311 +transit,121.27828653254349,15.399052291689138 +transit,121.27046242060972,15.403889809906707 +transit,121.2626379469313,15.408727050692123 +transit,121.25481311139286,15.413564013941675 +transit,121.2469879138791,15.418400699551658 +transit,121.23916235427465,15.423237107418332 +transit,121.2313364324642,15.428073237437966 +transit,121.22351014833248,15.432909089506806 +transit,121.21568350176413,15.437744663521098 +transit,121.20785649264388,15.442579959377069 +transit,121.20002912085647,15.447414976970931 +transit,121.19220138628657,15.452249716198892 +transit,121.18437328881895,15.457084176957158 +transit,121.17654482833832,15.4619183591419 +transit,121.16871600472946,15.466752262649294 +transit,121.16088681787708,15.471585887375513 +transit,121.153057267666,15.476419233216696 +transit,121.14522735398094,15.481252300068983 +transit,121.1373970767067,15.486085087828513 +transit,121.12956643572808,15.490917596391396 +transit,121.12173543092986,15.495749825653744 +transit,121.11390406219684,15.500581775511655 +transit,121.10607232941386,15.505413445861208 +transit,121.09824023246571,15.51024483659848 +transit,121.09040777123724,15.51507594761953 +transit,121.08257494561329,15.51990677882042 +transit,121.0747417554787,15.52473733009718 +transit,121.06690820071832,15.529567601345844 +transit,121.05907428121701,15.534397592462433 +transit,121.05123999685966,15.539227303342948 +transit,121.04340534753115,15.544056733883396 +transit,121.03557033311634,15.548885883979748 +transit,121.02773495350016,15.553714753527995 +transit,121.01989920856751,15.558543342424088 +transit,121.0120630982033,15.563371650563985 +transit,121.00422662229244,15.568199677843625 +transit,120.99638978071987,15.573027424158942 +transit,120.98855257337054,15.577854889405847 +transit,120.9807150001294,15.582682073480255 +transit,120.97287706088137,15.587508976278063 +transit,120.96503875551146,15.592335597695147 +transit,120.95720008390462,15.59716193762739 +transit,120.94936104594584,15.601987995970662 +transit,120.94152164152011,15.606813772620804 +transit,120.93368187051243,15.611639267473658 +transit,120.92584173280781,15.616464480425057 +transit,120.91800122829126,15.621289411370824 +transit,120.91016035684781,15.626114060206762 +transit,120.9023191183625,15.630938426828667 +transit,120.89447751272036,15.635762511132329 +transit,120.88663553980643,15.640586313013518 +transit,120.87879319950581,15.645409832368003 +transit,120.87095049170354,15.650233069091534 +transit,120.8631074162847,15.65505602307985 +transit,120.85526397313437,15.659878694228684 +transit,120.84742016213767,15.664701082433753 +transit,120.83957598317967,15.669523187590764 +transit,120.83173143614549,15.674345009595418 +transit,120.82388652092027,15.679166548343394 +transit,120.81604123738913,15.683987803730375 +transit,120.80819558543719,15.688808775652017 +transit,120.80034956494961,15.69362946400397 +transit,120.79250317581156,15.698449868681891 +transit,120.78465641790818,15.703269989581393 +transit,120.77680929112465,15.708089826598103 +transit,120.76896179534616,15.712909379627623 +transit,120.76111393045788,15.717728648565553 +transit,120.75326569634504,15.72254763330748 +transit,120.74541709289281,15.727366333748977 +transit,120.73756811998645,15.732184749785599 +transit,120.72971877751114,15.737002881312911 +transit,120.72186906535215,15.741820728226447 +transit,120.71401898339471,15.746638290421732 +transit,120.70616853152407,15.75145556779429 +transit,120.69831770962548,15.756272560239628 +transit,120.69046651758426,15.761089267653242 +transit,120.68261495528562,15.765905689930612 +transit,120.67476302261487,15.770721826967218 +transit,120.66691071945732,15.775537678658523 +transit,120.65905804569827,15.780353244899969 +transit,120.65120500122303,15.785168525587002 +transit,120.64335158591693,15.789983520615053 +transit,120.6354977996653,15.794798229879532 +transit,120.62764364235348,15.799612653275858 +transit,120.6197891138668,15.804426790699411 +transit,120.61193421409065,15.809240642045587 +transit,120.60407894291038,15.814054207209752 +transit,120.59622330021138,15.818867486087273 +transit,120.588367285879,15.823680478573497 +transit,120.58051089979868,15.828493184563765 +transit,120.57265414185579,15.8333056039534 +transit,120.56479701193577,15.838117736637717 +transit,120.556939509924,15.842929582512037 +transit,120.54908163570596,15.84774114147164 +transit,120.54122338916706,15.852552413411813 +transit,120.53336477019276,15.857363398227829 +transit,120.5255057786685,15.862174095814947 +transit,120.51764641447977,15.866984506068418 +transit,120.50978667751204,15.871794628883478 +transit,120.50192656765077,15.876604464155356 +transit,120.49406608478148,15.88141401177927 +transit,120.48620522878967,15.886223271650417 +transit,120.47834399956085,15.891032243664 +transit,120.47048239698053,15.895840927715195 +transit,120.46262042093426,15.90064932369917 +transit,120.45475807130757,15.905457431511095 +transit,120.44689534798599,15.910265251046106 +transit,120.43903225085509,15.915072782199351 +transit,120.43116877980046,15.91988002486595 +transit,120.42330493470766,15.924686978941011 +transit,120.41544071546227,15.929493644319649 +transit,120.40757612194987,15.93430002089695 +transit,120.39971115405609,15.939106108567994 +transit,120.39184581166654,15.943911907227859 +transit,120.38398009466682,15.94871741677159 +transit,120.37611400294259,15.953522637094247 +transit,120.36824753637947,15.958327568090855 +transit,120.36038069486312,15.96313220965645 +transit,120.35251347827919,15.96793656168603 +transit,120.34464588651336,15.972740624074607 +transit,120.33677791945131,15.97754439671717 +transit,120.3289095769787,15.982347879508701 +transit,120.32104085898125,15.987151072344163 +transit,120.31317176534466,15.991953975118513 +transit,120.30530229595463,15.9967565877267 +transit,120.29743245069693,16.001558910063654 +transit,120.28956222945723,16.006360942024305 +transit,120.28169163212132,16.01116268350356 +transit,120.27382065857493,16.015964134396313 +transit,120.26594930870382,16.020765294597464 +transit,120.25807758239378,16.025566164001887 +transit,120.25020547953058,16.03036674250444 +RPUG,120.242333,16.03516703 +transit,120.24623823181024,16.027308305816007 +transit,120.25014315779546,16.019449504816514 +transit,120.25404777813486,16.011590627046164 +transit,120.25795209300753,16.003731672549574 +transit,120.26185610259255,15.995872641371351 +transit,120.26575980706895,15.98801353355609 +transit,120.26966320661572,15.980154349148401 +transit,120.2735663014118,15.972295088192846 +transit,120.27746909163608,15.964435750733996 +transit,120.28137157746741,15.956576336816413 +transit,120.28527375908462,15.948716846484638 +transit,120.28917563666643,15.940857279783213 +transit,120.29307721039159,15.93299763675666 +transit,120.29697848043877,15.925137917449488 +transit,120.30087944698658,15.917278121906211 +transit,120.30478011021364,15.909418250171314 +transit,120.30868047029847,15.90155830228928 +transit,120.31258052741956,15.893698278304585 +transit,120.31648028175536,15.885838178261688 +transit,120.3203797334843,15.877978002205033 +transit,120.32427888278474,15.870117750179068 +transit,120.32817772983499,15.862257422228218 +transit,120.33207627481332,15.854397018396904 +transit,120.33597451789798,15.846536538729532 +transit,120.33987245926716,15.83867598327049 +transit,120.34377009909898,15.83081535206418 +transit,120.34766743757156,15.822954645154963 +transit,120.35156447486294,15.815093862587212 +transit,120.35546121115117,15.807233004405274 +transit,120.35935764661417,15.7993720706535 +transit,120.36325378142989,15.791511061376225 +transit,120.36714961577621,15.783649976617763 +transit,120.37104514983096,15.775788816422434 +transit,120.37494038377194,15.767927580834526 +transit,120.3788353177769,15.760066269898346 +transit,120.38272995202355,15.752204883658163 +transit,120.38662428668954,15.744343422158245 +transit,120.39051832195248,15.736481885442863 +transit,120.39441205798998,15.728620273556256 +transit,120.39830549497955,15.720758586542665 +transit,120.40219863309868,15.712896824446311 +transit,120.4060914725248,15.705034987311416 +transit,120.40998401343533,15.697173075182189 +transit,120.41387625600763,15.689311088102823 +transit,120.417768200419,15.681449026117498 +transit,120.42165984684671,15.6735868892704 +transit,120.425551195468,15.665724677605683 +transit,120.42944224646006,15.657862391167502 +TP9,120.433333,15.65000003 +transit,120.43556823903522,15.64149172352093 +transit,120.43780329336165,15.632983387670583 +transit,120.44003816309964,15.624475022467013 +transit,120.44227284836951,15.615966627928293 +transit,120.44450734929154,15.607458204072472 +transit,120.44674166598597,15.59894975091761 +transit,120.44897579857302,15.590441268481753 +transit,120.45120974717285,15.581932756782956 +transit,120.45344351190562,15.57342421583926 +transit,120.45567709289142,15.564915645668703 +transit,120.45791049025034,15.556407046289324 +transit,120.46014370410239,15.547898417719157 +transit,120.46237673456761,15.539389759976224 +transit,120.46460958176594,15.530881073078557 +transit,120.46684224581733,15.522372357044167 +transit,120.46907472684168,15.513863611891091 +transit,120.47130702495885,15.505354837637327 +transit,120.47353914028865,15.496846034300894 +transit,120.47577107295092,15.4883372018998 +transit,120.4780028230654,15.479828340452036 +transit,120.4802343907518,15.471319449975615 +transit,120.48246577612984,15.462810530488522 +transit,120.48469697931918,15.454301582008759 +transit,120.48692800043943,15.445792604554313 +transit,120.4891588396102,15.43728359814316 +transit,120.49138949695102,15.428774562793299 +transit,120.49361997258144,15.420265498522689 +transit,120.49585026662093,15.41175640534931 +transit,120.49808037918895,15.403247283291138 +transit,120.50031031040493,15.394738132366136 +transit,120.50254006038826,15.386228952592264 +transit,120.50476962925826,15.377719743987488 +transit,120.50699901713428,15.369210506569756 +transit,120.5092282241356,15.360701240357029 +transit,120.51145725038145,15.352191945367249 +transit,120.51368609599108,15.343682621618361 +transit,120.51591476108365,15.335173269128315 +transit,120.5181432457783,15.32666388791504 +transit,120.52037155019418,15.318154477996474 +transit,120.52259967445035,15.309645039390544 +transit,120.52482761866585,15.301135572115179 +transit,120.5270553829597,15.292626076188302 +transit,120.5292829674509,15.284116551627838 +transit,120.53151037225837,15.275606998451693 +transit,120.53373759750103,15.267097416677787 +transit,120.53596464329776,15.258587806324032 +transit,120.5381915097674,15.250078167408322 +transit,120.54041819702879,15.241568499948567 +transit,120.54264470520067,15.233058803962667 +transit,120.54487103440181,15.224549079468511 +transit,120.54709718475091,15.216039326483996 +transit,120.54932315636665,15.207529545027002 +transit,120.55154894936767,15.199019735115417 +transit,120.55377456387261,15.19050989676712 +RPLC,120.556,15.18200003 +transit,120.56232759211345,15.175791398462003 +transit,120.568654814593,15.169582585856645 +transit,120.5749816676081,15.16337359227141 +transit,120.58130815132822,15.157164417793794 +transit,120.5876342659228,15.150955062511267 +transit,120.59396001156126,15.14474552651128 +transit,120.60028538841301,15.138535809881272 +transit,120.60661039664744,15.132325912708675 +transit,120.61293503643391,15.126115835080892 +transit,120.6192593079418,15.11990557708532 +transit,120.62558321134041,15.113695138809339 +transit,120.63190674679909,15.107484520340309 +transit,120.63822991448711,15.10127372176558 +transit,120.64455271457378,15.095062743172493 +transit,120.65087514722836,15.088851584648351 +transit,120.65719721262009,15.082640246280466 +transit,120.6635189109182,15.076428728156124 +transit,120.66984024229191,15.070217030362606 +transit,120.67616120691042,15.064005152987152 +transit,120.6824818049429,15.057793096117013 +transit,120.68880203655851,15.051580859839419 +transit,120.6951219019264,15.045368444241577 +transit,120.70144140121567,15.03915584941069 +transit,120.70776053459548,15.03294307543393 +transit,120.71407930223488,15.026730122398469 +transit,120.72039770430295,15.020516990391458 +transit,120.72671574096876,15.014303679500028 +transit,120.73303341240134,15.008090189811307 +transit,120.7393507187697,15.001876521412399 +transit,120.74566766024286,14.99566267439039 +transit,120.75198423698978,14.989448648832358 +transit,120.75830044917947,14.983234444825364 +transit,120.76461629698086,14.977020062456457 +transit,120.77093178056288,14.970805501812661 +transit,120.77724690009445,14.964590762980993 +transit,120.78356165574446,14.958375846048451 +transit,120.78987604768182,14.95216075110203 +transit,120.79619007607536,14.94594547822869 +transit,120.80250374109394,14.939730027515386 +transit,120.8088170429064,14.933514399049061 +transit,120.81512998168154,14.927298592916644 +transit,120.82144255758816,14.921082609205031 +transit,120.82775477079502,14.914866448001135 +transit,120.83406662147091,14.908650109391827 +transit,120.84037810978455,14.90243359346397 +transit,120.84668923590468,14.896216900304411 +RPUX,120.853,14.89000003 +transit,120.85979782446294,14.884600564854255 +transit,120.86659531051718,14.879200895697487 +transit,120.87339245829533,14.873801022616716 +transit,120.88018926793,14.868400945698953 +transit,120.88698573955382,14.863000665031208 +transit,120.89378187329942,14.857600180700459 +transit,120.90057766929938,14.852199492793686 +transit,120.90737312768633,14.846798601397856 +transit,120.91416824859287,14.841397506599918 +transit,120.92096303215158,14.835996208486819 +transit,120.92775747849507,14.830594707145481 +transit,120.9345515877559,14.825193002662823 +transit,120.94134536006668,14.819791095125751 +transit,120.94813879555998,14.814388984621152 +transit,120.95493189436837,14.808986671235916 +transit,120.96172465662443,14.803584155056903 +transit,120.96851708246069,14.798181436170978 +transit,120.97530917200974,14.792778514664978 +transit,120.98210092540413,14.78737539062574 +transit,120.9888923427764,14.781972064140092 +transit,120.9956834242591,14.776568535294828 +transit,121.00247416998477,14.771164804176754 +transit,121.00926458008594,14.765760870872654 +transit,121.01605465469515,14.760356735469305 +transit,121.02284439394494,14.754952398053465 +transit,121.02963379796779,14.749547858711882 +transit,121.03642286689625,14.744143117531296 +transit,121.0432116008628,14.738738174598431 +TP1,121.05,14.73333303 +transit,121.051095723919,14.72546409823825 +transit,121.05219136923515,14.717595155954921 +transit,121.05328693599787,14.709726203155862 +transit,121.05438242425664,14.701857239846916 +transit,121.05547783406094,14.693988266033939 +transit,121.05657316546016,14.686119281722771 +transit,121.05766841850375,14.678250286919257 +transit,121.05876359324112,14.670381281629242 +transit,121.05985868972166,14.662512265858577 +transit,121.06095370799477,14.654643239613106 +transit,121.0620486481098,14.646774202898664 +transit,121.0631435101161,14.63890515572111 +transit,121.06423829406307,14.631036098086266 +MAO1,121.065333,14.62316703 +transit,121.06905300826244,14.614962521959232 +transit,121.07277274046876,14.606757948816796 +transit,121.07649219679926,14.598553310614683 +transit,121.08021137743422,14.590348607394908 +transit,121.08393028255385,14.582143839199444 +transit,121.08764891233832,14.573939006070276 +transit,121.09136726696777,14.56573410804936 +transit,121.09508534662227,14.557529145178671 +transit,121.09880315148189,14.549324117500145 +transit,121.1025206817266,14.54111902505572 +transit,121.10623793753639,14.532913867887324 +transit,121.10995491909114,14.524708646036885 +transit,121.11367162657073,14.516503359546299 +transit,121.117388060155,14.50829800845748 +transit,121.1211042200237,14.500092592812312 +transit,121.12482010635657,14.491887112652678 +transit,121.12853571933333,14.483681568020451 +transit,121.13225105913361,14.47547595895749 +transit,121.13596612593702,14.467270285505647 +transit,121.13968091992312,14.459064547706769 +transit,121.14339544127142,14.45085874560269 +transit,121.14710969016143,14.442652879235222 +transit,121.15082366677254,14.434446948646196 +transit,121.15453737128415,14.42624095387741 +transit,121.1582508038756,14.418034894970662 +transit,121.16196396472623,14.40982877196773 +transit,121.16567685401523,14.401622584910404 +transit,121.16938947192187,14.393416333840443 +transit,121.1731018186253,14.385210018799611 +transit,121.17681389430464,14.377003639829647 +transit,121.18052569913901,14.368797196972299 +transit,121.1842372333074,14.360590690269289 +transit,121.18794849698884,14.352384119762348 +transit,121.19165949036228,14.344177485493182 +transit,121.19537021360664,14.335970787503486 +transit,121.19908066690076,14.327764025834961 +transit,121.2027908504235,14.319557200529285 +transit,121.2065007643536,14.311350311628132 +transit,121.21021040886986,14.30314335917317 +transit,121.21391978415093,14.294936343206047 +transit,121.21762889037547,14.286729263768416 +transit,121.2213377277221,14.278522120901911 +transit,121.22504629636938,14.270314914648154 +transit,121.22875459649586,14.262107645048763 +transit,121.23246262827999,14.253900312145355 +transit,121.23617039190022,14.245692915979518 +transit,121.23987788753494,14.237485456592848 +transit,121.24358511536252,14.229277934026925 +transit,121.24729207556128,14.221070348323318 +transit,121.25099876830944,14.212862699523585 +transit,121.25470519378528,14.204654987669288 +transit,121.25841135216696,14.196447212801964 +transit,121.26211724363262,14.18823937496314 +transit,121.26582286836036,14.180031474194358 +transit,121.26952822652824,14.171823510537116 +transit,121.27323331831425,14.163615484032935 +transit,121.2769381438964,14.155407394723298 +transit,121.2806427034526,14.147199242649702 +transit,121.28434699716074,14.138991027853624 +transit,121.28805102519864,14.130782750376532 +transit,121.29175478774414,14.122574410259885 +transit,121.29545828497497,14.114366007545135 +transit,121.29916151706885,14.106157542273722 +transit,121.30286448420348,14.097949014487085 +transit,121.30656718655646,14.08974042422664 +transit,121.3102696243054,14.081531771533802 +transit,121.31397179762784,14.073323056449986 +transit,121.3176737067013,14.065114279016573 +transit,121.32137535170321,14.05690543927496 +transit,121.32507673281104,14.048696537266515 +transit,121.32877785020213,14.04048757303262 +transit,121.33247870405384,14.032278546614624 +transit,121.33617929454346,14.02406945805388 +transit,121.33987962184824,14.015860307391733 +transit,121.34357968614539,14.00765109466951 +transit,121.3472794876121,13.999441819928538 +transit,121.35097902642548,13.991232483210126 +transit,121.35467830276262,13.983023084555578 +transit,121.35837731680057,13.9748136240062 +transit,121.36207606871633,13.966604101603268 +transit,121.36577455868688,13.958394517388063 +transit,121.3694727868891,13.950184871401857 +transit,121.3731707534999,13.941975163685907 +transit,121.37686845869612,13.93376539428146 +transit,121.38056590265454,13.92555556322976 +transit,121.38426308555191,13.917345670572047 +transit,121.38796000756496,13.909135716349532 +transit,121.39165666887034,13.900925700603437 +transit,121.3953530696447,13.892715623374963 +transit,121.39904921006462,13.884505484705315 +transit,121.40274509030664,13.876295284635663 +transit,121.40644071054727,13.868085023207206 +transit,121.41013607096298,13.859874700461098 +transit,121.41383117173018,13.851664316438512 +transit,121.41752601302527,13.84345387118059 +transit,121.42122059502456,13.835243364728482 +transit,121.42491491790439,13.827032797123316 +transit,121.428608981841,13.818822168406216 +transit,121.43230278701058,13.810611478618304 +transit,121.43599633358934,13.802400727800679 +transit,121.43968962175342,13.794189915994446 +transit,121.44338265167887,13.78597904324069 +transit,121.44707542354179,13.777768109580496 +transit,121.45076793751815,13.769557115054928 +transit,121.45446019378396,13.76134605970505 +transit,121.45815219251513,13.753134943571922 +transit,121.46184393388755,13.744923766696585 +transit,121.46553541807705,13.736712529120073 +transit,121.46922664525948,13.728501230883413 +transit,121.47291761561057,13.720289872027625 +transit,121.47660832930606,13.712078452593715 +transit,121.48029878652163,13.703866972622688 +transit,121.48398898743292,13.695655432155535 +transit,121.48767893221556,13.687443831233237 +transit,121.49136862104507,13.679232169896766 +transit,121.495058054097,13.67102044818709 +transit,121.49874723154684,13.662808666145162 +transit,121.50243615357,13.654596823811936 +transit,121.50612482034191,13.646384921228343 +transit,121.50981323203793,13.638172958435316 +transit,121.51350138883335,13.629960935473784 +transit,121.51718929090346,13.621748852384647 +transit,121.52087693842353,13.613536709208814 +transit,121.52456433156871,13.60532450598718 +transit,121.5282514705142,13.597112242760629 +transit,121.5319383554351,13.588899919570041 +transit,121.53562498650648,13.580687536456287 +transit,121.5393113639034,13.572475093460218 +transit,121.54299748780082,13.564262590622697 +transit,121.54668335837373,13.55605002798456 +transit,121.55036897579704,13.547837405586638 +transit,121.55405434024563,13.539624723469759 +transit,121.5577394518943,13.531411981674745 +transit,121.56142431091791,13.523199180242393 +transit,121.56510891749117,13.514986319213511 +transit,121.5687932717888,13.506773398628885 +transit,121.5724773739855,13.498560418529294 +transit,121.57616122425588,13.490347378955521 +transit,121.57984482277456,13.482134279948319 +transit,121.58352816971609,13.47392112154845 +transit,121.58721126525498,13.46570790379666 +transit,121.5908941095657,13.457494626733688 +transit,121.59457670282269,13.449281290400265 +transit,121.59825904520038,13.44106789483711 +transit,121.60194113687308,13.432854440084938 +transit,121.60562297801513,13.424640926184447 +transit,121.60930456880082,13.416427353176337 +transit,121.61298590940439,13.408213721101292 +TP2,121.616667,13.40000003 +transit,121.60885689895416,13.404682816452143 +transit,121.60104649558956,13.409365359547875 +transit,121.59323578980056,13.414047659190004 +transit,121.58542478148156,13.418729715281337 +transit,121.57761347052694,13.423411527724678 +transit,121.56980185683109,13.42809309642281 +transit,121.56198994028843,13.43277442127851 +transit,121.55417772079338,13.437455502194558 +transit,121.54636519824032,13.442136339073716 +transit,121.53855237252374,13.446816931818734 +transit,121.53073924353802,13.451497280332362 +transit,121.52292581117764,13.456177384517337 +transit,121.51511207533704,13.460857244276388 +transit,121.50729803591068,13.465536859512236 +transit,121.49948369279302,13.470216230127596 +transit,121.49166904587854,13.474895356025165 +transit,121.48385409506173,13.479574237107645 +transit,121.47603884023708,13.484252873277716 +transit,121.46822328129907,13.488931264438063 +transit,121.46040741814224,13.493609410491347 +transit,121.45259125066107,13.498287311340237 +transit,121.4447747787501,13.502964966887383 +transit,121.43695800230387,13.507642377035422 +transit,121.42914092121687,13.512319541687 +transit,121.4213235353837,13.516996460744734 +transit,121.41350584469889,13.52167313411125 +transit,121.40568784905699,13.526349561689152 +transit,121.39786954835259,13.531025743381038 +transit,121.39005094248026,13.53570167908951 +transit,121.38223203133457,13.540377368717143 +transit,121.37441281481013,13.545052812166515 +transit,121.36659329280154,13.549728009340194 +transit,121.35877346520338,13.554402960140738 +transit,121.3509533319103,13.559077664470694 +transit,121.34313289281691,13.563752122232604 +transit,121.33531214781786,13.568426333328995 +transit,121.32749109680775,13.573100297662402 +transit,121.31966973968126,13.577774015135331 +transit,121.31184807633304,13.582447485650288 +transit,121.30402610665773,13.587120709109774 +transit,121.29620383055004,13.59179368541628 +transit,121.28838124790461,13.59646641447228 +transit,121.28055835861616,13.601138896180252 +transit,121.27273516257937,13.605811130442659 +transit,121.26491165968893,13.610483117161953 +transit,121.25708784983958,13.61515485624058 +transit,121.24926373292602,13.619826347580977 +transit,121.24143930884298,13.624497591085575 +transit,121.2336145774852,13.629168586656796 +transit,121.22578953874742,13.633839334197045 +transit,121.21796419252439,13.638509833608733 +transit,121.21013853871086,13.643180084794247 +transit,121.20231257720162,13.647850087655979 +transit,121.19448630789142,13.6525198420963 +transit,121.18665973067506,13.657189348017583 +transit,121.17883284544733,13.661858605322186 +transit,121.17100565210302,13.666527613912464 +transit,121.16317815053694,13.671196373690751 +transit,121.1553503406439,13.675864884559388 +transit,121.14752222231874,13.680533146420702 +transit,121.13969379545628,13.685201159177 +transit,121.13186505995137,13.6898689227306 +transit,121.12403601569883,13.694536436983796 +transit,121.11620666259356,13.69920370183888 +transit,121.10837700053037,13.703870717198136 +transit,121.10054702940418,13.70853748296383 +transit,121.09271674910985,13.713203999038237 +transit,121.08488615954226,13.717870265323603 +transit,121.07705526059632,13.722536281722183 +transit,121.06922405216693,13.727202048136217 +transit,121.06139253414901,13.731867564467928 +transit,121.05356070643747,13.736532830619538 +transit,121.04572856892723,13.741197846493264 +transit,121.03789612151326,13.745862611991306 +transit,121.03006336409047,13.750527127015868 +transit,121.02223029655383,13.755191391469129 +transit,121.0143969187983,13.759855405253267 +transit,121.00656323071884,13.764519168270452 +transit,120.99872923221045,13.769182680422844 +transit,120.9908949231681,13.7738459416126 +transit,120.9830603034868,13.778508951741857 +transit,120.97522537306153,13.783171710712756 +transit,120.96739013178733,13.787834218427415 +transit,120.95955457955918,13.792496474787962 +transit,120.95171871627214,13.79715847969649 +transit,120.94388254182124,13.801820233055116 +transit,120.93604605610152,13.806481734765917 +transit,120.92820925900803,13.811142984730987 +transit,120.92037215043582,13.815803982852387 +transit,120.91253473027999,13.820464729032192 +transit,120.9046969984356,13.82512522317246 +transit,120.89685895479772,13.829785465175233 +transit,120.88902059926147,13.83444545494255 +transit,120.88118193172193,13.839105192376438 +transit,120.87334295207422,13.843764677378928 +transit,120.86550366021348,13.848423909852029 +transit,120.8576640560348,13.85308288969774 +transit,120.84982413943335,13.85774161681806 +transit,120.84198391030425,13.862400091114976 +transit,120.83414336854266,13.867058312490467 +transit,120.82630251404373,13.871716280846499 +transit,120.81846134670265,13.876373996085038 +transit,120.81061986641458,13.88103145810803 +transit,120.80277807307472,13.885688666817417 +transit,120.79493596657825,13.89034562211514 +transit,120.78709354682039,13.895002323903118 +transit,120.77925081369634,13.89965877208327 +transit,120.77140776710131,13.904314966557509 +transit,120.76356440693054,13.908970907227724 +transit,120.75572073307927,13.913626593995817 +transit,120.74787674544274,13.918282026763661 +transit,120.7400324439162,13.922937205433131 +transit,120.73218782839493,13.927592129906097 +transit,120.72434289877417,13.932246800084409 +transit,120.71649765494922,13.936901215869911 +transit,120.70865209681536,13.941555377164446 +transit,120.7008062242679,13.946209283869846 +transit,120.69296003720211,13.95086293588793 +transit,120.68511353551334,13.955516333120501 +transit,120.67726671909688,13.960169475469373 +transit,120.6694195878481,13.964822362836333 +transit,120.66157214166229,13.969474995123171 +transit,120.65372438043484,13.974127372231665 +transit,120.64587630406108,13.978779494063577 +transit,120.63802791243637,13.98343136052067 +transit,120.6301792054561,13.988082971504696 +transit,120.62233018301566,13.992734326917393 +transit,120.6144808450104,13.997385426660493 +transit,120.60663119133577,14.002036270635728 +transit,120.59878122188714,14.006686858744802 +transit,120.59093093655993,14.01133719088943 +transit,120.58308033524956,14.015987266971308 +transit,120.57522941785149,14.02063708689212 +transit,120.56737818426113,14.025286650553555 +transit,120.55952663437395,14.029935957857278 +transit,120.5516747680854,14.034585008704955 +transit,120.54382258529097,14.039233802998234 +transit,120.5359700858861,14.043882340638765 +transit,120.52811726976628,14.048530621528187 +transit,120.52026413682704,14.053178645568119 +transit,120.51241068696383,14.057826412660184 +transit,120.50455692007222,14.062473922705996 +transit,120.49670283604766,14.067121175607145 +transit,120.48884843478574,14.071768171265235 +transit,120.48099371618197,14.076414909581842 +transit,120.47313868013188,14.081061390458546 +transit,120.46528332653106,14.085707613796908 +transit,120.45742765527504,14.090353579498489 +transit,120.44957166625943,14.09499928746483 +transit,120.44171535937977,14.099644737597474 +transit,120.43385873453167,14.10428992979796 +transit,120.42600179161073,14.108934863967795 +transit,120.41814453051254,14.113579540008503 +transit,120.41028695113273,14.11822395782158 +transit,120.40242905336693,14.12286811730853 +transit,120.39457083711076,14.127512018370826 +transit,120.38671230225987,14.132155660909964 +transit,120.3788534487099,14.136799044827397 +transit,120.37099427635653,14.141442170024593 +transit,120.36313478509541,14.146085036402994 +transit,120.35527497482222,14.150727643864053 +transit,120.34741484543267,14.155369992309202 +transit,120.33955439682241,14.160012081639858 +transit,120.33169362888718,14.164653911757439 +transit,120.32383254152268,14.169295482563356 +transit,120.31597113462463,14.173936793959003 +transit,120.30810940808878,14.178577845845775 +transit,120.30024736181085,14.183218638125043 +transit,120.29238499568658,14.187859170698184 +transit,120.28452230961175,14.19249944346656 +transit,120.2766593034821,14.197139456331524 +transit,120.26879597719343,14.20177920919442 +transit,120.26093233064152,14.206418701956586 +transit,120.25306836372216,14.21105793451935 +transit,120.24520407633115,14.215696906784025 +transit,120.2373394683643,14.220335618651925 +transit,120.22947453971743,14.224974070024347 +transit,120.22160929028637,14.229612260802586 +transit,120.21374371996696,14.234250190887922 +transit,120.20587782865503,14.23888786018163 +transit,120.19801161624646,14.243525268584978 +transit,120.19014508263712,14.248162415999214 +transit,120.18227822772285,14.252799302325593 +transit,120.17441105139956,14.25743592746535 +transit,120.16654355356313,14.262072291319715 +transit,120.15867573410947,14.26670839378991 +transit,120.15080759293448,14.271344234777144 +transit,120.14293912993409,14.275979814182621 +transit,120.13507034500422,14.280615131907531 +transit,120.12720123804081,14.28525018785307 +transit,120.1193318089398,14.2898849819204 +transit,120.11146205759717,14.294519514010698 +transit,120.10359198390884,14.299153784025119 +transit,120.09572158777083,14.303787791864814 +transit,120.08785086907909,14.308421537430918 +transit,120.07997982772963,14.313055020624567 +transit,120.07210846361845,14.317688241346882 +transit,120.06423677664154,14.322321199498983 +transit,120.05636476669494,14.326953894981964 +transit,120.04849243367467,14.331586327696932 +transit,120.04061977747678,14.336218497544966 +transit,120.0327467979973,14.34085040442715 +transit,120.02487349513228,14.345482048244548 +transit,120.01699986877782,14.350113428898224 +transit,120.00912591882997,14.354744546289226 +transit,120.0012516451848,14.359375400318594 +transit,119.99337704773842,14.364005990887367 +transit,119.98550212638693,14.368636317896572 +transit,119.97762688102645,14.373266381247218 +transit,119.96975131155308,14.377896180840319 +transit,119.96187541786297,14.382525716576863 +transit,119.95399919985225,14.387154988357846 +transit,119.94612265741705,14.391783996084245 +transit,119.93824579045356,14.396412739657029 +transit,119.93036859885792,14.401041218977165 +transit,119.92249108252634,14.405669433945606 +transit,119.91461324135496,14.410297384463295 +transit,119.90673507524,14.414925070431163 +transit,119.89885658407766,14.419552491750142 +transit,119.89097776776416,14.424179648321147 +transit,119.88309862619572,14.428806540045086 +transit,119.87521915926855,14.433433166822855 +transit,119.86733936687892,14.438059528555351 +transit,119.85945924892306,14.442685625143456 +transit,119.85157880529725,14.447311456488034 +transit,119.84369803589775,14.451937022489954 +transit,119.83581694062082,14.456562323050072 +transit,119.82793551936278,14.461187358069234 +transit,119.8200537720199,14.465812127448268 +transit,119.8121716984885,14.470436631088013 +transit,119.8042892986649,14.475060868889285 +transit,119.79640657244542,14.479684840752888 +transit,119.78852351972638,14.484308546579626 +transit,119.78064014040415,14.488931986270298 +transit,119.77275643437507,14.493555159725679 +transit,119.76487240153551,14.498178066846538 +transit,119.75698804178184,14.502800707533652 +transit,119.74910335501042,14.507423081687769 +transit,119.74121834111769,14.512045189209637 +TP3,119.733333,14.51666703 +transit,119.74245511347887,14.516859138136162 +transit,119.75157724268301,14.517050891614721 +transit,119.76069938758363,14.517242290430186 +transit,119.7698215481519,14.517433334577088 +transit,119.778943724359,14.517624024049958 +transit,119.78806591617612,14.517814358843355 +transit,119.79718812357443,14.518004338951831 +transit,119.80631034652511,14.518193964369956 +transit,119.81543258499933,14.518383235092298 +transit,119.82455483896827,14.518572151113457 +transit,119.8336771084031,14.518760712428026 +transit,119.84279939327499,14.51894891903061 +transit,119.8519216935551,14.519136770915836 +transit,119.8610440092146,14.519324268078323 +transit,119.87016634022466,14.519511410512713 +transit,119.87928868655644,14.519698198213655 +transit,119.8884110481811,14.519884631175808 +transit,119.8975334250698,14.520070709393838 +transit,119.90665581719368,14.52025643286243 +transit,119.91577822452392,14.520441801576267 +transit,119.92490064703168,14.52062681553005 +transit,119.93402308468808,14.520811474718489 +transit,119.94314553746429,14.520995779136301 +transit,119.95226800533146,14.521179728778218 +transit,119.96139048826073,14.521363323638978 +transit,119.97051298622326,14.521546563713331 +transit,119.97963549919015,14.52172944899604 +transit,119.9887580271326,14.52191197948187 +transit,119.99788057002172,14.522094155165606 +transit,120.00700312782864,14.522275976042032 +transit,120.01612570052451,14.522457442105951 +transit,120.02524828808046,14.522638553352174 +transit,120.03437089046764,14.52281930977552 +transit,120.04349350765715,14.522999711370826 +transit,120.05261613962014,14.523179758132923 +transit,120.06173878632774,14.52335945005667 +transit,120.07086144775107,14.523538787136921 +transit,120.07998412386125,14.523717769368552 +transit,120.0891068146294,14.523896396746444 +transit,120.09822952002666,14.524074669265486 +transit,120.10735224002414,14.524252586920579 +transit,120.11647497459296,14.524430149706639 +transit,120.12559772370423,14.524607357618583 +transit,120.13472048732906,14.524784210651344 +transit,120.14384326543858,14.524960708799867 +transit,120.15296605800388,14.525136852059099 +transit,120.1620888649961,14.525312640424003 +transit,120.17121168638631,14.525488073889557 +transit,120.18033452214566,14.525663152450734 +transit,120.1894573722452,14.525837876102537 +transit,120.19858023665608,14.526012244839965 +transit,120.20770311534939,14.526186258658022 +transit,120.21682600829621,14.526359917551739 +transit,120.22594891546765,14.526533221516154 +transit,120.23507183683482,14.5267061705463 +transit,120.2441947723688,14.526878764637232 +transit,120.25331772204069,14.527051003784026 +transit,120.26244068582157,14.52722288798174 +transit,120.27156366368254,14.527394417225459 +transit,120.28068665559469,14.527565591510283 +transit,120.2898096615291,14.527736410831311 +transit,120.29893268145686,14.527906875183666 +transit,120.30805571534906,14.528076984562459 +transit,120.31717876317676,14.528246738962837 +transit,120.32630182491106,14.528416138379937 +transit,120.33542490052302,14.528585182808916 +transit,120.34454798998375,14.528753872244932 +transit,120.3536710932643,14.52892220668317 +transit,120.36279421033575,14.529090186118813 +transit,120.37191734116917,14.529257810547046 +transit,120.38104048573562,14.529425079963088 +transit,120.3901636440062,14.529591994362148 +transit,120.39928681595194,14.529758553739445 +transit,120.40841000154394,14.529924758090225 +transit,120.41753320075324,14.530090607409731 +transit,120.42665641355092,14.530256101693213 +transit,120.43577963990803,14.530421240935938 +transit,120.44490287979563,14.530586025133196 +transit,120.4540261331848,14.530750454280257 +transit,120.46314940004656,14.53091452837242 +transit,120.47227268035199,14.531078247404999 +transit,120.48139597407214,14.531241611373302 +transit,120.49051928117807,14.531404620272665 +transit,120.4996426016408,14.531567274098414 +transit,120.50876593543141,14.531729572845906 +transit,120.51788928252093,14.53189151651049 +transit,120.52701264288042,14.532053105087536 +transit,120.53613601648091,14.532214338572425 +transit,120.54525940329346,14.532375216960544 +transit,120.5543828032891,14.532535740247281 +transit,120.56350621643887,14.532695908428057 +transit,120.5726296427138,14.532855721498283 +transit,120.58175308208494,14.53301517945339 +transit,120.59087653452333,14.53317428228881 +TP4,120.6,14.53333303 +transit,120.60891325177454,14.532211177408374 +transit,120.61782641362562,14.531088985787047 +transit,120.62673948553424,14.529966455166676 +transit,120.6356524674814,14.528843585577919 +transit,120.64456535944814,14.527720377051432 +transit,120.65347816141545,14.526596829617894 +transit,120.66239087336437,14.525472943307976 +transit,120.67130349527596,14.524348718152378 +transit,120.68021602713127,14.52322415418179 +transit,120.68912846891136,14.522099251426917 +transit,120.6980408205973,14.520974009918476 +transit,120.70695308217019,14.519848429687181 +transit,120.71586525361108,14.51872251076377 +transit,120.72477733490112,14.517596253178972 +transit,120.73368932602139,14.51646965696354 +transit,120.74260122695303,14.515342722148226 +transit,120.75151303767716,14.514215448763785 +transit,120.7604247581749,14.513087836840993 +transit,120.76933638842745,14.511959886410628 +transit,120.77824792841592,14.510831597503469 +transit,120.7871593781215,14.509702970150322 +transit,120.79607073752537,14.508574004381979 +transit,120.80498200660871,14.507444700229257 +transit,120.81389318535273,14.506315057722974 +transit,120.82280427373861,14.50518507689395 +transit,120.8317152717476,14.504054757773021 +transit,120.84062617936091,14.502924100391041 +transit,120.84953699655976,14.501793104778846 +transit,120.85844772332543,14.500661770967307 +transit,120.86735835963914,14.499530098987284 +transit,120.87626890548218,14.498398088869656 +transit,120.8851793608358,14.497265740645302 +transit,120.89408972568133,14.49613305434512 +RPLS,120.903,14.49500003 +transit,120.91103367798593,14.493834566218396 +transit,120.91906727200656,14.492668827652633 +transit,120.92710078205005,14.491502814328562 +transit,120.93513420810456,14.490336526272037 +transit,120.94316755015822,14.489169963508923 +transit,120.95120080819922,14.488003126065085 +transit,120.95923398221572,14.486836013966391 +transit,120.96726707219588,14.485668627238729 +transit,120.97530007812792,14.484500965907973 +TP5,120.983333,14.48333303 +transit,120.98888832080638,14.486111193273727 +transit,120.9944437799241,14.488889224610709 +transit,120.99999937737775,14.49166712398139 +transit,121.00555511319187,14.494444891356213 +transit,121.0111109873911,14.497222526705604 +TP6,121.016667,14.50000003 +transit,121.02291618161927,14.504167242662048 +transit,121.02916559692267,14.508334287533266 +transit,121.03541524597964,14.512501164557353 +transit,121.04166512885968,14.516667873678005 +transit,121.04791524563227,14.520834414838916 +transit,121.05416559636687,14.525000787983764 +transit,121.06041618113295,14.529166993056233 +TP7,121.066667,14.53333303 +transit,121.07583018072394,14.533882414209392 +transit,121.08499340670342,14.534431440154327 +transit,121.09415667791092,14.534980107818962 +transit,121.10331999431891,14.535528417187455 +transit,121.11248335589988,14.536076368243979 +transit,121.1216467626263,14.536623960972735 +transit,121.13081021447063,14.537171195357901 +transit,121.13997371140532,14.537718071383694 +transit,121.14913725340284,14.53826458903432 +transit,121.15830084043564,14.538810748294011 +transit,121.16746447247617,14.539356549147001 +transit,121.17662814949685,14.539901991577533 +transit,121.18579187147013,14.540447075569869 +transit,121.19495563836843,14.540991801108271 +transit,121.20411945016417,14.54153616817701 +transit,121.2132833068298,14.542080176760381 +transit,121.2224472083377,14.542623826842673 +transit,121.23161115466029,14.543167118408192 +transit,121.24077514576997,14.543710051441261 +transit,121.24993918163916,14.544252625926195 +transit,121.25910326224022,14.54479484184734 +transit,121.26826738754556,14.545336699189036 +transit,121.27743155752755,14.545878197935643 +transit,121.28659577215859,14.546419338071534 +transit,121.29576003141102,14.54696011958107 +transit,121.30492433525723,14.547500542448649 +transit,121.31408868366958,14.548040606658665 +transit,121.32325307662043,14.548580312195526 +transit,121.33241751408211,14.549119659043642 +transit,121.341581996027,14.549658647187448 +transit,121.35074652242741,14.550197276611378 +transit,121.3599110932557,14.55073554729988 +transit,121.3690757084842,14.551273459237406 +transit,121.37824036808523,14.55181101240843 +transit,121.3874050720311,14.552348206797427 +transit,121.39656982029415,14.552885042388887 +transit,121.40573461284667,14.553421519167301 +transit,121.414899449661,14.553957637117183 +transit,121.42406433070938,14.554493396223052 +transit,121.43322925596416,14.555028796469427 +transit,121.44239422539762,14.555563837840852 +transit,121.45155923898204,14.556098520321877 +transit,121.46072429668969,14.556632843897054 +transit,121.46988939849287,14.557166808550955 +transit,121.47905454436382,14.557700414268163 +transit,121.48821973427482,14.558233661033256 +transit,121.49738496819815,14.558766548830839 +transit,121.50655024610603,14.559299077645516 +transit,121.51571556797074,14.559831247461915 +transit,121.5248809337645,14.560363058264652 +transit,121.53404634345958,14.56089451003838 +transit,121.54321179702818,14.561425602767736 +transit,121.55237729444256,14.561956336437385 +transit,121.56154283567493,14.562486711032001 +transit,121.57070842069751,14.563016726536254 +transit,121.57987404948253,14.563546382934835 +transit,121.58903972200218,14.564075680212447 +transit,121.59820543822867,14.5646046183538 +transit,121.6073711981342,14.565133197343611 +transit,121.61653700169097,14.565661417166611 +transit,121.62570284887119,14.56618927780754 +transit,121.63486873964699,14.566716779251148 +transit,121.64403467399059,14.567243921482198 +transit,121.65320065187416,14.567770704485456 +transit,121.66236667326987,14.568297128245705 +transit,121.67153273814988,14.568823192747736 +transit,121.68069884648634,14.569348897976344 +transit,121.68986499825142,14.569874243916354 +transit,121.69903119341727,14.57039923055257 +transit,121.70819743195602,14.570923857869833 +transit,121.71736371383982,14.571448125852982 +transit,121.72653003904081,14.571972034486867 +transit,121.73569640753111,14.572495583756353 +transit,121.74486281928284,14.57301877364631 +transit,121.75402927426813,14.573541604141617 +transit,121.7631957724591,14.574064075227167 +transit,121.77236231382784,14.574586186887863 +transit,121.78152889834648,14.575107939108621 +transit,121.7906955259871,14.575629331874358 +transit,121.7998621967218,14.57615036517001 +transit,121.80902891052267,14.57667103898051 +transit,121.8181956673618,14.577191353290825 +transit,121.82736246721126,14.577711308085908 +transit,121.83652931004313,14.57823090335073 +transit,121.84569619582949,14.578750139070287 +transit,121.85486312454239,14.579269015229562 +transit,121.8640300961539,14.579787531813555 +transit,121.87319711063607,14.580305688807288 +transit,121.88236416796094,14.580823486195785 +transit,121.89153126810058,14.581340923964072 +transit,121.90069841102701,14.5818580020972 +transit,121.90986559671227,14.582374720580212 +transit,121.9190328251284,14.58289107939819 +transit,121.92820009624741,14.583407078536194 +transit,121.93736741004133,14.583922717979313 +transit,121.94653476648217,14.584437997712644 +transit,121.95570216554196,14.584952917721287 +transit,121.96486960719268,14.585467477990361 +transit,121.97403709140634,14.58598167850499 +transit,121.98320461815494,14.586495519250304 +transit,121.99237218741048,14.58700900021146 +transit,122.00153979914494,14.587522121373604 +transit,122.01070745333028,14.5880348827219 +transit,122.0198751499385,14.588547284241535 +transit,122.02904288894156,14.589059325917686 +transit,122.03821067031143,14.589571007735548 +transit,122.04737849402008,14.590082329680333 +transit,122.05654636003946,14.590593291737255 +transit,122.06571426834152,14.59110389389154 +transit,122.07488221889822,14.591614136128431 +transit,122.08405021168149,14.592124018433163 +transit,122.09321824666326,14.592633540791 +transit,122.10238632381547,14.593142703187215 +transit,122.11155444311005,14.593651505607074 +transit,122.12072260451893,14.594159948035873 +transit,122.12989080801403,14.594668030458902 +transit,122.13905905356724,14.595175752861477 +transit,122.14822734115047,14.595683115228915 +transit,122.15739567073565,14.59619011754654 +transit,122.16656404229467,14.596696759799693 +transit,122.1757324557994,14.59720304197372 +transit,122.18490091122176,14.597708964053986 +transit,122.19406940853362,14.598214526025854 +transit,122.20323794770685,14.598719727874704 +transit,122.21240652871334,14.599224569585928 +transit,122.22157515152496,14.599729051144925 +transit,122.23074381611356,14.600233172537102 +transit,122.23991252245101,14.600736933747877 +transit,122.24908127050917,14.60124033476269 +transit,122.25825006025988,14.60174337556697 +transit,122.26741889167498,14.602246056146171 +transit,122.27658776472633,14.602748376485765 +transit,122.28575667938576,14.6032503365712 +transit,122.29492563562509,14.603751936387978 +transit,122.30409463341616,14.604253175921576 +transit,122.31326367273077,14.604754055157505 +transit,122.32243275354075,14.605254574081268 +transit,122.33160187581792,14.605754732678392 +transit,122.34077103953409,14.60625453093441 +transit,122.34994024466104,14.60675396883486 +transit,122.3591094911706,14.6072530463653 +transit,122.36827877903453,14.607751763511283 +transit,122.37744810822463,14.60825012025839 +transit,122.38661747871268,14.6087481165922 +transit,122.39578689047046,14.609245752498305 +transit,122.40495634346976,14.609743027962317 +transit,122.41412583768232,14.610239942969839 +transit,122.42329537307994,14.610736497506496 +transit,122.43246494963434,14.611232691557927 +transit,122.44163456731731,14.61172852510977 +transit,122.45080422610057,14.61222399814768 +transit,122.45997392595588,14.612719110657332 +transit,122.46914366685498,14.613213862624384 +transit,122.47831344876961,14.613708254034531 +transit,122.4874832716715,14.61420228487347 +transit,122.49665313553236,14.614695955126896 +transit,122.50582304032393,14.615189264780534 +transit,122.51499298601792,14.615682213820106 +transit,122.52416297258604,14.616174802231347 +TP8,122.533333,14.61666703 +transit,122.52556561919452,14.621547870102633 +transit,122.51779789531567,14.626428449327847 +transit,122.51002982824683,14.631308767573683 +transit,122.50226141787151,14.636188824738152 +transit,122.49449266407314,14.641068620719285 +transit,122.48672356673521,14.64594815541507 +transit,122.47895412574117,14.650827428723506 +transit,122.47118434097452,14.65570644054257 +transit,122.46341421231872,14.66058519077024 +transit,122.4556437396573,14.665463679304477 +transit,122.44787292287376,14.670341906043225 +transit,122.44010176185158,14.675219870884417 +transit,122.43233025647429,14.680097573725998 +transit,122.42455840662541,14.684975014465873 +transit,122.41678621218847,14.689852193001954 +transit,122.40901367304701,14.694729109232135 +transit,122.40124078908458,14.699605763054308 +transit,122.39346756018472,14.704482154366342 +transit,122.38569398623098,14.709358283066104 +transit,122.37792006710694,14.714234149051446 +transit,122.37014580269616,14.719109752220218 +transit,122.36237119288224,14.723985092470246 +transit,122.35459623754872,14.728860169699349 +transit,122.34682093657923,14.733734983805347 +transit,122.33904528985737,14.738609534686038 +transit,122.33126929726672,14.743483822239215 +transit,122.32349295869092,14.748357846362651 +transit,122.31571627401357,14.753231606954119 +transit,122.3079392431183,14.758105103911376 +transit,122.30016186588877,14.762978337132163 +transit,122.29238414220859,14.767851306514233 +transit,122.28460607196142,14.772724011955296 +transit,122.27682765503093,14.777596453353075 +transit,122.26904889130076,14.782468630605276 +transit,122.26126978065459,14.787340543609588 +transit,122.25349032297609,14.7922121922637 +transit,122.24571051814895,14.797083576465276 +transit,122.23793036605687,14.801954696111991 +transit,122.23014986658353,14.806825551101488 +transit,122.22236901961266,14.811696141331407 +transit,122.21458782502795,14.816566466699378 +transit,122.20680628271313,14.821436527103023 +transit,122.19902439255192,14.826306322439951 +transit,122.19124215442805,14.831175852607759 +transit,122.18345956822529,14.836045117504034 +transit,122.17567663382735,14.84091411702635 +transit,122.16789335111802,14.845782851072276 +transit,122.16010971998104,14.850651319539361 +transit,122.15232574030018,14.855519522325157 +transit,122.14454141195925,14.860387459327194 +transit,122.136756734842,14.865255130442998 +transit,122.12897170883222,14.870122535570081 +transit,122.12118633381372,14.874989674605935 +transit,122.11340060967032,14.87985654744806 +transit,122.10561453628581,14.884723153993935 +transit,122.09782811354404,14.889589494141026 +transit,122.0900413413288,14.894455567786792 +transit,122.08225421952395,14.899321374828682 +transit,122.07446674801334,14.904186915164132 +transit,122.0666789266808,14.909052188690572 +transit,122.05889075541019,14.91391719530541 +transit,122.05110223408538,14.918781934906056 +transit,122.04331336259025,14.923646407389905 +transit,122.03552414080868,14.928510612654335 +transit,122.02773456862452,14.933374550596724 +transit,122.01994464592171,14.93823822111443 +transit,122.01215437258413,14.943101624104806 +transit,122.0043637484957,14.947964759465188 +transit,121.99657277354034,14.95282762709291 +transit,121.98878144760195,14.95769022688529 +transit,121.98098977056446,14.962552558739631 +transit,121.97319774231184,14.967414622553237 +transit,121.96540536272802,14.97227641822339 +transit,121.95761263169695,14.977137945647371 +transit,121.94981954910257,14.981999204722436 +transit,121.94202611482889,14.986860195345843 +transit,121.93423232875986,14.991720917414838 +transit,121.92643819077946,14.99658137082665 +transit,121.91864370077171,15.001441555478497 +transit,121.91084885862058,15.006301471267596 +transit,121.90305366421008,15.011161118091142 +transit,121.89525811742422,15.016020495846332 +transit,121.88746221814702,15.020879604430334 +transit,121.87966596626254,15.025738443740327 +transit,121.87186936165476,15.030597013673455 +transit,121.86407240420777,15.035455314126871 +transit,121.85627509380559,15.040313344997712 +transit,121.8484774303323,15.0451711061831 +transit,121.84067941367195,15.050028597580143 +transit,121.83288104370862,15.054885819085952 +transit,121.8250823203264,15.05974277059761 +transit,121.81728324340935,15.064599452012208 +transit,121.80948381284159,15.06945586322681 +transit,121.80168402850722,15.074312004138477 +transit,121.79388389029036,15.079167874644254 +transit,121.7860833980751,15.084023474641183 +transit,121.77828255174559,15.088878804026292 +transit,121.77048135118595,15.093733862696592 +transit,121.76267979628034,15.09858865054909 +transit,121.7548778869129,15.10344316748078 +transit,121.74707562296777,15.108297413388643 +transit,121.73927300432914,15.113151388169657 +transit,121.73147003088116,15.118005091720779 +transit,121.72366670250803,15.122858523938962 +transit,121.71586301909392,15.127711684721149 +transit,121.70805898052303,15.132564573964261 +transit,121.70025458667959,15.137417191565222 +transit,121.69244983744775,15.142269537420944 +transit,121.6846447327118,15.147121611428311 +transit,121.67683927235592,15.151973413484216 +transit,121.66903345626434,15.15682494348553 +transit,121.66122728432133,15.161676201329124 +transit,121.65342075641112,15.166527186911841 +transit,121.64561387241798,15.171377900130533 +transit,121.63780663222616,15.176228340882028 +transit,121.62999903571995,15.181078509063143 +transit,121.6221910827836,15.185928404570689 +transit,121.61438277330143,15.190778027301468 +transit,121.60657410715773,15.195627377152261 +transit,121.59876508423677,15.200476454019848 +transit,121.59095570442291,15.205325257800993 +transit,121.58314596760046,15.210173788392458 +transit,121.57533587365371,15.215022045690983 +transit,121.56752542246704,15.219870029593292 +transit,121.55971461392477,15.22471773999612 +transit,121.55190344791124,15.229565176796171 +transit,121.54409192431083,15.23441233989015 +transit,121.5362800430079,15.239259229174742 +transit,121.52846780388683,15.24410584454663 +transit,121.52065520683199,15.248952185902473 +transit,121.51284225172778,15.253798253138939 +transit,121.50502893845858,15.258644046152666 +transit,121.49721526690882,15.263489564840294 +transit,121.4894012369629,15.268334809098441 +transit,121.48158684850526,15.273179778823721 +transit,121.47377210142031,15.278024473912744 +transit,121.46595699559248,15.28286889426209 +transit,121.45814153090625,15.287713039768345 +transit,121.45032570724604,15.292556910328077 +transit,121.44250952449632,15.29740050583784 +transit,121.43469298254158,15.30224382619419 +transit,121.42687608126626,15.307086871293658 +transit,121.41905882055488,15.311929641032771 +transit,121.41124120029193,15.316772135308046 +transit,121.40342322036187,15.321614354015976 +transit,121.39560488064927,15.326456297053063 +transit,121.38778618103862,15.331297964315786 +transit,121.37996712141444,15.336139355700615 +transit,121.37214770166128,15.340980471104006 +transit,121.36432792166367,15.345821310422412 +transit,121.35650778130615,15.350661873552276 +transit,121.3486872804733,15.355502160390012 +transit,121.34086641904968,15.360342170832043 +transit,121.33304519691985,15.365181904774774 +transit,121.32522361396842,15.3700213621146 +transit,121.31740167007995,15.374860542747898 +transit,121.30957936513906,15.379699446571044 +transit,121.30175669903035,15.384538073480398 +transit,121.29393367163843,15.389376423372305 +transit,121.28611028284793,15.39421449614311 +transit,121.27828653254349,15.399052291689138 +transit,121.27046242060972,15.403889809906707 +transit,121.2626379469313,15.408727050692123 +transit,121.25481311139286,15.413564013941675 +transit,121.2469879138791,15.418400699551658 +transit,121.23916235427465,15.423237107418332 +transit,121.2313364324642,15.428073237437966 +transit,121.22351014833248,15.432909089506806 +transit,121.21568350176413,15.437744663521098 +transit,121.20785649264388,15.442579959377069 +transit,121.20002912085647,15.447414976970931 +transit,121.19220138628657,15.452249716198892 +transit,121.18437328881895,15.457084176957158 +transit,121.17654482833832,15.4619183591419 +transit,121.16871600472946,15.466752262649294 +transit,121.16088681787708,15.471585887375513 +transit,121.153057267666,15.476419233216696 +transit,121.14522735398094,15.481252300068983 +transit,121.1373970767067,15.486085087828513 +transit,121.12956643572808,15.490917596391396 +transit,121.12173543092986,15.495749825653744 +transit,121.11390406219684,15.500581775511655 +transit,121.10607232941386,15.505413445861208 +transit,121.09824023246571,15.51024483659848 +transit,121.09040777123724,15.51507594761953 +transit,121.08257494561329,15.51990677882042 +transit,121.0747417554787,15.52473733009718 +transit,121.06690820071832,15.529567601345844 +transit,121.05907428121701,15.534397592462433 +transit,121.05123999685966,15.539227303342948 +transit,121.04340534753115,15.544056733883396 +transit,121.03557033311634,15.548885883979748 +transit,121.02773495350016,15.553714753527995 +transit,121.01989920856751,15.558543342424088 +transit,121.0120630982033,15.563371650563985 +transit,121.00422662229244,15.568199677843625 +transit,120.99638978071987,15.573027424158942 +transit,120.98855257337054,15.577854889405847 +transit,120.9807150001294,15.582682073480255 +transit,120.97287706088137,15.587508976278063 +transit,120.96503875551146,15.592335597695147 +transit,120.95720008390462,15.59716193762739 +transit,120.94936104594584,15.601987995970662 +transit,120.94152164152011,15.606813772620804 +transit,120.93368187051243,15.611639267473658 +transit,120.92584173280781,15.616464480425057 +transit,120.91800122829126,15.621289411370824 +transit,120.91016035684781,15.626114060206762 +transit,120.9023191183625,15.630938426828667 +transit,120.89447751272036,15.635762511132329 +transit,120.88663553980643,15.640586313013518 +transit,120.87879319950581,15.645409832368003 +transit,120.87095049170354,15.650233069091534 +transit,120.8631074162847,15.65505602307985 +transit,120.85526397313437,15.659878694228684 +transit,120.84742016213767,15.664701082433753 +transit,120.83957598317967,15.669523187590764 +transit,120.83173143614549,15.674345009595418 +transit,120.82388652092027,15.679166548343394 +transit,120.81604123738913,15.683987803730375 +transit,120.80819558543719,15.688808775652017 +transit,120.80034956494961,15.69362946400397 +transit,120.79250317581156,15.698449868681891 +transit,120.78465641790818,15.703269989581393 +transit,120.77680929112465,15.708089826598103 +transit,120.76896179534616,15.712909379627623 +transit,120.76111393045788,15.717728648565553 +transit,120.75326569634504,15.72254763330748 +transit,120.74541709289281,15.727366333748977 +transit,120.73756811998645,15.732184749785599 +transit,120.72971877751114,15.737002881312911 +transit,120.72186906535215,15.741820728226447 +transit,120.71401898339471,15.746638290421732 +transit,120.70616853152407,15.75145556779429 +transit,120.69831770962548,15.756272560239628 +transit,120.69046651758426,15.761089267653242 +transit,120.68261495528562,15.765905689930612 +transit,120.67476302261487,15.770721826967218 +transit,120.66691071945732,15.775537678658523 +transit,120.65905804569827,15.780353244899969 +transit,120.65120500122303,15.785168525587002 +transit,120.64335158591693,15.789983520615053 +transit,120.6354977996653,15.794798229879532 +transit,120.62764364235348,15.799612653275858 +transit,120.6197891138668,15.804426790699411 +transit,120.61193421409065,15.809240642045587 +transit,120.60407894291038,15.814054207209752 +transit,120.59622330021138,15.818867486087273 +transit,120.588367285879,15.823680478573497 +transit,120.58051089979868,15.828493184563765 +transit,120.57265414185579,15.8333056039534 +transit,120.56479701193577,15.838117736637717 +transit,120.556939509924,15.842929582512037 +transit,120.54908163570596,15.84774114147164 +transit,120.54122338916706,15.852552413411813 +transit,120.53336477019276,15.857363398227829 +transit,120.5255057786685,15.862174095814947 +transit,120.51764641447977,15.866984506068418 +transit,120.50978667751204,15.871794628883478 +transit,120.50192656765077,15.876604464155356 +transit,120.49406608478148,15.88141401177927 +transit,120.48620522878967,15.886223271650417 +transit,120.47834399956085,15.891032243664 +transit,120.47048239698053,15.895840927715195 +transit,120.46262042093426,15.90064932369917 +transit,120.45475807130757,15.905457431511095 +transit,120.44689534798599,15.910265251046106 +transit,120.43903225085509,15.915072782199351 +transit,120.43116877980046,15.91988002486595 +transit,120.42330493470766,15.924686978941011 +transit,120.41544071546227,15.929493644319649 +transit,120.40757612194987,15.93430002089695 +transit,120.39971115405609,15.939106108567994 +transit,120.39184581166654,15.943911907227859 +transit,120.38398009466682,15.94871741677159 +transit,120.37611400294259,15.953522637094247 +transit,120.36824753637947,15.958327568090855 +transit,120.36038069486312,15.96313220965645 +transit,120.35251347827919,15.96793656168603 +transit,120.34464588651336,15.972740624074607 +transit,120.33677791945131,15.97754439671717 +transit,120.3289095769787,15.982347879508701 +transit,120.32104085898125,15.987151072344163 +transit,120.31317176534466,15.991953975118513 +transit,120.30530229595463,15.9967565877267 +transit,120.29743245069693,16.001558910063654 +transit,120.28956222945723,16.006360942024305 +transit,120.28169163212132,16.01116268350356 +transit,120.27382065857493,16.015964134396313 +transit,120.26594930870382,16.020765294597464 +transit,120.25807758239378,16.025566164001887 +transit,120.25020547953058,16.03036674250444 +RPUG,120.242333,16.03516703 +transit,120.24623823181024,16.027308305816007 +transit,120.25014315779546,16.019449504816514 +transit,120.25404777813486,16.011590627046164 +transit,120.25795209300753,16.003731672549574 +transit,120.26185610259255,15.995872641371351 +transit,120.26575980706895,15.98801353355609 +transit,120.26966320661572,15.980154349148401 +transit,120.2735663014118,15.972295088192846 +transit,120.27746909163608,15.964435750733996 +transit,120.28137157746741,15.956576336816413 +transit,120.28527375908462,15.948716846484638 +transit,120.28917563666643,15.940857279783213 +transit,120.29307721039159,15.93299763675666 +transit,120.29697848043877,15.925137917449488 +transit,120.30087944698658,15.917278121906211 +transit,120.30478011021364,15.909418250171314 +transit,120.30868047029847,15.90155830228928 +transit,120.31258052741956,15.893698278304585 +transit,120.31648028175536,15.885838178261688 +transit,120.3203797334843,15.877978002205033 +transit,120.32427888278474,15.870117750179068 +transit,120.32817772983499,15.862257422228218 +transit,120.33207627481332,15.854397018396904 +transit,120.33597451789798,15.846536538729532 +transit,120.33987245926716,15.83867598327049 +transit,120.34377009909898,15.83081535206418 +transit,120.34766743757156,15.822954645154963 +transit,120.35156447486294,15.815093862587212 +transit,120.35546121115117,15.807233004405274 +transit,120.35935764661417,15.7993720706535 +transit,120.36325378142989,15.791511061376225 +transit,120.36714961577621,15.783649976617763 +transit,120.37104514983096,15.775788816422434 +transit,120.37494038377194,15.767927580834526 +transit,120.3788353177769,15.760066269898346 +transit,120.38272995202355,15.752204883658163 +transit,120.38662428668954,15.744343422158245 +transit,120.39051832195248,15.736481885442863 +transit,120.39441205798998,15.728620273556256 +transit,120.39830549497955,15.720758586542665 +transit,120.40219863309868,15.712896824446311 +transit,120.4060914725248,15.705034987311416 +transit,120.40998401343533,15.697173075182189 +transit,120.41387625600763,15.689311088102823 +transit,120.417768200419,15.681449026117498 +transit,120.42165984684671,15.6735868892704 +transit,120.425551195468,15.665724677605683 +transit,120.42944224646006,15.657862391167502 +TP9,120.433333,15.65000003 +transit,120.43556823903522,15.64149172352093 +transit,120.43780329336165,15.632983387670583 +transit,120.44003816309964,15.624475022467013 +transit,120.44227284836951,15.615966627928293 +transit,120.44450734929154,15.607458204072472 +transit,120.44674166598597,15.59894975091761 +transit,120.44897579857302,15.590441268481753 +transit,120.45120974717285,15.581932756782956 +transit,120.45344351190562,15.57342421583926 +transit,120.45567709289142,15.564915645668703 +transit,120.45791049025034,15.556407046289324 +transit,120.46014370410239,15.547898417719157 +transit,120.46237673456761,15.539389759976224 +transit,120.46460958176594,15.530881073078557 +transit,120.46684224581733,15.522372357044167 +transit,120.46907472684168,15.513863611891091 +transit,120.47130702495885,15.505354837637327 +transit,120.47353914028865,15.496846034300894 +transit,120.47577107295092,15.4883372018998 +transit,120.4780028230654,15.479828340452036 +transit,120.4802343907518,15.471319449975615 +transit,120.48246577612984,15.462810530488522 +transit,120.48469697931918,15.454301582008759 +transit,120.48692800043943,15.445792604554313 +transit,120.4891588396102,15.43728359814316 +transit,120.49138949695102,15.428774562793299 +transit,120.49361997258144,15.420265498522689 +transit,120.49585026662093,15.41175640534931 +transit,120.49808037918895,15.403247283291138 +transit,120.50031031040493,15.394738132366136 +transit,120.50254006038826,15.386228952592264 +transit,120.50476962925826,15.377719743987488 +transit,120.50699901713428,15.369210506569756 +transit,120.5092282241356,15.360701240357029 +transit,120.51145725038145,15.352191945367249 +transit,120.51368609599108,15.343682621618361 +transit,120.51591476108365,15.335173269128315 +transit,120.5181432457783,15.32666388791504 +transit,120.52037155019418,15.318154477996474 +transit,120.52259967445035,15.309645039390544 +transit,120.52482761866585,15.301135572115179 +transit,120.5270553829597,15.292626076188302 +transit,120.5292829674509,15.284116551627838 +transit,120.53151037225837,15.275606998451693 +transit,120.53373759750103,15.267097416677787 +transit,120.53596464329776,15.258587806324032 +transit,120.5381915097674,15.250078167408322 +transit,120.54041819702879,15.241568499948567 +transit,120.54264470520067,15.233058803962667 +transit,120.54487103440181,15.224549079468511 +transit,120.54709718475091,15.216039326483996 +transit,120.54932315636665,15.207529545027002 +transit,120.55154894936767,15.199019735115417 +transit,120.55377456387261,15.19050989676712 +RPLC,120.556,15.18200003 +transit,120.56232759211345,15.175791398462003 +transit,120.568654814593,15.169582585856645 +transit,120.5749816676081,15.16337359227141 +transit,120.58130815132822,15.157164417793794 +transit,120.5876342659228,15.150955062511267 +transit,120.59396001156126,15.14474552651128 +transit,120.60028538841301,15.138535809881272 +transit,120.60661039664744,15.132325912708675 +transit,120.61293503643391,15.126115835080892 +transit,120.6192593079418,15.11990557708532 +transit,120.62558321134041,15.113695138809339 +transit,120.63190674679909,15.107484520340309 +transit,120.63822991448711,15.10127372176558 +transit,120.64455271457378,15.095062743172493 +transit,120.65087514722836,15.088851584648351 +transit,120.65719721262009,15.082640246280466 +transit,120.6635189109182,15.076428728156124 +transit,120.66984024229191,15.070217030362606 +transit,120.67616120691042,15.064005152987152 +transit,120.6824818049429,15.057793096117013 +transit,120.68880203655851,15.051580859839419 +transit,120.6951219019264,15.045368444241577 +transit,120.70144140121567,15.03915584941069 +transit,120.70776053459548,15.03294307543393 +transit,120.71407930223488,15.026730122398469 +transit,120.72039770430295,15.020516990391458 +transit,120.72671574096876,15.014303679500028 +transit,120.73303341240134,15.008090189811307 +transit,120.7393507187697,15.001876521412399 +transit,120.74566766024286,14.99566267439039 +transit,120.75198423698978,14.989448648832358 +transit,120.75830044917947,14.983234444825364 +transit,120.76461629698086,14.977020062456457 +transit,120.77093178056288,14.970805501812661 +transit,120.77724690009445,14.964590762980993 +transit,120.78356165574446,14.958375846048451 +transit,120.78987604768182,14.95216075110203 +transit,120.79619007607536,14.94594547822869 +transit,120.80250374109394,14.939730027515386 +transit,120.8088170429064,14.933514399049061 +transit,120.81512998168154,14.927298592916644 +transit,120.82144255758816,14.921082609205031 +transit,120.82775477079502,14.914866448001135 +transit,120.83406662147091,14.908650109391827 +transit,120.84037810978455,14.90243359346397 +transit,120.84668923590468,14.896216900304411 +RPUX,120.853,14.89000003 +transit,120.85979782446294,14.884600564854255 +transit,120.86659531051718,14.879200895697487 +transit,120.87339245829533,14.873801022616716 +transit,120.88018926793,14.868400945698953 +transit,120.88698573955382,14.863000665031208 +transit,120.89378187329942,14.857600180700459 +transit,120.90057766929938,14.852199492793686 +transit,120.90737312768633,14.846798601397856 +transit,120.91416824859287,14.841397506599918 +transit,120.92096303215158,14.835996208486819 +transit,120.92775747849507,14.830594707145481 +transit,120.9345515877559,14.825193002662823 +transit,120.94134536006668,14.819791095125751 +transit,120.94813879555998,14.814388984621152 +transit,120.95493189436837,14.808986671235916 +transit,120.96172465662443,14.803584155056903 +transit,120.96851708246069,14.798181436170978 +transit,120.97530917200974,14.792778514664978 +transit,120.98210092540413,14.78737539062574 +transit,120.9888923427764,14.781972064140092 +transit,120.9956834242591,14.776568535294828 +transit,121.00247416998477,14.771164804176754 +transit,121.00926458008594,14.765760870872654 +transit,121.01605465469515,14.760356735469305 +transit,121.02284439394494,14.754952398053465 +transit,121.02963379796779,14.749547858711882 +transit,121.03642286689625,14.744143117531296 +transit,121.0432116008628,14.738738174598431 +TP1,121.05,14.73333303 +transit,121.051095723919,14.72546409823825 +transit,121.05219136923515,14.717595155954921 +transit,121.05328693599787,14.709726203155862 +transit,121.05438242425664,14.701857239846916 +transit,121.05547783406094,14.693988266033939 +transit,121.05657316546016,14.686119281722771 +transit,121.05766841850375,14.678250286919257 +transit,121.05876359324112,14.670381281629242 +transit,121.05985868972166,14.662512265858577 +transit,121.06095370799477,14.654643239613106 +transit,121.0620486481098,14.646774202898664 +transit,121.0631435101161,14.63890515572111 +transit,121.06423829406307,14.631036098086266 +MAO1,121.065333,14.62316703 +transit,121.06905300826244,14.614962521959232 +transit,121.07277274046876,14.606757948816796 +transit,121.07649219679926,14.598553310614683 +transit,121.08021137743422,14.590348607394908 +transit,121.08393028255385,14.582143839199444 +transit,121.08764891233832,14.573939006070276 +transit,121.09136726696777,14.56573410804936 +transit,121.09508534662227,14.557529145178671 +transit,121.09880315148189,14.549324117500145 +transit,121.1025206817266,14.54111902505572 +transit,121.10623793753639,14.532913867887324 +transit,121.10995491909114,14.524708646036885 +transit,121.11367162657073,14.516503359546299 +transit,121.117388060155,14.50829800845748 +transit,121.1211042200237,14.500092592812312 +transit,121.12482010635657,14.491887112652678 +transit,121.12853571933333,14.483681568020451 +transit,121.13225105913361,14.47547595895749 +transit,121.13596612593702,14.467270285505647 +transit,121.13968091992312,14.459064547706769 +transit,121.14339544127142,14.45085874560269 +transit,121.14710969016143,14.442652879235222 +transit,121.15082366677254,14.434446948646196 +transit,121.15453737128415,14.42624095387741 +transit,121.1582508038756,14.418034894970662 +transit,121.16196396472623,14.40982877196773 +transit,121.16567685401523,14.401622584910404 +transit,121.16938947192187,14.393416333840443 +transit,121.1731018186253,14.385210018799611 +transit,121.17681389430464,14.377003639829647 +transit,121.18052569913901,14.368797196972299 +transit,121.1842372333074,14.360590690269289 +transit,121.18794849698884,14.352384119762348 +transit,121.19165949036228,14.344177485493182 +transit,121.19537021360664,14.335970787503486 +transit,121.19908066690076,14.327764025834961 +transit,121.2027908504235,14.319557200529285 +transit,121.2065007643536,14.311350311628132 +transit,121.21021040886986,14.30314335917317 +transit,121.21391978415093,14.294936343206047 +transit,121.21762889037547,14.286729263768416 +transit,121.2213377277221,14.278522120901911 +transit,121.22504629636938,14.270314914648154 +transit,121.22875459649586,14.262107645048763 +transit,121.23246262827999,14.253900312145355 +transit,121.23617039190022,14.245692915979518 +transit,121.23987788753494,14.237485456592848 +transit,121.24358511536252,14.229277934026925 +transit,121.24729207556128,14.221070348323318 +transit,121.25099876830944,14.212862699523585 +transit,121.25470519378528,14.204654987669288 +transit,121.25841135216696,14.196447212801964 +transit,121.26211724363262,14.18823937496314 +transit,121.26582286836036,14.180031474194358 +transit,121.26952822652824,14.171823510537116 +transit,121.27323331831425,14.163615484032935 +transit,121.2769381438964,14.155407394723298 +transit,121.2806427034526,14.147199242649702 +transit,121.28434699716074,14.138991027853624 +transit,121.28805102519864,14.130782750376532 +transit,121.29175478774414,14.122574410259885 +transit,121.29545828497497,14.114366007545135 +transit,121.29916151706885,14.106157542273722 +transit,121.30286448420348,14.097949014487085 +transit,121.30656718655646,14.08974042422664 +transit,121.3102696243054,14.081531771533802 +transit,121.31397179762784,14.073323056449986 +transit,121.3176737067013,14.065114279016573 +transit,121.32137535170321,14.05690543927496 +transit,121.32507673281104,14.048696537266515 +transit,121.32877785020213,14.04048757303262 +transit,121.33247870405384,14.032278546614624 +transit,121.33617929454346,14.02406945805388 +transit,121.33987962184824,14.015860307391733 +transit,121.34357968614539,14.00765109466951 +transit,121.3472794876121,13.999441819928538 +transit,121.35097902642548,13.991232483210126 +transit,121.35467830276262,13.983023084555578 +transit,121.35837731680057,13.9748136240062 +transit,121.36207606871633,13.966604101603268 +transit,121.36577455868688,13.958394517388063 +transit,121.3694727868891,13.950184871401857 +transit,121.3731707534999,13.941975163685907 +transit,121.37686845869612,13.93376539428146 +transit,121.38056590265454,13.92555556322976 +transit,121.38426308555191,13.917345670572047 +transit,121.38796000756496,13.909135716349532 +transit,121.39165666887034,13.900925700603437 +transit,121.3953530696447,13.892715623374963 +transit,121.39904921006462,13.884505484705315 +transit,121.40274509030664,13.876295284635663 +transit,121.40644071054727,13.868085023207206 +transit,121.41013607096298,13.859874700461098 +transit,121.41383117173018,13.851664316438512 +transit,121.41752601302527,13.84345387118059 +transit,121.42122059502456,13.835243364728482 +transit,121.42491491790439,13.827032797123316 +transit,121.428608981841,13.818822168406216 +transit,121.43230278701058,13.810611478618304 +transit,121.43599633358934,13.802400727800679 +transit,121.43968962175342,13.794189915994446 +transit,121.44338265167887,13.78597904324069 +transit,121.44707542354179,13.777768109580496 +transit,121.45076793751815,13.769557115054928 +transit,121.45446019378396,13.76134605970505 +transit,121.45815219251513,13.753134943571922 +transit,121.46184393388755,13.744923766696585 +transit,121.46553541807705,13.736712529120073 +transit,121.46922664525948,13.728501230883413 +transit,121.47291761561057,13.720289872027625 +transit,121.47660832930606,13.712078452593715 +transit,121.48029878652163,13.703866972622688 +transit,121.48398898743292,13.695655432155535 +transit,121.48767893221556,13.687443831233237 +transit,121.49136862104507,13.679232169896766 +transit,121.495058054097,13.67102044818709 +transit,121.49874723154684,13.662808666145162 +transit,121.50243615357,13.654596823811936 +transit,121.50612482034191,13.646384921228343 +transit,121.50981323203793,13.638172958435316 +transit,121.51350138883335,13.629960935473784 +transit,121.51718929090346,13.621748852384647 +transit,121.52087693842353,13.613536709208814 +transit,121.52456433156871,13.60532450598718 +transit,121.5282514705142,13.597112242760629 +transit,121.5319383554351,13.588899919570041 +transit,121.53562498650648,13.580687536456287 +transit,121.5393113639034,13.572475093460218 +transit,121.54299748780082,13.564262590622697 +transit,121.54668335837373,13.55605002798456 +transit,121.55036897579704,13.547837405586638 +transit,121.55405434024563,13.539624723469759 +transit,121.5577394518943,13.531411981674745 +transit,121.56142431091791,13.523199180242393 +transit,121.56510891749117,13.514986319213511 +transit,121.5687932717888,13.506773398628885 +transit,121.5724773739855,13.498560418529294 +transit,121.57616122425588,13.490347378955521 +transit,121.57984482277456,13.482134279948319 +transit,121.58352816971609,13.47392112154845 +transit,121.58721126525498,13.46570790379666 +transit,121.5908941095657,13.457494626733688 +transit,121.59457670282269,13.449281290400265 +transit,121.59825904520038,13.44106789483711 +transit,121.60194113687308,13.432854440084938 +transit,121.60562297801513,13.424640926184447 +transit,121.60930456880082,13.416427353176337 +transit,121.61298590940439,13.408213721101292 +TP2,121.616667,13.40000003 +transit,121.60885689895416,13.404682816452143 +transit,121.60104649558956,13.409365359547875 +transit,121.59323578980056,13.414047659190004 +transit,121.58542478148156,13.418729715281337 +transit,121.57761347052694,13.423411527724678 +transit,121.56980185683109,13.42809309642281 +transit,121.56198994028843,13.43277442127851 +transit,121.55417772079338,13.437455502194558 +transit,121.54636519824032,13.442136339073716 +transit,121.53855237252374,13.446816931818734 +transit,121.53073924353802,13.451497280332362 +transit,121.52292581117764,13.456177384517337 +transit,121.51511207533704,13.460857244276388 +transit,121.50729803591068,13.465536859512236 +transit,121.49948369279302,13.470216230127596 +transit,121.49166904587854,13.474895356025165 +transit,121.48385409506173,13.479574237107645 +transit,121.47603884023708,13.484252873277716 +transit,121.46822328129907,13.488931264438063 +transit,121.46040741814224,13.493609410491347 +transit,121.45259125066107,13.498287311340237 +transit,121.4447747787501,13.502964966887383 +transit,121.43695800230387,13.507642377035422 +transit,121.42914092121687,13.512319541687 +transit,121.4213235353837,13.516996460744734 +transit,121.41350584469889,13.52167313411125 +transit,121.40568784905699,13.526349561689152 +transit,121.39786954835259,13.531025743381038 +transit,121.39005094248026,13.53570167908951 +transit,121.38223203133457,13.540377368717143 +transit,121.37441281481013,13.545052812166515 +transit,121.36659329280154,13.549728009340194 +transit,121.35877346520338,13.554402960140738 +transit,121.3509533319103,13.559077664470694 +transit,121.34313289281691,13.563752122232604 +transit,121.33531214781786,13.568426333328995 +transit,121.32749109680775,13.573100297662402 +transit,121.31966973968126,13.577774015135331 +transit,121.31184807633304,13.582447485650288 +transit,121.30402610665773,13.587120709109774 +transit,121.29620383055004,13.59179368541628 +transit,121.28838124790461,13.59646641447228 +transit,121.28055835861616,13.601138896180252 +transit,121.27273516257937,13.605811130442659 +transit,121.26491165968893,13.610483117161953 +transit,121.25708784983958,13.61515485624058 +transit,121.24926373292602,13.619826347580977 +transit,121.24143930884298,13.624497591085575 +transit,121.2336145774852,13.629168586656796 +transit,121.22578953874742,13.633839334197045 +transit,121.21796419252439,13.638509833608733 +transit,121.21013853871086,13.643180084794247 +transit,121.20231257720162,13.647850087655979 +transit,121.19448630789142,13.6525198420963 +transit,121.18665973067506,13.657189348017583 +transit,121.17883284544733,13.661858605322186 +transit,121.17100565210302,13.666527613912464 +transit,121.16317815053694,13.671196373690751 +transit,121.1553503406439,13.675864884559388 +transit,121.14752222231874,13.680533146420702 +transit,121.13969379545628,13.685201159177 +transit,121.13186505995137,13.6898689227306 +transit,121.12403601569883,13.694536436983796 +transit,121.11620666259356,13.69920370183888 +transit,121.10837700053037,13.703870717198136 +transit,121.10054702940418,13.70853748296383 +transit,121.09271674910985,13.713203999038237 +transit,121.08488615954226,13.717870265323603 +transit,121.07705526059632,13.722536281722183 +transit,121.06922405216693,13.727202048136217 +transit,121.06139253414901,13.731867564467928 +transit,121.05356070643747,13.736532830619538 +transit,121.04572856892723,13.741197846493264 +transit,121.03789612151326,13.745862611991306 +transit,121.03006336409047,13.750527127015868 +transit,121.02223029655383,13.755191391469129 +transit,121.0143969187983,13.759855405253267 +transit,121.00656323071884,13.764519168270452 +transit,120.99872923221045,13.769182680422844 +transit,120.9908949231681,13.7738459416126 +transit,120.9830603034868,13.778508951741857 +transit,120.97522537306153,13.783171710712756 +transit,120.96739013178733,13.787834218427415 +transit,120.95955457955918,13.792496474787962 +transit,120.95171871627214,13.79715847969649 +transit,120.94388254182124,13.801820233055116 +transit,120.93604605610152,13.806481734765917 +transit,120.92820925900803,13.811142984730987 +transit,120.92037215043582,13.815803982852387 +transit,120.91253473027999,13.820464729032192 +transit,120.9046969984356,13.82512522317246 +transit,120.89685895479772,13.829785465175233 +transit,120.88902059926147,13.83444545494255 +transit,120.88118193172193,13.839105192376438 +transit,120.87334295207422,13.843764677378928 +transit,120.86550366021348,13.848423909852029 +transit,120.8576640560348,13.85308288969774 +transit,120.84982413943335,13.85774161681806 +transit,120.84198391030425,13.862400091114976 +transit,120.83414336854266,13.867058312490467 +transit,120.82630251404373,13.871716280846499 +transit,120.81846134670265,13.876373996085038 +transit,120.81061986641458,13.88103145810803 +transit,120.80277807307472,13.885688666817417 +transit,120.79493596657825,13.89034562211514 +transit,120.78709354682039,13.895002323903118 +transit,120.77925081369634,13.89965877208327 +transit,120.77140776710131,13.904314966557509 +transit,120.76356440693054,13.908970907227724 +transit,120.75572073307927,13.913626593995817 +transit,120.74787674544274,13.918282026763661 +transit,120.7400324439162,13.922937205433131 +transit,120.73218782839493,13.927592129906097 +transit,120.72434289877417,13.932246800084409 +transit,120.71649765494922,13.936901215869911 +transit,120.70865209681536,13.941555377164446 +transit,120.7008062242679,13.946209283869846 +transit,120.69296003720211,13.95086293588793 +transit,120.68511353551334,13.955516333120501 +transit,120.67726671909688,13.960169475469373 +transit,120.6694195878481,13.964822362836333 +transit,120.66157214166229,13.969474995123171 +transit,120.65372438043484,13.974127372231665 +transit,120.64587630406108,13.978779494063577 +transit,120.63802791243637,13.98343136052067 +transit,120.6301792054561,13.988082971504696 +transit,120.62233018301566,13.992734326917393 +transit,120.6144808450104,13.997385426660493 +transit,120.60663119133577,14.002036270635728 +transit,120.59878122188714,14.006686858744802 +transit,120.59093093655993,14.01133719088943 +transit,120.58308033524956,14.015987266971308 +transit,120.57522941785149,14.02063708689212 +transit,120.56737818426113,14.025286650553555 +transit,120.55952663437395,14.029935957857278 +transit,120.5516747680854,14.034585008704955 +transit,120.54382258529097,14.039233802998234 +transit,120.5359700858861,14.043882340638765 +transit,120.52811726976628,14.048530621528187 +transit,120.52026413682704,14.053178645568119 +transit,120.51241068696383,14.057826412660184 +transit,120.50455692007222,14.062473922705996 +transit,120.49670283604766,14.067121175607145 +transit,120.48884843478574,14.071768171265235 +transit,120.48099371618197,14.076414909581842 +transit,120.47313868013188,14.081061390458546 +transit,120.46528332653106,14.085707613796908 +transit,120.45742765527504,14.090353579498489 +transit,120.44957166625943,14.09499928746483 +transit,120.44171535937977,14.099644737597474 +transit,120.43385873453167,14.10428992979796 +transit,120.42600179161073,14.108934863967795 +transit,120.41814453051254,14.113579540008503 +transit,120.41028695113273,14.11822395782158 +transit,120.40242905336693,14.12286811730853 +transit,120.39457083711076,14.127512018370826 +transit,120.38671230225987,14.132155660909964 +transit,120.3788534487099,14.136799044827397 +transit,120.37099427635653,14.141442170024593 +transit,120.36313478509541,14.146085036402994 +transit,120.35527497482222,14.150727643864053 +transit,120.34741484543267,14.155369992309202 +transit,120.33955439682241,14.160012081639858 +transit,120.33169362888718,14.164653911757439 +transit,120.32383254152268,14.169295482563356 +transit,120.31597113462463,14.173936793959003 +transit,120.30810940808878,14.178577845845775 +transit,120.30024736181085,14.183218638125043 +transit,120.29238499568658,14.187859170698184 +transit,120.28452230961175,14.19249944346656 +transit,120.2766593034821,14.197139456331524 +transit,120.26879597719343,14.20177920919442 +transit,120.26093233064152,14.206418701956586 +transit,120.25306836372216,14.21105793451935 +transit,120.24520407633115,14.215696906784025 +transit,120.2373394683643,14.220335618651925 +transit,120.22947453971743,14.224974070024347 +transit,120.22160929028637,14.229612260802586 +transit,120.21374371996696,14.234250190887922 +transit,120.20587782865503,14.23888786018163 +transit,120.19801161624646,14.243525268584978 +transit,120.19014508263712,14.248162415999214 +transit,120.18227822772285,14.252799302325593 +transit,120.17441105139956,14.25743592746535 +transit,120.16654355356313,14.262072291319715 +transit,120.15867573410947,14.26670839378991 +transit,120.15080759293448,14.271344234777144 +transit,120.14293912993409,14.275979814182621 +transit,120.13507034500422,14.280615131907531 +transit,120.12720123804081,14.28525018785307 +transit,120.1193318089398,14.2898849819204 +transit,120.11146205759717,14.294519514010698 +transit,120.10359198390884,14.299153784025119 +transit,120.09572158777083,14.303787791864814 +transit,120.08785086907909,14.308421537430918 +transit,120.07997982772963,14.313055020624567 +transit,120.07210846361845,14.317688241346882 +transit,120.06423677664154,14.322321199498983 +transit,120.05636476669494,14.326953894981964 +transit,120.04849243367467,14.331586327696932 +transit,120.04061977747678,14.336218497544966 +transit,120.0327467979973,14.34085040442715 +transit,120.02487349513228,14.345482048244548 +transit,120.01699986877782,14.350113428898224 +transit,120.00912591882997,14.354744546289226 +transit,120.0012516451848,14.359375400318594 +transit,119.99337704773842,14.364005990887367 +transit,119.98550212638693,14.368636317896572 +transit,119.97762688102645,14.373266381247218 +transit,119.96975131155308,14.377896180840319 +transit,119.96187541786297,14.382525716576863 +transit,119.95399919985225,14.387154988357846 +transit,119.94612265741705,14.391783996084245 +transit,119.93824579045356,14.396412739657029 +transit,119.93036859885792,14.401041218977165 +transit,119.92249108252634,14.405669433945606 +transit,119.91461324135496,14.410297384463295 +transit,119.90673507524,14.414925070431163 +transit,119.89885658407766,14.419552491750142 +transit,119.89097776776416,14.424179648321147 +transit,119.88309862619572,14.428806540045086 +transit,119.87521915926855,14.433433166822855 +transit,119.86733936687892,14.438059528555351 +transit,119.85945924892306,14.442685625143456 +transit,119.85157880529725,14.447311456488034 +transit,119.84369803589775,14.451937022489954 +transit,119.83581694062082,14.456562323050072 +transit,119.82793551936278,14.461187358069234 +transit,119.8200537720199,14.465812127448268 +transit,119.8121716984885,14.470436631088013 +transit,119.8042892986649,14.475060868889285 +transit,119.79640657244542,14.479684840752888 +transit,119.78852351972638,14.484308546579626 +transit,119.78064014040415,14.488931986270298 +transit,119.77275643437507,14.493555159725679 +transit,119.76487240153551,14.498178066846538 +transit,119.75698804178184,14.502800707533652 +transit,119.74910335501042,14.507423081687769 +transit,119.74121834111769,14.512045189209637 +TP3,119.733333,14.51666703 +transit,119.74245511347887,14.516859138136162 +transit,119.75157724268301,14.517050891614721 +transit,119.76069938758363,14.517242290430186 +transit,119.7698215481519,14.517433334577088 +transit,119.778943724359,14.517624024049958 +transit,119.78806591617612,14.517814358843355 +transit,119.79718812357443,14.518004338951831 +transit,119.80631034652511,14.518193964369956 +transit,119.81543258499933,14.518383235092298 +transit,119.82455483896827,14.518572151113457 +transit,119.8336771084031,14.518760712428026 +transit,119.84279939327499,14.51894891903061 +transit,119.8519216935551,14.519136770915836 +transit,119.8610440092146,14.519324268078323 +transit,119.87016634022466,14.519511410512713 +transit,119.87928868655644,14.519698198213655 +transit,119.8884110481811,14.519884631175808 +transit,119.8975334250698,14.520070709393838 +transit,119.90665581719368,14.52025643286243 +transit,119.91577822452392,14.520441801576267 +transit,119.92490064703168,14.52062681553005 +transit,119.93402308468808,14.520811474718489 +transit,119.94314553746429,14.520995779136301 +transit,119.95226800533146,14.521179728778218 +transit,119.96139048826073,14.521363323638978 +transit,119.97051298622326,14.521546563713331 +transit,119.97963549919015,14.52172944899604 +transit,119.9887580271326,14.52191197948187 +transit,119.99788057002172,14.522094155165606 +transit,120.00700312782864,14.522275976042032 +transit,120.01612570052451,14.522457442105951 +transit,120.02524828808046,14.522638553352174 +transit,120.03437089046764,14.52281930977552 +transit,120.04349350765715,14.522999711370826 +transit,120.05261613962014,14.523179758132923 +transit,120.06173878632774,14.52335945005667 +transit,120.07086144775107,14.523538787136921 +transit,120.07998412386125,14.523717769368552 +transit,120.0891068146294,14.523896396746444 +transit,120.09822952002666,14.524074669265486 +transit,120.10735224002414,14.524252586920579 +transit,120.11647497459296,14.524430149706639 +transit,120.12559772370423,14.524607357618583 +transit,120.13472048732906,14.524784210651344 +transit,120.14384326543858,14.524960708799867 +transit,120.15296605800388,14.525136852059099 +transit,120.1620888649961,14.525312640424003 +transit,120.17121168638631,14.525488073889557 +transit,120.18033452214566,14.525663152450734 +transit,120.1894573722452,14.525837876102537 +transit,120.19858023665608,14.526012244839965 +transit,120.20770311534939,14.526186258658022 +transit,120.21682600829621,14.526359917551739 +transit,120.22594891546765,14.526533221516154 +transit,120.23507183683482,14.5267061705463 +transit,120.2441947723688,14.526878764637232 +transit,120.25331772204069,14.527051003784026 +transit,120.26244068582157,14.52722288798174 +transit,120.27156366368254,14.527394417225459 +transit,120.28068665559469,14.527565591510283 +transit,120.2898096615291,14.527736410831311 +transit,120.29893268145686,14.527906875183666 +transit,120.30805571534906,14.528076984562459 +transit,120.31717876317676,14.528246738962837 +transit,120.32630182491106,14.528416138379937 +transit,120.33542490052302,14.528585182808916 +transit,120.34454798998375,14.528753872244932 +transit,120.3536710932643,14.52892220668317 +transit,120.36279421033575,14.529090186118813 +transit,120.37191734116917,14.529257810547046 +transit,120.38104048573562,14.529425079963088 +transit,120.3901636440062,14.529591994362148 +transit,120.39928681595194,14.529758553739445 +transit,120.40841000154394,14.529924758090225 +transit,120.41753320075324,14.530090607409731 +transit,120.42665641355092,14.530256101693213 +transit,120.43577963990803,14.530421240935938 +transit,120.44490287979563,14.530586025133196 +transit,120.4540261331848,14.530750454280257 +transit,120.46314940004656,14.53091452837242 +transit,120.47227268035199,14.531078247404999 +transit,120.48139597407214,14.531241611373302 +transit,120.49051928117807,14.531404620272665 +transit,120.4996426016408,14.531567274098414 +transit,120.50876593543141,14.531729572845906 +transit,120.51788928252093,14.53189151651049 +transit,120.52701264288042,14.532053105087536 +transit,120.53613601648091,14.532214338572425 +transit,120.54525940329346,14.532375216960544 +transit,120.5543828032891,14.532535740247281 +transit,120.56350621643887,14.532695908428057 +transit,120.5726296427138,14.532855721498283 +transit,120.58175308208494,14.53301517945339 +transit,120.59087653452333,14.53317428228881 +TP4,120.6,14.53333303 +transit,120.60891325177454,14.532211177408374 +transit,120.61782641362562,14.531088985787047 +transit,120.62673948553424,14.529966455166676 +transit,120.6356524674814,14.528843585577919 +transit,120.64456535944814,14.527720377051432 +transit,120.65347816141545,14.526596829617894 +transit,120.66239087336437,14.525472943307976 +transit,120.67130349527596,14.524348718152378 +transit,120.68021602713127,14.52322415418179 +transit,120.68912846891136,14.522099251426917 +transit,120.6980408205973,14.520974009918476 +transit,120.70695308217019,14.519848429687181 +transit,120.71586525361108,14.51872251076377 +transit,120.72477733490112,14.517596253178972 +transit,120.73368932602139,14.51646965696354 +transit,120.74260122695303,14.515342722148226 +transit,120.75151303767716,14.514215448763785 +transit,120.7604247581749,14.513087836840993 +transit,120.76933638842745,14.511959886410628 +transit,120.77824792841592,14.510831597503469 +transit,120.7871593781215,14.509702970150322 +transit,120.79607073752537,14.508574004381979 +transit,120.80498200660871,14.507444700229257 +transit,120.81389318535273,14.506315057722974 +transit,120.82280427373861,14.50518507689395 +transit,120.8317152717476,14.504054757773021 +transit,120.84062617936091,14.502924100391041 +transit,120.84953699655976,14.501793104778846 +transit,120.85844772332543,14.500661770967307 +transit,120.86735835963914,14.499530098987284 +transit,120.87626890548218,14.498398088869656 +transit,120.8851793608358,14.497265740645302 +transit,120.89408972568133,14.49613305434512 +RPLS,120.903,14.49500003 +transit,120.91103367798593,14.493834566218396 +transit,120.91906727200656,14.492668827652633 +transit,120.92710078205005,14.491502814328562 +transit,120.93513420810456,14.490336526272037 +transit,120.94316755015822,14.489169963508923 +transit,120.95120080819922,14.488003126065085 +transit,120.95923398221572,14.486836013966391 +transit,120.96726707219588,14.485668627238729 +transit,120.97530007812792,14.484500965907973 +TP5,120.983333,14.48333303 +transit,120.98888832080638,14.486111193273727 +transit,120.9944437799241,14.488889224610709 +transit,120.99999937737775,14.49166712398139 +transit,121.00555511319187,14.494444891356213 +transit,121.0111109873911,14.497222526705604 +TP6,121.016667,14.50000003 +transit,121.02291618161927,14.504167242662048 +transit,121.02916559692267,14.508334287533266 +transit,121.03541524597964,14.512501164557353 +transit,121.04166512885968,14.516667873678005 +transit,121.04791524563227,14.520834414838916 +transit,121.05416559636687,14.525000787983764 +transit,121.06041618113295,14.529166993056233 +TP7,121.066667,14.53333303 +transit,121.07583018072394,14.533882414209392 +transit,121.08499340670342,14.534431440154327 +transit,121.09415667791092,14.534980107818962 +transit,121.10331999431891,14.535528417187455 +transit,121.11248335589988,14.536076368243979 +transit,121.1216467626263,14.536623960972735 +transit,121.13081021447063,14.537171195357901 +transit,121.13997371140532,14.537718071383694 +transit,121.14913725340284,14.53826458903432 +transit,121.15830084043564,14.538810748294011 +transit,121.16746447247617,14.539356549147001 +transit,121.17662814949685,14.539901991577533 +transit,121.18579187147013,14.540447075569869 +transit,121.19495563836843,14.540991801108271 +transit,121.20411945016417,14.54153616817701 +transit,121.2132833068298,14.542080176760381 +transit,121.2224472083377,14.542623826842673 +transit,121.23161115466029,14.543167118408192 +transit,121.24077514576997,14.543710051441261 +transit,121.24993918163916,14.544252625926195 +transit,121.25910326224022,14.54479484184734 +transit,121.26826738754556,14.545336699189036 +transit,121.27743155752755,14.545878197935643 +transit,121.28659577215859,14.546419338071534 +transit,121.29576003141102,14.54696011958107 +transit,121.30492433525723,14.547500542448649 +transit,121.31408868366958,14.548040606658665 +transit,121.32325307662043,14.548580312195526 +transit,121.33241751408211,14.549119659043642 +transit,121.341581996027,14.549658647187448 +transit,121.35074652242741,14.550197276611378 +transit,121.3599110932557,14.55073554729988 +transit,121.3690757084842,14.551273459237406 +transit,121.37824036808523,14.55181101240843 +transit,121.3874050720311,14.552348206797427 +transit,121.39656982029415,14.552885042388887 +transit,121.40573461284667,14.553421519167301 +transit,121.414899449661,14.553957637117183 +transit,121.42406433070938,14.554493396223052 +transit,121.43322925596416,14.555028796469427 +transit,121.44239422539762,14.555563837840852 +transit,121.45155923898204,14.556098520321877 +transit,121.46072429668969,14.556632843897054 +transit,121.46988939849287,14.557166808550955 +transit,121.47905454436382,14.557700414268163 +transit,121.48821973427482,14.558233661033256 +transit,121.49738496819815,14.558766548830839 +transit,121.50655024610603,14.559299077645516 +transit,121.51571556797074,14.559831247461915 +transit,121.5248809337645,14.560363058264652 +transit,121.53404634345958,14.56089451003838 +transit,121.54321179702818,14.561425602767736 +transit,121.55237729444256,14.561956336437385 +transit,121.56154283567493,14.562486711032001 +transit,121.57070842069751,14.563016726536254 +transit,121.57987404948253,14.563546382934835 +transit,121.58903972200218,14.564075680212447 +transit,121.59820543822867,14.5646046183538 +transit,121.6073711981342,14.565133197343611 +transit,121.61653700169097,14.565661417166611 +transit,121.62570284887119,14.56618927780754 +transit,121.63486873964699,14.566716779251148 +transit,121.64403467399059,14.567243921482198 +transit,121.65320065187416,14.567770704485456 +transit,121.66236667326987,14.568297128245705 +transit,121.67153273814988,14.568823192747736 +transit,121.68069884648634,14.569348897976344 +transit,121.68986499825142,14.569874243916354 +transit,121.69903119341727,14.57039923055257 +transit,121.70819743195602,14.570923857869833 +transit,121.71736371383982,14.571448125852982 +transit,121.72653003904081,14.571972034486867 +transit,121.73569640753111,14.572495583756353 +transit,121.74486281928284,14.57301877364631 +transit,121.75402927426813,14.573541604141617 +transit,121.7631957724591,14.574064075227167 +transit,121.77236231382784,14.574586186887863 +transit,121.78152889834648,14.575107939108621 +transit,121.7906955259871,14.575629331874358 +transit,121.7998621967218,14.57615036517001 +transit,121.80902891052267,14.57667103898051 +transit,121.8181956673618,14.577191353290825 +transit,121.82736246721126,14.577711308085908 +transit,121.83652931004313,14.57823090335073 +transit,121.84569619582949,14.578750139070287 +transit,121.85486312454239,14.579269015229562 +transit,121.8640300961539,14.579787531813555 +transit,121.87319711063607,14.580305688807288 +transit,121.88236416796094,14.580823486195785 +transit,121.89153126810058,14.581340923964072 +transit,121.90069841102701,14.5818580020972 +transit,121.90986559671227,14.582374720580212 +transit,121.9190328251284,14.58289107939819 +transit,121.92820009624741,14.583407078536194 +transit,121.93736741004133,14.583922717979313 +transit,121.94653476648217,14.584437997712644 +transit,121.95570216554196,14.584952917721287 +transit,121.96486960719268,14.585467477990361 +transit,121.97403709140634,14.58598167850499 +transit,121.98320461815494,14.586495519250304 +transit,121.99237218741048,14.58700900021146 +transit,122.00153979914494,14.587522121373604 +transit,122.01070745333028,14.5880348827219 +transit,122.0198751499385,14.588547284241535 +transit,122.02904288894156,14.589059325917686 +transit,122.03821067031143,14.589571007735548 +transit,122.04737849402008,14.590082329680333 +transit,122.05654636003946,14.590593291737255 +transit,122.06571426834152,14.59110389389154 +transit,122.07488221889822,14.591614136128431 +transit,122.08405021168149,14.592124018433163 +transit,122.09321824666326,14.592633540791 +transit,122.10238632381547,14.593142703187215 +transit,122.11155444311005,14.593651505607074 +transit,122.12072260451893,14.594159948035873 +transit,122.12989080801403,14.594668030458902 +transit,122.13905905356724,14.595175752861477 +transit,122.14822734115047,14.595683115228915 +transit,122.15739567073565,14.59619011754654 +transit,122.16656404229467,14.596696759799693 +transit,122.1757324557994,14.59720304197372 +transit,122.18490091122176,14.597708964053986 +transit,122.19406940853362,14.598214526025854 +transit,122.20323794770685,14.598719727874704 +transit,122.21240652871334,14.599224569585928 +transit,122.22157515152496,14.599729051144925 +transit,122.23074381611356,14.600233172537102 +transit,122.23991252245101,14.600736933747877 +transit,122.24908127050917,14.60124033476269 +transit,122.25825006025988,14.60174337556697 +transit,122.26741889167498,14.602246056146171 +transit,122.27658776472633,14.602748376485765 +transit,122.28575667938576,14.6032503365712 +transit,122.29492563562509,14.603751936387978 +transit,122.30409463341616,14.604253175921576 +transit,122.31326367273077,14.604754055157505 +transit,122.32243275354075,14.605254574081268 +transit,122.33160187581792,14.605754732678392 +transit,122.34077103953409,14.60625453093441 +transit,122.34994024466104,14.60675396883486 +transit,122.3591094911706,14.6072530463653 +transit,122.36827877903453,14.607751763511283 +transit,122.37744810822463,14.60825012025839 +transit,122.38661747871268,14.6087481165922 +transit,122.39578689047046,14.609245752498305 +transit,122.40495634346976,14.609743027962317 +transit,122.41412583768232,14.610239942969839 +transit,122.42329537307994,14.610736497506496 +transit,122.43246494963434,14.611232691557927 +transit,122.44163456731731,14.61172852510977 +transit,122.45080422610057,14.61222399814768 +transit,122.45997392595588,14.612719110657332 +transit,122.46914366685498,14.613213862624384 +transit,122.47831344876961,14.613708254034531 +transit,122.4874832716715,14.61420228487347 +transit,122.49665313553236,14.614695955126896 +transit,122.50582304032393,14.615189264780534 +transit,122.51499298601792,14.615682213820106 +transit,122.52416297258604,14.616174802231347 +TP8,122.533333,14.61666703 +transit,122.52556561919452,14.621547870102633 +transit,122.51779789531567,14.626428449327847 +transit,122.51002982824683,14.631308767573683 +transit,122.50226141787151,14.636188824738152 +transit,122.49449266407314,14.641068620719285 +transit,122.48672356673521,14.64594815541507 +transit,122.47895412574117,14.650827428723506 +transit,122.47118434097452,14.65570644054257 +transit,122.46341421231872,14.66058519077024 +transit,122.4556437396573,14.665463679304477 +transit,122.44787292287376,14.670341906043225 +transit,122.44010176185158,14.675219870884417 +transit,122.43233025647429,14.680097573725998 +transit,122.42455840662541,14.684975014465873 +transit,122.41678621218847,14.689852193001954 +transit,122.40901367304701,14.694729109232135 +transit,122.40124078908458,14.699605763054308 +transit,122.39346756018472,14.704482154366342 +transit,122.38569398623098,14.709358283066104 +transit,122.37792006710694,14.714234149051446 +transit,122.37014580269616,14.719109752220218 +transit,122.36237119288224,14.723985092470246 +transit,122.35459623754872,14.728860169699349 +transit,122.34682093657923,14.733734983805347 +transit,122.33904528985737,14.738609534686038 +transit,122.33126929726672,14.743483822239215 +transit,122.32349295869092,14.748357846362651 +transit,122.31571627401357,14.753231606954119 +transit,122.3079392431183,14.758105103911376 +transit,122.30016186588877,14.762978337132163 +transit,122.29238414220859,14.767851306514233 +transit,122.28460607196142,14.772724011955296 +transit,122.27682765503093,14.777596453353075 +transit,122.26904889130076,14.782468630605276 +transit,122.26126978065459,14.787340543609588 +transit,122.25349032297609,14.7922121922637 +transit,122.24571051814895,14.797083576465276 +transit,122.23793036605687,14.801954696111991 +transit,122.23014986658353,14.806825551101488 +transit,122.22236901961266,14.811696141331407 +transit,122.21458782502795,14.816566466699378 +transit,122.20680628271313,14.821436527103023 +transit,122.19902439255192,14.826306322439951 +transit,122.19124215442805,14.831175852607759 +transit,122.18345956822529,14.836045117504034 +transit,122.17567663382735,14.84091411702635 +transit,122.16789335111802,14.845782851072276 +transit,122.16010971998104,14.850651319539361 +transit,122.15232574030018,14.855519522325157 +transit,122.14454141195925,14.860387459327194 +transit,122.136756734842,14.865255130442998 +transit,122.12897170883222,14.870122535570081 +transit,122.12118633381372,14.874989674605935 +transit,122.11340060967032,14.87985654744806 +transit,122.10561453628581,14.884723153993935 +transit,122.09782811354404,14.889589494141026 +transit,122.0900413413288,14.894455567786792 +transit,122.08225421952395,14.899321374828682 +transit,122.07446674801334,14.904186915164132 +transit,122.0666789266808,14.909052188690572 +transit,122.05889075541019,14.91391719530541 +transit,122.05110223408538,14.918781934906056 +transit,122.04331336259025,14.923646407389905 +transit,122.03552414080868,14.928510612654335 +transit,122.02773456862452,14.933374550596724 +transit,122.01994464592171,14.93823822111443 +transit,122.01215437258413,14.943101624104806 +transit,122.0043637484957,14.947964759465188 +transit,121.99657277354034,14.95282762709291 +transit,121.98878144760195,14.95769022688529 +transit,121.98098977056446,14.962552558739631 +transit,121.97319774231184,14.967414622553237 +transit,121.96540536272802,14.97227641822339 +transit,121.95761263169695,14.977137945647371 +transit,121.94981954910257,14.981999204722436 +transit,121.94202611482889,14.986860195345843 +transit,121.93423232875986,14.991720917414838 +transit,121.92643819077946,14.99658137082665 +transit,121.91864370077171,15.001441555478497 +transit,121.91084885862058,15.006301471267596 +transit,121.90305366421008,15.011161118091142 +transit,121.89525811742422,15.016020495846332 +transit,121.88746221814702,15.020879604430334 +transit,121.87966596626254,15.025738443740327 +transit,121.87186936165476,15.030597013673455 +transit,121.86407240420777,15.035455314126871 +transit,121.85627509380559,15.040313344997712 +transit,121.8484774303323,15.0451711061831 +transit,121.84067941367195,15.050028597580143 +transit,121.83288104370862,15.054885819085952 +transit,121.8250823203264,15.05974277059761 +transit,121.81728324340935,15.064599452012208 +transit,121.80948381284159,15.06945586322681 +transit,121.80168402850722,15.074312004138477 +transit,121.79388389029036,15.079167874644254 +transit,121.7860833980751,15.084023474641183 +transit,121.77828255174559,15.088878804026292 +transit,121.77048135118595,15.093733862696592 +transit,121.76267979628034,15.09858865054909 +transit,121.7548778869129,15.10344316748078 +transit,121.74707562296777,15.108297413388643 +transit,121.73927300432914,15.113151388169657 +transit,121.73147003088116,15.118005091720779 +transit,121.72366670250803,15.122858523938962 +transit,121.71586301909392,15.127711684721149 +transit,121.70805898052303,15.132564573964261 +transit,121.70025458667959,15.137417191565222 +transit,121.69244983744775,15.142269537420944 +transit,121.6846447327118,15.147121611428311 +transit,121.67683927235592,15.151973413484216 +transit,121.66903345626434,15.15682494348553 +transit,121.66122728432133,15.161676201329124 +transit,121.65342075641112,15.166527186911841 +transit,121.64561387241798,15.171377900130533 +transit,121.63780663222616,15.176228340882028 +transit,121.62999903571995,15.181078509063143 +transit,121.6221910827836,15.185928404570689 +transit,121.61438277330143,15.190778027301468 +transit,121.60657410715773,15.195627377152261 +transit,121.59876508423677,15.200476454019848 +transit,121.59095570442291,15.205325257800993 +transit,121.58314596760046,15.210173788392458 +transit,121.57533587365371,15.215022045690983 +transit,121.56752542246704,15.219870029593292 +transit,121.55971461392477,15.22471773999612 +transit,121.55190344791124,15.229565176796171 +transit,121.54409192431083,15.23441233989015 +transit,121.5362800430079,15.239259229174742 +transit,121.52846780388683,15.24410584454663 +transit,121.52065520683199,15.248952185902473 +transit,121.51284225172778,15.253798253138939 +transit,121.50502893845858,15.258644046152666 +transit,121.49721526690882,15.263489564840294 +transit,121.4894012369629,15.268334809098441 +transit,121.48158684850526,15.273179778823721 +transit,121.47377210142031,15.278024473912744 +transit,121.46595699559248,15.28286889426209 +transit,121.45814153090625,15.287713039768345 +transit,121.45032570724604,15.292556910328077 +transit,121.44250952449632,15.29740050583784 +transit,121.43469298254158,15.30224382619419 +transit,121.42687608126626,15.307086871293658 +transit,121.41905882055488,15.311929641032771 +transit,121.41124120029193,15.316772135308046 +transit,121.40342322036187,15.321614354015976 +transit,121.39560488064927,15.326456297053063 +transit,121.38778618103862,15.331297964315786 +transit,121.37996712141444,15.336139355700615 +transit,121.37214770166128,15.340980471104006 +transit,121.36432792166367,15.345821310422412 +transit,121.35650778130615,15.350661873552276 +transit,121.3486872804733,15.355502160390012 +transit,121.34086641904968,15.360342170832043 +transit,121.33304519691985,15.365181904774774 +transit,121.32522361396842,15.3700213621146 +transit,121.31740167007995,15.374860542747898 +transit,121.30957936513906,15.379699446571044 +transit,121.30175669903035,15.384538073480398 +transit,121.29393367163843,15.389376423372305 +transit,121.28611028284793,15.39421449614311 +transit,121.27828653254349,15.399052291689138 +transit,121.27046242060972,15.403889809906707 +transit,121.2626379469313,15.408727050692123 +transit,121.25481311139286,15.413564013941675 +transit,121.2469879138791,15.418400699551658 +transit,121.23916235427465,15.423237107418332 +transit,121.2313364324642,15.428073237437966 +transit,121.22351014833248,15.432909089506806 +transit,121.21568350176413,15.437744663521098 +transit,121.20785649264388,15.442579959377069 +transit,121.20002912085647,15.447414976970931 +transit,121.19220138628657,15.452249716198892 +transit,121.18437328881895,15.457084176957158 +transit,121.17654482833832,15.4619183591419 +transit,121.16871600472946,15.466752262649294 +transit,121.16088681787708,15.471585887375513 +transit,121.153057267666,15.476419233216696 +transit,121.14522735398094,15.481252300068983 +transit,121.1373970767067,15.486085087828513 +transit,121.12956643572808,15.490917596391396 +transit,121.12173543092986,15.495749825653744 +transit,121.11390406219684,15.500581775511655 +transit,121.10607232941386,15.505413445861208 +transit,121.09824023246571,15.51024483659848 +transit,121.09040777123724,15.51507594761953 +transit,121.08257494561329,15.51990677882042 +transit,121.0747417554787,15.52473733009718 +transit,121.06690820071832,15.529567601345844 +transit,121.05907428121701,15.534397592462433 +transit,121.05123999685966,15.539227303342948 +transit,121.04340534753115,15.544056733883396 +transit,121.03557033311634,15.548885883979748 +transit,121.02773495350016,15.553714753527995 +transit,121.01989920856751,15.558543342424088 +transit,121.0120630982033,15.563371650563985 +transit,121.00422662229244,15.568199677843625 +transit,120.99638978071987,15.573027424158942 +transit,120.98855257337054,15.577854889405847 +transit,120.9807150001294,15.582682073480255 +transit,120.97287706088137,15.587508976278063 +transit,120.96503875551146,15.592335597695147 +transit,120.95720008390462,15.59716193762739 +transit,120.94936104594584,15.601987995970662 +transit,120.94152164152011,15.606813772620804 +transit,120.93368187051243,15.611639267473658 +transit,120.92584173280781,15.616464480425057 +transit,120.91800122829126,15.621289411370824 +transit,120.91016035684781,15.626114060206762 +transit,120.9023191183625,15.630938426828667 +transit,120.89447751272036,15.635762511132329 +transit,120.88663553980643,15.640586313013518 +transit,120.87879319950581,15.645409832368003 +transit,120.87095049170354,15.650233069091534 +transit,120.8631074162847,15.65505602307985 +transit,120.85526397313437,15.659878694228684 +transit,120.84742016213767,15.664701082433753 +transit,120.83957598317967,15.669523187590764 +transit,120.83173143614549,15.674345009595418 +transit,120.82388652092027,15.679166548343394 +transit,120.81604123738913,15.683987803730375 +transit,120.80819558543719,15.688808775652017 +transit,120.80034956494961,15.69362946400397 +transit,120.79250317581156,15.698449868681891 +transit,120.78465641790818,15.703269989581393 +transit,120.77680929112465,15.708089826598103 +transit,120.76896179534616,15.712909379627623 +transit,120.76111393045788,15.717728648565553 +transit,120.75326569634504,15.72254763330748 +transit,120.74541709289281,15.727366333748977 +transit,120.73756811998645,15.732184749785599 +transit,120.72971877751114,15.737002881312911 +transit,120.72186906535215,15.741820728226447 +transit,120.71401898339471,15.746638290421732 +transit,120.70616853152407,15.75145556779429 +transit,120.69831770962548,15.756272560239628 +transit,120.69046651758426,15.761089267653242 +transit,120.68261495528562,15.765905689930612 +transit,120.67476302261487,15.770721826967218 +transit,120.66691071945732,15.775537678658523 +transit,120.65905804569827,15.780353244899969 +transit,120.65120500122303,15.785168525587002 +transit,120.64335158591693,15.789983520615053 +transit,120.6354977996653,15.794798229879532 +transit,120.62764364235348,15.799612653275858 +transit,120.6197891138668,15.804426790699411 +transit,120.61193421409065,15.809240642045587 +transit,120.60407894291038,15.814054207209752 +transit,120.59622330021138,15.818867486087273 +transit,120.588367285879,15.823680478573497 +transit,120.58051089979868,15.828493184563765 +transit,120.57265414185579,15.8333056039534 +transit,120.56479701193577,15.838117736637717 +transit,120.556939509924,15.842929582512037 +transit,120.54908163570596,15.84774114147164 +transit,120.54122338916706,15.852552413411813 +transit,120.53336477019276,15.857363398227829 +transit,120.5255057786685,15.862174095814947 +transit,120.51764641447977,15.866984506068418 +transit,120.50978667751204,15.871794628883478 +transit,120.50192656765077,15.876604464155356 +transit,120.49406608478148,15.88141401177927 +transit,120.48620522878967,15.886223271650417 +transit,120.47834399956085,15.891032243664 +transit,120.47048239698053,15.895840927715195 +transit,120.46262042093426,15.90064932369917 +transit,120.45475807130757,15.905457431511095 +transit,120.44689534798599,15.910265251046106 +transit,120.43903225085509,15.915072782199351 +transit,120.43116877980046,15.91988002486595 +transit,120.42330493470766,15.924686978941011 +transit,120.41544071546227,15.929493644319649 +transit,120.40757612194987,15.93430002089695 +transit,120.39971115405609,15.939106108567994 +transit,120.39184581166654,15.943911907227859 +transit,120.38398009466682,15.94871741677159 +transit,120.37611400294259,15.953522637094247 +transit,120.36824753637947,15.958327568090855 +transit,120.36038069486312,15.96313220965645 +transit,120.35251347827919,15.96793656168603 +transit,120.34464588651336,15.972740624074607 +transit,120.33677791945131,15.97754439671717 +transit,120.3289095769787,15.982347879508701 +transit,120.32104085898125,15.987151072344163 +transit,120.31317176534466,15.991953975118513 +transit,120.30530229595463,15.9967565877267 +transit,120.29743245069693,16.001558910063654 +transit,120.28956222945723,16.006360942024305 +transit,120.28169163212132,16.01116268350356 +transit,120.27382065857493,16.015964134396313 +transit,120.26594930870382,16.020765294597464 +transit,120.25807758239378,16.025566164001887 +transit,120.25020547953058,16.03036674250444 +RPUG,120.242333,16.03516703 +transit,120.24623823181024,16.027308305816007 +transit,120.25014315779546,16.019449504816514 +transit,120.25404777813486,16.011590627046164 +transit,120.25795209300753,16.003731672549574 +transit,120.26185610259255,15.995872641371351 +transit,120.26575980706895,15.98801353355609 +transit,120.26966320661572,15.980154349148401 +transit,120.2735663014118,15.972295088192846 +transit,120.27746909163608,15.964435750733996 +transit,120.28137157746741,15.956576336816413 +transit,120.28527375908462,15.948716846484638 +transit,120.28917563666643,15.940857279783213 +transit,120.29307721039159,15.93299763675666 +transit,120.29697848043877,15.925137917449488 +transit,120.30087944698658,15.917278121906211 +transit,120.30478011021364,15.909418250171314 +transit,120.30868047029847,15.90155830228928 +transit,120.31258052741956,15.893698278304585 +transit,120.31648028175536,15.885838178261688 +transit,120.3203797334843,15.877978002205033 +transit,120.32427888278474,15.870117750179068 +transit,120.32817772983499,15.862257422228218 +transit,120.33207627481332,15.854397018396904 +transit,120.33597451789798,15.846536538729532 +transit,120.33987245926716,15.83867598327049 +transit,120.34377009909898,15.83081535206418 +transit,120.34766743757156,15.822954645154963 +transit,120.35156447486294,15.815093862587212 +transit,120.35546121115117,15.807233004405274 +transit,120.35935764661417,15.7993720706535 +transit,120.36325378142989,15.791511061376225 +transit,120.36714961577621,15.783649976617763 +transit,120.37104514983096,15.775788816422434 +transit,120.37494038377194,15.767927580834526 +transit,120.3788353177769,15.760066269898346 +transit,120.38272995202355,15.752204883658163 +transit,120.38662428668954,15.744343422158245 +transit,120.39051832195248,15.736481885442863 +transit,120.39441205798998,15.728620273556256 +transit,120.39830549497955,15.720758586542665 +transit,120.40219863309868,15.712896824446311 +transit,120.4060914725248,15.705034987311416 +transit,120.40998401343533,15.697173075182189 +transit,120.41387625600763,15.689311088102823 +transit,120.417768200419,15.681449026117498 +transit,120.42165984684671,15.6735868892704 +transit,120.425551195468,15.665724677605683 +transit,120.42944224646006,15.657862391167502 +TP9,120.433333,15.65000003 +transit,120.43556823903522,15.64149172352093 +transit,120.43780329336165,15.632983387670583 +transit,120.44003816309964,15.624475022467013 +transit,120.44227284836951,15.615966627928293 +transit,120.44450734929154,15.607458204072472 +transit,120.44674166598597,15.59894975091761 +transit,120.44897579857302,15.590441268481753 +transit,120.45120974717285,15.581932756782956 +transit,120.45344351190562,15.57342421583926 +transit,120.45567709289142,15.564915645668703 +transit,120.45791049025034,15.556407046289324 +transit,120.46014370410239,15.547898417719157 +transit,120.46237673456761,15.539389759976224 +transit,120.46460958176594,15.530881073078557 +transit,120.46684224581733,15.522372357044167 +transit,120.46907472684168,15.513863611891091 +transit,120.47130702495885,15.505354837637327 +transit,120.47353914028865,15.496846034300894 +transit,120.47577107295092,15.4883372018998 +transit,120.4780028230654,15.479828340452036 +transit,120.4802343907518,15.471319449975615 +transit,120.48246577612984,15.462810530488522 +transit,120.48469697931918,15.454301582008759 +transit,120.48692800043943,15.445792604554313 +transit,120.4891588396102,15.43728359814316 +transit,120.49138949695102,15.428774562793299 +transit,120.49361997258144,15.420265498522689 +transit,120.49585026662093,15.41175640534931 +transit,120.49808037918895,15.403247283291138 +transit,120.50031031040493,15.394738132366136 +transit,120.50254006038826,15.386228952592264 +transit,120.50476962925826,15.377719743987488 +transit,120.50699901713428,15.369210506569756 +transit,120.5092282241356,15.360701240357029 +transit,120.51145725038145,15.352191945367249 +transit,120.51368609599108,15.343682621618361 +transit,120.51591476108365,15.335173269128315 +transit,120.5181432457783,15.32666388791504 +transit,120.52037155019418,15.318154477996474 +transit,120.52259967445035,15.309645039390544 +transit,120.52482761866585,15.301135572115179 +transit,120.5270553829597,15.292626076188302 +transit,120.5292829674509,15.284116551627838 +transit,120.53151037225837,15.275606998451693 +transit,120.53373759750103,15.267097416677787 +transit,120.53596464329776,15.258587806324032 +transit,120.5381915097674,15.250078167408322 +transit,120.54041819702879,15.241568499948567 +transit,120.54264470520067,15.233058803962667 +transit,120.54487103440181,15.224549079468511 +transit,120.54709718475091,15.216039326483996 +transit,120.54932315636665,15.207529545027002 +transit,120.55154894936767,15.199019735115417 +transit,120.55377456387261,15.19050989676712 +RPLC,120.556,15.18200003 diff --git a/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/all_plans/Seoul_waypoints.csv b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/all_plans/Seoul_waypoints.csv new file mode 100644 index 0000000..608d9f2 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/all_plans/Seoul_waypoints.csv @@ -0,0 +1,3280 @@ +city,utc_adjust +Seoul,9 +waypoint,lon,lat +Osan_Air_Base,127.029641,37.090216 +transit,127.03161577106769,37.098671784237766 +transit,127.03359098110742,37.10712752349574 +transit,127.03556663034959,37.11558321775572 +transit,127.0375427190247,37.12403886699943 +transit,127.0395192473634,37.13249447120862 +transit,127.0414962155965,37.14095003036505 +transit,127.0434736239549,37.149405544450424 +transit,127.04545147266968,37.15786101344646 +transit,127.04742976197205,37.166316437334864 +transit,127.04940849209335,37.174771816097355 +transit,127.05138766326506,37.183227149715606 +transit,127.05336727571878,37.191682438171306 +transit,127.0553473296863,37.200137681446115 +transit,127.0573278253995,37.20859287952169 +transit,127.05930876309041,37.21704803237971 +transit,127.06129014299123,37.22550314000179 +transit,127.06327196533424,37.23395820236958 +transit,127.0652542303519,37.242413219464694 +transit,127.06723693827682,37.250868191268744 +transit,127.06922008934171,37.259323117763344 +transit,127.07120368377944,37.267777998930086 +transit,127.07318772182305,37.27623283475055 +transit,127.07517220370565,37.28468762520632 +transit,127.07715712966055,37.29314237027896 +transit,127.07914249992118,37.30159706995002 +transit,127.08112831472108,37.31005172420105 +transit,127.083114574294,37.31850633301361 +transit,127.08510127887378,37.326960896369194 +transit,127.08708842869439,37.33541541424934 +transit,127.08907602398997,37.34386988663557 +transit,127.09106406499478,37.35232431350934 +transit,127.09305255194326,37.3607786948522 +transit,127.09504148506994,37.36923303064559 +transit,127.09703086460951,37.377687320871 +transit,127.0990206907968,37.38614156550987 +transit,127.10101096386681,37.394595764543666 +transit,127.10300168405463,37.40304991795383 +transit,127.10499285159554,37.4115040257218 +transit,127.10698446672491,37.419958087828995 +transit,127.1089765296783,37.42841210425683 +transit,127.11096904069139,37.436866074986696 +Seoul_Air_Base,127.112962,37.44532 +transit,127.11407498046337,37.45295479173879 +transit,127.11518818720195,37.46058956310631 +transit,127.11630162032382,37.46822431409691 +transit,127.11741527993712,37.47585904470489 +transit,127.11852916615004,37.48349375492461 +transit,127.11964327907083,37.491128444750345 +transit,127.12075761880781,37.49876311417644 +transit,127.12187218546937,37.506397763197214 +transit,127.12298697916394,37.514032391806964 +WP3,127.124102,37.521667 +transit,127.12526711539714,37.529744874276616 +transit,127.12643248211599,37.5378227259795 +transit,127.12759810028365,37.54590055510202 +transit,127.12876397002731,37.553978361637625 +transit,127.12993009147425,37.5620561455797 +transit,127.13109646475178,37.57013390692162 +transit,127.13226308998733,37.578211645656786 +transit,127.1334299673084,37.5862893617786 +transit,127.13459709684253,37.59436705528044 +transit,127.13576447871735,37.602444726155696 +transit,127.13693211306057,37.61052237439777 +WP4,127.1381,37.6186 +transit,127.14364453767999,37.625276476825675 +transit,127.1491900672499,37.63195268550096 +transit,127.15473658908718,37.638628625916944 +transit,127.16028410356938,37.645304297964664 +transit,127.16583261107426,37.651979701535154 +transit,127.17138211197964,37.658654836519354 +transit,127.17693260666354,37.66532970280818 +transit,127.18248409550407,37.67200430029247 +transit,127.1880365788795,37.67867862886307 +transit,127.19359005716825,37.68535268841071 +transit,127.19914453074885,37.692026478826136 +WP5,127.2047,37.6987 +transit,127.21343162856657,37.69498506001787 +transit,127.22216238580884,37.69126947121904 +transit,127.23089227177877,37.68755323375334 +transit,127.23962128652845,37.68383634777065 +transit,127.24834943011,37.68011881342078 +transit,127.25707670257566,37.67640063085357 +transit,127.26580310397777,37.67268180021881 +transit,127.27452863436872,37.668962321666314 +transit,127.28325329380102,37.66524219534583 +transit,127.29197708232722,37.661521421407144 +WP6,127.3007,37.6578 +transit,127.29453584893454,37.651393473860075 +transit,127.28837275688147,37.64498661870998 +transit,127.28221072346766,37.63857943467867 +transit,127.27604974832009,37.63217192189511 +transit,127.26988983106587,37.62576408048816 +transit,127.2637309713322,37.61935591058667 +transit,127.2575731687464,37.6129474123194 +transit,127.25141642293593,37.60653858581509 +transit,127.24526073352834,37.6001294312024 +transit,127.23910610015128,37.59371994860995 +transit,127.23295252243254,37.587310138166316 +WP7,127.2268,37.5809 +transit,127.21638252952877,37.58155732946605 +transit,127.2059648760039,37.58221373949572 +transit,127.19554703967407,37.582869230051394 +transit,127.18512902078798,37.583523801095545 +transit,127.1747108195944,37.58417745259067 +transit,127.16429243634211,37.58483018449934 +transit,127.15387387127997,37.58548199678414 +transit,127.14345512465685,37.58613288940776 +transit,127.13303619672169,37.586782862332875 +transit,127.12261708772343,37.587431915522274 +transit,127.1121977979111,37.58808004893876 +transit,127.10177832753372,37.58872726254518 +transit,127.09135867684041,37.58937355630448 +transit,127.0809388460803,37.590018930179596 +transit,127.07051883550254,37.59066338413358 +transit,127.06009864535636,37.59130691812946 +transit,127.049678275891,37.591949532130364 +transit,127.03925772735576,37.59259122609948 +WP8,127.028837,37.593232 +transit,127.01935000915947,37.59035223573776 +transit,127.00986374945408,37.587471707613254 +transit,127.00037822094507,37.584590415763365 +transit,126.99089342369354,37.581708360324924 +transit,126.98140935776048,37.578825541434824 +transit,126.97192602320682,37.57594195922991 +transit,126.96244342009334,37.57305761384708 +transit,126.95296154848067,37.57017250542322 +transit,126.94348040842941,37.567286634095225 +WP9,126.934,37.5644 +transit,126.9239441281553,37.563741280950744 +transit,126.91388843350545,37.563081705350264 +transit,126.90383291627336,37.562421273233745 +transit,126.89377757668187,37.56175998463641 +transit,126.88372241495378,37.561097839593536 +transit,126.87366743131189,37.56043483814044 +transit,126.86361262597892,37.55977098031248 +transit,126.85355799917757,37.55910626614505 +transit,126.84350355113051,37.55844069567361 +transit,126.83344928206037,37.55777426893365 +transit,126.82339519218971,37.5571069859607 +transit,126.8133412817411,37.55643884679037 +transit,126.80328755093704,37.55576985145824 +Gimpo,126.793234,37.5551 +transit,126.78314130688592,37.55226094497491 +transit,126.77304937954926,37.54942102596066 +transit,126.76295821808608,37.54658024310982 +transit,126.75286782259226,37.54373859657502 +transit,126.74277819316359,37.540896086508845 +transit,126.73268932989569,37.53805271306393 +transit,126.72260123288407,37.535208476392924 +transit,126.71251390222407,37.532363376648476 +transit,126.70242733801095,37.529517413983264 +transit,126.69234154033975,37.52667058854996 +transit,126.68225650930546,37.523822900501294 +transit,126.67217224500286,37.52097434998996 +transit,126.66208874752661,37.5181249371687 +transit,126.65200601697127,37.515274662190244 +transit,126.64192405343123,37.51242352520736 +transit,126.63184285700075,37.50957152637284 +transit,126.62176242777396,37.50671866583945 +transit,126.61168276584482,37.503864943760014 +transit,126.6016038713072,37.50101036028733 +transit,126.59152574425481,37.49815491557424 +transit,126.58144838478123,37.495298609773606 +transit,126.57137179297986,37.49244144303827 +transit,126.56129596894404,37.4895834155211 +transit,126.55122091276692,37.486724527375024 +transit,126.54114662454151,37.48386477875292 +transit,126.53107310436073,37.48100416980772 +transit,126.5210003523173,37.47814270069233 +transit,126.51092836850385,37.475280371559734 +transit,126.50085715301286,37.47241718256288 +transit,126.49078670593667,37.469553133854745 +transit,126.48071702736748,37.466688225588314 +transit,126.47064811739735,37.4638224579166 +transit,126.46057997611821,37.4609558309926 +transit,126.45051260362189,37.45808834496938 +Incheon,126.440446,37.45522 +transit,126.42921794251579,37.45530214985653 +transit,126.41798986062939,37.45538323296906 +transit,126.40676175465964,37.455463249332205 +transit,126.39553362492536,37.455542198940634 +transit,126.38430547174536,37.45562008178912 +transit,126.37307729543852,37.45569689787249 +transit,126.36184909632365,37.45577264718565 +transit,126.35062087471961,37.45584732972356 +transit,126.33939263094526,37.455920945481296 +transit,126.32816436531947,37.45599349445393 +transit,126.31693607816108,37.456064976636675 +transit,126.305707769789,37.45613539202477 +transit,126.29447944052208,37.45620474061356 +transit,126.28325109067923,37.45627302239843 +transit,126.27202272057933,37.456340237374846 +transit,126.26079433054127,37.456406385538344 +transit,126.24956592088398,37.45647146688455 +transit,126.23833749192633,37.456535481409134 +transit,126.22710904398726,37.456598429107835 +transit,126.21588057738566,37.45666030997649 +transit,126.20465209244048,37.456721124011 +transit,126.19342358947063,37.45678087120731 +transit,126.18219506879505,37.45683955156145 +transit,126.17096653073268,37.456897165069556 +transit,126.15973797560245,37.45695371172777 +transit,126.14850940372332,37.457009191532364 +transit,126.13728081541423,37.457063604479636 +transit,126.12605221099413,37.45711695056598 +transit,126.114823590782,37.45716922978786 +transit,126.10359495509678,37.457220442141804 +transit,126.09236630425747,37.45727058762442 +transit,126.081137638583,37.45731966623236 +transit,126.06990895839236,37.45736767796238 +transit,126.05868026400455,37.45741462281129 +transit,126.04745155573853,37.45746050077597 +transit,126.03622283391331,37.45750531185339 +transit,126.02499409884786,37.45754905604056 +transit,126.01376535086118,37.45759173333458 +transit,126.00253659027227,37.457633343732624 +transit,125.99130781740013,37.45767388723192 +transit,125.98007903256375,37.457713363829775 +transit,125.96885023608216,37.457751773523576 +transit,125.95762142827436,37.45778911631078 +transit,125.94639260945938,37.45782539218889 +transit,125.93516377995621,37.45786060115551 +transit,125.9239349400839,37.4578947432083 +transit,125.91270609016144,37.457927818345 +transit,125.90147723050787,37.4579598265634 +transit,125.89024836144222,37.457990767861396 +transit,125.87901948328351,37.4580206422369 +transit,125.86779059635079,37.45804944968797 +transit,125.85656170096308,37.45807719021268 +transit,125.84533279743943,37.458103863809164 +transit,125.83410388609886,37.45812947047568 +transit,125.82287496726042,37.458154010210514 +transit,125.81164604124316,37.45817748301205 +transit,125.80041710836613,37.45819988887872 +transit,125.78918816894836,37.45822122780903 +transit,125.77795922330891,37.45824149980157 +transit,125.76673027176683,37.458260704855 +transit,125.75550131464117,37.45827884296804 +transit,125.74427235225099,37.4582959141395 +transit,125.73304338491533,37.458311918368224 +transit,125.72181441295325,37.45832685565315 +transit,125.71058543668383,37.45834072599331 +transit,125.6993564564261,37.45835352938775 +transit,125.68812747249915,37.45836526583566 +transit,125.676898485222,37.458375935336235 +transit,125.66566949491374,37.458385537888766 +transit,125.65444050189345,37.45839407349262 +transit,125.64321150648014,37.45840154214723 +transit,125.63198250899292,37.4584079438521 +transit,125.62075350975084,37.45841327860682 +transit,125.60952450907295,37.45841754641101 +transit,125.59829550727835,37.458420747264405 +transit,125.58706650468608,37.45842288116679 +transit,125.5758375016152,37.45842394811801 +transit,125.5646084983848,37.45842394811801 +transit,125.55337949531392,37.45842288116679 +transit,125.54215049272165,37.458420747264405 +transit,125.53092149092704,37.45841754641101 +transit,125.51969249024916,37.45841327860682 +transit,125.50846349100708,37.45840794385211 +transit,125.49723449351985,37.45840154214723 +transit,125.48600549810655,37.45839407349262 +transit,125.47477650508625,37.458385537888766 +transit,125.463547514778,37.458375935336235 +transit,125.45231852750085,37.45836526583566 +transit,125.4410895435739,37.45835352938775 +transit,125.42986056331617,37.45834072599331 +transit,125.41863158704673,37.45832685565315 +transit,125.40740261508466,37.45831191836822 +transit,125.39617364774901,37.4582959141395 +transit,125.38494468535883,37.45827884296804 +transit,125.37371572823317,37.458260704855 +transit,125.36248677669109,37.458241499801574 +transit,125.35125783105164,37.45822122780903 +transit,125.34002889163386,37.45819988887872 +transit,125.32879995875683,37.45817748301205 +transit,125.31757103273958,37.458154010210514 +transit,125.30634211390114,37.45812947047568 +transit,125.29511320256057,37.458103863809164 +transit,125.28388429903691,37.45807719021267 +transit,125.27265540364921,37.45804944968798 +transit,125.26142651671648,37.45802064223691 +transit,125.25019763855778,37.457990767861396 +transit,125.23896876949213,37.4579598265634 +transit,125.22773990983856,37.457927818345 +transit,125.2165110599161,37.4578947432083 +transit,125.20528222004378,37.45786060115551 +transit,125.19405339054062,37.45782539218889 +transit,125.18282457172562,37.45778911631078 +transit,125.17159576391784,37.457751773523576 +transit,125.16036696743625,37.457713363829775 +transit,125.14913818259987,37.45767388723192 +transit,125.13790940972773,37.45763334373262 +transit,125.12668064913882,37.45759173333458 +transit,125.11545190115214,37.45754905604056 +transit,125.10422316608668,37.45750531185339 +transit,125.09299444426146,37.45746050077597 +transit,125.08176573599545,37.45741462281129 +transit,125.07053704160764,37.45736767796238 +transit,125.059308361417,37.45731966623236 +transit,125.04807969574253,37.45727058762442 +transit,125.03685104490322,37.45722044214181 +transit,125.02562240921799,37.45716922978786 +transit,125.01439378900587,37.457116950565975 +transit,125.00316518458577,37.457063604479636 +transit,124.99193659627667,37.45700919153236 +transit,124.98070802439754,37.45695371172777 +transit,124.96947946926731,37.456897165069556 +transit,124.95825093120494,37.45683955156145 +transit,124.94702241052937,37.45678087120731 +transit,124.93579390755951,37.456721124011 +transit,124.92456542261434,37.45666030997649 +transit,124.91333695601274,37.456598429107835 +transit,124.90210850807367,37.456535481409134 +transit,124.89088007911602,37.45647146688455 +transit,124.87965166945871,37.456406385538344 +transit,124.86842327942067,37.456340237374846 +transit,124.85719490932077,37.45627302239843 +transit,124.84596655947792,37.456204740613565 +transit,124.834738230211,37.45613539202477 +transit,124.82350992183892,37.456064976636675 +transit,124.81228163468053,37.45599349445393 +transit,124.80105336905474,37.455920945481296 +transit,124.78982512528039,37.45584732972357 +transit,124.77859690367634,37.45577264718565 +transit,124.76736870456148,37.45569689787249 +transit,124.75614052825463,37.455620081789114 +transit,124.74491237507463,37.455542198940634 +transit,124.73368424534036,37.455463249332205 +transit,124.7224561393706,37.45538323296906 +transit,124.7112280574842,37.45530214985653 +WP12,124.7,37.45522 +transit,124.7,37.446261186348565 +transit,124.7,37.43730235908327 +transit,124.7,37.42834351820521 +transit,124.7,37.419384663715554 +transit,124.7,37.410425795615396 +transit,124.7,37.40146691390587 +transit,124.7,37.3925080185881 +transit,124.7,37.383549109663235 +transit,124.7,37.37459018713238 +transit,124.7,37.36563125099668 +transit,124.7,37.356672301257255 +transit,124.7,37.34771333791525 +transit,124.7,37.338754360971805 +transit,124.7,37.32979537042805 +transit,124.7,37.32083636628513 +transit,124.7,37.31187734854418 +transit,124.7,37.30291831720634 +transit,124.7,37.29395927227276 +transit,124.7,37.28500021374457 +transit,124.7,37.27604114162291 +transit,124.7,37.26708205590896 +transit,124.7,37.25812295660385 +transit,124.7,37.249163843708715 +transit,124.7,37.240204717224714 +transit,124.7,37.231245577153004 +transit,124.7,37.22228642349475 +transit,124.7,37.21332725625107 +transit,124.7,37.204368075423154 +transit,124.7,37.195408881012156 +transit,124.7,37.18644967301921 +transit,124.7,37.17749045144549 +transit,124.7,37.16853121629218 +transit,124.7,37.15957196756041 +transit,124.7,37.15061270525136 +transit,124.7,37.14165342936619 +transit,124.7,37.132694139906064 +transit,124.7,37.12373483687216 +transit,124.7,37.11477552026563 +transit,124.7,37.105816190087666 +transit,124.7,37.09685684633942 +transit,124.7,37.087897489022076 +transit,124.7,37.07893811813682 +transit,124.7,37.0699787336848 +transit,124.7,37.06101933566721 +transit,124.7,37.052059924085235 +transit,124.7,37.04310049894004 +transit,124.7,37.03414106023282 +transit,124.7,37.02518160796475 +transit,124.7,37.016222142137 +transit,124.7,37.007262662750776 +transit,124.7,36.99830316980727 +transit,124.7,36.98934366330766 +transit,124.7,36.980384143253126 +transit,124.7,36.971424609644856 +transit,124.7,36.96246506248407 +transit,124.7,36.95350550177193 +transit,124.7,36.94454592750965 +transit,124.7,36.935586339698425 +transit,124.7,36.926626738339436 +transit,124.7,36.9176671234339 +transit,124.7,36.90870749498301 +transit,124.7,36.899747852987964 +transit,124.7,36.89078819744997 +transit,124.7,36.881828528370235 +transit,124.7,36.872868845749956 +transit,124.7,36.86390914959035 +transit,124.7,36.85494943989261 +transit,124.7,36.84598971665795 +transit,124.7,36.83702997988758 +transit,124.7,36.828070229582714 +transit,124.7,36.819110465744586 +transit,124.7,36.81015068837438 +transit,124.7,36.80119089747332 +transit,124.7,36.79223109304264 +transit,124.7,36.78327127508353 +transit,124.7,36.77431144359723 +transit,124.7,36.76535159858497 +transit,124.7,36.75639174004794 +transit,124.7,36.74743186798739 +transit,124.7,36.73847198240453 +transit,124.7,36.72951208330061 +transit,124.7,36.72055217067684 +transit,124.7,36.71159224453446 +transit,124.7,36.70263230487467 +transit,124.7,36.693672351698744 +transit,124.7,36.68471238500789 +transit,124.7,36.675752404803355 +transit,124.7,36.66679241108636 +transit,124.7,36.65783240385816 +transit,124.7,36.64887238311998 +transit,124.7,36.63991234887306 +transit,124.7,36.63095230111865 +transit,124.7,36.62199223985799 +transit,124.7,36.61303216509232 +transit,124.7,36.60407207682289 +transit,124.7,36.59511197505095 +transit,124.7,36.58615185977773 +transit,124.7,36.57719173100449 +transit,124.7,36.568231588732495 +transit,124.7,36.55927143296297 +transit,124.7,36.55031126369719 +transit,124.7,36.5413510809364 +transit,124.7,36.53239088468187 +transit,124.7,36.52343067493482 +transit,124.7,36.51447045169656 +transit,124.7,36.5055102149683 +transit,124.7,36.49654996475134 +transit,124.7,36.48758970104692 +transit,124.7,36.47862942385631 +transit,124.7,36.46966913318079 +transit,124.7,36.46070882902159 +transit,124.7,36.45174851138001 +transit,124.7,36.442788180257324 +transit,124.7,36.43382783565477 +transit,124.7,36.42486747757365 +transit,124.7,36.41590710601522 +transit,124.7,36.406946720980756 +transit,124.7,36.39798632247154 +transit,124.7,36.389025910488854 +transit,124.7,36.38006548503396 +transit,124.7,36.371105046108156 +transit,124.7,36.362144593712706 +transit,124.7,36.3531841278489 +transit,124.7,36.344223648518025 +transit,124.7,36.33526315572137 +transit,124.7,36.32630264946022 +transit,124.7,36.317342129735835 +transit,124.7,36.30838159654954 +transit,124.7,36.299421049902605 +transit,124.7,36.29046048979634 +transit,124.7,36.28149991623202 +transit,124.7,36.27253932921095 +transit,124.7,36.26357872873442 +transit,124.7,36.25461811480373 +transit,124.7,36.24565748742018 +transit,124.7,36.23669684658507 +transit,124.7,36.22773619229969 +transit,124.7,36.218775524565366 +transit,124.7,36.20981484338337 +transit,124.7,36.20085414875503 +transit,124.7,36.191893440681646 +transit,124.7,36.18293271916453 +transit,124.7,36.173971984204975 +transit,124.7,36.165011235804315 +transit,124.7,36.156050473963845 +transit,124.7,36.14708969868489 +transit,124.7,36.13812890996875 +transit,124.7,36.12916810781674 +transit,124.7,36.12020729223019 +transit,124.7,36.11124646321043 +transit,124.7,36.10228562075874 +transit,124.7,36.09332476487647 +transit,124.7,36.08436389556494 +transit,124.7,36.07540301282546 +transit,124.7,36.06644211665937 +transit,124.7,36.057481207067994 +transit,124.7,36.04852028405265 +transit,124.7,36.03955934761468 +transit,124.7,36.03059839775539 +transit,124.7,36.02163743447614 +transit,124.7,36.012676457778255 +transit,124.7,36.003715467663056 +transit,124.7,35.99475446413189 +transit,124.7,35.98579344718609 +transit,124.7,35.976832416827 +transit,124.7,35.96787137305596 +transit,124.7,35.9589103158743 +transit,124.7,35.94994924528336 +transit,124.7,35.9409881612845 +transit,124.7,35.93202706387906 +transit,124.7,35.923065953068374 +transit,124.7,35.9141048288538 +transit,124.7,35.90514369123669 +transit,124.7,35.89618254021839 +transit,124.7,35.88722137580024 +transit,124.7,35.8782601979836 +transit,124.7,35.86929900676983 +transit,124.7,35.86033780216028 +transit,124.7,35.85137658415631 +transit,124.7,35.84241535275928 +transit,124.7,35.833454107970546 +transit,124.7,35.82449284979147 +transit,124.7,35.8155315782234 +transit,124.7,35.80657029326772 +transit,124.7,35.79760899492579 +transit,124.7,35.78864768319896 +transit,124.7,35.77968635808861 +transit,124.7,35.770725019596114 +transit,124.7,35.76176366772283 +transit,124.7,35.75280230247014 +transit,124.7,35.74384092383941 +transit,124.7,35.734879531832 +transit,124.7,35.72591812644932 +transit,124.7,35.71695670769272 +transit,124.7,35.70799527556357 +transit,124.7,35.699033830063286 +transit,124.7,35.6900723711932 +transit,124.7,35.68111089895474 +transit,124.7,35.67214941334926 +transit,124.7,35.66318791437815 +transit,124.7,35.6542264020428 +transit,124.7,35.6452648763446 +transit,124.7,35.63630333728493 +transit,124.7,35.62734178486517 +transit,124.7,35.61838021908674 +transit,124.7,35.60941863995101 +transit,124.7,35.600457047459386 +transit,124.7,35.59149544161325 +transit,124.7,35.58253382241401 +transit,124.7,35.57357218986305 +transit,124.7,35.56461054396177 +transit,124.7,35.555648884711594 +transit,124.7,35.5466872121139 +transit,124.7,35.53772552617009 +transit,124.7,35.528763826881594 +transit,124.7,35.51980211424979 +transit,124.7,35.51084038827609 +transit,124.7,35.50187864896191 +transit,124.7,35.49291689630865 +transit,124.7,35.483955130317725 +transit,124.7,35.47499335099055 +transit,124.7,35.46603155832854 +transit,124.7,35.4570697523331 +transit,124.7,35.448107933005666 +transit,124.7,35.43914610034762 +transit,124.7,35.43018425436041 +transit,124.7,35.421222395045454 +transit,124.7,35.41226052240416 +transit,124.7,35.40329863643796 +transit,124.7,35.39433673714828 +transit,124.7,35.385374824536534 +transit,124.7,35.37641289860415 +transit,124.7,35.36745095935257 +transit,124.7,35.3584890067832 +transit,124.7,35.349527040897485 +transit,124.7,35.34056506169687 +transit,124.7,35.33160306918277 +transit,124.7,35.32264106335661 +transit,124.7,35.313679044219846 +transit,124.7,35.304717011773924 +transit,124.7,35.29575496602024 +transit,124.7,35.28679290696027 +transit,124.7,35.27783083459545 +transit,124.7,35.26886874892721 +transit,124.7,35.259906649957 +transit,124.7,35.25094453768627 +transit,124.7,35.24198241211646 +transit,124.7,35.23302027324902 +transit,124.7,35.22405812108539 +transit,124.7,35.21509595562703 +transit,124.7,35.20613377687539 +transit,124.7,35.19717158483192 +transit,124.7,35.18820937949809 +transit,124.7,35.17924716087532 +transit,124.7,35.1702849289651 +transit,124.7,35.161322683768866 +transit,124.7,35.152360425288094 +transit,124.7,35.143398153524245 +transit,124.7,35.13443586847877 +transit,124.7,35.12547357015313 +transit,124.7,35.11651125854879 +transit,124.7,35.10754893366723 +transit,124.7,35.09858659550991 +transit,124.7,35.089624244078294 +transit,124.7,35.08066187937385 +transit,124.7,35.07169950139806 +transit,124.7,35.06273711015239 +transit,124.7,35.053774705638304 +transit,124.7,35.04481228785729 +transit,124.7,35.035849856810835 +transit,124.7,35.026887412500386 +transit,124.7,35.017924954927445 +transit,124.7,35.00896248409349 +WP3,124.7,35.0 +transit,124.7,35.00896248409349 +transit,124.7,35.017924954927445 +transit,124.7,35.026887412500386 +transit,124.7,35.035849856810835 +transit,124.7,35.04481228785729 +transit,124.7,35.053774705638304 +transit,124.7,35.06273711015238 +transit,124.7,35.07169950139806 +transit,124.7,35.08066187937385 +transit,124.7,35.0896242440783 +transit,124.7,35.09858659550991 +transit,124.7,35.10754893366723 +transit,124.7,35.11651125854879 +transit,124.7,35.125473570153126 +transit,124.7,35.13443586847877 +transit,124.7,35.143398153524245 +transit,124.7,35.152360425288094 +transit,124.7,35.161322683768866 +transit,124.7,35.170284928965096 +transit,124.7,35.17924716087532 +transit,124.7,35.18820937949809 +transit,124.7,35.19717158483192 +transit,124.7,35.20613377687539 +transit,124.7,35.215095955627035 +transit,124.7,35.224058121085385 +transit,124.7,35.23302027324901 +transit,124.7,35.24198241211646 +transit,124.7,35.25094453768627 +transit,124.7,35.25990664995701 +transit,124.7,35.26886874892721 +transit,124.7,35.277830834595456 +transit,124.7,35.28679290696028 +transit,124.7,35.29575496602025 +transit,124.7,35.30471701177392 +transit,124.7,35.31367904421986 +transit,124.7,35.32264106335662 +transit,124.7,35.33160306918277 +transit,124.7,35.340565061696864 +transit,124.7,35.34952704089749 +transit,124.7,35.3584890067832 +transit,124.7,35.36745095935257 +transit,124.7,35.376412898604144 +transit,124.7,35.385374824536534 +transit,124.7,35.39433673714827 +transit,124.7,35.40329863643796 +transit,124.7,35.41226052240416 +transit,124.7,35.421222395045454 +transit,124.7,35.43018425436042 +transit,124.7,35.43914610034762 +transit,124.7,35.448107933005666 +transit,124.7,35.45706975233311 +transit,124.7,35.466031558328545 +transit,124.7,35.47499335099055 +transit,124.7,35.483955130317725 +transit,124.7,35.49291689630864 +transit,124.7,35.50187864896191 +transit,124.7,35.51084038827609 +transit,124.7,35.51980211424979 +transit,124.7,35.52876382688159 +transit,124.7,35.5377255261701 +transit,124.7,35.5466872121139 +transit,124.7,35.55564888471159 +transit,124.7,35.56461054396177 +transit,124.7,35.57357218986304 +transit,124.7,35.58253382241401 +transit,124.7,35.59149544161325 +transit,124.7,35.60045704745938 +transit,124.7,35.60941863995101 +transit,124.7,35.61838021908673 +transit,124.7,35.62734178486517 +transit,124.7,35.63630333728493 +transit,124.7,35.6452648763446 +transit,124.7,35.6542264020428 +transit,124.7,35.66318791437815 +transit,124.7,35.67214941334926 +transit,124.7,35.681110898954735 +transit,124.7,35.6900723711932 +transit,124.7,35.69903383006328 +transit,124.7,35.70799527556357 +transit,124.7,35.71695670769272 +transit,124.7,35.72591812644932 +transit,124.7,35.734879531832 +transit,124.7,35.74384092383941 +transit,124.7,35.75280230247014 +transit,124.7,35.76176366772283 +transit,124.7,35.770725019596114 +transit,124.7,35.77968635808862 +transit,124.7,35.78864768319896 +transit,124.7,35.79760899492579 +transit,124.7,35.806570293267725 +transit,124.7,35.8155315782234 +transit,124.7,35.82449284979147 +transit,124.7,35.833454107970546 +transit,124.7,35.84241535275928 +transit,124.7,35.85137658415631 +transit,124.7,35.86033780216028 +transit,124.7,35.86929900676983 +transit,124.7,35.8782601979836 +transit,124.7,35.887221375800245 +transit,124.7,35.89618254021839 +transit,124.7,35.90514369123669 +transit,124.7,35.91410482885381 +transit,124.7,35.923065953068374 +transit,124.7,35.93202706387906 +transit,124.7,35.9409881612845 +transit,124.7,35.94994924528336 +transit,124.7,35.9589103158743 +transit,124.7,35.96787137305596 +transit,124.7,35.976832416827 +transit,124.7,35.98579344718609 +transit,124.7,35.99475446413188 +transit,124.7,36.003715467663056 +transit,124.7,36.01267645777825 +transit,124.7,36.02163743447614 +transit,124.7,36.03059839775539 +transit,124.7,36.03955934761467 +transit,124.7,36.04852028405264 +transit,124.7,36.057481207067994 +transit,124.7,36.06644211665938 +transit,124.7,36.07540301282546 +transit,124.7,36.08436389556495 +transit,124.7,36.09332476487647 +transit,124.7,36.102285620758735 +transit,124.7,36.11124646321043 +transit,124.7,36.12020729223019 +transit,124.7,36.12916810781674 +transit,124.7,36.13812890996875 +transit,124.7,36.14708969868489 +transit,124.7,36.156050473963845 +transit,124.7,36.165011235804315 +transit,124.7,36.17397198420498 +transit,124.7,36.18293271916453 +transit,124.7,36.19189344068165 +transit,124.7,36.200854148755035 +transit,124.7,36.20981484338337 +transit,124.7,36.21877552456536 +transit,124.7,36.227736192299695 +transit,124.7,36.23669684658507 +transit,124.7,36.24565748742018 +transit,124.7,36.25461811480373 +transit,124.7,36.26357872873443 +transit,124.7,36.27253932921095 +transit,124.7,36.281499916232015 +transit,124.7,36.29046048979634 +transit,124.7,36.29942104990261 +transit,124.7,36.30838159654954 +transit,124.7,36.31734212973584 +transit,124.7,36.3263026494602 +transit,124.7,36.33526315572137 +transit,124.7,36.34422364851803 +transit,124.7,36.3531841278489 +transit,124.7,36.36214459371271 +transit,124.7,36.371105046108156 +transit,124.7,36.38006548503396 +transit,124.7,36.38902591048885 +transit,124.7,36.39798632247154 +transit,124.7,36.406946720980756 +transit,124.7,36.41590710601522 +transit,124.7,36.42486747757365 +transit,124.7,36.433827835654775 +transit,124.7,36.44278818025732 +transit,124.7,36.45174851138002 +transit,124.7,36.4607088290216 +transit,124.7,36.46966913318078 +transit,124.7,36.47862942385631 +transit,124.7,36.48758970104692 +transit,124.7,36.496549964751345 +transit,124.7,36.50551021496831 +transit,124.7,36.51447045169656 +transit,124.7,36.523430674934836 +transit,124.7,36.53239088468187 +transit,124.7,36.5413510809364 +transit,124.7,36.55031126369719 +transit,124.7,36.559271432962966 +transit,124.7,36.56823158873249 +transit,124.7,36.5771917310045 +transit,124.7,36.58615185977772 +transit,124.7,36.59511197505095 +transit,124.7,36.60407207682289 +transit,124.7,36.61303216509232 +transit,124.7,36.62199223985798 +transit,124.7,36.63095230111865 +transit,124.7,36.63991234887306 +transit,124.7,36.64887238311998 +transit,124.7,36.65783240385816 +transit,124.7,36.666792411086355 +transit,124.7,36.675752404803355 +transit,124.7,36.68471238500789 +transit,124.7,36.69367235169875 +transit,124.7,36.70263230487467 +transit,124.7,36.71159224453445 +transit,124.7,36.72055217067685 +transit,124.7,36.72951208330062 +transit,124.7,36.73847198240453 +transit,124.7,36.74743186798739 +transit,124.7,36.75639174004794 +transit,124.7,36.765351598584964 +transit,124.7,36.774311443597234 +transit,124.7,36.78327127508353 +transit,124.7,36.79223109304264 +transit,124.7,36.80119089747332 +transit,124.7,36.81015068837438 +transit,124.7,36.81911046574458 +transit,124.7,36.82807022958272 +transit,124.7,36.83702997988758 +transit,124.7,36.84598971665795 +transit,124.7,36.8549494398926 +transit,124.7,36.86390914959034 +transit,124.7,36.872868845749956 +transit,124.7,36.881828528370235 +transit,124.7,36.89078819744997 +transit,124.7,36.899747852987964 +transit,124.7,36.90870749498301 +transit,124.7,36.9176671234339 +transit,124.7,36.92662673833944 +transit,124.7,36.935586339698425 +transit,124.7,36.94454592750965 +transit,124.7,36.95350550177193 +transit,124.7,36.96246506248406 +transit,124.7,36.971424609644856 +transit,124.7,36.980384143253126 +transit,124.7,36.98934366330766 +transit,124.7,36.998303169807265 +transit,124.7,37.007262662750776 +transit,124.7,37.01622214213701 +transit,124.7,37.02518160796475 +transit,124.7,37.03414106023281 +transit,124.7,37.04310049894004 +transit,124.7,37.052059924085235 +transit,124.7,37.06101933566722 +transit,124.7,37.0699787336848 +transit,124.7,37.07893811813681 +transit,124.7,37.08789748902208 +transit,124.7,37.09685684633942 +transit,124.7,37.105816190087666 +transit,124.7,37.11477552026564 +transit,124.7,37.12373483687216 +transit,124.7,37.132694139906064 +transit,124.7,37.14165342936619 +transit,124.7,37.150612705251355 +transit,124.7,37.15957196756041 +transit,124.7,37.16853121629218 +transit,124.7,37.1774904514455 +transit,124.7,37.18644967301921 +transit,124.7,37.19540888101215 +transit,124.7,37.20436807542316 +transit,124.7,37.21332725625107 +transit,124.7,37.22228642349475 +transit,124.7,37.23124557715301 +transit,124.7,37.24020471722471 +transit,124.7,37.249163843708715 +transit,124.7,37.25812295660384 +transit,124.7,37.26708205590896 +transit,124.7,37.27604114162291 +transit,124.7,37.28500021374457 +transit,124.7,37.29395927227276 +transit,124.7,37.302918317206334 +transit,124.7,37.31187734854418 +transit,124.7,37.32083636628513 +transit,124.7,37.32979537042806 +transit,124.7,37.33875436097181 +transit,124.7,37.34771333791525 +transit,124.7,37.35667230125725 +transit,124.7,37.36563125099668 +transit,124.7,37.37459018713238 +transit,124.7,37.38354910966323 +transit,124.7,37.39250801858811 +transit,124.7,37.40146691390587 +transit,124.7,37.410425795615396 +transit,124.7,37.41938466371556 +transit,124.7,37.42834351820521 +transit,124.7,37.43730235908326 +transit,124.7,37.44626118634857 +WP12,124.7,37.45522 +transit,124.7112280574842,37.45530214985653 +transit,124.7224561393706,37.45538323296906 +transit,124.73368424534036,37.455463249332205 +transit,124.74491237507463,37.455542198940634 +transit,124.75614052825463,37.45562008178912 +transit,124.76736870456148,37.45569689787249 +transit,124.77859690367634,37.45577264718565 +transit,124.78982512528039,37.45584732972356 +transit,124.80105336905474,37.455920945481296 +transit,124.81228163468053,37.45599349445393 +transit,124.82350992183892,37.456064976636675 +transit,124.834738230211,37.45613539202477 +transit,124.84596655947792,37.45620474061356 +transit,124.85719490932077,37.45627302239843 +transit,124.86842327942067,37.456340237374846 +transit,124.87965166945872,37.456406385538344 +transit,124.89088007911602,37.45647146688455 +transit,124.90210850807367,37.456535481409134 +transit,124.91333695601274,37.456598429107835 +transit,124.92456542261434,37.45666030997649 +transit,124.93579390755951,37.456721124011 +transit,124.94702241052937,37.45678087120731 +transit,124.95825093120494,37.45683955156145 +transit,124.96947946926731,37.456897165069556 +transit,124.98070802439754,37.45695371172777 +transit,124.99193659627667,37.457009191532364 +transit,125.00316518458577,37.457063604479636 +transit,125.01439378900587,37.45711695056598 +transit,125.025622409218,37.45716922978786 +transit,125.03685104490322,37.457220442141804 +transit,125.04807969574253,37.45727058762442 +transit,125.059308361417,37.45731966623236 +transit,125.07053704160764,37.45736767796238 +transit,125.08176573599545,37.45741462281129 +transit,125.09299444426146,37.45746050077597 +transit,125.10422316608668,37.45750531185339 +transit,125.11545190115214,37.45754905604056 +transit,125.12668064913882,37.45759173333458 +transit,125.13790940972773,37.457633343732624 +transit,125.14913818259987,37.45767388723192 +transit,125.16036696743625,37.457713363829775 +transit,125.17159576391784,37.457751773523576 +transit,125.18282457172563,37.45778911631078 +transit,125.19405339054062,37.45782539218889 +transit,125.20528222004378,37.45786060115551 +transit,125.2165110599161,37.4578947432083 +transit,125.22773990983856,37.457927818345 +transit,125.23896876949213,37.4579598265634 +transit,125.25019763855778,37.457990767861396 +transit,125.26142651671648,37.4580206422369 +transit,125.27265540364921,37.45804944968797 +transit,125.28388429903691,37.45807719021268 +transit,125.29511320256057,37.458103863809164 +transit,125.30634211390114,37.45812947047568 +transit,125.31757103273958,37.458154010210514 +transit,125.32879995875683,37.45817748301205 +transit,125.34002889163386,37.45819988887872 +transit,125.35125783105164,37.45822122780903 +transit,125.36248677669109,37.45824149980157 +transit,125.37371572823317,37.458260704855 +transit,125.38494468535883,37.45827884296804 +transit,125.39617364774901,37.4582959141395 +transit,125.40740261508466,37.458311918368224 +transit,125.41863158704675,37.45832685565315 +transit,125.42986056331617,37.45834072599331 +transit,125.4410895435739,37.45835352938775 +transit,125.45231852750085,37.45836526583566 +transit,125.463547514778,37.458375935336235 +transit,125.47477650508625,37.458385537888766 +transit,125.48600549810655,37.45839407349262 +transit,125.49723449351985,37.45840154214723 +transit,125.50846349100708,37.4584079438521 +transit,125.51969249024916,37.45841327860682 +transit,125.53092149092704,37.45841754641101 +transit,125.54215049272165,37.458420747264405 +transit,125.55337949531392,37.45842288116679 +transit,125.5646084983848,37.45842394811801 +transit,125.5758375016152,37.45842394811801 +transit,125.58706650468608,37.45842288116679 +transit,125.59829550727835,37.458420747264405 +transit,125.60952450907295,37.45841754641101 +transit,125.62075350975084,37.45841327860682 +transit,125.63198250899292,37.45840794385211 +transit,125.64321150648014,37.45840154214723 +transit,125.65444050189345,37.45839407349262 +transit,125.66566949491374,37.458385537888766 +transit,125.676898485222,37.458375935336235 +transit,125.68812747249915,37.45836526583566 +transit,125.6993564564261,37.45835352938775 +transit,125.71058543668383,37.45834072599331 +transit,125.72181441295326,37.45832685565315 +transit,125.73304338491533,37.45831191836822 +transit,125.74427235225099,37.4582959141395 +transit,125.75550131464117,37.45827884296804 +transit,125.76673027176683,37.458260704855 +transit,125.77795922330891,37.458241499801574 +transit,125.78918816894836,37.45822122780903 +transit,125.80041710836613,37.45819988887872 +transit,125.81164604124316,37.45817748301205 +transit,125.82287496726042,37.458154010210514 +transit,125.83410388609886,37.45812947047568 +transit,125.84533279743943,37.458103863809164 +transit,125.85656170096308,37.45807719021267 +transit,125.86779059635079,37.45804944968798 +transit,125.87901948328351,37.45802064223691 +transit,125.89024836144222,37.457990767861396 +transit,125.90147723050787,37.4579598265634 +transit,125.91270609016144,37.457927818345 +transit,125.9239349400839,37.4578947432083 +transit,125.93516377995621,37.45786060115551 +transit,125.94639260945938,37.45782539218889 +transit,125.95762142827438,37.45778911631078 +transit,125.96885023608216,37.457751773523576 +transit,125.98007903256375,37.457713363829775 +transit,125.99130781740013,37.45767388723192 +transit,126.00253659027227,37.45763334373262 +transit,126.01376535086118,37.45759173333458 +transit,126.02499409884786,37.45754905604056 +transit,126.03622283391331,37.45750531185339 +transit,126.04745155573853,37.45746050077597 +transit,126.05868026400455,37.45741462281129 +transit,126.06990895839236,37.45736767796238 +transit,126.081137638583,37.45731966623236 +transit,126.09236630425747,37.45727058762442 +transit,126.10359495509678,37.45722044214181 +transit,126.11482359078201,37.45716922978786 +transit,126.12605221099413,37.457116950565975 +transit,126.13728081541423,37.457063604479636 +transit,126.14850940372332,37.45700919153236 +transit,126.15973797560245,37.45695371172777 +transit,126.17096653073268,37.456897165069556 +transit,126.18219506879505,37.45683955156145 +transit,126.19342358947063,37.45678087120731 +transit,126.20465209244048,37.456721124011 +transit,126.21588057738566,37.45666030997649 +transit,126.22710904398726,37.456598429107835 +transit,126.23833749192633,37.456535481409134 +transit,126.24956592088398,37.45647146688455 +transit,126.26079433054129,37.456406385538344 +transit,126.27202272057933,37.456340237374846 +transit,126.28325109067923,37.45627302239843 +transit,126.29447944052208,37.456204740613565 +transit,126.305707769789,37.45613539202477 +transit,126.31693607816108,37.456064976636675 +transit,126.32816436531947,37.45599349445393 +transit,126.33939263094526,37.455920945481296 +transit,126.35062087471961,37.45584732972357 +transit,126.36184909632365,37.45577264718565 +transit,126.37307729543852,37.45569689787249 +transit,126.38430547174536,37.455620081789114 +transit,126.39553362492536,37.455542198940634 +transit,126.40676175465964,37.455463249332205 +transit,126.41798986062939,37.45538323296906 +transit,126.42921794251579,37.45530214985653 +Incheon,126.440446,37.45522 +transit,126.45051260362189,37.458088344969404 +transit,126.46057997611821,37.46095583099262 +transit,126.47064811739735,37.463822457916606 +transit,126.48071702736749,37.46668822558833 +transit,126.49078670593667,37.46955313385475 +transit,126.50085715301287,37.47241718256289 +transit,126.51092836850387,37.47528037155975 +transit,126.5210003523173,37.478142700692345 +transit,126.53107310436073,37.481004169807726 +transit,126.54114662454153,37.48386477875294 +transit,126.55122091276691,37.48672452737504 +transit,126.56129596894404,37.489583415521125 +transit,126.57137179297986,37.492441443038274 +transit,126.58144838478123,37.49529860977361 +transit,126.59152574425481,37.49815491557426 +transit,126.6016038713072,37.501010360287346 +transit,126.61168276584482,37.50386494376002 +transit,126.62176242777396,37.506718665839465 +transit,126.63184285700075,37.509571526372845 +transit,126.64192405343123,37.512423525207375 +transit,126.65200601697127,37.51527466219026 +transit,126.66208874752661,37.51812493716871 +transit,126.67217224500286,37.52097434998998 +transit,126.68225650930546,37.52382290050131 +transit,126.69234154033975,37.52667058854998 +transit,126.70242733801096,37.52951741398328 +transit,126.71251390222407,37.53236337664849 +transit,126.72260123288407,37.53520847639294 +transit,126.73268932989569,37.53805271306395 +transit,126.74277819316359,37.54089608650886 +transit,126.75286782259226,37.54373859657503 +transit,126.76295821808608,37.546580243109844 +transit,126.77304937954928,37.54942102596067 +transit,126.78314130688592,37.55226094497492 +Gimpo,126.793234,37.5551 +transit,126.80328755093704,37.55576985145824 +transit,126.8133412817411,37.556438846790364 +transit,126.82339519218971,37.5571069859607 +transit,126.83344928206037,37.55777426893365 +transit,126.84350355113051,37.5584406956736 +transit,126.85355799917757,37.55910626614505 +transit,126.86361262597892,37.55977098031248 +transit,126.87366743131189,37.56043483814044 +transit,126.88372241495378,37.56109783959354 +transit,126.89377757668187,37.56175998463641 +transit,126.90383291627336,37.562421273233745 +transit,126.91388843350545,37.563081705350264 +transit,126.9239441281553,37.563741280950744 +WP9,126.934,37.5644 +transit,126.94348040842942,37.567286634095225 +transit,126.95296154848067,37.570172505423216 +transit,126.96244342009334,37.57305761384708 +transit,126.97192602320682,37.57594195922991 +transit,126.9814093577605,37.57882554143482 +transit,126.99089342369354,37.581708360324924 +transit,127.00037822094507,37.584590415763365 +transit,127.0098637494541,37.587471707613254 +transit,127.01935000915948,37.59035223573776 +WP8,127.028837,37.593232 +transit,127.03925772735576,37.59259122609948 +transit,127.049678275891,37.591949532130364 +transit,127.06009864535636,37.59130691812946 +transit,127.07051883550254,37.59066338413357 +transit,127.0809388460803,37.5900189301796 +transit,127.09135867684041,37.58937355630448 +transit,127.10177832753372,37.58872726254518 +transit,127.1121977979111,37.58808004893876 +transit,127.12261708772343,37.587431915522274 +transit,127.13303619672169,37.586782862332875 +transit,127.14345512465685,37.58613288940776 +transit,127.15387387127997,37.58548199678413 +transit,127.16429243634211,37.58483018449934 +transit,127.1747108195944,37.58417745259068 +transit,127.18512902078798,37.583523801095545 +transit,127.19554703967407,37.5828692300514 +transit,127.2059648760039,37.58221373949572 +transit,127.21638252952877,37.58155732946605 +WP7,127.2268,37.5809 +transit,127.23295252243253,37.58731013816631 +transit,127.23910610015128,37.59371994860996 +transit,127.24526073352834,37.6001294312024 +transit,127.25141642293593,37.60653858581509 +transit,127.2575731687464,37.6129474123194 +transit,127.26373097133218,37.61935591058666 +transit,127.26988983106587,37.62576408048816 +transit,127.27604974832009,37.63217192189511 +transit,127.28221072346766,37.63857943467867 +transit,127.28837275688147,37.64498661870998 +transit,127.29453584893454,37.651393473860075 +WP6,127.3007,37.6578 +transit,127.29197708232722,37.661521421407144 +transit,127.28325329380102,37.66524219534583 +transit,127.27452863436872,37.668962321666314 +transit,127.26580310397777,37.67268180021882 +transit,127.25707670257566,37.67640063085358 +transit,127.24834943011,37.68011881342078 +transit,127.23962128652843,37.68383634777065 +transit,127.23089227177876,37.68755323375334 +transit,127.22216238580883,37.691269471219044 +transit,127.21343162856657,37.69498506001788 +WP5,127.2047,37.6987 +transit,127.19914453074887,37.692026478826136 +transit,127.19359005716825,37.68535268841072 +transit,127.1880365788795,37.67867862886307 +transit,127.18248409550407,37.67200430029248 +transit,127.17693260666354,37.66532970280817 +transit,127.17138211197965,37.658654836519354 +transit,127.16583261107425,37.651979701535154 +transit,127.1602841035694,37.64530429796467 +transit,127.15473658908718,37.63862862591694 +transit,127.1491900672499,37.63195268550096 +transit,127.14364453767999,37.62527647682568 +WP4,127.1381,37.6186 +transit,127.13693211306057,37.61052237439777 +transit,127.13576447871735,37.602444726155696 +transit,127.13459709684253,37.59436705528044 +transit,127.1334299673084,37.5862893617786 +transit,127.13226308998733,37.578211645656786 +transit,127.13109646475178,37.57013390692161 +transit,127.12993009147425,37.5620561455797 +transit,127.12876397002731,37.55397836163763 +transit,127.12759810028365,37.54590055510203 +transit,127.12643248211599,37.537822725979495 +transit,127.12526711539714,37.529744874276616 +WP3,127.124102,37.521667 +transit,127.12298697916394,37.514032391806964 +transit,127.12187218546937,37.50639776319721 +transit,127.12075761880781,37.49876311417644 +transit,127.11964327907083,37.49112844475035 +transit,127.11852916615004,37.4834937549246 +transit,127.11741527993712,37.4758590447049 +transit,127.11630162032382,37.46822431409691 +transit,127.11518818720195,37.46058956310631 +transit,127.11407498046337,37.45295479173878 +Seoul_Air_Base,127.112962,37.44532 +transit,127.1066925294896,37.43839083921136 +transit,127.10042421498869,37.431461337800904 +transit,127.09415705605048,37.42453149591249 +transit,127.08789105222827,37.41760131368982 +transit,127.08162620307557,37.41067079127659 +transit,127.07536250814601,37.403739928816385 +transit,127.06909996699342,37.39680872645275 +transit,127.06283857917172,37.389877184329166 +transit,127.05657834423506,37.38294530258906 +transit,127.0503192617377,37.37601308137576 +transit,127.04406133123405,37.36908052083256 +transit,127.03780455227867,37.3621476211027 +transit,127.03154892442635,37.35521438232931 +transit,127.02529444723194,37.348280804655516 +transit,127.0190411202505,37.34134688822431 +transit,127.01278894303722,37.33441263317869 +transit,127.00653791514749,37.327478039661536 +transit,127.00028803613678,37.320543107815695 +transit,126.99403930556078,37.31360783778394 +transit,126.9877917229753,37.306672229708994 +transit,126.98154528793634,37.29973628373349 +WP25,126.9753,37.2928 +transit,126.97903106148158,37.286449497224005 +transit,126.98276149592735,37.280098870032944 +transit,126.98649130357502,37.27374811847357 +transit,126.9902204846622,37.26739724259265 +transit,126.99394903942638,37.26104624243692 +transit,126.99767696810498,37.2546951180531 +transit,127.00140427093532,37.24834386948789 +transit,127.00513094815463,37.241992496787965 +Suwon_Air_Base,127.008857,37.235641 +transit,127.01669082843866,37.22926631967048 +transit,127.02452333802698,37.222891114381575 +transit,127.03235452918393,37.2165153843387 +transit,127.04018440232842,37.21013912974715 +transit,127.0480129578793,37.20376235081221 +transit,127.05584019625533,37.197385047739054 +transit,127.06366611787519,37.19100722073276 +transit,127.07149072315752,37.18462886999835 +transit,127.07931401252088,37.17824999574078 +transit,127.08713598638373,37.1718705981649 +transit,127.0949566451645,37.16549067747551 +transit,127.10277598928153,37.15911023387733 +transit,127.11059401915306,37.152729267574976 +transit,127.11841073519732,37.14634777877303 +transit,127.12622613783242,37.13996576767595 +transit,127.1340402274764,37.13358323448817 +transit,127.14185300454727,37.127200179414 +transit,127.14966446946292,37.1208166026577 +transit,127.1574746226412,37.11443250442345 +transit,127.1652834644999,37.108047884915344 +transit,127.17309099545665,37.10166274433741 +transit,127.18089721592914,37.095277082893595 +transit,127.18870212633487,37.088890900787774 +transit,127.19650572709138,37.08250419822373 +transit,127.20430801861602,37.0761169754052 +transit,127.21210900132617,37.069729232535806 +transit,127.21990867563906,37.06334096981913 +transit,127.22770704197191,37.05695218745866 +transit,127.23550410074185,37.0505628856578 +transit,127.24329985236588,37.04417306461988 +transit,127.25109429726102,37.0377827245482 +transit,127.25888743584417,37.0313918656459 +transit,127.26667926853214,37.02500048811611 +transit,127.27446979574172,37.01860859216187 +transit,127.28225901788957,37.01221617798612 +transit,127.29004693539233,37.00582324579175 +transit,127.29783354866653,36.99942979578157 +transit,127.30561885812864,36.9930358281583 +transit,127.31340286419507,36.986641343124596 +transit,127.32118556728213,36.98024634088303 +transit,127.32896696780608,36.97385082163611 +transit,127.33674706618311,36.96745478558627 +transit,127.34452586282933,36.96105823293584 +transit,127.35230335816075,36.9546611638871 +transit,127.36007955259338,36.948263578642255 +transit,127.36785444654306,36.94186547740343 +transit,127.37562804042564,36.93546686037267 +transit,127.38340033465686,36.929067727751935 +transit,127.39117132965237,36.922668079743126 +transit,127.39894102582781,36.91626791654806 +transit,127.40670942359867,36.90986723836849 +transit,127.41447652338043,36.90346604540608 +transit,127.42224232558846,36.89706433786242 +transit,127.43000683063805,36.89066211593904 +transit,127.43777003894446,36.88425937983737 +transit,127.44553195092287,36.87785612975876 +transit,127.45329256698831,36.87145236590454 +transit,127.46105188755584,36.865048088475895 +transit,127.4688099130404,36.858643297673986 +transit,127.47656664385684,36.85223799369986 +transit,127.48432208041997,36.84583217675452 +transit,127.4920762231445,36.83942584703888 +transit,127.4998290724451,36.83301900475377 +transit,127.5075806287363,36.82661165009997 +transit,127.51533089243267,36.82020378327814 +transit,127.52307986394858,36.81379540448893 +transit,127.53082754369842,36.80738651393285 +transit,127.53857393209645,36.80097711181038 +transit,127.5463190295569,36.7945671983219 +transit,127.5540628364939,36.78815677366774 +transit,127.56180535332149,36.78174583804811 +transit,127.56954658045366,36.77533439166319 +transit,127.57728651830435,36.76892243471307 +transit,127.58502516728738,36.76250996739776 +transit,127.59276252781652,36.7560969899172 +transit,127.60049860030546,36.74968350247124 +transit,127.60823338516781,36.743269505259704 +transit,127.61596688281713,36.73685499848227 +transit,127.62369909366689,36.73043998233859 +transit,127.63143001813046,36.724024457028236 +transit,127.6391596566212,36.71760842275068 +transit,127.64688800955234,36.711191879705346 +transit,127.65461507733703,36.704774828091594 +transit,127.66234086038841,36.69835726810865 +transit,127.6700653591195,36.69193919995574 +transit,127.67778857394323,36.68552062383196 +transit,127.68551050527249,36.67910153993637 +transit,127.69323115352007,36.67268194846792 +transit,127.70095051909871,36.666261849625506 +transit,127.70866860242107,36.65984124360795 +transit,127.71638540389974,36.65342013061399 +transit,127.72410092394718,36.646998510842316 +transit,127.73181516297586,36.64057638449149 +transit,127.73952812139812,36.63415375176006 +transit,127.74723979962626,36.62773061284646 +transit,127.75495019807246,36.62130696794907 +transit,127.76265931714887,36.61488281726617 +transit,127.77036715726756,36.608458160996 +transit,127.77807371884049,36.60203299933671 +transit,127.78577900227957,36.59560733248637 +transit,127.79348300799664,36.58918116064297 +transit,127.80118573640347,36.582754484004454 +transit,127.80888718791172,36.576327302768675 +transit,127.81658736293303,36.56989961713339 +transit,127.82428626187891,36.56347142729633 +transit,127.83198388516082,36.5570427334551 +transit,127.83968023319017,36.55061353580727 +transit,127.84737530637824,36.54418383455033 +transit,127.85506910513628,36.53775362988168 +transit,127.86276162987544,36.53132292199865 +transit,127.87045288100681,36.524891711098505 +transit,127.8781428589414,36.51845999737842 +transit,127.88583156409014,36.51202778103554 +transit,127.89351899686389,36.50559506226688 +transit,127.90120515767345,36.49916184126939 +transit,127.90889004692951,36.49272811824 +transit,127.91657366504269,36.4862938933755 +transit,127.92425601242357,36.47985916687264 +transit,127.93193708948264,36.4734239389281 +transit,127.93961689663028,36.46698820973847 +transit,127.94729543427685,36.46055197950026 +transit,127.95497270283258,36.454115248409934 +transit,127.96264870270767,36.44767801666387 +transit,127.9703234343122,36.44124028445837 +transit,127.97799689805622,36.43480205198965 +transit,127.98566909434969,36.42836331945388 +transit,127.99334002360247,36.42192408704713 +transit,128.00100968622436,36.41548435496543 +transit,128.00867808262512,36.409044123404676 +transit,128.01634521321438,36.40260339256078 +transit,128.02401107840168,36.396162162629494 +transit,128.03167567859657,36.38972043380655 +transit,128.03933901420845,36.383278206287585 +transit,128.04700108564668,36.37683548026815 +transit,128.05466189332054,36.37039225594376 +transit,128.06232143763918,36.36394853350985 +transit,128.06997971901177,36.35750431316175 +transit,128.0776367378473,36.35105959509473 +transit,128.0852924945548,36.344614379504 +transit,128.09294698954315,36.33816866658471 +transit,128.10060022322114,36.331722456531885 +transit,128.10825219599752,36.325275749540516 +transit,128.11590290828093,36.31882854580553 +transit,128.12355236048,36.31238084552176 +transit,128.13120055300323,36.30593264888396 +transit,128.13884748625904,36.299483956086824 +transit,128.14649316065578,36.293034767324976 +transit,128.15413757660173,36.28658508279296 +transit,128.16178073450513,36.280134902685255 +transit,128.1694226347741,36.273684227196256 +transit,128.17706327781667,36.26723305652028 +transit,128.18470266404086,36.260781390851605 +transit,128.1923407938545,36.25432923038439 +transit,128.19997766766548,36.24787657531277 +transit,128.2076132858815,36.24142342583077 +transit,128.21524764891026,36.23496978213233 +transit,128.22288075715934,36.22851564441138 +transit,128.23051261103626,36.222061012861715 +transit,128.2381432109485,36.21560588767709 +transit,128.24577255730333,36.209150269051186 +transit,128.25340065050813,36.20269415717759 +transit,128.26102749097006,36.19623755224983 +transit,128.26865307909625,36.18978045446139 +transit,128.2762774152938,36.183322864005625 +transit,128.28390049996966,36.17686478107585 +transit,128.29152233353074,36.17040620586532 +transit,128.29914291638386,36.163947138567174 +transit,128.30676224893577,36.157487579374546 +transit,128.31438033159313,36.151027528480434 +transit,128.32199716476256,36.14456698607778 +transit,128.3296127488506,36.13810595235948 +transit,128.33722708426362,36.13164442751835 +transit,128.344840171408,36.12518241174709 +transit,128.3524520106901,36.11871990523839 +transit,128.36006260251605,36.11225690818482 +transit,128.36767194729202,36.105793420778916 +transit,128.3752800454241,36.09932944321311 +transit,128.38288689731817,36.092864975679774 +transit,128.39049250338022,36.086400018371215 +transit,128.398096864016,36.07993457147967 +transit,128.40569997963132,36.07346863519728 +transit,128.41330185063185,36.067002209716144 +transit,128.42090247742314,36.06053529522827 +transit,128.4285018604107,36.054067891925605 +WP27,128.4361,36.0476 +transit,128.4285018604107,36.054067891925605 +transit,128.42090247742314,36.06053529522827 +transit,128.41330185063183,36.067002209716144 +transit,128.40569997963132,36.07346863519728 +transit,128.398096864016,36.07993457147967 +transit,128.3904925033802,36.086400018371215 +transit,128.38288689731817,36.092864975679774 +transit,128.37528004542406,36.099329443213115 +transit,128.36767194729202,36.105793420778916 +transit,128.36006260251605,36.11225690818482 +transit,128.3524520106901,36.118719905238386 +transit,128.344840171408,36.12518241174709 +transit,128.33722708426362,36.131644427518346 +transit,128.32961274885056,36.13810595235949 +transit,128.32199716476256,36.14456698607779 +transit,128.31438033159313,36.151027528480434 +transit,128.30676224893577,36.15748757937454 +transit,128.29914291638386,36.16394713856719 +transit,128.29152233353074,36.170406205865305 +transit,128.28390049996966,36.17686478107585 +transit,128.2762774152938,36.18332286400562 +transit,128.26865307909625,36.189780454461385 +transit,128.26102749097006,36.19623755224983 +transit,128.25340065050813,36.20269415717758 +transit,128.24577255730333,36.209150269051186 +transit,128.2381432109485,36.2156058876771 +transit,128.23051261103626,36.222061012861715 +transit,128.22288075715934,36.22851564441139 +transit,128.21524764891026,36.23496978213233 +transit,128.2076132858815,36.24142342583076 +transit,128.19997766766548,36.24787657531277 +transit,128.1923407938545,36.25432923038439 +transit,128.18470266404086,36.260781390851605 +transit,128.17706327781667,36.26723305652028 +transit,128.1694226347741,36.27368422719625 +transit,128.16178073450513,36.280134902685255 +transit,128.15413757660173,36.28658508279296 +transit,128.14649316065575,36.29303476732498 +transit,128.138847486259,36.29948395608682 +transit,128.13120055300323,36.30593264888395 +transit,128.12355236048,36.312380845521766 +transit,128.11590290828093,36.31882854580553 +transit,128.10825219599752,36.32527574954052 +transit,128.10060022322114,36.331722456531885 +transit,128.09294698954315,36.3381686665847 +transit,128.0852924945548,36.344614379504 +transit,128.0776367378473,36.35105959509473 +transit,128.06997971901177,36.35750431316175 +transit,128.06232143763918,36.36394853350985 +transit,128.0546618933205,36.37039225594376 +transit,128.04700108564668,36.37683548026814 +transit,128.03933901420845,36.38327820628757 +transit,128.03167567859657,36.389720433806545 +transit,128.02401107840168,36.396162162629494 +transit,128.01634521321435,36.402603392560785 +transit,128.00867808262512,36.409044123404676 +transit,128.00100968622436,36.41548435496542 +transit,127.99334002360247,36.42192408704714 +transit,127.98566909434969,36.42836331945388 +transit,127.97799689805622,36.43480205198965 +transit,127.97032343431219,36.44124028445836 +transit,127.96264870270765,36.44767801666387 +transit,127.95497270283258,36.454115248409934 +transit,127.94729543427684,36.46055197950025 +transit,127.93961689663028,36.46698820973845 +transit,127.93193708948264,36.47342393892809 +transit,127.92425601242357,36.479859166872636 +transit,127.91657366504269,36.486293893375496 +transit,127.9088900469295,36.49272811824 +transit,127.90120515767345,36.49916184126939 +transit,127.8935189968639,36.50559506226687 +transit,127.88583156409014,36.51202778103554 +transit,127.8781428589414,36.51845999737842 +transit,127.87045288100681,36.5248917110985 +transit,127.86276162987544,36.531322921998644 +transit,127.85506910513627,36.53775362988168 +transit,127.84737530637824,36.544183834550324 +transit,127.83968023319017,36.550613535807265 +transit,127.83198388516082,36.55704273345509 +transit,127.82428626187891,36.56347142729632 +transit,127.81658736293302,36.56989961713339 +transit,127.80888718791172,36.57632730276867 +transit,127.80118573640347,36.582754484004454 +transit,127.79348300799664,36.58918116064297 +transit,127.78577900227957,36.59560733248637 +transit,127.77807371884047,36.602032999336714 +transit,127.77036715726756,36.608458160995994 +transit,127.76265931714887,36.61488281726617 +transit,127.75495019807246,36.62130696794906 +transit,127.74723979962626,36.627730612846456 +transit,127.73952812139812,36.63415375176006 +transit,127.73181516297586,36.64057638449148 +transit,127.72410092394718,36.64699851084231 +transit,127.71638540389972,36.65342013061399 +transit,127.70866860242108,36.65984124360794 +transit,127.70095051909871,36.6662618496255 +transit,127.69323115352007,36.67268194846792 +transit,127.68551050527248,36.67910153993637 +transit,127.67778857394323,36.685520623831955 +transit,127.67006535911949,36.69193919995574 +transit,127.66234086038841,36.698357268108644 +transit,127.65461507733703,36.70477482809159 +transit,127.64688800955233,36.71119187970535 +transit,127.63915965662119,36.717608422750686 +transit,127.63143001813046,36.72402445702823 +transit,127.62369909366687,36.73043998233859 +transit,127.61596688281712,36.73685499848227 +transit,127.60823338516781,36.743269505259704 +transit,127.60049860030544,36.74968350247125 +transit,127.59276252781652,36.7560969899172 +transit,127.58502516728737,36.76250996739776 +transit,127.57728651830435,36.76892243471307 +transit,127.56954658045366,36.77533439166319 +transit,127.56180535332149,36.7817458380481 +transit,127.5540628364939,36.78815677366773 +transit,127.5463190295569,36.7945671983219 +transit,127.53857393209647,36.800977111810376 +transit,127.53082754369842,36.807386513932855 +transit,127.52307986394858,36.81379540448893 +transit,127.51533089243266,36.820203783278146 +transit,127.5075806287363,36.82661165009996 +transit,127.49982907244508,36.833019004753766 +transit,127.4920762231445,36.839425847038875 +transit,127.48432208041996,36.84583217675452 +transit,127.47656664385684,36.852237993699866 +transit,127.4688099130404,36.85864329767398 +transit,127.46105188755585,36.86504808847589 +transit,127.45329256698831,36.87145236590454 +transit,127.44553195092286,36.877856129758754 +transit,127.43777003894446,36.88425937983736 +transit,127.43000683063806,36.89066211593903 +transit,127.42224232558844,36.897064337862425 +transit,127.41447652338043,36.90346604540608 +transit,127.40670942359867,36.909867238368484 +transit,127.3989410258278,36.91626791654806 +transit,127.39117132965237,36.922668079743126 +transit,127.38340033465686,36.92906772775193 +transit,127.37562804042564,36.935466860372664 +transit,127.36785444654305,36.94186547740343 +transit,127.36007955259336,36.94826357864226 +transit,127.35230335816075,36.954661163887096 +transit,127.34452586282931,36.96105823293584 +transit,127.33674706618311,36.96745478558627 +transit,127.32896696780608,36.97385082163611 +transit,127.32118556728213,36.98024634088302 +transit,127.31340286419507,36.98664134312459 +transit,127.30561885812862,36.9930358281583 +transit,127.29783354866652,36.99942979578157 +transit,127.29004693539233,37.00582324579175 +transit,127.28225901788957,37.01221617798612 +transit,127.27446979574172,37.01860859216186 +transit,127.26667926853214,37.02500048811611 +transit,127.25888743584416,37.031391865645894 +transit,127.25109429726102,37.037782724548194 +transit,127.24329985236588,37.04417306461988 +transit,127.23550410074185,37.05056288565779 +transit,127.22770704197191,37.05695218745866 +transit,127.21990867563906,37.06334096981913 +transit,127.21210900132617,37.06972923253581 +transit,127.20430801861602,37.07611697540519 +transit,127.19650572709138,37.082504198223724 +transit,127.18870212633489,37.08889090078777 +transit,127.18089721592914,37.095277082893595 +transit,127.17309099545665,37.10166274433742 +transit,127.16528346449988,37.10804788491534 +transit,127.1574746226412,37.11443250442345 +transit,127.14966446946292,37.120816602657705 +transit,127.14185300454727,37.127200179414 +transit,127.1340402274764,37.13358323448817 +transit,127.1262261378324,37.13996576767595 +transit,127.11841073519732,37.14634777877302 +transit,127.11059401915306,37.152729267574976 +transit,127.10277598928151,37.15911023387732 +transit,127.0949566451645,37.16549067747551 +transit,127.08713598638373,37.1718705981649 +transit,127.07931401252087,37.17824999574078 +transit,127.07149072315752,37.18462886999835 +transit,127.06366611787519,37.19100722073276 +transit,127.05584019625532,37.19738504773905 +transit,127.0480129578793,37.20376235081222 +transit,127.04018440232842,37.210139129747155 +transit,127.03235452918392,37.21651538433869 +transit,127.02452333802698,37.22289111438158 +transit,127.01669082843866,37.22926631967048 +Suwon_Air_Base,127.008857,37.235641 +transit,127.00513094815463,37.241992496787965 +transit,127.00140427093532,37.24834386948789 +transit,126.99767696810498,37.2546951180531 +transit,126.99394903942637,37.26104624243692 +transit,126.99022048466219,37.26739724259265 +transit,126.98649130357501,37.27374811847358 +transit,126.98276149592735,37.280098870032944 +transit,126.97903106148158,37.28644949722402 +WP25,126.9753,37.2928 +transit,126.98154528793634,37.29973628373348 +transit,126.9877917229753,37.30667222970899 +transit,126.99403930556078,37.31360783778394 +transit,127.00028803613678,37.32054310781569 +transit,127.00653791514749,37.32747803966153 +transit,127.01278894303724,37.33441263317868 +transit,127.0190411202505,37.34134688822431 +transit,127.02529444723194,37.34828080465551 +transit,127.03154892442635,37.35521438232931 +transit,127.03780455227867,37.36214762110269 +transit,127.04406133123403,37.36908052083256 +transit,127.0503192617377,37.376013081375746 +transit,127.05657834423508,37.38294530258906 +transit,127.06283857917174,37.38987718432916 +transit,127.06909996699342,37.39680872645274 +transit,127.07536250814603,37.40373992881637 +transit,127.08162620307557,37.41067079127659 +transit,127.08789105222827,37.417601313689815 +transit,127.09415705605048,37.42453149591249 +transit,127.10042421498869,37.431461337800904 +transit,127.10669252948959,37.438390839211344 +Seoul_Air_Base,127.112962,37.44532 +transit,127.11407498046337,37.45295479173879 +transit,127.11518818720195,37.46058956310631 +transit,127.11630162032382,37.46822431409691 +transit,127.11741527993712,37.47585904470489 +transit,127.11852916615004,37.48349375492461 +transit,127.11964327907083,37.491128444750345 +transit,127.12075761880781,37.49876311417644 +transit,127.12187218546937,37.506397763197214 +transit,127.12298697916394,37.514032391806964 +WP3,127.124102,37.521667 +transit,127.12526711539714,37.529744874276616 +transit,127.12643248211599,37.5378227259795 +transit,127.12759810028365,37.54590055510202 +transit,127.12876397002731,37.553978361637625 +transit,127.12993009147425,37.5620561455797 +transit,127.13109646475178,37.57013390692162 +transit,127.13226308998733,37.578211645656786 +transit,127.1334299673084,37.5862893617786 +transit,127.13459709684253,37.59436705528044 +transit,127.13576447871735,37.602444726155696 +transit,127.13693211306057,37.61052237439777 +WP4,127.1381,37.6186 +transit,127.14364453767999,37.625276476825675 +transit,127.1491900672499,37.63195268550096 +transit,127.15473658908718,37.638628625916944 +transit,127.16028410356938,37.645304297964664 +transit,127.16583261107426,37.651979701535154 +transit,127.17138211197964,37.658654836519354 +transit,127.17693260666354,37.66532970280818 +transit,127.18248409550407,37.67200430029247 +transit,127.1880365788795,37.67867862886307 +transit,127.19359005716825,37.68535268841071 +transit,127.19914453074885,37.692026478826136 +WP5,127.2047,37.6987 +transit,127.21343162856657,37.69498506001787 +transit,127.22216238580884,37.69126947121904 +transit,127.23089227177877,37.68755323375334 +transit,127.23962128652845,37.68383634777065 +transit,127.24834943011,37.68011881342078 +transit,127.25707670257566,37.67640063085357 +transit,127.26580310397777,37.67268180021881 +transit,127.27452863436872,37.668962321666314 +transit,127.28325329380102,37.66524219534583 +transit,127.29197708232722,37.661521421407144 +WP6,127.3007,37.6578 +transit,127.29453584893454,37.651393473860075 +transit,127.28837275688147,37.64498661870998 +transit,127.28221072346766,37.63857943467867 +transit,127.27604974832009,37.63217192189511 +transit,127.26988983106587,37.62576408048816 +transit,127.2637309713322,37.61935591058667 +transit,127.2575731687464,37.6129474123194 +transit,127.25141642293593,37.60653858581509 +transit,127.24526073352834,37.6001294312024 +transit,127.23910610015128,37.59371994860995 +transit,127.23295252243254,37.587310138166316 +WP7,127.2268,37.5809 +transit,127.21638252952877,37.58155732946605 +transit,127.2059648760039,37.58221373949572 +transit,127.19554703967407,37.582869230051394 +transit,127.18512902078798,37.583523801095545 +transit,127.1747108195944,37.58417745259067 +transit,127.16429243634211,37.58483018449934 +transit,127.15387387127997,37.58548199678414 +transit,127.14345512465685,37.58613288940776 +transit,127.13303619672169,37.586782862332875 +transit,127.12261708772343,37.587431915522274 +transit,127.1121977979111,37.58808004893876 +transit,127.10177832753372,37.58872726254518 +transit,127.09135867684041,37.58937355630448 +transit,127.0809388460803,37.590018930179596 +transit,127.07051883550254,37.59066338413358 +transit,127.06009864535636,37.59130691812946 +transit,127.049678275891,37.591949532130364 +transit,127.03925772735576,37.59259122609948 +WP8,127.028837,37.593232 +transit,127.01935000915947,37.59035223573776 +transit,127.00986374945408,37.587471707613254 +transit,127.00037822094507,37.584590415763365 +transit,126.99089342369354,37.581708360324924 +transit,126.98140935776048,37.578825541434824 +transit,126.97192602320682,37.57594195922991 +transit,126.96244342009334,37.57305761384708 +transit,126.95296154848067,37.57017250542322 +transit,126.94348040842941,37.567286634095225 +WP9,126.934,37.5644 +transit,126.9239441281553,37.563741280950744 +transit,126.91388843350545,37.563081705350264 +transit,126.90383291627336,37.562421273233745 +transit,126.89377757668187,37.56175998463641 +transit,126.88372241495378,37.561097839593536 +transit,126.87366743131189,37.56043483814044 +transit,126.86361262597892,37.55977098031248 +transit,126.85355799917757,37.55910626614505 +transit,126.84350355113051,37.55844069567361 +transit,126.83344928206037,37.55777426893365 +transit,126.82339519218971,37.5571069859607 +transit,126.8133412817411,37.55643884679037 +transit,126.80328755093704,37.55576985145824 +Gimpo,126.793234,37.5551 +transit,126.78314130688592,37.55226094497491 +transit,126.77304937954926,37.54942102596066 +transit,126.76295821808608,37.54658024310982 +transit,126.75286782259226,37.54373859657502 +transit,126.74277819316359,37.540896086508845 +transit,126.73268932989569,37.53805271306393 +transit,126.72260123288407,37.535208476392924 +transit,126.71251390222407,37.532363376648476 +transit,126.70242733801095,37.529517413983264 +transit,126.69234154033975,37.52667058854996 +transit,126.68225650930546,37.523822900501294 +transit,126.67217224500286,37.52097434998996 +transit,126.66208874752661,37.5181249371687 +transit,126.65200601697127,37.515274662190244 +transit,126.64192405343123,37.51242352520736 +transit,126.63184285700075,37.50957152637284 +transit,126.62176242777396,37.50671866583945 +transit,126.61168276584482,37.503864943760014 +transit,126.6016038713072,37.50101036028733 +transit,126.59152574425481,37.49815491557424 +transit,126.58144838478123,37.495298609773606 +transit,126.57137179297986,37.49244144303827 +transit,126.56129596894404,37.4895834155211 +transit,126.55122091276692,37.486724527375024 +transit,126.54114662454151,37.48386477875292 +transit,126.53107310436073,37.48100416980772 +transit,126.5210003523173,37.47814270069233 +transit,126.51092836850385,37.475280371559734 +transit,126.50085715301286,37.47241718256288 +transit,126.49078670593667,37.469553133854745 +transit,126.48071702736748,37.466688225588314 +transit,126.47064811739735,37.4638224579166 +transit,126.46057997611821,37.4609558309926 +transit,126.45051260362189,37.45808834496938 +Incheon,126.440446,37.45522 +transit,126.42921794251579,37.45530214985653 +transit,126.41798986062939,37.45538323296906 +transit,126.40676175465964,37.455463249332205 +transit,126.39553362492536,37.455542198940634 +transit,126.38430547174536,37.45562008178912 +transit,126.37307729543852,37.45569689787249 +transit,126.36184909632365,37.45577264718565 +transit,126.35062087471961,37.45584732972356 +transit,126.33939263094526,37.455920945481296 +transit,126.32816436531947,37.45599349445393 +transit,126.31693607816108,37.456064976636675 +transit,126.305707769789,37.45613539202477 +transit,126.29447944052208,37.45620474061356 +transit,126.28325109067923,37.45627302239843 +transit,126.27202272057933,37.456340237374846 +transit,126.26079433054127,37.456406385538344 +transit,126.24956592088398,37.45647146688455 +transit,126.23833749192633,37.456535481409134 +transit,126.22710904398726,37.456598429107835 +transit,126.21588057738566,37.45666030997649 +transit,126.20465209244048,37.456721124011 +transit,126.19342358947063,37.45678087120731 +transit,126.18219506879505,37.45683955156145 +transit,126.17096653073268,37.456897165069556 +transit,126.15973797560245,37.45695371172777 +transit,126.14850940372332,37.457009191532364 +transit,126.13728081541423,37.457063604479636 +transit,126.12605221099413,37.45711695056598 +transit,126.114823590782,37.45716922978786 +transit,126.10359495509678,37.457220442141804 +transit,126.09236630425747,37.45727058762442 +transit,126.081137638583,37.45731966623236 +transit,126.06990895839236,37.45736767796238 +transit,126.05868026400455,37.45741462281129 +transit,126.04745155573853,37.45746050077597 +transit,126.03622283391331,37.45750531185339 +transit,126.02499409884786,37.45754905604056 +transit,126.01376535086118,37.45759173333458 +transit,126.00253659027227,37.457633343732624 +transit,125.99130781740013,37.45767388723192 +transit,125.98007903256375,37.457713363829775 +transit,125.96885023608216,37.457751773523576 +transit,125.95762142827436,37.45778911631078 +transit,125.94639260945938,37.45782539218889 +transit,125.93516377995621,37.45786060115551 +transit,125.9239349400839,37.4578947432083 +transit,125.91270609016144,37.457927818345 +transit,125.90147723050787,37.4579598265634 +transit,125.89024836144222,37.457990767861396 +transit,125.87901948328351,37.4580206422369 +transit,125.86779059635079,37.45804944968797 +transit,125.85656170096308,37.45807719021268 +transit,125.84533279743943,37.458103863809164 +transit,125.83410388609886,37.45812947047568 +transit,125.82287496726042,37.458154010210514 +transit,125.81164604124316,37.45817748301205 +transit,125.80041710836613,37.45819988887872 +transit,125.78918816894836,37.45822122780903 +transit,125.77795922330891,37.45824149980157 +transit,125.76673027176683,37.458260704855 +transit,125.75550131464117,37.45827884296804 +transit,125.74427235225099,37.4582959141395 +transit,125.73304338491533,37.458311918368224 +transit,125.72181441295325,37.45832685565315 +transit,125.71058543668383,37.45834072599331 +transit,125.6993564564261,37.45835352938775 +transit,125.68812747249915,37.45836526583566 +transit,125.676898485222,37.458375935336235 +transit,125.66566949491374,37.458385537888766 +transit,125.65444050189345,37.45839407349262 +transit,125.64321150648014,37.45840154214723 +transit,125.63198250899292,37.4584079438521 +transit,125.62075350975084,37.45841327860682 +transit,125.60952450907295,37.45841754641101 +transit,125.59829550727835,37.458420747264405 +transit,125.58706650468608,37.45842288116679 +transit,125.5758375016152,37.45842394811801 +transit,125.5646084983848,37.45842394811801 +transit,125.55337949531392,37.45842288116679 +transit,125.54215049272165,37.458420747264405 +transit,125.53092149092704,37.45841754641101 +transit,125.51969249024916,37.45841327860682 +transit,125.50846349100708,37.45840794385211 +transit,125.49723449351985,37.45840154214723 +transit,125.48600549810655,37.45839407349262 +transit,125.47477650508625,37.458385537888766 +transit,125.463547514778,37.458375935336235 +transit,125.45231852750085,37.45836526583566 +transit,125.4410895435739,37.45835352938775 +transit,125.42986056331617,37.45834072599331 +transit,125.41863158704673,37.45832685565315 +transit,125.40740261508466,37.45831191836822 +transit,125.39617364774901,37.4582959141395 +transit,125.38494468535883,37.45827884296804 +transit,125.37371572823317,37.458260704855 +transit,125.36248677669109,37.458241499801574 +transit,125.35125783105164,37.45822122780903 +transit,125.34002889163386,37.45819988887872 +transit,125.32879995875683,37.45817748301205 +transit,125.31757103273958,37.458154010210514 +transit,125.30634211390114,37.45812947047568 +transit,125.29511320256057,37.458103863809164 +transit,125.28388429903691,37.45807719021267 +transit,125.27265540364921,37.45804944968798 +transit,125.26142651671648,37.45802064223691 +transit,125.25019763855778,37.457990767861396 +transit,125.23896876949213,37.4579598265634 +transit,125.22773990983856,37.457927818345 +transit,125.2165110599161,37.4578947432083 +transit,125.20528222004378,37.45786060115551 +transit,125.19405339054062,37.45782539218889 +transit,125.18282457172562,37.45778911631078 +transit,125.17159576391784,37.457751773523576 +transit,125.16036696743625,37.457713363829775 +transit,125.14913818259987,37.45767388723192 +transit,125.13790940972773,37.45763334373262 +transit,125.12668064913882,37.45759173333458 +transit,125.11545190115214,37.45754905604056 +transit,125.10422316608668,37.45750531185339 +transit,125.09299444426146,37.45746050077597 +transit,125.08176573599545,37.45741462281129 +transit,125.07053704160764,37.45736767796238 +transit,125.059308361417,37.45731966623236 +transit,125.04807969574253,37.45727058762442 +transit,125.03685104490322,37.45722044214181 +transit,125.02562240921799,37.45716922978786 +transit,125.01439378900587,37.457116950565975 +transit,125.00316518458577,37.457063604479636 +transit,124.99193659627667,37.45700919153236 +transit,124.98070802439754,37.45695371172777 +transit,124.96947946926731,37.456897165069556 +transit,124.95825093120494,37.45683955156145 +transit,124.94702241052937,37.45678087120731 +transit,124.93579390755951,37.456721124011 +transit,124.92456542261434,37.45666030997649 +transit,124.91333695601274,37.456598429107835 +transit,124.90210850807367,37.456535481409134 +transit,124.89088007911602,37.45647146688455 +transit,124.87965166945871,37.456406385538344 +transit,124.86842327942067,37.456340237374846 +transit,124.85719490932077,37.45627302239843 +transit,124.84596655947792,37.456204740613565 +transit,124.834738230211,37.45613539202477 +transit,124.82350992183892,37.456064976636675 +transit,124.81228163468053,37.45599349445393 +transit,124.80105336905474,37.455920945481296 +transit,124.78982512528039,37.45584732972357 +transit,124.77859690367634,37.45577264718565 +transit,124.76736870456148,37.45569689787249 +transit,124.75614052825463,37.455620081789114 +transit,124.74491237507463,37.455542198940634 +transit,124.73368424534036,37.455463249332205 +transit,124.7224561393706,37.45538323296906 +transit,124.7112280574842,37.45530214985653 +WP12,124.7,37.45522 +transit,124.7,37.446261186348565 +transit,124.7,37.43730235908327 +transit,124.7,37.42834351820521 +transit,124.7,37.419384663715554 +transit,124.7,37.410425795615396 +transit,124.7,37.40146691390587 +transit,124.7,37.3925080185881 +transit,124.7,37.383549109663235 +transit,124.7,37.37459018713238 +transit,124.7,37.36563125099668 +transit,124.7,37.356672301257255 +transit,124.7,37.34771333791525 +transit,124.7,37.338754360971805 +transit,124.7,37.32979537042805 +transit,124.7,37.32083636628513 +transit,124.7,37.31187734854418 +transit,124.7,37.30291831720634 +transit,124.7,37.29395927227276 +transit,124.7,37.28500021374457 +transit,124.7,37.27604114162291 +transit,124.7,37.26708205590896 +transit,124.7,37.25812295660385 +transit,124.7,37.249163843708715 +transit,124.7,37.240204717224714 +transit,124.7,37.231245577153004 +transit,124.7,37.22228642349475 +transit,124.7,37.21332725625107 +transit,124.7,37.204368075423154 +transit,124.7,37.195408881012156 +transit,124.7,37.18644967301921 +transit,124.7,37.17749045144549 +transit,124.7,37.16853121629218 +transit,124.7,37.15957196756041 +transit,124.7,37.15061270525136 +transit,124.7,37.14165342936619 +transit,124.7,37.132694139906064 +transit,124.7,37.12373483687216 +transit,124.7,37.11477552026563 +transit,124.7,37.105816190087666 +transit,124.7,37.09685684633942 +transit,124.7,37.087897489022076 +transit,124.7,37.07893811813682 +transit,124.7,37.0699787336848 +transit,124.7,37.06101933566721 +transit,124.7,37.052059924085235 +transit,124.7,37.04310049894004 +transit,124.7,37.03414106023282 +transit,124.7,37.02518160796475 +transit,124.7,37.016222142137 +transit,124.7,37.007262662750776 +transit,124.7,36.99830316980727 +transit,124.7,36.98934366330766 +transit,124.7,36.980384143253126 +transit,124.7,36.971424609644856 +transit,124.7,36.96246506248407 +transit,124.7,36.95350550177193 +transit,124.7,36.94454592750965 +transit,124.7,36.935586339698425 +transit,124.7,36.926626738339436 +transit,124.7,36.9176671234339 +transit,124.7,36.90870749498301 +transit,124.7,36.899747852987964 +transit,124.7,36.89078819744997 +transit,124.7,36.881828528370235 +transit,124.7,36.872868845749956 +transit,124.7,36.86390914959035 +transit,124.7,36.85494943989261 +transit,124.7,36.84598971665795 +transit,124.7,36.83702997988758 +transit,124.7,36.828070229582714 +transit,124.7,36.819110465744586 +transit,124.7,36.81015068837438 +transit,124.7,36.80119089747332 +transit,124.7,36.79223109304264 +transit,124.7,36.78327127508353 +transit,124.7,36.77431144359723 +transit,124.7,36.76535159858497 +transit,124.7,36.75639174004794 +transit,124.7,36.74743186798739 +transit,124.7,36.73847198240453 +transit,124.7,36.72951208330061 +transit,124.7,36.72055217067684 +transit,124.7,36.71159224453446 +transit,124.7,36.70263230487467 +transit,124.7,36.693672351698744 +transit,124.7,36.68471238500789 +transit,124.7,36.675752404803355 +transit,124.7,36.66679241108636 +transit,124.7,36.65783240385816 +transit,124.7,36.64887238311998 +transit,124.7,36.63991234887306 +transit,124.7,36.63095230111865 +transit,124.7,36.62199223985799 +transit,124.7,36.61303216509232 +transit,124.7,36.60407207682289 +transit,124.7,36.59511197505095 +transit,124.7,36.58615185977773 +transit,124.7,36.57719173100449 +transit,124.7,36.568231588732495 +transit,124.7,36.55927143296297 +transit,124.7,36.55031126369719 +transit,124.7,36.5413510809364 +transit,124.7,36.53239088468187 +transit,124.7,36.52343067493482 +transit,124.7,36.51447045169656 +transit,124.7,36.5055102149683 +transit,124.7,36.49654996475134 +transit,124.7,36.48758970104692 +transit,124.7,36.47862942385631 +transit,124.7,36.46966913318079 +transit,124.7,36.46070882902159 +transit,124.7,36.45174851138001 +transit,124.7,36.442788180257324 +transit,124.7,36.43382783565477 +transit,124.7,36.42486747757365 +transit,124.7,36.41590710601522 +transit,124.7,36.406946720980756 +transit,124.7,36.39798632247154 +transit,124.7,36.389025910488854 +transit,124.7,36.38006548503396 +transit,124.7,36.371105046108156 +transit,124.7,36.362144593712706 +transit,124.7,36.3531841278489 +transit,124.7,36.344223648518025 +transit,124.7,36.33526315572137 +transit,124.7,36.32630264946022 +transit,124.7,36.317342129735835 +transit,124.7,36.30838159654954 +transit,124.7,36.299421049902605 +transit,124.7,36.29046048979634 +transit,124.7,36.28149991623202 +transit,124.7,36.27253932921095 +transit,124.7,36.26357872873442 +transit,124.7,36.25461811480373 +transit,124.7,36.24565748742018 +transit,124.7,36.23669684658507 +transit,124.7,36.22773619229969 +transit,124.7,36.218775524565366 +transit,124.7,36.20981484338337 +transit,124.7,36.20085414875503 +transit,124.7,36.191893440681646 +transit,124.7,36.18293271916453 +transit,124.7,36.173971984204975 +transit,124.7,36.165011235804315 +transit,124.7,36.156050473963845 +transit,124.7,36.14708969868489 +transit,124.7,36.13812890996875 +transit,124.7,36.12916810781674 +transit,124.7,36.12020729223019 +transit,124.7,36.11124646321043 +transit,124.7,36.10228562075874 +transit,124.7,36.09332476487647 +transit,124.7,36.08436389556494 +transit,124.7,36.07540301282546 +transit,124.7,36.06644211665937 +transit,124.7,36.057481207067994 +transit,124.7,36.04852028405265 +transit,124.7,36.03955934761468 +transit,124.7,36.03059839775539 +transit,124.7,36.02163743447614 +transit,124.7,36.012676457778255 +transit,124.7,36.003715467663056 +transit,124.7,35.99475446413189 +transit,124.7,35.98579344718609 +transit,124.7,35.976832416827 +transit,124.7,35.96787137305596 +transit,124.7,35.9589103158743 +transit,124.7,35.94994924528336 +transit,124.7,35.9409881612845 +transit,124.7,35.93202706387906 +transit,124.7,35.923065953068374 +transit,124.7,35.9141048288538 +transit,124.7,35.90514369123669 +transit,124.7,35.89618254021839 +transit,124.7,35.88722137580024 +transit,124.7,35.8782601979836 +transit,124.7,35.86929900676983 +transit,124.7,35.86033780216028 +transit,124.7,35.85137658415631 +transit,124.7,35.84241535275928 +transit,124.7,35.833454107970546 +transit,124.7,35.82449284979147 +transit,124.7,35.8155315782234 +transit,124.7,35.80657029326772 +transit,124.7,35.79760899492579 +transit,124.7,35.78864768319896 +transit,124.7,35.77968635808861 +transit,124.7,35.770725019596114 +transit,124.7,35.76176366772283 +transit,124.7,35.75280230247014 +transit,124.7,35.74384092383941 +transit,124.7,35.734879531832 +transit,124.7,35.72591812644932 +transit,124.7,35.71695670769272 +transit,124.7,35.70799527556357 +transit,124.7,35.699033830063286 +transit,124.7,35.6900723711932 +transit,124.7,35.68111089895474 +transit,124.7,35.67214941334926 +transit,124.7,35.66318791437815 +transit,124.7,35.6542264020428 +transit,124.7,35.6452648763446 +transit,124.7,35.63630333728493 +transit,124.7,35.62734178486517 +transit,124.7,35.61838021908674 +transit,124.7,35.60941863995101 +transit,124.7,35.600457047459386 +transit,124.7,35.59149544161325 +transit,124.7,35.58253382241401 +transit,124.7,35.57357218986305 +transit,124.7,35.56461054396177 +transit,124.7,35.555648884711594 +transit,124.7,35.5466872121139 +transit,124.7,35.53772552617009 +transit,124.7,35.528763826881594 +transit,124.7,35.51980211424979 +transit,124.7,35.51084038827609 +transit,124.7,35.50187864896191 +transit,124.7,35.49291689630865 +transit,124.7,35.483955130317725 +transit,124.7,35.47499335099055 +transit,124.7,35.46603155832854 +transit,124.7,35.4570697523331 +transit,124.7,35.448107933005666 +transit,124.7,35.43914610034762 +transit,124.7,35.43018425436041 +transit,124.7,35.421222395045454 +transit,124.7,35.41226052240416 +transit,124.7,35.40329863643796 +transit,124.7,35.39433673714828 +transit,124.7,35.385374824536534 +transit,124.7,35.37641289860415 +transit,124.7,35.36745095935257 +transit,124.7,35.3584890067832 +transit,124.7,35.349527040897485 +transit,124.7,35.34056506169687 +transit,124.7,35.33160306918277 +transit,124.7,35.32264106335661 +transit,124.7,35.313679044219846 +transit,124.7,35.304717011773924 +transit,124.7,35.29575496602024 +transit,124.7,35.28679290696027 +transit,124.7,35.27783083459545 +transit,124.7,35.26886874892721 +transit,124.7,35.259906649957 +transit,124.7,35.25094453768627 +transit,124.7,35.24198241211646 +transit,124.7,35.23302027324902 +transit,124.7,35.22405812108539 +transit,124.7,35.21509595562703 +transit,124.7,35.20613377687539 +transit,124.7,35.19717158483192 +transit,124.7,35.18820937949809 +transit,124.7,35.17924716087532 +transit,124.7,35.1702849289651 +transit,124.7,35.161322683768866 +transit,124.7,35.152360425288094 +transit,124.7,35.143398153524245 +transit,124.7,35.13443586847877 +transit,124.7,35.12547357015313 +transit,124.7,35.11651125854879 +transit,124.7,35.10754893366723 +transit,124.7,35.09858659550991 +transit,124.7,35.089624244078294 +transit,124.7,35.08066187937385 +transit,124.7,35.07169950139806 +transit,124.7,35.06273711015239 +transit,124.7,35.053774705638304 +transit,124.7,35.04481228785729 +transit,124.7,35.035849856810835 +transit,124.7,35.026887412500386 +transit,124.7,35.017924954927445 +transit,124.7,35.00896248409349 +WP3,124.7,35.0 +transit,124.7,35.00896248409349 +transit,124.7,35.017924954927445 +transit,124.7,35.026887412500386 +transit,124.7,35.035849856810835 +transit,124.7,35.04481228785729 +transit,124.7,35.053774705638304 +transit,124.7,35.06273711015238 +transit,124.7,35.07169950139806 +transit,124.7,35.08066187937385 +transit,124.7,35.0896242440783 +transit,124.7,35.09858659550991 +transit,124.7,35.10754893366723 +transit,124.7,35.11651125854879 +transit,124.7,35.125473570153126 +transit,124.7,35.13443586847877 +transit,124.7,35.143398153524245 +transit,124.7,35.152360425288094 +transit,124.7,35.161322683768866 +transit,124.7,35.170284928965096 +transit,124.7,35.17924716087532 +transit,124.7,35.18820937949809 +transit,124.7,35.19717158483192 +transit,124.7,35.20613377687539 +transit,124.7,35.215095955627035 +transit,124.7,35.224058121085385 +transit,124.7,35.23302027324901 +transit,124.7,35.24198241211646 +transit,124.7,35.25094453768627 +transit,124.7,35.25990664995701 +transit,124.7,35.26886874892721 +transit,124.7,35.277830834595456 +transit,124.7,35.28679290696028 +transit,124.7,35.29575496602025 +transit,124.7,35.30471701177392 +transit,124.7,35.31367904421986 +transit,124.7,35.32264106335662 +transit,124.7,35.33160306918277 +transit,124.7,35.340565061696864 +transit,124.7,35.34952704089749 +transit,124.7,35.3584890067832 +transit,124.7,35.36745095935257 +transit,124.7,35.376412898604144 +transit,124.7,35.385374824536534 +transit,124.7,35.39433673714827 +transit,124.7,35.40329863643796 +transit,124.7,35.41226052240416 +transit,124.7,35.421222395045454 +transit,124.7,35.43018425436042 +transit,124.7,35.43914610034762 +transit,124.7,35.448107933005666 +transit,124.7,35.45706975233311 +transit,124.7,35.466031558328545 +transit,124.7,35.47499335099055 +transit,124.7,35.483955130317725 +transit,124.7,35.49291689630864 +transit,124.7,35.50187864896191 +transit,124.7,35.51084038827609 +transit,124.7,35.51980211424979 +transit,124.7,35.52876382688159 +transit,124.7,35.5377255261701 +transit,124.7,35.5466872121139 +transit,124.7,35.55564888471159 +transit,124.7,35.56461054396177 +transit,124.7,35.57357218986304 +transit,124.7,35.58253382241401 +transit,124.7,35.59149544161325 +transit,124.7,35.60045704745938 +transit,124.7,35.60941863995101 +transit,124.7,35.61838021908673 +transit,124.7,35.62734178486517 +transit,124.7,35.63630333728493 +transit,124.7,35.6452648763446 +transit,124.7,35.6542264020428 +transit,124.7,35.66318791437815 +transit,124.7,35.67214941334926 +transit,124.7,35.681110898954735 +transit,124.7,35.6900723711932 +transit,124.7,35.69903383006328 +transit,124.7,35.70799527556357 +transit,124.7,35.71695670769272 +transit,124.7,35.72591812644932 +transit,124.7,35.734879531832 +transit,124.7,35.74384092383941 +transit,124.7,35.75280230247014 +transit,124.7,35.76176366772283 +transit,124.7,35.770725019596114 +transit,124.7,35.77968635808862 +transit,124.7,35.78864768319896 +transit,124.7,35.79760899492579 +transit,124.7,35.806570293267725 +transit,124.7,35.8155315782234 +transit,124.7,35.82449284979147 +transit,124.7,35.833454107970546 +transit,124.7,35.84241535275928 +transit,124.7,35.85137658415631 +transit,124.7,35.86033780216028 +transit,124.7,35.86929900676983 +transit,124.7,35.8782601979836 +transit,124.7,35.887221375800245 +transit,124.7,35.89618254021839 +transit,124.7,35.90514369123669 +transit,124.7,35.91410482885381 +transit,124.7,35.923065953068374 +transit,124.7,35.93202706387906 +transit,124.7,35.9409881612845 +transit,124.7,35.94994924528336 +transit,124.7,35.9589103158743 +transit,124.7,35.96787137305596 +transit,124.7,35.976832416827 +transit,124.7,35.98579344718609 +transit,124.7,35.99475446413188 +transit,124.7,36.003715467663056 +transit,124.7,36.01267645777825 +transit,124.7,36.02163743447614 +transit,124.7,36.03059839775539 +transit,124.7,36.03955934761467 +transit,124.7,36.04852028405264 +transit,124.7,36.057481207067994 +transit,124.7,36.06644211665938 +transit,124.7,36.07540301282546 +transit,124.7,36.08436389556495 +transit,124.7,36.09332476487647 +transit,124.7,36.102285620758735 +transit,124.7,36.11124646321043 +transit,124.7,36.12020729223019 +transit,124.7,36.12916810781674 +transit,124.7,36.13812890996875 +transit,124.7,36.14708969868489 +transit,124.7,36.156050473963845 +transit,124.7,36.165011235804315 +transit,124.7,36.17397198420498 +transit,124.7,36.18293271916453 +transit,124.7,36.19189344068165 +transit,124.7,36.200854148755035 +transit,124.7,36.20981484338337 +transit,124.7,36.21877552456536 +transit,124.7,36.227736192299695 +transit,124.7,36.23669684658507 +transit,124.7,36.24565748742018 +transit,124.7,36.25461811480373 +transit,124.7,36.26357872873443 +transit,124.7,36.27253932921095 +transit,124.7,36.281499916232015 +transit,124.7,36.29046048979634 +transit,124.7,36.29942104990261 +transit,124.7,36.30838159654954 +transit,124.7,36.31734212973584 +transit,124.7,36.3263026494602 +transit,124.7,36.33526315572137 +transit,124.7,36.34422364851803 +transit,124.7,36.3531841278489 +transit,124.7,36.36214459371271 +transit,124.7,36.371105046108156 +transit,124.7,36.38006548503396 +transit,124.7,36.38902591048885 +transit,124.7,36.39798632247154 +transit,124.7,36.406946720980756 +transit,124.7,36.41590710601522 +transit,124.7,36.42486747757365 +transit,124.7,36.433827835654775 +transit,124.7,36.44278818025732 +transit,124.7,36.45174851138002 +transit,124.7,36.4607088290216 +transit,124.7,36.46966913318078 +transit,124.7,36.47862942385631 +transit,124.7,36.48758970104692 +transit,124.7,36.496549964751345 +transit,124.7,36.50551021496831 +transit,124.7,36.51447045169656 +transit,124.7,36.523430674934836 +transit,124.7,36.53239088468187 +transit,124.7,36.5413510809364 +transit,124.7,36.55031126369719 +transit,124.7,36.559271432962966 +transit,124.7,36.56823158873249 +transit,124.7,36.5771917310045 +transit,124.7,36.58615185977772 +transit,124.7,36.59511197505095 +transit,124.7,36.60407207682289 +transit,124.7,36.61303216509232 +transit,124.7,36.62199223985798 +transit,124.7,36.63095230111865 +transit,124.7,36.63991234887306 +transit,124.7,36.64887238311998 +transit,124.7,36.65783240385816 +transit,124.7,36.666792411086355 +transit,124.7,36.675752404803355 +transit,124.7,36.68471238500789 +transit,124.7,36.69367235169875 +transit,124.7,36.70263230487467 +transit,124.7,36.71159224453445 +transit,124.7,36.72055217067685 +transit,124.7,36.72951208330062 +transit,124.7,36.73847198240453 +transit,124.7,36.74743186798739 +transit,124.7,36.75639174004794 +transit,124.7,36.765351598584964 +transit,124.7,36.774311443597234 +transit,124.7,36.78327127508353 +transit,124.7,36.79223109304264 +transit,124.7,36.80119089747332 +transit,124.7,36.81015068837438 +transit,124.7,36.81911046574458 +transit,124.7,36.82807022958272 +transit,124.7,36.83702997988758 +transit,124.7,36.84598971665795 +transit,124.7,36.8549494398926 +transit,124.7,36.86390914959034 +transit,124.7,36.872868845749956 +transit,124.7,36.881828528370235 +transit,124.7,36.89078819744997 +transit,124.7,36.899747852987964 +transit,124.7,36.90870749498301 +transit,124.7,36.9176671234339 +transit,124.7,36.92662673833944 +transit,124.7,36.935586339698425 +transit,124.7,36.94454592750965 +transit,124.7,36.95350550177193 +transit,124.7,36.96246506248406 +transit,124.7,36.971424609644856 +transit,124.7,36.980384143253126 +transit,124.7,36.98934366330766 +transit,124.7,36.998303169807265 +transit,124.7,37.007262662750776 +transit,124.7,37.01622214213701 +transit,124.7,37.02518160796475 +transit,124.7,37.03414106023281 +transit,124.7,37.04310049894004 +transit,124.7,37.052059924085235 +transit,124.7,37.06101933566722 +transit,124.7,37.0699787336848 +transit,124.7,37.07893811813681 +transit,124.7,37.08789748902208 +transit,124.7,37.09685684633942 +transit,124.7,37.105816190087666 +transit,124.7,37.11477552026564 +transit,124.7,37.12373483687216 +transit,124.7,37.132694139906064 +transit,124.7,37.14165342936619 +transit,124.7,37.150612705251355 +transit,124.7,37.15957196756041 +transit,124.7,37.16853121629218 +transit,124.7,37.1774904514455 +transit,124.7,37.18644967301921 +transit,124.7,37.19540888101215 +transit,124.7,37.20436807542316 +transit,124.7,37.21332725625107 +transit,124.7,37.22228642349475 +transit,124.7,37.23124557715301 +transit,124.7,37.24020471722471 +transit,124.7,37.249163843708715 +transit,124.7,37.25812295660384 +transit,124.7,37.26708205590896 +transit,124.7,37.27604114162291 +transit,124.7,37.28500021374457 +transit,124.7,37.29395927227276 +transit,124.7,37.302918317206334 +transit,124.7,37.31187734854418 +transit,124.7,37.32083636628513 +transit,124.7,37.32979537042806 +transit,124.7,37.33875436097181 +transit,124.7,37.34771333791525 +transit,124.7,37.35667230125725 +transit,124.7,37.36563125099668 +transit,124.7,37.37459018713238 +transit,124.7,37.38354910966323 +transit,124.7,37.39250801858811 +transit,124.7,37.40146691390587 +transit,124.7,37.410425795615396 +transit,124.7,37.41938466371556 +transit,124.7,37.42834351820521 +transit,124.7,37.43730235908326 +transit,124.7,37.44626118634857 +WP12,124.7,37.45522 +transit,124.7112280574842,37.45530214985653 +transit,124.7224561393706,37.45538323296906 +transit,124.73368424534036,37.455463249332205 +transit,124.74491237507463,37.455542198940634 +transit,124.75614052825463,37.45562008178912 +transit,124.76736870456148,37.45569689787249 +transit,124.77859690367634,37.45577264718565 +transit,124.78982512528039,37.45584732972356 +transit,124.80105336905474,37.455920945481296 +transit,124.81228163468053,37.45599349445393 +transit,124.82350992183892,37.456064976636675 +transit,124.834738230211,37.45613539202477 +transit,124.84596655947792,37.45620474061356 +transit,124.85719490932077,37.45627302239843 +transit,124.86842327942067,37.456340237374846 +transit,124.87965166945872,37.456406385538344 +transit,124.89088007911602,37.45647146688455 +transit,124.90210850807367,37.456535481409134 +transit,124.91333695601274,37.456598429107835 +transit,124.92456542261434,37.45666030997649 +transit,124.93579390755951,37.456721124011 +transit,124.94702241052937,37.45678087120731 +transit,124.95825093120494,37.45683955156145 +transit,124.96947946926731,37.456897165069556 +transit,124.98070802439754,37.45695371172777 +transit,124.99193659627667,37.457009191532364 +transit,125.00316518458577,37.457063604479636 +transit,125.01439378900587,37.45711695056598 +transit,125.025622409218,37.45716922978786 +transit,125.03685104490322,37.457220442141804 +transit,125.04807969574253,37.45727058762442 +transit,125.059308361417,37.45731966623236 +transit,125.07053704160764,37.45736767796238 +transit,125.08176573599545,37.45741462281129 +transit,125.09299444426146,37.45746050077597 +transit,125.10422316608668,37.45750531185339 +transit,125.11545190115214,37.45754905604056 +transit,125.12668064913882,37.45759173333458 +transit,125.13790940972773,37.457633343732624 +transit,125.14913818259987,37.45767388723192 +transit,125.16036696743625,37.457713363829775 +transit,125.17159576391784,37.457751773523576 +transit,125.18282457172563,37.45778911631078 +transit,125.19405339054062,37.45782539218889 +transit,125.20528222004378,37.45786060115551 +transit,125.2165110599161,37.4578947432083 +transit,125.22773990983856,37.457927818345 +transit,125.23896876949213,37.4579598265634 +transit,125.25019763855778,37.457990767861396 +transit,125.26142651671648,37.4580206422369 +transit,125.27265540364921,37.45804944968797 +transit,125.28388429903691,37.45807719021268 +transit,125.29511320256057,37.458103863809164 +transit,125.30634211390114,37.45812947047568 +transit,125.31757103273958,37.458154010210514 +transit,125.32879995875683,37.45817748301205 +transit,125.34002889163386,37.45819988887872 +transit,125.35125783105164,37.45822122780903 +transit,125.36248677669109,37.45824149980157 +transit,125.37371572823317,37.458260704855 +transit,125.38494468535883,37.45827884296804 +transit,125.39617364774901,37.4582959141395 +transit,125.40740261508466,37.458311918368224 +transit,125.41863158704675,37.45832685565315 +transit,125.42986056331617,37.45834072599331 +transit,125.4410895435739,37.45835352938775 +transit,125.45231852750085,37.45836526583566 +transit,125.463547514778,37.458375935336235 +transit,125.47477650508625,37.458385537888766 +transit,125.48600549810655,37.45839407349262 +transit,125.49723449351985,37.45840154214723 +transit,125.50846349100708,37.4584079438521 +transit,125.51969249024916,37.45841327860682 +transit,125.53092149092704,37.45841754641101 +transit,125.54215049272165,37.458420747264405 +transit,125.55337949531392,37.45842288116679 +transit,125.5646084983848,37.45842394811801 +transit,125.5758375016152,37.45842394811801 +transit,125.58706650468608,37.45842288116679 +transit,125.59829550727835,37.458420747264405 +transit,125.60952450907295,37.45841754641101 +transit,125.62075350975084,37.45841327860682 +transit,125.63198250899292,37.45840794385211 +transit,125.64321150648014,37.45840154214723 +transit,125.65444050189345,37.45839407349262 +transit,125.66566949491374,37.458385537888766 +transit,125.676898485222,37.458375935336235 +transit,125.68812747249915,37.45836526583566 +transit,125.6993564564261,37.45835352938775 +transit,125.71058543668383,37.45834072599331 +transit,125.72181441295326,37.45832685565315 +transit,125.73304338491533,37.45831191836822 +transit,125.74427235225099,37.4582959141395 +transit,125.75550131464117,37.45827884296804 +transit,125.76673027176683,37.458260704855 +transit,125.77795922330891,37.458241499801574 +transit,125.78918816894836,37.45822122780903 +transit,125.80041710836613,37.45819988887872 +transit,125.81164604124316,37.45817748301205 +transit,125.82287496726042,37.458154010210514 +transit,125.83410388609886,37.45812947047568 +transit,125.84533279743943,37.458103863809164 +transit,125.85656170096308,37.45807719021267 +transit,125.86779059635079,37.45804944968798 +transit,125.87901948328351,37.45802064223691 +transit,125.89024836144222,37.457990767861396 +transit,125.90147723050787,37.4579598265634 +transit,125.91270609016144,37.457927818345 +transit,125.9239349400839,37.4578947432083 +transit,125.93516377995621,37.45786060115551 +transit,125.94639260945938,37.45782539218889 +transit,125.95762142827438,37.45778911631078 +transit,125.96885023608216,37.457751773523576 +transit,125.98007903256375,37.457713363829775 +transit,125.99130781740013,37.45767388723192 +transit,126.00253659027227,37.45763334373262 +transit,126.01376535086118,37.45759173333458 +transit,126.02499409884786,37.45754905604056 +transit,126.03622283391331,37.45750531185339 +transit,126.04745155573853,37.45746050077597 +transit,126.05868026400455,37.45741462281129 +transit,126.06990895839236,37.45736767796238 +transit,126.081137638583,37.45731966623236 +transit,126.09236630425747,37.45727058762442 +transit,126.10359495509678,37.45722044214181 +transit,126.11482359078201,37.45716922978786 +transit,126.12605221099413,37.457116950565975 +transit,126.13728081541423,37.457063604479636 +transit,126.14850940372332,37.45700919153236 +transit,126.15973797560245,37.45695371172777 +transit,126.17096653073268,37.456897165069556 +transit,126.18219506879505,37.45683955156145 +transit,126.19342358947063,37.45678087120731 +transit,126.20465209244048,37.456721124011 +transit,126.21588057738566,37.45666030997649 +transit,126.22710904398726,37.456598429107835 +transit,126.23833749192633,37.456535481409134 +transit,126.24956592088398,37.45647146688455 +transit,126.26079433054129,37.456406385538344 +transit,126.27202272057933,37.456340237374846 +transit,126.28325109067923,37.45627302239843 +transit,126.29447944052208,37.456204740613565 +transit,126.305707769789,37.45613539202477 +transit,126.31693607816108,37.456064976636675 +transit,126.32816436531947,37.45599349445393 +transit,126.33939263094526,37.455920945481296 +transit,126.35062087471961,37.45584732972357 +transit,126.36184909632365,37.45577264718565 +transit,126.37307729543852,37.45569689787249 +transit,126.38430547174536,37.455620081789114 +transit,126.39553362492536,37.455542198940634 +transit,126.40676175465964,37.455463249332205 +transit,126.41798986062939,37.45538323296906 +transit,126.42921794251579,37.45530214985653 +Incheon,126.440446,37.45522 +transit,126.45051260362189,37.458088344969404 +transit,126.46057997611821,37.46095583099262 +transit,126.47064811739735,37.463822457916606 +transit,126.48071702736749,37.46668822558833 +transit,126.49078670593667,37.46955313385475 +transit,126.50085715301287,37.47241718256289 +transit,126.51092836850387,37.47528037155975 +transit,126.5210003523173,37.478142700692345 +transit,126.53107310436073,37.481004169807726 +transit,126.54114662454153,37.48386477875294 +transit,126.55122091276691,37.48672452737504 +transit,126.56129596894404,37.489583415521125 +transit,126.57137179297986,37.492441443038274 +transit,126.58144838478123,37.49529860977361 +transit,126.59152574425481,37.49815491557426 +transit,126.6016038713072,37.501010360287346 +transit,126.61168276584482,37.50386494376002 +transit,126.62176242777396,37.506718665839465 +transit,126.63184285700075,37.509571526372845 +transit,126.64192405343123,37.512423525207375 +transit,126.65200601697127,37.51527466219026 +transit,126.66208874752661,37.51812493716871 +transit,126.67217224500286,37.52097434998998 +transit,126.68225650930546,37.52382290050131 +transit,126.69234154033975,37.52667058854998 +transit,126.70242733801096,37.52951741398328 +transit,126.71251390222407,37.53236337664849 +transit,126.72260123288407,37.53520847639294 +transit,126.73268932989569,37.53805271306395 +transit,126.74277819316359,37.54089608650886 +transit,126.75286782259226,37.54373859657503 +transit,126.76295821808608,37.546580243109844 +transit,126.77304937954928,37.54942102596067 +transit,126.78314130688592,37.55226094497492 +Gimpo,126.793234,37.5551 +transit,126.80328755093704,37.55576985145824 +transit,126.8133412817411,37.556438846790364 +transit,126.82339519218971,37.5571069859607 +transit,126.83344928206037,37.55777426893365 +transit,126.84350355113051,37.5584406956736 +transit,126.85355799917757,37.55910626614505 +transit,126.86361262597892,37.55977098031248 +transit,126.87366743131189,37.56043483814044 +transit,126.88372241495378,37.56109783959354 +transit,126.89377757668187,37.56175998463641 +transit,126.90383291627336,37.562421273233745 +transit,126.91388843350545,37.563081705350264 +transit,126.9239441281553,37.563741280950744 +WP9,126.934,37.5644 +transit,126.94348040842942,37.567286634095225 +transit,126.95296154848067,37.570172505423216 +transit,126.96244342009334,37.57305761384708 +transit,126.97192602320682,37.57594195922991 +transit,126.9814093577605,37.57882554143482 +transit,126.99089342369354,37.581708360324924 +transit,127.00037822094507,37.584590415763365 +transit,127.0098637494541,37.587471707613254 +transit,127.01935000915948,37.59035223573776 +WP8,127.028837,37.593232 +transit,127.03925772735576,37.59259122609948 +transit,127.049678275891,37.591949532130364 +transit,127.06009864535636,37.59130691812946 +transit,127.07051883550254,37.59066338413357 +transit,127.0809388460803,37.5900189301796 +transit,127.09135867684041,37.58937355630448 +transit,127.10177832753372,37.58872726254518 +transit,127.1121977979111,37.58808004893876 +transit,127.12261708772343,37.587431915522274 +transit,127.13303619672169,37.586782862332875 +transit,127.14345512465685,37.58613288940776 +transit,127.15387387127997,37.58548199678413 +transit,127.16429243634211,37.58483018449934 +transit,127.1747108195944,37.58417745259068 +transit,127.18512902078798,37.583523801095545 +transit,127.19554703967407,37.5828692300514 +transit,127.2059648760039,37.58221373949572 +transit,127.21638252952877,37.58155732946605 +WP7,127.2268,37.5809 +transit,127.23295252243253,37.58731013816631 +transit,127.23910610015128,37.59371994860996 +transit,127.24526073352834,37.6001294312024 +transit,127.25141642293593,37.60653858581509 +transit,127.2575731687464,37.6129474123194 +transit,127.26373097133218,37.61935591058666 +transit,127.26988983106587,37.62576408048816 +transit,127.27604974832009,37.63217192189511 +transit,127.28221072346766,37.63857943467867 +transit,127.28837275688147,37.64498661870998 +transit,127.29453584893454,37.651393473860075 +WP6,127.3007,37.6578 +transit,127.29197708232722,37.661521421407144 +transit,127.28325329380102,37.66524219534583 +transit,127.27452863436872,37.668962321666314 +transit,127.26580310397777,37.67268180021882 +transit,127.25707670257566,37.67640063085358 +transit,127.24834943011,37.68011881342078 +transit,127.23962128652843,37.68383634777065 +transit,127.23089227177876,37.68755323375334 +transit,127.22216238580883,37.691269471219044 +transit,127.21343162856657,37.69498506001788 +WP5,127.2047,37.6987 +transit,127.19914453074887,37.692026478826136 +transit,127.19359005716825,37.68535268841072 +transit,127.1880365788795,37.67867862886307 +transit,127.18248409550407,37.67200430029248 +transit,127.17693260666354,37.66532970280817 +transit,127.17138211197965,37.658654836519354 +transit,127.16583261107425,37.651979701535154 +transit,127.1602841035694,37.64530429796467 +transit,127.15473658908718,37.63862862591694 +transit,127.1491900672499,37.63195268550096 +transit,127.14364453767999,37.62527647682568 +WP4,127.1381,37.6186 +transit,127.13693211306057,37.61052237439777 +transit,127.13576447871735,37.602444726155696 +transit,127.13459709684253,37.59436705528044 +transit,127.1334299673084,37.5862893617786 +transit,127.13226308998733,37.578211645656786 +transit,127.13109646475178,37.57013390692161 +transit,127.12993009147425,37.5620561455797 +transit,127.12876397002731,37.55397836163763 +transit,127.12759810028365,37.54590055510203 +transit,127.12643248211599,37.537822725979495 +transit,127.12526711539714,37.529744874276616 +WP3,127.124102,37.521667 +transit,127.12298697916394,37.514032391806964 +transit,127.12187218546937,37.50639776319721 +transit,127.12075761880781,37.49876311417644 +transit,127.11964327907083,37.49112844475035 +transit,127.11852916615004,37.4834937549246 +transit,127.11741527993712,37.4758590447049 +transit,127.11630162032382,37.46822431409691 +transit,127.11518818720195,37.46058956310631 +transit,127.11407498046337,37.45295479173878 +Seoul_Air_Base,127.112962,37.44532 +transit,127.1066925294896,37.43839083921136 +transit,127.10042421498869,37.431461337800904 +transit,127.09415705605048,37.42453149591249 +transit,127.08789105222827,37.41760131368982 +transit,127.08162620307557,37.41067079127659 +transit,127.07536250814601,37.403739928816385 +transit,127.06909996699342,37.39680872645275 +transit,127.06283857917172,37.389877184329166 +transit,127.05657834423506,37.38294530258906 +transit,127.0503192617377,37.37601308137576 +transit,127.04406133123405,37.36908052083256 +transit,127.03780455227867,37.3621476211027 +transit,127.03154892442635,37.35521438232931 +transit,127.02529444723194,37.348280804655516 +transit,127.0190411202505,37.34134688822431 +transit,127.01278894303722,37.33441263317869 +transit,127.00653791514749,37.327478039661536 +transit,127.00028803613678,37.320543107815695 +transit,126.99403930556078,37.31360783778394 +transit,126.9877917229753,37.306672229708994 +transit,126.98154528793634,37.29973628373349 +WP25,126.9753,37.2928 +transit,126.97903106148158,37.286449497224005 +transit,126.98276149592735,37.280098870032944 +transit,126.98649130357502,37.27374811847357 +transit,126.9902204846622,37.26739724259265 +transit,126.99394903942638,37.26104624243692 +transit,126.99767696810498,37.2546951180531 +transit,127.00140427093532,37.24834386948789 +transit,127.00513094815463,37.241992496787965 +Suwon_Air_Base,127.008857,37.235641 +transit,127.01669082843866,37.22926631967048 +transit,127.02452333802698,37.222891114381575 +transit,127.03235452918393,37.2165153843387 +transit,127.04018440232842,37.21013912974715 +transit,127.0480129578793,37.20376235081221 +transit,127.05584019625533,37.197385047739054 +transit,127.06366611787519,37.19100722073276 +transit,127.07149072315752,37.18462886999835 +transit,127.07931401252088,37.17824999574078 +transit,127.08713598638373,37.1718705981649 +transit,127.0949566451645,37.16549067747551 +transit,127.10277598928153,37.15911023387733 +transit,127.11059401915306,37.152729267574976 +transit,127.11841073519732,37.14634777877303 +transit,127.12622613783242,37.13996576767595 +transit,127.1340402274764,37.13358323448817 +transit,127.14185300454727,37.127200179414 +transit,127.14966446946292,37.1208166026577 +transit,127.1574746226412,37.11443250442345 +transit,127.1652834644999,37.108047884915344 +transit,127.17309099545665,37.10166274433741 +transit,127.18089721592914,37.095277082893595 +transit,127.18870212633487,37.088890900787774 +transit,127.19650572709138,37.08250419822373 +transit,127.20430801861602,37.0761169754052 +transit,127.21210900132617,37.069729232535806 +transit,127.21990867563906,37.06334096981913 +transit,127.22770704197191,37.05695218745866 +transit,127.23550410074185,37.0505628856578 +transit,127.24329985236588,37.04417306461988 +transit,127.25109429726102,37.0377827245482 +transit,127.25888743584417,37.0313918656459 +transit,127.26667926853214,37.02500048811611 +transit,127.27446979574172,37.01860859216187 +transit,127.28225901788957,37.01221617798612 +transit,127.29004693539233,37.00582324579175 +transit,127.29783354866653,36.99942979578157 +transit,127.30561885812864,36.9930358281583 +transit,127.31340286419507,36.986641343124596 +transit,127.32118556728213,36.98024634088303 +transit,127.32896696780608,36.97385082163611 +transit,127.33674706618311,36.96745478558627 +transit,127.34452586282933,36.96105823293584 +transit,127.35230335816075,36.9546611638871 +transit,127.36007955259338,36.948263578642255 +transit,127.36785444654306,36.94186547740343 +transit,127.37562804042564,36.93546686037267 +transit,127.38340033465686,36.929067727751935 +transit,127.39117132965237,36.922668079743126 +transit,127.39894102582781,36.91626791654806 +transit,127.40670942359867,36.90986723836849 +transit,127.41447652338043,36.90346604540608 +transit,127.42224232558846,36.89706433786242 +transit,127.43000683063805,36.89066211593904 +transit,127.43777003894446,36.88425937983737 +transit,127.44553195092287,36.87785612975876 +transit,127.45329256698831,36.87145236590454 +transit,127.46105188755584,36.865048088475895 +transit,127.4688099130404,36.858643297673986 +transit,127.47656664385684,36.85223799369986 +transit,127.48432208041997,36.84583217675452 +transit,127.4920762231445,36.83942584703888 +transit,127.4998290724451,36.83301900475377 +transit,127.5075806287363,36.82661165009997 +transit,127.51533089243267,36.82020378327814 +transit,127.52307986394858,36.81379540448893 +transit,127.53082754369842,36.80738651393285 +transit,127.53857393209645,36.80097711181038 +transit,127.5463190295569,36.7945671983219 +transit,127.5540628364939,36.78815677366774 +transit,127.56180535332149,36.78174583804811 +transit,127.56954658045366,36.77533439166319 +transit,127.57728651830435,36.76892243471307 +transit,127.58502516728738,36.76250996739776 +transit,127.59276252781652,36.7560969899172 +transit,127.60049860030546,36.74968350247124 +transit,127.60823338516781,36.743269505259704 +transit,127.61596688281713,36.73685499848227 +transit,127.62369909366689,36.73043998233859 +transit,127.63143001813046,36.724024457028236 +transit,127.6391596566212,36.71760842275068 +transit,127.64688800955234,36.711191879705346 +transit,127.65461507733703,36.704774828091594 +transit,127.66234086038841,36.69835726810865 +transit,127.6700653591195,36.69193919995574 +transit,127.67778857394323,36.68552062383196 +transit,127.68551050527249,36.67910153993637 +transit,127.69323115352007,36.67268194846792 +transit,127.70095051909871,36.666261849625506 +transit,127.70866860242107,36.65984124360795 +transit,127.71638540389974,36.65342013061399 +transit,127.72410092394718,36.646998510842316 +transit,127.73181516297586,36.64057638449149 +transit,127.73952812139812,36.63415375176006 +transit,127.74723979962626,36.62773061284646 +transit,127.75495019807246,36.62130696794907 +transit,127.76265931714887,36.61488281726617 +transit,127.77036715726756,36.608458160996 +transit,127.77807371884049,36.60203299933671 +transit,127.78577900227957,36.59560733248637 +transit,127.79348300799664,36.58918116064297 +transit,127.80118573640347,36.582754484004454 +transit,127.80888718791172,36.576327302768675 +transit,127.81658736293303,36.56989961713339 +transit,127.82428626187891,36.56347142729633 +transit,127.83198388516082,36.5570427334551 +transit,127.83968023319017,36.55061353580727 +transit,127.84737530637824,36.54418383455033 +transit,127.85506910513628,36.53775362988168 +transit,127.86276162987544,36.53132292199865 +transit,127.87045288100681,36.524891711098505 +transit,127.8781428589414,36.51845999737842 +transit,127.88583156409014,36.51202778103554 +transit,127.89351899686389,36.50559506226688 +transit,127.90120515767345,36.49916184126939 +transit,127.90889004692951,36.49272811824 +transit,127.91657366504269,36.4862938933755 +transit,127.92425601242357,36.47985916687264 +transit,127.93193708948264,36.4734239389281 +transit,127.93961689663028,36.46698820973847 +transit,127.94729543427685,36.46055197950026 +transit,127.95497270283258,36.454115248409934 +transit,127.96264870270767,36.44767801666387 +transit,127.9703234343122,36.44124028445837 +transit,127.97799689805622,36.43480205198965 +transit,127.98566909434969,36.42836331945388 +transit,127.99334002360247,36.42192408704713 +transit,128.00100968622436,36.41548435496543 +transit,128.00867808262512,36.409044123404676 +transit,128.01634521321438,36.40260339256078 +transit,128.02401107840168,36.396162162629494 +transit,128.03167567859657,36.38972043380655 +transit,128.03933901420845,36.383278206287585 +transit,128.04700108564668,36.37683548026815 +transit,128.05466189332054,36.37039225594376 +transit,128.06232143763918,36.36394853350985 +transit,128.06997971901177,36.35750431316175 +transit,128.0776367378473,36.35105959509473 +transit,128.0852924945548,36.344614379504 +transit,128.09294698954315,36.33816866658471 +transit,128.10060022322114,36.331722456531885 +transit,128.10825219599752,36.325275749540516 +transit,128.11590290828093,36.31882854580553 +transit,128.12355236048,36.31238084552176 +transit,128.13120055300323,36.30593264888396 +transit,128.13884748625904,36.299483956086824 +transit,128.14649316065578,36.293034767324976 +transit,128.15413757660173,36.28658508279296 +transit,128.16178073450513,36.280134902685255 +transit,128.1694226347741,36.273684227196256 +transit,128.17706327781667,36.26723305652028 +transit,128.18470266404086,36.260781390851605 +transit,128.1923407938545,36.25432923038439 +transit,128.19997766766548,36.24787657531277 +transit,128.2076132858815,36.24142342583077 +transit,128.21524764891026,36.23496978213233 +transit,128.22288075715934,36.22851564441138 +transit,128.23051261103626,36.222061012861715 +transit,128.2381432109485,36.21560588767709 +transit,128.24577255730333,36.209150269051186 +transit,128.25340065050813,36.20269415717759 +transit,128.26102749097006,36.19623755224983 +transit,128.26865307909625,36.18978045446139 +transit,128.2762774152938,36.183322864005625 +transit,128.28390049996966,36.17686478107585 +transit,128.29152233353074,36.17040620586532 +transit,128.29914291638386,36.163947138567174 +transit,128.30676224893577,36.157487579374546 +transit,128.31438033159313,36.151027528480434 +transit,128.32199716476256,36.14456698607778 +transit,128.3296127488506,36.13810595235948 +transit,128.33722708426362,36.13164442751835 +transit,128.344840171408,36.12518241174709 +transit,128.3524520106901,36.11871990523839 +transit,128.36006260251605,36.11225690818482 +transit,128.36767194729202,36.105793420778916 +transit,128.3752800454241,36.09932944321311 +transit,128.38288689731817,36.092864975679774 +transit,128.39049250338022,36.086400018371215 +transit,128.398096864016,36.07993457147967 +transit,128.40569997963132,36.07346863519728 +transit,128.41330185063185,36.067002209716144 +transit,128.42090247742314,36.06053529522827 +transit,128.4285018604107,36.054067891925605 +WP27,128.4361,36.0476 +transit,128.4285018604107,36.054067891925605 +transit,128.42090247742314,36.06053529522827 +transit,128.41330185063183,36.067002209716144 +transit,128.40569997963132,36.07346863519728 +transit,128.398096864016,36.07993457147967 +transit,128.3904925033802,36.086400018371215 +transit,128.38288689731817,36.092864975679774 +transit,128.37528004542406,36.099329443213115 +transit,128.36767194729202,36.105793420778916 +transit,128.36006260251605,36.11225690818482 +transit,128.3524520106901,36.118719905238386 +transit,128.344840171408,36.12518241174709 +transit,128.33722708426362,36.131644427518346 +transit,128.32961274885056,36.13810595235949 +transit,128.32199716476256,36.14456698607779 +transit,128.31438033159313,36.151027528480434 +transit,128.30676224893577,36.15748757937454 +transit,128.29914291638386,36.16394713856719 +transit,128.29152233353074,36.170406205865305 +transit,128.28390049996966,36.17686478107585 +transit,128.2762774152938,36.18332286400562 +transit,128.26865307909625,36.189780454461385 +transit,128.26102749097006,36.19623755224983 +transit,128.25340065050813,36.20269415717758 +transit,128.24577255730333,36.209150269051186 +transit,128.2381432109485,36.2156058876771 +transit,128.23051261103626,36.222061012861715 +transit,128.22288075715934,36.22851564441139 +transit,128.21524764891026,36.23496978213233 +transit,128.2076132858815,36.24142342583076 +transit,128.19997766766548,36.24787657531277 +transit,128.1923407938545,36.25432923038439 +transit,128.18470266404086,36.260781390851605 +transit,128.17706327781667,36.26723305652028 +transit,128.1694226347741,36.27368422719625 +transit,128.16178073450513,36.280134902685255 +transit,128.15413757660173,36.28658508279296 +transit,128.14649316065575,36.29303476732498 +transit,128.138847486259,36.29948395608682 +transit,128.13120055300323,36.30593264888395 +transit,128.12355236048,36.312380845521766 +transit,128.11590290828093,36.31882854580553 +transit,128.10825219599752,36.32527574954052 +transit,128.10060022322114,36.331722456531885 +transit,128.09294698954315,36.3381686665847 +transit,128.0852924945548,36.344614379504 +transit,128.0776367378473,36.35105959509473 +transit,128.06997971901177,36.35750431316175 +transit,128.06232143763918,36.36394853350985 +transit,128.0546618933205,36.37039225594376 +transit,128.04700108564668,36.37683548026814 +transit,128.03933901420845,36.38327820628757 +transit,128.03167567859657,36.389720433806545 +transit,128.02401107840168,36.396162162629494 +transit,128.01634521321435,36.402603392560785 +transit,128.00867808262512,36.409044123404676 +transit,128.00100968622436,36.41548435496542 +transit,127.99334002360247,36.42192408704714 +transit,127.98566909434969,36.42836331945388 +transit,127.97799689805622,36.43480205198965 +transit,127.97032343431219,36.44124028445836 +transit,127.96264870270765,36.44767801666387 +transit,127.95497270283258,36.454115248409934 +transit,127.94729543427684,36.46055197950025 +transit,127.93961689663028,36.46698820973845 +transit,127.93193708948264,36.47342393892809 +transit,127.92425601242357,36.479859166872636 +transit,127.91657366504269,36.486293893375496 +transit,127.9088900469295,36.49272811824 +transit,127.90120515767345,36.49916184126939 +transit,127.8935189968639,36.50559506226687 +transit,127.88583156409014,36.51202778103554 +transit,127.8781428589414,36.51845999737842 +transit,127.87045288100681,36.5248917110985 +transit,127.86276162987544,36.531322921998644 +transit,127.85506910513627,36.53775362988168 +transit,127.84737530637824,36.544183834550324 +transit,127.83968023319017,36.550613535807265 +transit,127.83198388516082,36.55704273345509 +transit,127.82428626187891,36.56347142729632 +transit,127.81658736293302,36.56989961713339 +transit,127.80888718791172,36.57632730276867 +transit,127.80118573640347,36.582754484004454 +transit,127.79348300799664,36.58918116064297 +transit,127.78577900227957,36.59560733248637 +transit,127.77807371884047,36.602032999336714 +transit,127.77036715726756,36.608458160995994 +transit,127.76265931714887,36.61488281726617 +transit,127.75495019807246,36.62130696794906 +transit,127.74723979962626,36.627730612846456 +transit,127.73952812139812,36.63415375176006 +transit,127.73181516297586,36.64057638449148 +transit,127.72410092394718,36.64699851084231 +transit,127.71638540389972,36.65342013061399 +transit,127.70866860242108,36.65984124360794 +transit,127.70095051909871,36.6662618496255 +transit,127.69323115352007,36.67268194846792 +transit,127.68551050527248,36.67910153993637 +transit,127.67778857394323,36.685520623831955 +transit,127.67006535911949,36.69193919995574 +transit,127.66234086038841,36.698357268108644 +transit,127.65461507733703,36.70477482809159 +transit,127.64688800955233,36.71119187970535 +transit,127.63915965662119,36.717608422750686 +transit,127.63143001813046,36.72402445702823 +transit,127.62369909366687,36.73043998233859 +transit,127.61596688281712,36.73685499848227 +transit,127.60823338516781,36.743269505259704 +transit,127.60049860030544,36.74968350247125 +transit,127.59276252781652,36.7560969899172 +transit,127.58502516728737,36.76250996739776 +transit,127.57728651830435,36.76892243471307 +transit,127.56954658045366,36.77533439166319 +transit,127.56180535332149,36.7817458380481 +transit,127.5540628364939,36.78815677366773 +transit,127.5463190295569,36.7945671983219 +transit,127.53857393209647,36.800977111810376 +transit,127.53082754369842,36.807386513932855 +transit,127.52307986394858,36.81379540448893 +transit,127.51533089243266,36.820203783278146 +transit,127.5075806287363,36.82661165009996 +transit,127.49982907244508,36.833019004753766 +transit,127.4920762231445,36.839425847038875 +transit,127.48432208041996,36.84583217675452 +transit,127.47656664385684,36.852237993699866 +transit,127.4688099130404,36.85864329767398 +transit,127.46105188755585,36.86504808847589 +transit,127.45329256698831,36.87145236590454 +transit,127.44553195092286,36.877856129758754 +transit,127.43777003894446,36.88425937983736 +transit,127.43000683063806,36.89066211593903 +transit,127.42224232558844,36.897064337862425 +transit,127.41447652338043,36.90346604540608 +transit,127.40670942359867,36.909867238368484 +transit,127.3989410258278,36.91626791654806 +transit,127.39117132965237,36.922668079743126 +transit,127.38340033465686,36.92906772775193 +transit,127.37562804042564,36.935466860372664 +transit,127.36785444654305,36.94186547740343 +transit,127.36007955259336,36.94826357864226 +transit,127.35230335816075,36.954661163887096 +transit,127.34452586282931,36.96105823293584 +transit,127.33674706618311,36.96745478558627 +transit,127.32896696780608,36.97385082163611 +transit,127.32118556728213,36.98024634088302 +transit,127.31340286419507,36.98664134312459 +transit,127.30561885812862,36.9930358281583 +transit,127.29783354866652,36.99942979578157 +transit,127.29004693539233,37.00582324579175 +transit,127.28225901788957,37.01221617798612 +transit,127.27446979574172,37.01860859216186 +transit,127.26667926853214,37.02500048811611 +transit,127.25888743584416,37.031391865645894 +transit,127.25109429726102,37.037782724548194 +transit,127.24329985236588,37.04417306461988 +transit,127.23550410074185,37.05056288565779 +transit,127.22770704197191,37.05695218745866 +transit,127.21990867563906,37.06334096981913 +transit,127.21210900132617,37.06972923253581 +transit,127.20430801861602,37.07611697540519 +transit,127.19650572709138,37.082504198223724 +transit,127.18870212633489,37.08889090078777 +transit,127.18089721592914,37.095277082893595 +transit,127.17309099545665,37.10166274433742 +transit,127.16528346449988,37.10804788491534 +transit,127.1574746226412,37.11443250442345 +transit,127.14966446946292,37.120816602657705 +transit,127.14185300454727,37.127200179414 +transit,127.1340402274764,37.13358323448817 +transit,127.1262261378324,37.13996576767595 +transit,127.11841073519732,37.14634777877302 +transit,127.11059401915306,37.152729267574976 +transit,127.10277598928151,37.15911023387732 +transit,127.0949566451645,37.16549067747551 +transit,127.08713598638373,37.1718705981649 +transit,127.07931401252087,37.17824999574078 +transit,127.07149072315752,37.18462886999835 +transit,127.06366611787519,37.19100722073276 +transit,127.05584019625532,37.19738504773905 +transit,127.0480129578793,37.20376235081222 +transit,127.04018440232842,37.210139129747155 +transit,127.03235452918392,37.21651538433869 +transit,127.02452333802698,37.22289111438158 +transit,127.01669082843866,37.22926631967048 +Suwon_Air_Base,127.008857,37.235641 +transit,127.00513094815463,37.241992496787965 +transit,127.00140427093532,37.24834386948789 +transit,126.99767696810498,37.2546951180531 +transit,126.99394903942637,37.26104624243692 +transit,126.99022048466219,37.26739724259265 +transit,126.98649130357501,37.27374811847358 +transit,126.98276149592735,37.280098870032944 +transit,126.97903106148158,37.28644949722402 +WP25,126.9753,37.2928 +transit,126.98154528793634,37.29973628373348 +transit,126.9877917229753,37.30667222970899 +transit,126.99403930556078,37.31360783778394 +transit,127.00028803613678,37.32054310781569 +transit,127.00653791514749,37.32747803966153 +transit,127.01278894303724,37.33441263317868 +transit,127.0190411202505,37.34134688822431 +transit,127.02529444723194,37.34828080465551 +transit,127.03154892442635,37.35521438232931 +transit,127.03780455227867,37.36214762110269 +transit,127.04406133123403,37.36908052083256 +transit,127.0503192617377,37.376013081375746 +transit,127.05657834423508,37.38294530258906 +transit,127.06283857917174,37.38987718432916 +transit,127.06909996699342,37.39680872645274 +transit,127.07536250814603,37.40373992881637 +transit,127.08162620307557,37.41067079127659 +transit,127.08789105222827,37.417601313689815 +transit,127.09415705605048,37.42453149591249 +transit,127.10042421498869,37.431461337800904 +transit,127.10669252948959,37.438390839211344 +Seoul_Air_Base,127.112962,37.44532 +transit,127.11407498046337,37.45295479173879 +transit,127.11518818720195,37.46058956310631 +transit,127.11630162032382,37.46822431409691 +transit,127.11741527993712,37.47585904470489 +transit,127.11852916615004,37.48349375492461 +transit,127.11964327907083,37.491128444750345 +transit,127.12075761880781,37.49876311417644 +transit,127.12187218546937,37.506397763197214 +transit,127.12298697916394,37.514032391806964 +WP3,127.124102,37.521667 +transit,127.12526711539714,37.529744874276616 +transit,127.12643248211599,37.5378227259795 +transit,127.12759810028365,37.54590055510202 +transit,127.12876397002731,37.553978361637625 +transit,127.12993009147425,37.5620561455797 +transit,127.13109646475178,37.57013390692162 +transit,127.13226308998733,37.578211645656786 +transit,127.1334299673084,37.5862893617786 +transit,127.13459709684253,37.59436705528044 +transit,127.13576447871735,37.602444726155696 +transit,127.13693211306057,37.61052237439777 +WP4,127.1381,37.6186 +transit,127.14364453767999,37.625276476825675 +transit,127.1491900672499,37.63195268550096 +transit,127.15473658908718,37.638628625916944 +transit,127.16028410356938,37.645304297964664 +transit,127.16583261107426,37.651979701535154 +transit,127.17138211197964,37.658654836519354 +transit,127.17693260666354,37.66532970280818 +transit,127.18248409550407,37.67200430029247 +transit,127.1880365788795,37.67867862886307 +transit,127.19359005716825,37.68535268841071 +transit,127.19914453074885,37.692026478826136 +WP5,127.2047,37.6987 +transit,127.21343162856657,37.69498506001787 +transit,127.22216238580884,37.69126947121904 +transit,127.23089227177877,37.68755323375334 +transit,127.23962128652845,37.68383634777065 +transit,127.24834943011,37.68011881342078 +transit,127.25707670257566,37.67640063085357 +transit,127.26580310397777,37.67268180021881 +transit,127.27452863436872,37.668962321666314 +transit,127.28325329380102,37.66524219534583 +transit,127.29197708232722,37.661521421407144 +WP6,127.3007,37.6578 +transit,127.29674227467392,37.64957899698307 +transit,127.29278542177502,37.641357849734945 +transit,127.28882944086675,37.63313655832447 +transit,127.28487433151281,37.624915122820475 +transit,127.2809200932771,37.61669354329172 +transit,127.27696672572382,37.60847181980696 +transit,127.27301422841735,37.60024995243488 +transit,127.26906260092234,37.592027941244154 +transit,127.26511184280368,37.583805786303394 +transit,127.2611619536265,37.5755834876812 +transit,127.25721293295616,37.56736104544609 +transit,127.25326478035826,37.55913845966662 +transit,127.24931749539866,37.550915730411205 +transit,127.24537107764343,37.54269285774832 +transit,127.24142552665889,37.534469841746336 +transit,127.23748084201159,37.52624668247362 +transit,127.23353702326837,37.518023379998475 +transit,127.22959406999622,37.5097999343892 +transit,127.22565198176245,37.501576345714014 +transit,127.22171075813456,37.49335261404114 +transit,127.2177703986803,37.48512873943874 +transit,127.21383090296766,37.476904721974925 +transit,127.20989227056486,37.4686805617178 +transit,127.2059545010404,37.460456258735405 +transit,127.20201759396292,37.452231813095764 +transit,127.1980815489014,37.444007224866844 +transit,127.194146365425,37.435782494116594 +transit,127.19021204310314,37.42755762091289 +transit,127.18627858150548,37.41933260532362 +transit,127.18234598020187,37.4111074474166 +transit,127.17841423876246,37.402882147259604 +transit,127.17448335675759,37.394656704920386 +transit,127.17055333375788,37.38643112046667 +transit,127.16662416933413,37.37820539396613 +transit,127.1626958630574,37.36997952548637 +transit,127.158768414499,37.361753515095025 +transit,127.15484182323047,37.35352736285964 +transit,127.15091608882358,37.34530106884773 +transit,127.14699121085032,37.3370746331268 +transit,127.14306718888294,37.32884805576426 +transit,127.13914402249392,37.32062133682758 +transit,127.13522171125595,37.31239447638408 +transit,127.13130025474197,37.304167474501114 +transit,127.12737965252519,37.295940331245994 +transit,127.12345990417899,37.287713046685965 +transit,127.119541009277,37.27948562088826 +transit,127.11562296739314,37.27125805392004 +transit,127.1117057781015,37.2630303458485 +transit,127.1077894409764,37.25480249674071 +transit,127.10387395559245,37.24657450666377 +transit,127.09995932152444,37.238346375684706 +transit,127.09604553834743,37.230118103870524 +transit,127.09213260563669,37.221889691288176 +transit,127.0882205229677,37.2136611380046 +transit,127.08430928991625,37.20543244408668 +transit,127.08039890605826,37.197203609601274 +transit,127.07648937096997,37.18897463461519 +transit,127.0725806842278,37.18074551919522 +transit,127.06867284540841,37.17251626340809 +transit,127.06476585408873,37.164286867320506 +transit,127.06085970984586,37.15605733099914 +transit,127.05695441225716,37.14782765451063 +transit,127.05304996090022,37.13959783792155 +transit,127.04914635535289,37.131367881298466 +transit,127.0452435951932,37.123137784707914 +transit,127.04134167999943,37.11490754821636 +transit,127.03744060935011,37.10667717189025 +transit,127.03354038282397,37.098446655796 +Osan_Air_Base,127.029641,37.090216 diff --git a/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/all_plans/bangkok_waypoints.csv b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/all_plans/bangkok_waypoints.csv new file mode 100644 index 0000000..4a2fac1 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/all_plans/bangkok_waypoints.csv @@ -0,0 +1,3562 @@ +city,utc_adjust +bangkok,7 +waypoint,lon,lat +U_Tapao,101.005,12.67983303 +transit,100.99748524729382,12.68476491304953 +transit,100.98997020525702,12.689696581764105 +transit,100.98245487377469,12.694628036049753 +transit,100.97493925273196,12.69955927581249 +transit,100.96742334201394,12.704490300958334 +transit,100.95990714150577,12.70942111139328 +transit,100.95239065109256,12.714351707023324 +transit,100.94487387065945,12.719282087754447 +transit,100.93735680009158,12.724212253492627 +transit,100.92983943927409,12.729142204143825 +transit,100.92232178809209,12.734071939614005 +transit,100.91480384643079,12.739001459809106 +transit,100.90728561417528,12.74393076463507 +transit,100.89976709121075,12.74885985399783 +transit,100.89224827742235,12.7537887278033 +transit,100.88472917269523,12.758717385957395 +transit,100.87720977691457,12.763645828366014 +transit,100.86969008996553,12.768574054935053 +transit,100.86217011173328,12.773502065570394 +transit,100.854649842103,12.778429860177916 +transit,100.84712928095988,12.783357438663474 +transit,100.83960842818908,12.78828480093294 +transit,100.83208728367582,12.793211946892148 +transit,100.82456584730528,12.798138876446945 +transit,100.81704411896264,12.803065589503156 +transit,100.80952209853311,12.8079920859666 +transit,100.8019997859019,12.812918365743093 +transit,100.7944771809542,12.817844428738434 +transit,100.78695428357524,12.822770274858414 +transit,100.77943109365023,12.827695904008822 +transit,100.77190761106438,12.832621316095427 +transit,100.76438383570292,12.837546511023998 +transit,100.75685976745106,12.842471488700294 +transit,100.74933540619405,12.847396249030055 +transit,100.74181075181711,12.852320791919025 +transit,100.7342858042055,12.857245117272932 +transit,100.72676056324444,12.862169224997492 +transit,100.71923502881916,12.867093114998422 +transit,100.71170920081495,12.872016787181416 +transit,100.70418307911703,12.876940241452175 +transit,100.69665666361068,12.881863477716378 +transit,100.68912995418114,12.886786495879695 +transit,100.6816029507137,12.891709295847798 +transit,100.67407565309361,12.89663187752634 +transit,100.66654806120613,12.90155424082097 +transit,100.65902017493657,12.906476385637317 +transit,100.65149199417019,12.91139831188102 +transit,100.64396351879226,12.91632001945769 +transit,100.63643474868809,12.921241508272947 +transit,100.62890568374299,12.926162778232381 +transit,100.62137632384221,12.931083829241587 +transit,100.61384666887108,12.936004661206152 +transit,100.6063167187149,12.940925274031644 +transit,100.59878647325895,12.945845667623628 +transit,100.59125593238859,12.950765841887659 +transit,100.58372509598912,12.955685796729286 +transit,100.57619396394584,12.960605532054041 +transit,100.56866253614409,12.965525047767454 +transit,100.56113081246917,12.970444343775045 +transit,100.55359879280647,12.975363419982312 +transit,100.54606647704126,12.98028227629477 +transit,100.53853386505892,12.985200912617898 +transit,100.5310009567448,12.990119328857183 +transit,100.52346775198421,12.995037524918098 +transit,100.51593425066253,12.9999555007061 +transit,100.50840045266511,13.004873256126647 +transit,100.50086635787731,13.009790791085182 +transit,100.49333196618448,13.01470810548714 +transit,100.48579727747202,13.019625199237947 +transit,100.47826229162526,13.02454207224302 +transit,100.47072700852961,13.029458724407766 +transit,100.46319142807043,13.034375155637582 +transit,100.4556555501331,13.039291365837858 +transit,100.44811937460304,13.044207354913977 +transit,100.4405829013656,13.049123122771306 +transit,100.43304613030621,13.054038669315206 +transit,100.42550906131025,13.05895399445103 +transit,100.41797169426313,13.063869098084117 +transit,100.41043402905026,13.068783980119807 +transit,100.40289606555706,13.073698640463418 +transit,100.39535780366893,13.078613079020267 +transit,100.3878192432713,13.08352729569566 +transit,100.38028038424959,13.088441290394893 +transit,100.37274122648923,13.093355063023258 +transit,100.36520176987565,13.09826861348602 +transit,100.3576620142943,13.103181941688465 +transit,100.35012195963061,13.108095047535835 +transit,100.34258160577004,13.11300793093339 +transit,100.33504095259802,13.117920591786367 +WP2,100.3275,13.12283303 +transit,100.32754165237236,13.130527555342772 +transit,100.32758330733789,13.1382220760861 +transit,100.32762496489835,13.145916592227486 +transit,100.32766662505544,13.153611103764428 +transit,100.32770828781092,13.161305610694422 +transit,100.32774995316653,13.169000113014974 +transit,100.32779162112399,13.176694610723583 +transit,100.32783329168505,13.184389103817743 +transit,100.32787496485145,13.192083592294967 +transit,100.3279166406249,13.199778076152752 +transit,100.32795831900718,13.207472555388593 +WP3,100.328,13.21516703 +transit,100.32804932534562,13.22372880860958 +transit,100.3280986541334,13.232290581485813 +transit,100.32814798636589,13.24085234862526 +transit,100.32819732204565,13.24941411002448 +transit,100.32824666117523,13.25797586568004 +transit,100.32829600375716,13.26653761558849 +transit,100.328345349794,13.275099359746399 +transit,100.32839469928834,13.28366109815033 +transit,100.32844405224269,13.292222830796844 +transit,100.32849340865961,13.300784557682498 +transit,100.32854276854167,13.309346278803861 +transit,100.32859213189141,13.3179079941575 +transit,100.3286414987114,13.326469703739976 +transit,100.32869086900419,13.335031407547852 +transit,100.32874024277234,13.343593105577696 +transit,100.32878962001841,13.352154797826074 +transit,100.32883900074496,13.360716484289556 +transit,100.32888838495454,13.369278164964706 +transit,100.32893777264971,13.377839839848091 +transit,100.32898716383305,13.386401508936281 +transit,100.3290365585071,13.394963172225848 +transit,100.32908595667442,13.403524829713355 +transit,100.3291353583376,13.412086481395372 +transit,100.32918476349919,13.420648127268477 +transit,100.32923417216173,13.429209767329235 +transit,100.32928358432781,13.437771401574219 +WP4,100.329333,13.44633303 +transit,100.32738963826714,13.454203588841562 +transit,100.3254461496106,13.462074127756567 +transit,100.32350253394532,13.469944646732305 +transit,100.32155879118619,13.477815145756043 +transit,100.31961492124809,13.485685624815059 +transit,100.31767092404587,13.493556083896632 +transit,100.31572679949439,13.501426522988032 +transit,100.31378254750845,13.509296942076535 +transit,100.31183816800285,13.517167341149399 +transit,100.30989366089239,13.525037720193898 +transit,100.3079490260918,13.532908079197295 +transit,100.30600426351585,13.540778418146852 +transit,100.30405937307923,13.54864873702983 +transit,100.30211435469664,13.556519035833485 +transit,100.30016920828278,13.564389314545078 +transit,100.2982239337523,13.572259573151857 +transit,100.29627853101984,13.580129811641081 +WP5,100.294333,13.58800003 +transit,100.29231766177654,13.59613358602131 +transit,100.29030218603909,13.604267120441008 +transit,100.2882865726931,13.612400633244965 +transit,100.28627082164402,13.62053412441904 +transit,100.28425493279732,13.62866759394911 +transit,100.28223890605837,13.636801041821029 +transit,100.28022274133257,13.644934468020663 +transit,100.27820643852526,13.653067872533864 +transit,100.2761899975418,13.661201255346494 +transit,100.27417341828749,13.669334616444402 +transit,100.27215670066762,13.67746795581344 +transit,100.27013984458746,13.685601273439463 +transit,100.26812284995226,13.693734569308306 +transit,100.26610571666723,13.701867843405827 +transit,100.26408844463755,13.710001095717853 +transit,100.26207103376844,13.718134326230237 +transit,100.260053483965,13.72626753492881 +transit,100.25803579513239,13.734400721799405 +transit,100.2560179671757,13.742533886827859 +WP6,100.254,13.75066703 +transit,100.2586740780304,13.758123399579667 +transit,100.26334845205756,13.765579676009509 +transit,100.26802312226344,13.773035859231898 +transit,100.27269808883001,13.780491949189194 +transit,100.27737335193929,13.78794794582375 +transit,100.28204891177329,13.795403849077895 +transit,100.28672476851409,13.80285965889396 +transit,100.29140092234381,13.810315375214255 +transit,100.2960773734446,13.81777099798109 +transit,100.30075412199864,13.825226527136744 +transit,100.30543116818812,13.832681962623504 +transit,100.31010851219531,13.840137304383626 +transit,100.31478615420248,13.847592552359382 +transit,100.31946409439196,13.855047706493 +transit,100.3241423329461,13.862502766726717 +transit,100.32882087004727,13.869957733002755 +transit,100.33349970587791,13.877412605263316 +transit,100.33817884062047,13.884867383450601 +transit,100.34285827445746,13.892322067506793 +transit,100.34753800757137,13.89977665737406 +transit,100.35221804014478,13.907231152994562 +transit,100.35689837236029,13.914685554310452 +transit,100.36157900440053,13.92213986126387 +transit,100.36625993644816,13.929594073796933 +transit,100.37094116868589,13.93704819185176 +transit,100.37562270129644,13.944502215370443 +transit,100.3803045344626,13.951956144295085 +transit,100.38498666836715,13.959409978567747 +transit,100.38966910319296,13.966863718130504 +transit,100.39435183912289,13.974317362925413 +transit,100.39903487633985,13.981770912894506 +transit,100.4037182150268,13.989224367979812 +transit,100.4084018553667,13.996677728123364 +transit,100.41308579754259,14.004130993267152 +transit,100.4177700417375,14.011584163353172 +transit,100.42245458813453,14.01903723832341 +transit,100.42713943691679,14.026490218119836 +transit,100.43182458826746,14.033943102684404 +transit,100.4365100423697,14.04139589195906 +transit,100.44119579940677,14.04884858588574 +transit,100.44588185956191,14.056301184406367 +transit,100.45056822301844,14.063753687462848 +transit,100.45525488995966,14.071206094997075 +transit,100.45994186056897,14.078658406950948 +transit,100.46462913502977,14.086110623266327 +transit,100.46931671352549,14.09356274388508 +transit,100.4740045962396,14.101014768749055 +transit,100.47869278335563,14.10846669780009 +transit,100.48338127505711,14.11591853098001 +transit,100.48807007152764,14.123370268230632 +transit,100.49275917295083,14.13082190949375 +transit,100.4974485795103,14.138273454711156 +transit,100.5021382913898,14.145724903824627 +transit,100.50682830877301,14.15317625677593 +transit,100.5115186318437,14.16062751350682 +transit,100.51620926078567,14.168078673959027 +transit,100.52090019578274,14.175529738074289 +transit,100.52559143701879,14.182980705794318 +transit,100.53028298467773,14.190431577060822 +transit,100.53497483894346,14.197882351815487 +WP7,100.539667,14.20533303 +transit,100.54797860533483,14.204279516957863 +transit,100.55629013377941,14.203225715194685 +transit,100.56460158531932,14.202171624735378 +transit,100.57291295994017,14.201117245604847 +transit,100.58122425762754,14.20006257782802 +transit,100.58953547836708,14.199007621429818 +transit,100.5978466221444,14.197952376435179 +transit,100.60615768894513,14.196896842869032 +transit,100.61446867875489,14.195841020756331 +transit,100.62277959155935,14.19478491012202 +transit,100.63109042734415,14.193728510991058 +transit,100.63940118609494,14.192671823388402 +transit,100.6477118677974,14.19161484733902 +transit,100.65602247243719,14.190557582867896 +WP8,100.664333,14.18950003 +transit,100.66664363112469,14.181428781010574 +transit,100.66895409878745,14.173357504322949 +transit,100.67126440309633,14.165286199954679 +transit,100.6735745441593,14.15721486792332 +transit,100.6758845220843,14.149143508246421 +transit,100.67819433697926,14.141072120941542 +transit,100.68050398895208,14.133000706026225 +transit,100.68281347811065,14.124929263518016 +transit,100.6851228045628,14.11685779343445 +transit,100.68743196841635,14.108786295793069 +transit,100.68974096977908,14.100714770611404 +transit,100.6920498087588,14.092643217906986 +transit,100.6943584854632,14.084571637697344 +WP9,100.696667,14.07650003 +transit,100.69257331716587,14.069046258352722 +transit,100.68847989956993,14.061592412710672 +transit,100.68438674705119,14.054138493118721 +transit,100.68029385944872,14.046684499621724 +transit,100.67620123660159,14.03923043226454 +transit,100.67210887834894,14.031776291092006 +transit,100.66801678452988,14.02432207614896 +transit,100.66392495498363,14.016867787480221 +transit,100.65983338954939,14.009413425130608 +transit,100.65574208806642,14.001958989144919 +transit,100.65165105037399,13.994504479567963 +transit,100.64756027631141,13.98704989644452 +transit,100.64346976571804,13.97959523981937 +transit,100.63937951843324,13.972140509737278 +transit,100.63528953429643,13.964685706243007 +transit,100.63119981314708,13.95723082938131 +transit,100.62711035482462,13.949775879196922 +transit,100.62302115916859,13.942320855734582 +transit,100.61893222601852,13.93486575903901 +transit,100.614843555214,13.92741058915492 +transit,100.6107551465946,13.919955346127017 +Don_Mueang,100.606667,13.91250003 +transit,100.6049446025679,13.90816671035839 +transit,100.60322226924221,13.903833377023446 +WP11,100.6015,13.89950003 +transit,100.59301296559651,13.901765024837376 +transit,100.5845257661695,13.904029724192878 +transit,100.5760384017093,13.906294128010886 +transit,100.56755087220628,13.908558236235775 +transit,100.55906317765078,13.910822048811921 +transit,100.55057531803321,13.913085565683714 +transit,100.54208729334393,13.915348786795532 +transit,100.53359910357337,13.91761171209177 +transit,100.52511074871194,13.919874341516824 +transit,100.51662222875008,13.922136675015082 +transit,100.50813354367824,13.924398712530953 +transit,100.4996446934869,13.926660454008832 +transit,100.49115567816652,13.928921899393133 +transit,100.48266649770757,13.931183048628265 +transit,100.47417715210061,13.933443901658633 +transit,100.4656876413361,13.935704458428669 +transit,100.45719796540463,13.937964718882776 +transit,100.4487081242967,13.940224682965392 +transit,100.4402181180029,13.942484350620933 +transit,100.4317279465138,13.944743721793836 +transit,100.42323760981999,13.947002796428533 +transit,100.41474710791208,13.94926157446946 +transit,100.40625644078068,13.951520055861057 +transit,100.3977656084164,13.953778240547772 +transit,100.38927461080993,13.956036128474047 +transit,100.38078344795191,13.958293719584336 +transit,100.37229211983302,13.960551013823093 +transit,100.36380062644393,13.962808011134772 +transit,100.35530896777537,13.965064711463835 +transit,100.34681714381804,13.967321114754752 +transit,100.33832515456265,13.969577220951981 +WP12,100.329833,13.97183303 +transit,100.32881180554787,13.980590646029246 +transit,100.3277905338607,13.989348251459255 +transit,100.32676918488234,13.998105846283291 +transit,100.32574775855662,14.00686343049461 +transit,100.32472625482737,14.01562100408648 +transit,100.32370467363837,14.024378567052155 +transit,100.32268301493345,14.033136119384896 +transit,100.32166127865634,14.04189366107797 +transit,100.32063946475083,14.050651192124619 +transit,100.31961757316064,14.05940871251812 +transit,100.31859560382952,14.068166222251723 +transit,100.31757355670116,14.076923721318687 +transit,100.31655143171928,14.085681209712273 +transit,100.31552922882751,14.094438687425734 +transit,100.31450694796958,14.103196154452334 +transit,100.31348458908909,14.11195361078533 +transit,100.3124621521297,14.12071105641797 +transit,100.31143963703501,14.129468491343523 +transit,100.31041704374863,14.13822591555524 +transit,100.30939437221413,14.146983329046378 +transit,100.3083716223751,14.155740731810196 +transit,100.3073487941751,14.164498123839945 +transit,100.30632588755765,14.173255505128882 +transit,100.30530290246627,14.182012875670265 +transit,100.30427983884448,14.190770235457352 +transit,100.30325669663576,14.199527584483393 +transit,100.3022334757836,14.208284922741642 +transit,100.30121017623144,14.217042250225358 +transit,100.30018679792275,14.22579956692779 +transit,100.29916334080092,14.234556872842198 +transit,100.2981398048094,14.243314167961831 +transit,100.29711618989155,14.252071452279944 +transit,100.29609249599079,14.260828725789787 +transit,100.29506872305045,14.269585988484623 +transit,100.2940448710139,14.278343240357696 +transit,100.29302093982444,14.287100481402256 +transit,100.29199692942542,14.295857711611566 +transit,100.29097283976014,14.304614930978866 +transit,100.28994867077186,14.313372139497416 +transit,100.28892442240387,14.322129337160467 +transit,100.28790009459941,14.330886523961267 +transit,100.28687568730172,14.339643699893067 +transit,100.285851200454,14.348400864949117 +transit,100.2848266339995,14.357158019122675 +transit,100.28380198788138,14.36591516240698 +transit,100.2827772620428,14.374672294795284 +transit,100.28175245642693,14.383429416280846 +transit,100.28072757097691,14.392186526856905 +transit,100.27970260563586,14.40094362651672 +transit,100.2786775603469,14.409700715253525 +transit,100.2776524350531,14.418457793060584 +transit,100.27662722969755,14.427214859931134 +transit,100.27560194422331,14.435971915858435 +transit,100.27457657857342,14.444728960835716 +transit,100.2735511326909,14.453485994856248 +transit,100.27252560651876,14.462243017913258 +WP13,100.2715,14.47100003 +transit,100.27028576553123,14.47940988010593 +transit,100.26907143958948,14.487819717938384 +transit,100.26785702211254,14.496229543489912 +transit,100.26664251303806,14.504639356753085 +transit,100.26542791230379,14.513049157720461 +transit,100.26421321984739,14.5214589463846 +transit,100.2629984356065,14.529868722738058 +transit,100.26178355951882,14.5382784867734 +transit,100.26056859152192,14.546688238483181 +transit,100.25935353155344,14.555097977859953 +transit,100.25813837955097,14.563507704896278 +transit,100.25692313545208,14.571917419584713 +transit,100.25570779919435,14.580327121917808 +transit,100.25449237071531,14.588736811888127 +transit,100.25327684995248,14.597146489488223 +transit,100.25206123684337,14.605556154710639 +transit,100.2508455313255,14.61396580754794 +transit,100.24962973333629,14.62237544799267 +transit,100.24841384281325,14.63078507603739 +transit,100.24719785969378,14.639194691674637 +transit,100.24598178391534,14.647604294896974 +transit,100.2447656154153,14.656013885696952 +transit,100.24354935413106,14.66442346406711 +WP14,100.242333,14.67283303 +transit,100.24311000160544,14.681240550739027 +transit,100.24388706258217,14.689648062801169 +transit,100.24466418297027,14.698055566181523 +transit,100.24544136280976,14.706463060875166 +transit,100.2462186021407,14.714870546877188 +transit,100.2469959010032,14.72327802418268 +transit,100.24777325943734,14.731685492786731 +transit,100.24855067748321,14.740092952684423 +transit,100.24932815518093,14.74850040387085 +transit,100.25010569257061,14.756907846341091 +transit,100.25088328969241,14.765315280090242 +transit,100.25166094658644,14.773722705113395 +transit,100.25243866329289,14.782130121405624 +transit,100.25321643985191,14.790537528962025 +transit,100.25399427630369,14.798944927777688 +transit,100.25477217268839,14.8073523178477 +transit,100.25555012904624,14.815759699167144 +transit,100.25632814541746,14.82416707173111 +transit,100.25710622184225,14.832574435534687 +transit,100.25788435836085,14.840981790572968 +transit,100.25866255501352,14.849389136841044 +transit,100.2594408118405,14.857796474333993 +transit,100.26021912888207,14.866203803046906 +transit,100.26099750617851,14.874611122974876 +transit,100.2617759437701,14.883018434112985 +transit,100.26255444169716,14.89142573645633 +WP15,100.263333,14.89983303 +transit,100.2605075745843,14.908345431356354 +transit,100.25768192704201,14.916857791535385 +transit,100.25485605722392,14.925370110510332 +transit,100.2520299649807,14.933882388254435 +transit,100.24920365016303,14.94239462474092 +transit,100.2463771126215,14.950906819943018 +transit,100.24355035220671,14.95941897383393 +transit,100.2407233687692,14.96793108638689 +transit,100.23789616215946,14.976443157575085 +transit,100.23506873222796,14.984955187371733 +transit,100.23224107882508,14.993467175750014 +transit,100.22941320180125,15.00197912268312 +transit,100.22658510100676,15.010491028144228 +transit,100.22375677629192,15.019002892106526 +transit,100.22092822750699,15.027514714543175 +transit,100.21809945450217,15.036026495427338 +transit,100.21527045712762,15.044538234732185 +transit,100.2124412352335,15.05304993243085 +transit,100.20961178866987,15.06156158849649 +transit,100.20678211728679,15.070073202902252 +transit,100.20395222093428,15.078584775621255 +transit,100.2011220994623,15.087096306626636 +transit,100.19829175272075,15.095607795891516 +transit,100.19546118055953,15.10411924338901 +transit,100.19263038282848,15.112630649092225 +transit,100.18979935937742,15.121142012974268 +transit,100.18696811005609,15.129653335008243 +transit,100.18413663471419,15.138164615167227 +transit,100.18130493320145,15.14667585342432 +transit,100.17847300536745,15.155187049752593 +transit,100.17564085106181,15.163698204125124 +transit,100.1728084701341,15.17220931651498 +transit,100.1699758624338,15.180720386895214 +transit,100.1671430278104,15.189231415238897 +transit,100.16430996611331,15.19774240151907 +transit,100.16147667719193,15.206253345708776 +transit,100.1586431608956,15.214764247781055 +transit,100.15580941707363,15.223275107708933 +transit,100.15297544557528,15.231785925465438 +transit,100.15014124624976,15.240296701023588 +transit,100.14730681894626,15.248807434356399 +transit,100.14447216351392,15.257318125436877 +transit,100.14163727980183,15.265828774238017 +transit,100.13880216765904,15.274339380732819 +transit,100.13596682693456,15.28284994489427 +transit,100.13313125747737,15.29136046669535 +transit,100.13029545913639,15.299870946109039 +transit,100.1274594317605,15.3083813831083 +transit,100.12462317519855,15.316891777666104 +transit,100.12178668929936,15.325402129755407 +transit,100.11894997391165,15.333912439349154 +transit,100.11611302888417,15.342422706420294 +transit,100.11327585406559,15.350932930941775 +transit,100.11043844930454,15.359443112886515 +transit,100.1076008144496,15.367953252227453 +transit,100.10476294934934,15.376463348937506 +transit,100.10192485385225,15.384973402989578 +transit,100.0990865278068,15.393483414356592 +transit,100.09624797106142,15.401993383011444 +transit,100.09340918346449,15.410503308927018 +transit,100.09057016486433,15.419013192076227 +transit,100.08773091510925,15.427523032431937 +transit,100.0848914340475,15.436032829967035 +transit,100.0820517215273,15.444542584654382 +transit,100.07921177739681,15.453052296466845 +transit,100.07637160150414,15.461561965377287 +transit,100.07353119369739,15.470071591358556 +transit,100.0706905538246,15.478581174383507 +transit,100.06784968173378,15.487090714424962 +transit,100.06500857727286,15.495600211455773 +transit,100.06216724028977,15.504109665448754 +transit,100.05932567063238,15.512619076376728 +transit,100.05648386814849,15.521128444212515 +transit,100.05364183268593,15.529637768928922 +transit,100.0507995640924,15.538147050498749 +transit,100.04795706221563,15.54665628889479 +transit,100.04511432690325,15.555165484089837 +transit,100.04227135800289,15.563674636056673 +transit,100.03942815536212,15.572183744768074 +transit,100.03658471882846,15.580692810196817 +transit,100.0337410482494,15.589201832315656 +transit,100.03089714347237,15.597710811097349 +transit,100.02805300434478,15.60621974651465 +transit,100.02520863071399,15.614728638540315 +transit,100.02236402242731,15.623237487147067 +transit,100.019519179332,15.631746292307646 +transit,100.01667410127527,15.640255053994785 +transit,100.01382878810433,15.64876377218119 +transit,100.01098323966632,15.657272446839583 +transit,100.00813745580832,15.665781077942668 +transit,100.00529143637739,15.674289665463148 +transit,100.00244518122054,15.682798209373718 +transit,99.99959869018473,15.691306709647064 +transit,99.99675196311688,15.699815166255869 +transit,99.99390499986389,15.708323579172806 +transit,99.99105780027257,15.71683194837055 +transit,99.98821036418973,15.725340273821754 +transit,99.9853626914621,15.733848555499081 +transit,99.98251478193642,15.74235679337518 +transit,99.97966663545931,15.750864987422695 +transit,99.97681825187742,15.75937313761426 +transit,99.97396963103729,15.767881243922508 +transit,99.9711207727855,15.77638930632006 +transit,99.96827167696848,15.78489732477954 +transit,99.96542234343272,15.793405299273555 +transit,99.96257277202459,15.80191322977471 +transit,99.95972296259045,15.810421116255604 +transit,99.95687291497663,15.818928958688828 +transit,99.95402262902938,15.827436757046963 +transit,99.95117210459492,15.835944511302595 +transit,99.94832134151945,15.844452221428298 +transit,99.94547033964908,15.852959887396633 +transit,99.94261909882992,15.861467509180162 +transit,99.93976761890802,15.869975086751435 +transit,99.93691589972937,15.878482620083002 +transit,99.93406394113994,15.886990109147405 +transit,99.93121174298564,15.895497553917169 +transit,99.92835930511232,15.904004954364835 +transit,99.92550662736586,15.912512310462906 +transit,99.922653709592,15.921019622183918 +transit,99.91980055163648,15.929526889500362 +transit,99.916947153345,15.938034112384738 +transit,99.91409351456323,15.946541290809549 +transit,99.91123963513675,15.955048424747282 +transit,99.90838551491115,15.963555514170414 +transit,99.9055311537319,15.97206255905143 +transit,99.9026765514445,15.980569559362786 +transit,99.89982170789438,15.989076515076952 +transit,99.89696662292691,15.997583426166381 +transit,99.89411129638745,16.006090292603517 +transit,99.89125572812127,16.01459711436081 +transit,99.88839991797363,16.023103891410695 +transit,99.88554386578973,16.031610623725594 +transit,99.88268757141473,16.040117311277942 +transit,99.87983103469377,16.04862395404014 +transit,99.87697425547186,16.05713055198461 +transit,99.87411723359409,16.06563710508374 +transit,99.8712599689054,16.074143613309943 +transit,99.86840246125075,16.082650076635602 +transit,99.865544710475,16.09115649503309 +transit,99.86268671642303,16.099662868474805 +transit,99.85982847893962,16.10816919693309 +transit,99.85696999786954,16.116675480380334 +transit,99.85411127305748,16.125181718788873 +transit,99.85125230434812,16.133687912131073 +transit,99.84839309158608,16.14219406037926 +transit,99.84553363461592,16.15070016350579 +transit,99.8426739332822,16.159206221482975 +transit,99.83981398742937,16.167712234283144 +transit,99.8369537969019,16.176218201878623 +transit,99.83409336154416,16.18472412424171 +transit,99.83123268120052,16.193230001344716 +transit,99.82837175571527,16.20173583315993 +transit,99.82551058493267,16.21024161965965 +transit,99.82264916869694,16.218747360816156 +transit,99.81978750685224,16.227253056601718 +transit,99.8169255992427,16.235758706988612 +transit,99.81406344571238,16.244264311949102 +transit,99.81120104610532,16.252769871455445 +transit,99.80833840026553,16.261275385479884 +transit,99.8054755080369,16.269780853994675 +transit,99.80261236926336,16.27828627697203 +transit,99.79974898378875,16.286791654384206 +transit,99.79688535145687,16.295296986203407 +transit,99.79402147211148,16.303802272401857 +transit,99.79115734559629,16.312307512951765 +transit,99.78829297175496,16.320812707825333 +transit,99.78542835043112,16.329317856994752 +transit,99.78256348146833,16.337822960432216 +transit,99.77969836471013,16.346328018109904 +WP16,99.776833,16.35483303 +transit,99.77618023461284,16.36352772012392 +transit,99.77552741141027,16.372222401058075 +transit,99.77487453035477,16.380917072797786 +transit,99.77422159140875,16.389611735338356 +transit,99.77356859453462,16.398306388675113 +transit,99.77291553969484,16.407001032803365 +transit,99.77226242685175,16.41569566771843 +transit,99.77160925596779,16.42439029341563 +transit,99.7709560270053,16.433084909890265 +transit,99.77030273992665,16.441779517137665 +transit,99.7696493946942,16.45047411515314 +transit,99.76899599127029,16.459168703932004 +transit,99.76834252961723,16.467863283469587 +transit,99.76768900969735,16.476557853761186 +transit,99.76703543147296,16.485252414802133 +transit,99.76638179490634,16.493946966587743 +transit,99.76572809995977,16.50264150911333 +transit,99.76507434659551,16.511336042374218 +transit,99.76442053477584,16.520030566365715 +transit,99.76376666446298,16.528725081083156 +transit,99.76311273561917,16.537419586521843 +transit,99.76245874820663,16.5461140826771 +transit,99.76180470218756,16.554808569544257 +transit,99.76115059752416,16.563503047118626 +transit,99.76049643417862,16.572197515395523 +transit,99.7598422121131,16.58089197437027 +transit,99.75918793128977,16.589586424038195 +transit,99.75853359167077,16.598280864394617 +transit,99.75787919321822,16.606975295434843 +transit,99.75722473589427,16.615669717154212 +transit,99.75657021966101,16.624364129548038 +transit,99.75591564448055,16.633058532611642 +transit,99.75526101031497,16.64175292634035 +transit,99.75460631712635,16.65044731072948 +transit,99.75395156487673,16.659141685774355 +transit,99.75329675352819,16.667836051470307 +transit,99.75264188304276,16.67653040781264 +transit,99.75198695338244,16.685224754796693 +transit,99.75133196450928,16.693919092417794 +transit,99.75067691638525,16.702613420671252 +transit,99.75002180897236,16.7113077395524 +transit,99.74936664223257,16.72000204905656 +transit,99.74871141612785,16.72869634917906 +transit,99.74805613062016,16.73739063991522 +transit,99.74740078567142,16.746084921260373 +transit,99.74674538124357,16.754779193209835 +transit,99.74608991729853,16.763473455758938 +transit,99.74543439379819,16.772167708903005 +transit,99.74477881070446,16.780861952637366 +transit,99.7441231679792,16.789556186957345 +transit,99.74346746558427,16.798250411858273 +transit,99.74281170348154,16.806944627335472 +transit,99.74215588163284,16.815638833384273 +WP17,99.7415,16.82433303 +transit,99.74429190475959,16.832429740308847 +transit,99.74708404678597,16.840526406302324 +transit,99.7498764262191,16.848623027955263 +transit,99.752669043199,16.856719605242482 +transit,99.75546189786576,16.8648161381388 +transit,99.75825499035943,16.872912626619026 +transit,99.7610483208202,16.88100907065797 +transit,99.7638418893882,16.889105470230426 +transit,99.76663569620369,16.897201825311186 +transit,99.76942974140691,16.905298135875043 +transit,99.77222402513819,16.913394401896774 +transit,99.77501854753783,16.921490623351154 +transit,99.77781330874623,16.929586800212952 +transit,99.78060830890382,16.93768293245693 +transit,99.78340354815106,16.945779020057852 +transit,99.78619902662844,16.95387506299046 +transit,99.78899474447651,16.961971061229494 +transit,99.79179070183586,16.970067014749702 +transit,99.79458689884711,16.978162923525804 +transit,99.79738333565093,16.986258787532545 +transit,99.80018001238801,16.994354606744626 +transit,99.8029769291991,17.002450381136764 +transit,99.80577408622501,17.01054611068368 +transit,99.80857148360654,17.01864179536006 +transit,99.81136912148457,17.026737435140607 +WP18,99.814167,17.03483303 +transit,99.81434040327201,17.043284529361696 +transit,99.81451382213099,17.051736021555545 +transit,99.81468725658654,17.0601875065784 +transit,99.81486070664826,17.068638984427135 +transit,99.81503417232577,17.07709045509859 +transit,99.81520765362868,17.085541918589627 +transit,99.8153811505666,17.093993374897117 +transit,99.81555466314913,17.1024448240179 +transit,99.81572819138593,17.110896265948856 +transit,99.81590173528662,17.119347700686838 +transit,99.8160752948608,17.127799128228713 +transit,99.8162488701181,17.136250548571326 +transit,99.81642246106819,17.14470196171156 +transit,99.81659606772067,17.153153367646272 +transit,99.8167696900852,17.16160476637232 +transit,99.8169433281714,17.17005615788658 +transit,99.81711698198895,17.17850754218591 +transit,99.81729065154748,17.18695891926717 +transit,99.81746433685664,17.195410289127235 +transit,99.81763803792609,17.203861651762978 +transit,99.81781175476549,17.212313007171257 +transit,99.81798548738449,17.220764355348937 +transit,99.81815923579278,17.2292156962929 +Sukhothai,99.818333,17.23766703 +transit,99.8109274024524,17.242972216999036 +transit,99.80352138185381,17.248277128540224 +transit,99.79611493806348,17.253581764518536 +transit,99.78870807094071,17.258886124828933 +transit,99.78130078034481,17.26419020936634 +transit,99.77389306613506,17.26949401802568 +transit,99.76648492817073,17.274797550701866 +transit,99.75907636631113,17.280100807289784 +transit,99.75166738041557,17.285403787684306 +transit,99.74425797034333,17.290706491780302 +transit,99.7368481359537,17.296008919472605 +transit,99.72943787710594,17.301311070656055 +transit,99.72202719365941,17.306612945225467 +transit,99.71461608547338,17.31191454307563 +transit,99.70720455240713,17.31721586410134 +transit,99.69979259431997,17.32251690819735 +transit,99.69238021107121,17.327817675258427 +transit,99.68496740252013,17.333118165179304 +transit,99.67755416852603,17.3384183778547 +transit,99.67014050894824,17.343718313179327 +transit,99.66272642364599,17.34901797104788 +transit,99.65531191247867,17.354317351355018 +transit,99.64789697530551,17.359616453995418 +transit,99.64048161198585,17.36491527886372 +transit,99.63306582237897,17.370213825854556 +transit,99.6256496063442,17.37551209486254 +transit,99.61823296374082,17.380810085782265 +transit,99.61081589442814,17.386107798508327 +transit,99.60339839826548,17.391405232935284 +transit,99.59598047511213,17.396702388957692 +transit,99.5885621248274,17.401999266470092 +transit,99.58114334727061,17.407295865367 +transit,99.57372414230106,17.41259218554293 +transit,99.56630450977806,17.41788822689237 +transit,99.5588844495609,17.42318398930979 +transit,99.55146396150894,17.42847947268966 +transit,99.54404304548144,17.433774676926422 +transit,99.53662170133775,17.4390696019145 +transit,99.52919992893716,17.444364247548318 +transit,99.521777728139,17.44965861372227 +transit,99.51435509880257,17.454952700330733 +transit,99.50693204078718,17.46024650726809 +transit,99.49950855395217,17.465540034428674 +transit,99.49208463815684,17.47083328170683 +transit,99.4846602932605,17.476126248996888 +transit,99.4772355191225,17.481418936193148 +transit,99.46981031560213,17.4867113431899 +transit,99.46238468255873,17.49200346988141 +transit,99.45495861985162,17.497295316161956 +transit,99.44753212734011,17.502586881925765 +transit,99.44010520488354,17.507878167067073 +transit,99.43267785234121,17.513169171480097 +transit,99.42525006957246,17.51845989505902 +transit,99.41782185643662,17.52375033769804 +transit,99.410393212793,17.529040499291316 +transit,99.40296413850095,17.534330379733 +transit,99.39553463341977,17.53961997891723 +transit,99.38810469740883,17.54490929673812 +transit,99.38067433032744,17.55019833308977 +transit,99.37324353203492,17.555487087866283 +transit,99.36581230239061,17.560775560961726 +transit,99.35838064125383,17.566063752270153 +transit,99.35094854848396,17.571351661685608 +transit,99.34351602394028,17.576639289102125 +transit,99.33608306748218,17.5819266344137 +transit,99.32864967896894,17.58721369751434 +transit,99.32121585825995,17.592500478298025 +transit,99.31378160521452,17.597786976658714 +transit,99.30634691969199,17.603073192490353 +transit,99.29891180155172,17.60835912568688 +transit,99.29147625065305,17.613644776142216 +transit,99.2840402668553,17.618930143750262 +transit,99.27660385001784,17.624215228404896 +WP20,99.269167,17.62950003 +transit,99.26635252996367,17.63792495855916 +transit,99.26353779835352,17.64634983976061 +transit,99.26072280501332,17.6547746735773 +transit,99.2579075497868,17.663199459982156 +transit,99.25509203251767,17.67162419894811 +transit,99.25227625304954,17.68004889044808 +transit,99.24946021122605,17.68847353445498 +transit,99.24664390689071,17.696898130941722 +transit,99.24382733988703,17.705322679881206 +transit,99.24101051005846,17.713747181246323 +transit,99.23819341724838,17.72217163500995 +transit,99.23537606130014,17.730596041144977 +transit,99.23255844205707,17.739020399624277 +transit,99.22974055936238,17.74744471042071 +transit,99.22692241305931,17.75586897350713 +transit,99.22410400299098,17.7642931888564 +transit,99.22128532900052,17.772717356441344 +transit,99.21846639093097,17.781141476234815 +transit,99.21564718862534,17.789565548209644 +transit,99.21282772192659,17.79798957233864 +transit,99.21000799067761,17.80641354859462 +transit,99.20718799472127,17.81483747695041 +transit,99.20436773390038,17.823261357378787 +transit,99.2015472080577,17.831685189852557 +transit,99.19872641703594,17.840108974344503 +transit,99.19590536067776,17.848532710827417 +transit,99.19308403882576,17.856956399274054 +transit,99.19026245132252,17.865380039657182 +transit,99.18744059801054,17.873803631949574 +transit,99.18461847873228,17.88222717612396 +transit,99.18179609333016,17.890650672153097 +transit,99.17897344164655,17.899074120009722 +transit,99.17615052352375,17.90749751966656 +transit,99.17332733880401,17.915920871096333 +transit,99.17050388732959,17.924344174271752 +transit,99.16768016894261,17.93276742916554 +transit,99.1648561834852,17.94119063575039 +transit,99.16203193079944,17.94961379399899 +transit,99.15920741072732,17.95803690388403 +transit,99.15638262311083,17.966459965378185 +transit,99.15355756779186,17.97488297845414 +transit,99.15073224461229,17.983305943084545 +transit,99.14790665341393,17.991728859242063 +transit,99.14508079403855,18.000151726899347 +transit,99.14225466632787,18.00857454602904 +transit,99.13942827012355,18.01699731660377 +transit,99.13660160526717,18.025420038596177 +transit,99.13377467160036,18.033842711978878 +transit,99.13094746896459,18.042265336724476 +transit,99.12811999720134,18.050687912805593 +transit,99.12529225615202,18.05911044019482 +transit,99.122464245658,18.067532918864757 +transit,99.11963596556058,18.075955348787982 +transit,99.11680741570102,18.084377729937074 +transit,99.11397859592054,18.092800062284606 +transit,99.11114950606033,18.101222345803134 +transit,99.10832014596146,18.109644580465226 +transit,99.10549051546501,18.118066766243413 +transit,99.10266061441197,18.126488903110253 +transit,99.09983044264334,18.13491099103827 +WP21,99.097,18.14333303 +transit,99.10065204694395,18.15053863299162 +transit,99.10430439321041,18.157744161260723 +transit,99.10795703894814,18.164949614770485 +transit,99.11160998430594,18.172154993484096 +transit,99.11526322943266,18.179360297364724 +transit,99.11891677447714,18.186565526375535 +transit,99.12257061958833,18.19377068047968 +transit,99.12622476491516,18.200975759640304 +transit,99.12987921060665,18.20818076382054 +transit,99.13353395681177,18.215385692983517 +transit,99.13718900367964,18.22259054709235 +transit,99.14084435135933,18.22979532611015 +WP22,99.1445,18.23700003 +transit,99.15146735747362,18.24206090597879 +transit,99.15843511817809,18.247121525852435 +transit,99.16540328223628,18.25218188953077 +transit,99.17237184977107,18.257241996923632 +transit,99.17934082090532,18.262301847940826 +transit,99.1863101957619,18.267361442492156 +transit,99.1932799744637,18.272420780487415 +transit,99.20025015713358,18.277479861836383 +transit,99.2072207438944,18.282538686448806 +transit,99.21419173486905,18.28759725423445 +transit,99.2211631301804,18.29265556510304 +transit,99.22813492995131,18.2977136189643 +transit,99.23510713430467,18.302771415727932 +transit,99.24207974336333,18.307828955303652 +transit,99.24905275725021,18.312886237601127 +transit,99.25602617608814,18.31794326253002 +WP23,99.263,18.32300003 +transit,99.25557382490359,18.32744088559543 +transit,99.2481472707872,18.331881450058834 +transit,99.2407203375578,18.336321723300404 +transit,99.23329302512239,18.34076170523036 +transit,99.22586533338799,18.345201395758863 +transit,99.21843726226156,18.349640794796098 +transit,99.21100881165015,18.35407990225223 +transit,99.20357998146078,18.358518718037413 +transit,99.19615077160049,18.362957242061793 +transit,99.1887211819763,18.367395474235504 +transit,99.18129121249532,18.37183341446868 +transit,99.17386086306458,18.376271062671425 +transit,99.16643013359115,18.380708418753848 +transit,99.15899902398213,18.385145482626054 +transit,99.1515675341446,18.389582254198125 +transit,99.1441356639857,18.394018733380133 +transit,99.13670341341249,18.398454920082145 +transit,99.12927078233214,18.402890814214228 +transit,99.12183777065178,18.40732641568642 +transit,99.11440437827852,18.411761724408755 +transit,99.10697060511956,18.416196740291273 +transit,99.09953645108203,18.420631463243982 +transit,99.09210191607312,18.42506589317689 +WP24,99.084667,18.42950003 +transit,99.07590508762327,18.42952644374126 +transit,99.06714317259124,18.429552453173475 +transit,99.05838125494486,18.429578058295917 +transit,99.04961933472507,18.429603259107854 +transit,99.04085741197284,18.42962805560859 +transit,99.0320954867291,18.429652447797427 +transit,99.02333355903484,18.42967643567368 +transit,99.01457162893098,18.429700019236673 +transit,99.00580969645848,18.429723198485757 +transit,98.99704776165832,18.429745973420264 +transit,98.98828582457143,18.429768344039562 +transit,98.97952388523878,18.42979031034303 +transit,98.97076194370132,18.429811872330045 +WP25,98.962,18.42983303 +transit,98.96202131799997,18.438512668615008 +transit,98.96204263814047,18.447192299299033 +transit,98.96206396042278,18.45587192204888 +transit,98.9620852848482,18.464551536861347 +transit,98.96210661141804,18.473231143733248 +transit,98.96212794013357,18.481910742661395 +transit,98.96214927099611,18.490590333642597 +transit,98.96217060400696,18.499269916673665 +transit,98.9621919391674,18.507949491751404 +transit,98.96221327647872,18.516629058872628 +transit,98.96223461594225,18.525308618034146 +transit,98.96225595755928,18.533988169232785 +transit,98.9622773013311,18.54266771246535 +transit,98.962298647259,18.551347247728643 +transit,98.96231999534432,18.5600267750195 +transit,98.96234134558831,18.568706294334728 +transit,98.96236269799232,18.577385805671142 +transit,98.96238405255762,18.58606530902557 +transit,98.96240540928552,18.594744804394814 +transit,98.96242676817734,18.60342429177571 +transit,98.96244812923435,18.612103771165064 +transit,98.96246949245788,18.620783242559707 +transit,98.96249085784923,18.62946270595645 +transit,98.9625122254097,18.638142161352125 +transit,98.96253359514058,18.64682160874355 +transit,98.96255496704322,18.655501048127554 +transit,98.96257634111889,18.664180479500953 +transit,98.9625977173689,18.672859902860576 +transit,98.96261909579457,18.68153931820326 +transit,98.96264047639718,18.690218725525803 +transit,98.96266185917808,18.69889812482506 +transit,98.96268324413855,18.70757751609785 +transit,98.9627046312799,18.716256899340998 +transit,98.96272602060345,18.72493627455134 +transit,98.96274741211052,18.733615641725706 +transit,98.96276880580238,18.74229500086092 +transit,98.96279020168038,18.750974351953822 +transit,98.96281159974582,18.759653695001234 +Chiang_Mai,98.962833,18.76833303 +transit,98.97102345626038,18.76608001026244 +transit,98.97921369496291,18.7638266311987 +transit,98.9874037161068,18.7615728928644 +transit,98.9955935196913,18.759318795315163 +transit,99.00378310571564,18.757064338606618 +transit,99.01197247417912,18.75480952279439 +transit,99.02016162508102,18.75255434793413 +transit,99.02835055842063,18.750298814081457 +transit,99.03653927419731,18.74804292129203 +transit,99.04472777241037,18.745786669621488 +transit,99.05291605305919,18.743530059125487 +transit,99.06110411614316,18.74127308985968 +transit,99.06929196166166,18.739015761879713 +transit,99.07747958961414,18.73675807524127 +WP27,99.085667,18.73450003 +transit,99.0856442495099,18.726204652347565 +transit,99.08562150123944,18.717909267353512 +transit,99.08559875518738,18.70961387502061 +transit,99.0855760113524,18.701318475351638 +transit,99.08555326973327,18.693023068349355 +transit,99.08553053032868,18.684727654016523 +transit,99.0855077931374,18.676432232355932 +transit,99.08548505815813,18.66813680337033 +transit,99.08546232538961,18.65984136706251 +transit,99.08543959483058,18.651545923435226 +transit,99.08541686647975,18.64325047249126 +transit,99.08539414033586,18.63495501423338 +transit,99.08537141639765,18.626659548664367 +transit,99.08534869466384,18.618364075786985 +transit,99.08532597513317,18.61006859560402 +transit,99.08530325780438,18.60177310811824 +transit,99.08528054267619,18.593477613332425 +transit,99.08525782974733,18.58518211124935 +transit,99.08523511901656,18.57688660187179 +transit,99.08521241048258,18.568591085202527 +transit,99.08518970414416,18.560295561244335 +WP28,99.085167,18.55200003 +transit,99.09421416772395,18.550220010116274 +transit,99.10326114792517,18.548439556428413 +transit,99.11230794058116,18.546658668989824 +transit,99.12135454566953,18.544877347853905 +transit,99.13040096316784,18.543095593074085 +transit,99.13944719305371,18.541313404703782 +transit,99.14849323530477,18.539530782796437 +transit,99.15753908989865,18.537747727405492 +transit,99.16658475681304,18.535964238584413 +transit,99.17563023602561,18.53418031638665 +transit,99.18467552751409,18.53239596086568 +transit,99.19372063125621,18.530611172074995 +transit,99.20276554722972,18.52882595006808 +transit,99.21181027541238,18.527040294898434 +transit,99.220854815782,18.525254206619564 +transit,99.2298991683164,18.523467685284995 +transit,99.2389433329934,18.521680730948255 +transit,99.24798730979086,18.519893343662883 +transit,99.25703109868668,18.51810552348242 +transit,99.26607469965876,18.51631727046042 +transit,99.27511811268498,18.514528584650456 +transit,99.28416133774331,18.512739466106098 +transit,99.29320437481171,18.51094991488093 +transit,99.30224722386818,18.50915993102853 +transit,99.31128988489068,18.507369514602523 +transit,99.32033235785728,18.505578665656515 +transit,99.329374642746,18.503787384244102 +transit,99.33841673953492,18.501995670418943 +transit,99.34745864820212,18.50020352423465 +transit,99.3565003687257,18.498410945744894 +transit,99.36554190108382,18.49661793500331 +transit,99.3745832452546,18.494824492063575 +transit,99.38362440121622,18.49303061697936 +transit,99.39266536894688,18.49123630980435 +transit,99.4017061484248,18.48944157059223 +transit,99.41074673962817,18.48764639939671 +transit,99.4197871425353,18.485850796271492 +transit,99.42882735712443,18.484054761270304 +transit,99.43786738337388,18.482258294446865 +transit,99.44690722126195,18.480461395854924 +transit,99.455946870767,18.47866406554822 +transit,99.46498633186737,18.47686630358051 +transit,99.47402560454144,18.47506811000555 +transit,99.48306468876761,18.473269484877136 +transit,99.49210358452433,18.471470428249035 +transit,99.50114229179,18.469670940175035 +transit,99.51018081054313,18.467871020708944 +transit,99.51921914076216,18.46607066990457 +transit,99.52825728242564,18.464269887815735 +transit,99.53729523551208,18.462468674496268 +WP29,99.546333,18.46066703 +transit,99.5545038256019,18.456384153671483 +transit,99.56267424596551,18.45210092339058 +transit,99.57084426117846,18.44781733926222 +transit,99.5790138713284,18.44353340139133 +transit,99.58718307650297,18.439249109882837 +transit,99.59535187678985,18.434964464841645 +transit,99.60352027227671,18.43067946637266 +transit,99.6116882630513,18.426394114580752 +transit,99.61985584920133,18.42210840957083 +transit,99.62802303081453,18.417822351447754 +transit,99.6361898079787,18.413535940316383 +transit,99.64435618078161,18.40924917628158 +transit,99.65252214931105,18.404962059448184 +transit,99.66068771365487,18.40067458992104 +transit,99.66885287390089,18.396386767804955 +transit,99.67701763013697,18.392098593204768 +transit,99.68518198245101,18.38781006622528 +transit,99.69334593093089,18.383521186971286 +transit,99.70150947566452,18.37923195554758 +transit,99.70967261673987,18.374942372058943 +transit,99.71783535424484,18.370652436610147 +transit,99.72599768826744,18.36636214930595 +transit,99.73415961889565,18.36207151025111 +transit,99.74232114621746,18.35778051955037 +transit,99.75048227032093,18.35348917730846 +transit,99.7586429912941,18.349197483630114 +transit,99.76680330922501,18.344905438620046 +transit,99.77496322420176,18.340613042382955 +transit,99.78312273631245,18.33632029502355 +transit,99.7912818456452,18.332027196646514 +transit,99.79944055228815,18.327733747356532 +transit,99.80759885632943,18.323439947258276 +transit,99.81575675785727,18.319145796456397 +transit,99.82391425695982,18.314851295055554 +transit,99.8320713537253,18.31055644316039 +transit,99.84022804824195,18.306261240875536 +transit,99.84838434059802,18.301965688305614 +transit,99.85654023088175,18.297669785555254 +transit,99.86469571918146,18.293373532729046 +transit,99.87285080558543,18.289076929931596 +transit,99.88100549018199,18.284779977267487 +transit,99.88915977305948,18.280482674841306 +transit,99.89731365430626,18.276185022757613 +transit,99.9054671340107,18.27188702112097 +transit,99.91362021226121,18.26758867003593 +transit,99.9217728891462,18.26328996960704 +transit,99.92992516475408,18.258990919938825 +transit,99.93807703917332,18.254691521135815 +transit,99.9462285124924,18.250391773302514 +transit,99.95437958479977,18.246091676543447 +transit,99.96253025618395,18.241791230963084 +transit,99.97068052673347,18.237490436665933 +transit,99.97883039653689,18.233189293756464 +transit,99.98697986568273,18.228887802339145 +transit,99.99512893425958,18.224585962518432 +transit,100.00327760235605,18.220283774398776 +transit,100.01142587006075,18.215981238084627 +transit,100.01957373746228,18.2116783536804 +transit,100.02772120464932,18.207375121290543 +transit,100.03586827171054,18.203071541019444 +transit,100.04401493873462,18.19876761297152 +transit,100.05216120581025,18.194463337251165 +transit,100.06030707302617,18.19015871396276 +transit,100.06845254047111,18.185853743210686 +transit,100.07659760823384,18.181548425099304 +transit,100.0847422764031,18.177242759732987 +transit,100.09288654506774,18.172936747216067 +transit,100.10103041431653,18.16863038765289 +transit,100.1091738842383,18.16432368114779 +transit,100.11731695492192,18.16001662780508 +transit,100.12545962645625,18.155709227729087 +transit,100.13360189893015,18.1514014810241 +transit,100.14174377243256,18.147093387794417 +transit,100.14988524705237,18.142784948144328 +transit,100.15802632287853,18.138476162178097 +WP30,100.166167,18.13416703 +transit,100.16699050577331,18.12526380141945 +transit,100.16781392828184,18.1163605610984 +transit,100.16863726757772,18.107457309042537 +transit,100.16946052371303,18.098554045257508 +transit,100.17028369673984,18.089650769749 +transit,100.17110678671024,18.08074748252267 +transit,100.17192979367624,18.071844183584194 +transit,100.17275271768987,18.062940872939237 +transit,100.17357555880314,18.05403755059347 +transit,100.17439831706803,18.04513421655257 +transit,100.1752209925365,18.036230870822198 +transit,100.17604358526052,18.02732751340802 +transit,100.17686609529198,18.018424144315723 +transit,100.17768852268283,18.009520763550956 +transit,100.17851086748496,18.00061737111941 +transit,100.17933312975022,17.991713967026733 +transit,100.18015530953049,17.982810551278607 +transit,100.18097740687762,17.973907123880704 +transit,100.1817994218434,17.965003684838692 +transit,100.18262135447964,17.95610023415824 +transit,100.18344320483813,17.94719677184501 +transit,100.18426497297064,17.938293297904693 +transit,100.18508665892891,17.929389812342936 +transit,100.18590826276468,17.920486315165423 +transit,100.18672978452966,17.911582806377822 +transit,100.18755122427554,17.9026792859858 +transit,100.18837258205399,17.893775753995037 +transit,100.18919385791668,17.88487221041119 +transit,100.19001505191525,17.87596865523994 +transit,100.19083616410131,17.867065088486957 +transit,100.19165719452647,17.858161510157903 +transit,100.19247814324231,17.849257920258456 +transit,100.19329901030042,17.840354318794283 +transit,100.19411979575233,17.831450705771058 +transit,100.19494049964956,17.822547081194454 +transit,100.19576112204365,17.81364344507013 +transit,100.19658166298608,17.804739797403776 +transit,100.19740212252833,17.79583613820105 +transit,100.19822250072187,17.786932467467622 +transit,100.19904279761813,17.778028785209173 +transit,100.19986301326854,17.769125091431366 +transit,100.20068314772452,17.76022138613987 +transit,100.20150320103743,17.75131766934037 +transit,100.20232317325865,17.74241394103852 +transit,100.20314306443954,17.73351020124001 +transit,100.20396287463144,17.72460644995049 +transit,100.20478260388566,17.715702687175646 +transit,100.2056022522535,17.706798912921148 +transit,100.20642181978623,17.69789512719267 +transit,100.20724130653514,17.688991329995876 +transit,100.20806071255146,17.68008752133644 +transit,100.20888003788642,17.671183701220038 +transit,100.20969928259122,17.662279869652338 +transit,100.21051844671707,17.653376026639016 +transit,100.21133753031515,17.64447217218574 +transit,100.2121565334366,17.635568306298183 +transit,100.21297545613257,17.626664428982014 +transit,100.21379429845418,17.617760540242912 +transit,100.21461306045254,17.608856640086547 +transit,100.21543174217872,17.59995272851859 +transit,100.21625034368381,17.59104880554471 +transit,100.21706886501885,17.582144871170584 +transit,100.21788730623487,17.57324092540189 +transit,100.2187056673829,17.56433696824429 +transit,100.21952394851395,17.555432999703466 +transit,100.22034214967898,17.546529019785076 +transit,100.22116027092896,17.537625028494805 +transit,100.22197831231483,17.528721025838326 +transit,100.22279627388754,17.519817011821306 +transit,100.22361415569797,17.510912986449423 +transit,100.22443195779705,17.502008949728346 +transit,100.22524968023563,17.49310490166375 +transit,100.22606732306458,17.484200842261306 +transit,100.22688488633474,17.475296771526693 +transit,100.22770237009695,17.46639268946558 +transit,100.22851977440199,17.45748859608363 +transit,100.22933709930066,17.448584491386537 +transit,100.23015434484375,17.439680375379965 +transit,100.23097151108199,17.430776248069588 +transit,100.23178859806613,17.421872109461066 +transit,100.23260560584689,17.4129679595601 +transit,100.23342253447497,17.40406379837234 +transit,100.23423938400106,17.395159625903467 +transit,100.23505615447581,17.386255442159158 +transit,100.23587284594991,17.37735124714509 +transit,100.23668945847396,17.368447040866933 +transit,100.23750599209859,17.359542823330347 +transit,100.23832244687439,17.35063859454103 +transit,100.23913882285196,17.341734354504638 +transit,100.23995512008185,17.332830103226854 +transit,100.2407713386146,17.323925840713354 +transit,100.24158747850078,17.315021566969808 +transit,100.24240353979084,17.30611728200189 +transit,100.24321952253534,17.29721298581528 +transit,100.24403542678472,17.28830867841564 +transit,100.24485125258946,17.27940435980865 +WP31,100.245667,17.27050003 +transit,100.24647026068472,17.261725471711873 +transit,100.24727344539025,17.25295090256133 +transit,100.24807655416477,17.244176322553795 +transit,100.24887958705645,17.2354017316947 +transit,100.24968254411345,17.22662712998947 +transit,100.25048542538393,17.217852517443536 +transit,100.25128823091599,17.209077894062318 +transit,100.25209096075777,17.200303259851253 +transit,100.25289361495734,17.191528614815773 +transit,100.25369619356279,17.182753958961296 +transit,100.25449869662219,17.173979292293247 +transit,100.25530112418357,17.165204614817068 +transit,100.25610347629498,17.156429926538177 +transit,100.25690575300443,17.14765522746201 +transit,100.2577079543599,17.13888051759399 +transit,100.2585100804094,17.13010579693954 +transit,100.25931213120087,17.12133106550411 +transit,100.2601141067823,17.1125563232931 +transit,100.26091600720159,17.10378157031196 +transit,100.26171783250666,17.0950068065661 +transit,100.26251958274544,17.086232032060977 +transit,100.26332125796579,17.07745724680199 +transit,100.2641228582156,17.06868245079459 +transit,100.26492438354272,17.059907644044195 +transit,100.265725833995,17.05113282655624 +transit,100.26652720962025,17.042357998336144 +transit,100.26732851046629,17.03358315938934 +transit,100.26812973658089,17.024808309721273 +transit,100.26893088801187,17.016033449337357 +transit,100.26973196480694,17.00725857824302 +transit,100.27053296701388,16.9984836964437 +transit,100.27133389468041,16.989708803944822 +transit,100.27213474785425,16.98093390075181 +transit,100.2729355265831,16.972158986870113 +transit,100.27373623091462,16.963384062305142 +transit,100.27453686089652,16.95460912706233 +transit,100.2753374165764,16.94583418114712 +transit,100.27613789800193,16.937059224564926 +transit,100.27693830522072,16.928284257321177 +transit,100.27773863828037,16.91950927942132 +transit,100.27853889722849,16.910734290870778 +transit,100.27933908211261,16.90195929167497 +transit,100.28013919298034,16.893184281839343 +transit,100.28093922987918,16.884409261369314 +transit,100.28173919285669,16.87563423027033 +transit,100.28253908196035,16.866859188547803 +transit,100.28333889723767,16.85808413620717 +transit,100.28413863873612,16.84930907325387 +transit,100.2849383065032,16.840533999693328 +transit,100.28573790058631,16.831758915530973 +transit,100.2865374210329,16.82298382077224 +transit,100.28733686789042,16.814208715422556 +transit,100.28813624120622,16.805433599487355 +transit,100.28893554102771,16.796658472972066 +transit,100.28973476740228,16.787883335882125 +transit,100.29053392037726,16.779108188222956 +Phitsanulok,100.291333,16.77033303 +transit,100.29136817727955,16.761526221146873 +transit,100.29140335132223,16.752719404776496 +transit,100.29143852213012,16.743912580892363 +transit,100.29147368970533,16.735105749497954 +transit,100.29150885404994,16.726298910596743 +transit,100.29154401516607,16.71749206419222 +transit,100.2915791730558,16.70868521028787 +transit,100.29161432772122,16.699878348887182 +transit,100.29164947916443,16.691071479993624 +transit,100.29168462738754,16.682264603610708 +transit,100.29171977239261,16.673457719741904 +transit,100.29175491418177,16.6646508283907 +transit,100.29179005275708,16.655843929560593 +transit,100.29182518812065,16.64703702325506 +transit,100.29186032027457,16.638230109477604 +transit,100.29189544922092,16.6294231882317 +transit,100.29193057496178,16.620616259520865 +transit,100.29196569749925,16.61180932334857 +transit,100.29200081683543,16.603002379718312 +transit,100.29203593297238,16.594195428633583 +transit,100.29207104591221,16.58538847009788 +transit,100.292106155657,16.5765815041147 +transit,100.29214126220882,16.567774530687533 +transit,100.29217636556977,16.55896754981988 +transit,100.29221146574193,16.550160561515234 +transit,100.29224656272737,16.541353565777104 +transit,100.29228165652819,16.532546562608974 +transit,100.29231674714646,16.52373955201435 +transit,100.29235183458427,16.51493253399673 +transit,100.29238691884368,16.506125508559624 +transit,100.29242199992679,16.49731847570652 +transit,100.29245707783568,16.488511435440927 +transit,100.29249215257241,16.479704387766347 +transit,100.29252722413908,16.470897332686278 +transit,100.29256229253774,16.462090270204232 +transit,100.29259735777049,16.45328320032371 +transit,100.29263241983939,16.444476123048226 +transit,100.29266747874652,16.435669038381274 +transit,100.29270253449396,16.426861946326365 +transit,100.29273758708376,16.418054846887017 +transit,100.29277263651802,16.40924774006672 +transit,100.29280768279881,16.400440625869 +transit,100.29284272592818,16.391633504297353 +transit,100.29287776590822,16.3828263753553 +transit,100.292912802741,16.374019239046344 +transit,100.29294783642857,16.365212095374012 +transit,100.29298286697302,16.3564049443418 +transit,100.2930178943764,16.34759778595323 +transit,100.2930529186408,16.338790620211814 +transit,100.29308793976826,16.329983447121073 +transit,100.29312295776086,16.32117626668451 +transit,100.29315797262066,16.312369078905654 +transit,100.29319298434974,16.30356188378801 +transit,100.29322799295015,16.294754681335107 +transit,100.29326299842396,16.285947471550458 +transit,100.29329800077322,16.277140254437583 +WP33,100.293333,16.26833303 +transit,100.29337072366047,16.25939350035479 +transit,100.29340844390907,16.250453963169708 +transit,100.2934461607481,16.241514418448443 +transit,100.29348387417984,16.232574866194685 +transit,100.29352158420659,16.223635306412106 +transit,100.29355929083063,16.2146957391044 +transit,100.29359699405423,16.205756164275254 +transit,100.2936346938797,16.196816581928353 +transit,100.2936723903093,16.187876992067388 +transit,100.29371008334532,16.178937394696046 +transit,100.29374777299003,16.169997789818012 +transit,100.29378545924574,16.161058177436978 +transit,100.29382314211472,16.152118557556648 +transit,100.29386082159924,16.143178930180696 +transit,100.29389849770158,16.134239295312824 +transit,100.29393617042402,16.125299652956723 +transit,100.29397383976884,16.116360003116085 +transit,100.29401150573831,16.107420345794612 +transit,100.29404916833472,16.09848068099599 +transit,100.29408682756033,16.089541008723923 +transit,100.29412448341743,16.0806013289821 +transit,100.29416213590828,16.071661641774227 +transit,100.29419978503516,16.062721947103995 +transit,100.29423743080034,16.05378224497511 +transit,100.2942750732061,16.044842535391272 +transit,100.2943127122547,16.035902818356174 +transit,100.2943503479484,16.026963093873523 +transit,100.29438798028949,16.01802336194703 +transit,100.29442560928022,16.009083622580377 +transit,100.29446323492289,16.000143875777283 +transit,100.29450085721973,15.991204121541449 +transit,100.29453847617303,15.98226435987658 +transit,100.29457609178505,15.973324590786381 +transit,100.29461370405804,15.964384814274554 +transit,100.29465131299429,15.955445030344817 +transit,100.29468891859605,15.94650523900087 +transit,100.29472652086558,15.937565440246429 +transit,100.29476411980515,15.928625634085197 +transit,100.29480171541702,15.91968582052088 +transit,100.29483930770344,15.910745999557196 +transit,100.2948768966667,15.90180617119786 +transit,100.29491448230901,15.892866335446582 +transit,100.29495206463267,15.88392649230707 +transit,100.29498964363992,15.874986641783046 +transit,100.29502721933302,15.866046783878213 +transit,100.29506479171424,15.857106918596296 +transit,100.2951023607858,15.848167045941008 +transit,100.29513992655001,15.839227165916071 +transit,100.29517748900908,15.83028727852519 +transit,100.29521504816526,15.821347383772098 +transit,100.29525260402083,15.812407481660507 +transit,100.29529015657803,15.803467572194137 +transit,100.29532770583913,15.79452765537671 +transit,100.29536525180634,15.785587731211944 +transit,100.29540279448194,15.77664779970356 +transit,100.29544033386819,15.767707860855294 +transit,100.2954778699673,15.758767914670852 +transit,100.29551540278153,15.749827961153965 +transit,100.29555293231316,15.740888000308354 +transit,100.2955904585644,15.731948032137758 +transit,100.2956279815375,15.723008056645888 +transit,100.29566550123474,15.714068073836485 +transit,100.29570301765833,15.705128083713264 +transit,100.2957405308105,15.696188086279957 +transit,100.29577804069353,15.687248081540293 +transit,100.29581554730964,15.67830806949801 +transit,100.29585305066108,15.669368050156828 +transit,100.2958905507501,15.66042802352049 +transit,100.29592804757891,15.651487989592715 +transit,100.29596554114978,15.642547948377242 +transit,100.29600303146493,15.633607899877804 +transit,100.29604051852661,15.624667844098143 +transit,100.29607800233705,15.61572778104198 +transit,100.29611548289849,15.606787710713057 +transit,100.29615296021316,15.597847633115112 +transit,100.2961904342833,15.588907548251884 +transit,100.29622790511115,15.57996745612711 +transit,100.29626537269893,15.571027356744525 +transit,100.29630283704888,15.562087250107867 +transit,100.29634029816324,15.553147136220877 +transit,100.29637775604424,15.544207015087304 +transit,100.2964152106941,15.535266886710884 +transit,100.29645266211504,15.52632675109536 +transit,100.29649011030932,15.51738660824447 +transit,100.29652755527916,15.508446458161966 +transit,100.29656499702678,15.499506300851582 +transit,100.2966024355544,15.490566136317074 +transit,100.29663987086427,15.481625964562182 +transit,100.2966773029586,15.472685785590649 +transit,100.29671473183961,15.463745599406233 +transit,100.29675215750954,15.454805406012671 +transit,100.29678957997062,15.445865205413721 +transit,100.29682699922505,15.436924997613124 +transit,100.29686441527505,15.427984782614642 +transit,100.29690182812287,15.419044560422003 +transit,100.29693923777072,15.410104331038985 +transit,100.29697664422082,15.401164094469324 +transit,100.29701404747537,15.392223850716775 +transit,100.29705144753662,15.3832835997851 +transit,100.29708884440677,15.374343341678044 +transit,100.29712623808804,15.365403076399367 +transit,100.29716362858267,15.356462803952828 +transit,100.29720101589284,15.347522524342171 +transit,100.29723840002077,15.338582237571163 +transit,100.2972757809687,15.329641943643564 +transit,100.29731315873885,15.32070164256313 +transit,100.29735053333339,15.311761334333612 +transit,100.29738790475457,15.302821018958783 +transit,100.29742527300459,15.293880696442397 +transit,100.29746263808566,15.284940366788215 +WP34,100.2975,15.27600003 +transit,100.30069924279596,15.26770949073969 +transit,100.30389823445499,15.259418899695044 +transit,100.30709697513836,15.251128256898525 +transit,100.31029546500737,15.24283756238261 +transit,100.31349370422318,15.234546816179758 +transit,100.31669169294699,15.226256018322408 +transit,100.31988943133992,15.217965168843028 +transit,100.32308691956304,15.209674267774032 +transit,100.32628415777738,15.20138331514786 +transit,100.32948114614398,15.193092310996935 +transit,100.33267788482374,15.184801255353674 +transit,100.3358743739776,15.176510148250474 +transit,100.33907061376644,15.168218989719747 +transit,100.34226660435107,15.15992777979387 +transit,100.34546234589229,15.15163651850525 +transit,100.3486578385508,15.143345205886236 +transit,100.35185308248737,15.135053841969224 +transit,100.35504807786259,15.126762426786561 +transit,100.35824282483712,15.118470960370601 +transit,100.36143732357152,15.110179442753697 +transit,100.36463157422632,15.101887873968192 +transit,100.367825576962,15.093596254046412 +transit,100.37101933193902,15.085304583020678 +transit,100.37421283931778,15.077012860923318 +transit,100.37740609925865,15.06872108778664 +transit,100.38059911192194,15.060429263642948 +transit,100.38379187746793,15.052137388524525 +transit,100.38698439605686,15.043845462463674 +transit,100.39017666784893,15.035553485492663 +transit,100.39336869300428,15.027261457643776 +transit,100.39656047168305,15.018969378949272 +transit,100.39975200404527,15.01067724944141 +transit,100.40294329025099,15.00238506915245 +transit,100.40613433046019,14.99409283811462 +transit,100.40932512483282,14.985800556360166 +transit,100.41251567352877,14.977508223921316 +transit,100.41570597670791,14.969215840830294 +transit,100.41889603453006,14.96092340711931 +transit,100.42208584715502,14.95263092282057 +transit,100.42527541474247,14.944338387966276 +transit,100.42846473745215,14.936045802588618 +transit,100.4316538154437,14.927753166719786 +transit,100.43484264887672,14.91946048039195 +transit,100.43803123791079,14.911167743637288 +transit,100.44121958270544,14.90287495648796 +transit,100.44440768342017,14.894582118976123 +transit,100.4475955402144,14.886289231133915 +transit,100.45078315324754,14.87799629299349 +transit,100.45397052267896,14.869703304586976 +transit,100.45715764866797,14.861410265946501 +transit,100.46034453137388,14.853117177104183 +transit,100.46353117095589,14.844824038092138 +transit,100.46671756757323,14.836530848942466 +transit,100.46990372138504,14.828237609687264 +transit,100.47308963255043,14.819944320358626 +transit,100.47627530122848,14.811650980988631 +transit,100.47946072757824,14.803357591609359 +transit,100.4826459117587,14.795064152252879 +transit,100.48583085392879,14.78677066295124 +transit,100.48901555424742,14.778477123736515 +transit,100.49220001287348,14.770183534640735 +transit,100.4953842299658,14.761889895695951 +transit,100.49856820568314,14.753596206934187 +transit,100.50175194018428,14.74530246838747 +transit,100.5049354336279,14.73700868008782 +transit,100.50811868617268,14.72871484206725 +transit,100.51130169797725,14.720420954357756 +transit,100.51448446920017,14.712127016991342 +WP35,100.517667,14.70383303 +transit,100.52002398109886,14.69557974768047 +transit,100.52238078523528,14.687326435559017 +transit,100.52473741252587,14.67907309365443 +transit,100.52709386308716,14.670819721985474 +transit,100.52945013703572,14.662566320570951 +transit,100.53180623448806,14.65431288942962 +transit,100.53416215556064,14.646059428580251 +transit,100.53651790036989,14.637805938041621 +transit,100.53887346903225,14.629552417832473 +transit,100.5412288616641,14.621298867971596 +transit,100.54358407838177,14.613045288477721 +transit,100.54593911930161,14.604791679369601 +transit,100.5482939845399,14.596538040666001 +transit,100.5506486742129,14.58828437238565 +transit,100.55300318843683,14.580030674547297 +transit,100.55535752732793,14.571776947169676 +transit,100.55771169100232,14.563523190271521 +transit,100.56006567957617,14.55526940387156 +transit,100.56241949316559,14.547015587988525 +transit,100.56477313188665,14.538761742641132 +transit,100.5671265958554,14.530507867848103 +transit,100.56947988518785,14.52225396362816 +WP36,100.571833,14.51400003 +transit,100.57420813650732,14.505680080989574 +transit,100.57658309567651,14.497360102068562 +transit,100.57895787762642,14.489040093256166 +transit,100.58133248247591,14.480720054571576 +transit,100.58370691034378,14.47239998603399 +transit,100.58608116134877,14.464079887662594 +transit,100.58845523560967,14.45575975947656 +transit,100.59082913324517,14.447439601495084 +transit,100.59320285437393,14.439119413737332 +transit,100.59557639911462,14.430799196222486 +transit,100.59794976758587,14.422478948969708 +transit,100.60032295990625,14.414158671998159 +transit,100.60269597619431,14.405838365327005 +transit,100.60506881656859,14.397518028975405 +transit,100.60744148114759,14.389197662962516 +transit,100.60981397004974,14.380877267307483 +transit,100.61218628339351,14.372556842029446 +transit,100.61455842129728,14.364236387147564 +transit,100.61693038387942,14.355915902680964 +transit,100.61930217125828,14.34759538864878 +transit,100.62167378355217,14.339274845070147 +transit,100.62404522087937,14.3309542719642 +transit,100.6264164833581,14.322633669350049 +transit,100.62878757110661,14.314313037246832 +transit,100.63115848424307,14.30599237567365 +transit,100.63352922288564,14.297671684649622 +transit,100.63589978715244,14.289350964193856 +transit,100.63827017716157,14.281030214325462 +transit,100.64064039303109,14.272709435063536 +transit,100.64301043487905,14.264388626427179 +transit,100.64538030282341,14.25606778843549 +transit,100.64774999698218,14.24774692110755 +transit,100.6501195174733,14.239426024462457 +transit,100.65248886441466,14.231105098519285 +transit,100.65485803792416,14.222784143297124 +transit,100.65722703811964,14.21446315881504 +transit,100.65959586511892,14.206142145092118 +transit,100.66196451903978,14.197821102147415 +WP37,100.664333,14.18950003 +transit,100.66664363112469,14.181428781010574 +transit,100.66895409878745,14.173357504322949 +transit,100.67126440309633,14.165286199954679 +transit,100.6735745441593,14.15721486792332 +transit,100.6758845220843,14.149143508246421 +transit,100.67819433697926,14.141072120941542 +transit,100.68050398895208,14.133000706026225 +transit,100.68281347811065,14.124929263518016 +transit,100.6851228045628,14.11685779343445 +transit,100.68743196841635,14.108786295793069 +transit,100.68974096977908,14.100714770611404 +transit,100.6920498087588,14.092643217906986 +transit,100.6943584854632,14.084571637697344 +WP38,100.696667,14.07650003 +transit,100.69257331716587,14.069046258352722 +transit,100.68847989956993,14.061592412710672 +transit,100.68438674705119,14.054138493118721 +transit,100.68029385944872,14.046684499621724 +transit,100.67620123660159,14.03923043226454 +transit,100.67210887834894,14.031776291092006 +transit,100.66801678452988,14.02432207614896 +transit,100.66392495498363,14.016867787480221 +transit,100.65983338954939,14.009413425130608 +transit,100.65574208806642,14.001958989144919 +transit,100.65165105037399,13.994504479567963 +transit,100.64756027631141,13.98704989644452 +transit,100.64346976571804,13.97959523981937 +transit,100.63937951843324,13.972140509737278 +transit,100.63528953429643,13.964685706243007 +transit,100.63119981314708,13.95723082938131 +transit,100.62711035482462,13.949775879196922 +transit,100.62302115916859,13.942320855734582 +transit,100.61893222601852,13.93486575903901 +transit,100.614843555214,13.92741058915492 +transit,100.6107551465946,13.919955346127017 +Don_Mueang,100.606667,13.91250003 +transit,100.599341342713,13.908266503833755 +transit,100.59201595181146,13.90403275628471 +transit,100.58469082721518,13.899798787430663 +transit,100.57736596884396,13.895564597349402 +transit,100.57004137661762,13.891330186118715 +transit,100.56271705045594,13.887095553816376 +transit,100.55539299027873,13.882860700520158 +transit,100.54806919600576,13.878625626307828 +transit,100.54074566755678,13.87439033125714 +transit,100.53342240485159,13.870154815445852 +transit,100.52609940780994,13.865919078951713 +transit,100.51877667635156,13.861683121852458 +transit,100.51145421039624,13.857446944225824 +transit,100.5041320098637,13.853210546149542 +transit,100.49681007467366,13.848973927701334 +transit,100.48948840474586,13.844737088958915 +WP40,100.482167,13.84050003 +transit,100.47628681767374,13.835061382455812 +transit,100.47040690852803,13.829622591498682 +transit,100.46452727244568,13.82418365719346 +transit,100.4586479093094,13.818744579604992 +transit,100.45276881900202,13.81330535879812 +transit,100.44689000140625,13.807865994837666 +transit,100.44101145640494,13.802426487788445 +transit,100.43513318388084,13.796986837715274 +transit,100.42925518371678,13.791547044682954 +transit,100.42337745579556,13.786107108756267 +WP41,100.4175,13.78066703 +transit,100.41831485710395,13.77205175376932 +transit,100.41912965452572,13.76343646882459 +transit,100.41994439230844,13.754821175171218 +transit,100.42075907049527,13.746205872814615 +transit,100.42157368912932,13.737590561760186 +transit,100.4223882482537,13.728975242013346 +transit,100.4232027479115,13.720359913579498 +transit,100.42401718814584,13.711744576464056 +transit,100.42483156899976,13.703129230672427 +transit,100.42564589051635,13.694513876210022 +transit,100.42646015273864,13.685898513082249 +transit,100.4272743557097,13.677283141294513 +transit,100.42808849947255,13.668667760852232 +transit,100.4289025840702,13.660052371760813 +transit,100.42971660954566,13.65143697402566 +transit,100.43053057594193,13.642821567652192 +transit,100.43134448330198,13.634206152645808 +transit,100.43215833166882,13.625590729011927 +transit,100.43297212108537,13.61697529675595 +transit,100.4337858515946,13.608359855883293 +transit,100.43459952323946,13.599744406399367 +transit,100.43541313606285,13.591128948309574 +transit,100.4362266901077,13.582513481619333 +transit,100.43704018541692,13.573898006334051 +transit,100.43785362203339,13.565282522459135 +WP42,100.438667,13.55666703 +transit,100.44645578706078,13.55271367800042 +transit,100.45424431666602,13.5487600820121 +transit,100.46203258888636,13.544806242116662 +transit,100.46982060379246,13.540852158395728 +transit,100.47760836145501,13.536897830930911 +transit,100.48539586194471,13.532943259803822 +transit,100.49318310533226,13.528988445096063 +transit,100.50097009168837,13.525033386889243 +transit,100.50875682108376,13.521078085264945 +transit,100.51654329358917,13.517122540304765 +transit,100.52432950927535,13.513166752090296 +transit,100.53211546821304,13.50921072070311 +transit,100.539901170473,13.505254446224786 +transit,100.54768661612604,13.5012979287369 +transit,100.55547180524292,13.497341168321014 +transit,100.56325673789445,13.4933841650587 +transit,100.57104141415144,13.489426919031505 +transit,100.5788258340847,13.485469430320986 +transit,100.58660999776507,13.481511699008696 +transit,100.59439390526337,13.477553725176172 +transit,100.60217755665047,13.473595508904957 +transit,100.60996095199724,13.469637050276585 +transit,100.61774409137453,13.465678349372583 +transit,100.62552697485323,13.461719406274481 +transit,100.63330960250424,13.457760221063795 +transit,100.64109197439845,13.453800793822044 +transit,100.64887409060678,13.449841124630735 +transit,100.65665595120016,13.44588121357138 +transit,100.66443755624954,13.441921060725473 +transit,100.67221890582583,13.437960666174517 +WP43,100.68,13.43400003 +transit,100.68409653236691,13.426354643687546 +transit,100.68819280541176,13.418709186178692 +transit,100.69228881930184,13.411063657519275 +transit,100.69638457420444,13.403418057755124 +transit,100.70048007028679,13.395772386932059 +transit,100.70457530771608,13.388126645095898 +transit,100.7086702866595,13.380480832292449 +transit,100.71276500728416,13.372834948567501 +transit,100.71685946975718,13.36518899396684 +transit,100.72095367424564,13.35754296853624 +transit,100.72504762091653,13.34989687232148 +transit,100.72914130993689,13.342250705368308 +transit,100.73323474147368,13.334604467722475 +transit,100.73732791569383,13.326958159429722 +transit,100.74142083276422,13.31931178053578 +transit,100.74551349285174,13.311665331086372 +transit,100.74960589612323,13.304018811127207 +transit,100.75369804274547,13.29637222070399 +transit,100.75778993288523,13.288725559862412 +transit,100.76188156670925,13.281078828648166 +transit,100.76597294438422,13.273432027106924 +transit,100.77006406607681,13.265785155284348 +transit,100.77415493195365,13.258138213226102 +transit,100.77824554218135,13.25049120097783 +transit,100.78233589692645,13.242844118585177 +transit,100.78642599635553,13.235196966093769 +transit,100.79051584063504,13.227549743549227 +transit,100.79460542993148,13.219902450997166 +transit,100.79869476441125,13.212255088483184 +transit,100.80278384424079,13.204607656052886 +transit,100.80687266958644,13.196960153751846 +transit,100.81096124061453,13.189312581625643 +transit,100.81504955749138,13.18166493971985 +transit,100.81913762038324,13.174017228080022 +transit,100.82322542945636,13.166369446751698 +transit,100.82731298487693,13.158721595780428 +transit,100.83140028681113,13.151073675211741 +transit,100.83548733542507,13.143425685091158 +transit,100.83957413088488,13.135777625464195 +transit,100.84366067335662,13.128129496376353 +transit,100.84774696300633,13.120481297873123 +WP44,100.851833,13.11283303 +transit,100.85449471198127,13.104854234186503 +transit,100.85715625248721,13.096875405965013 +transit,100.85981762163634,13.08889654535735 +transit,100.86247881954719,13.080917652385333 +transit,100.86513984633824,13.072938727070786 +transit,100.86780070212794,13.064959769435514 +transit,100.87046138703474,13.056980779501329 +transit,100.87312190117704,13.049001757290037 +transit,100.87578224467323,13.041022702823437 +transit,100.87844241764166,13.033043616123326 +transit,100.88110242020066,13.025064497211499 +transit,100.88376225246853,13.017085346109743 +transit,100.88642191456354,13.009106162839842 +transit,100.88908140660395,13.001126947423584 +transit,100.89174072870796,12.993147699882734 +transit,100.89439988099377,12.985168420239072 +transit,100.89705886357957,12.97718910851437 +transit,100.89971767658348,12.969209764730383 +transit,100.90237632012364,12.961230388908888 +transit,100.9050347943181,12.953250981071628 +transit,100.90769309928494,12.945271541240357 +transit,100.9103512351422,12.937292069436838 +transit,100.9130092020079,12.929312565682803 +WP45,100.915667,12.92133303 +transit,100.92314465033589,12.917429712328273 +transit,100.93062206848363,12.913526179498232 +transit,100.93809925451029,12.909622431583552 +transit,100.94557620848295,12.905718468657884 +transit,100.95305293046867,12.901814290794897 +transit,100.96052942053456,12.89790989806824 +transit,100.96800567874767,12.894005290551569 +transit,100.97548170517514,12.890100468318519 +transit,100.98295749988408,12.886195431442736 +transit,100.99043306294158,12.882290179997861 +transit,100.99790839441478,12.878384714057525 +transit,101.00538349437082,12.87447903369535 +transit,101.01285836287684,12.870573138984971 +WP46,101.020333,12.86666703 +transit,101.01963555555335,12.858174652191412 +transit,101.01893815799811,12.849682267042814 +transit,101.0182408072991,12.841189874558976 +transit,101.01754350342117,12.832697474744649 +transit,101.01684624632918,12.824205067604593 +transit,101.01614903598798,12.815712653143565 +transit,101.01545187236246,12.807220231366331 +transit,101.0147547554175,12.798727802277648 +transit,101.01405768511798,12.79023536588228 +transit,101.0133606614288,12.781742922184982 +transit,101.01266368431487,12.773250471190517 +transit,101.01196675374109,12.764758012903643 +transit,101.01126986967242,12.756265547329125 +transit,101.01057303207375,12.747773074471723 +transit,101.00987624091005,12.739280594336194 +transit,101.00917949614626,12.730788106927307 +transit,101.00848279774735,12.722295612249814 +transit,101.00778614567827,12.713803110308486 +transit,101.007089539904,12.705310601108073 +transit,101.00639298038953,12.69681808465335 +transit,101.00569646709987,12.68832556094907 +U_Tapao,101.005,12.67983303 +transit,100.99748524729382,12.68476491304953 +transit,100.98997020525702,12.689696581764105 +transit,100.98245487377469,12.694628036049753 +transit,100.97493925273196,12.69955927581249 +transit,100.96742334201394,12.704490300958334 +transit,100.95990714150577,12.70942111139328 +transit,100.95239065109256,12.714351707023324 +transit,100.94487387065945,12.719282087754447 +transit,100.93735680009158,12.724212253492627 +transit,100.92983943927409,12.729142204143825 +transit,100.92232178809209,12.734071939614005 +transit,100.91480384643079,12.739001459809106 +transit,100.90728561417528,12.74393076463507 +transit,100.89976709121075,12.74885985399783 +transit,100.89224827742235,12.7537887278033 +transit,100.88472917269523,12.758717385957395 +transit,100.87720977691457,12.763645828366014 +transit,100.86969008996553,12.768574054935053 +transit,100.86217011173328,12.773502065570394 +transit,100.854649842103,12.778429860177916 +transit,100.84712928095988,12.783357438663474 +transit,100.83960842818908,12.78828480093294 +transit,100.83208728367582,12.793211946892148 +transit,100.82456584730528,12.798138876446945 +transit,100.81704411896264,12.803065589503156 +transit,100.80952209853311,12.8079920859666 +transit,100.8019997859019,12.812918365743093 +transit,100.7944771809542,12.817844428738434 +transit,100.78695428357524,12.822770274858414 +transit,100.77943109365023,12.827695904008822 +transit,100.77190761106438,12.832621316095427 +transit,100.76438383570292,12.837546511023998 +transit,100.75685976745106,12.842471488700294 +transit,100.74933540619405,12.847396249030055 +transit,100.74181075181711,12.852320791919025 +transit,100.7342858042055,12.857245117272932 +transit,100.72676056324444,12.862169224997492 +transit,100.71923502881916,12.867093114998422 +transit,100.71170920081495,12.872016787181416 +transit,100.70418307911703,12.876940241452175 +transit,100.69665666361068,12.881863477716378 +transit,100.68912995418114,12.886786495879695 +transit,100.6816029507137,12.891709295847798 +transit,100.67407565309361,12.89663187752634 +transit,100.66654806120613,12.90155424082097 +transit,100.65902017493657,12.906476385637317 +transit,100.65149199417019,12.91139831188102 +transit,100.64396351879226,12.91632001945769 +transit,100.63643474868809,12.921241508272947 +transit,100.62890568374299,12.926162778232381 +transit,100.62137632384221,12.931083829241587 +transit,100.61384666887108,12.936004661206152 +transit,100.6063167187149,12.940925274031644 +transit,100.59878647325895,12.945845667623628 +transit,100.59125593238859,12.950765841887659 +transit,100.58372509598912,12.955685796729286 +transit,100.57619396394584,12.960605532054041 +transit,100.56866253614409,12.965525047767454 +transit,100.56113081246917,12.970444343775045 +transit,100.55359879280647,12.975363419982312 +transit,100.54606647704126,12.98028227629477 +transit,100.53853386505892,12.985200912617898 +transit,100.5310009567448,12.990119328857183 +transit,100.52346775198421,12.995037524918098 +transit,100.51593425066253,12.9999555007061 +transit,100.50840045266511,13.004873256126647 +transit,100.50086635787731,13.009790791085182 +transit,100.49333196618448,13.01470810548714 +transit,100.48579727747202,13.019625199237947 +transit,100.47826229162526,13.02454207224302 +transit,100.47072700852961,13.029458724407766 +transit,100.46319142807043,13.034375155637582 +transit,100.4556555501331,13.039291365837858 +transit,100.44811937460304,13.044207354913977 +transit,100.4405829013656,13.049123122771306 +transit,100.43304613030621,13.054038669315206 +transit,100.42550906131025,13.05895399445103 +transit,100.41797169426313,13.063869098084117 +transit,100.41043402905026,13.068783980119807 +transit,100.40289606555706,13.073698640463418 +transit,100.39535780366893,13.078613079020267 +transit,100.3878192432713,13.08352729569566 +transit,100.38028038424959,13.088441290394893 +transit,100.37274122648923,13.093355063023258 +transit,100.36520176987565,13.09826861348602 +transit,100.3576620142943,13.103181941688465 +transit,100.35012195963061,13.108095047535835 +transit,100.34258160577004,13.11300793093339 +transit,100.33504095259802,13.117920591786367 +WP2,100.3275,13.12283303 +transit,100.32754165237236,13.130527555342772 +transit,100.32758330733789,13.1382220760861 +transit,100.32762496489835,13.145916592227486 +transit,100.32766662505544,13.153611103764428 +transit,100.32770828781092,13.161305610694422 +transit,100.32774995316653,13.169000113014974 +transit,100.32779162112399,13.176694610723583 +transit,100.32783329168505,13.184389103817743 +transit,100.32787496485145,13.192083592294967 +transit,100.3279166406249,13.199778076152752 +transit,100.32795831900718,13.207472555388593 +WP3,100.328,13.21516703 +transit,100.32804932534562,13.22372880860958 +transit,100.3280986541334,13.232290581485813 +transit,100.32814798636589,13.24085234862526 +transit,100.32819732204565,13.24941411002448 +transit,100.32824666117523,13.25797586568004 +transit,100.32829600375716,13.26653761558849 +transit,100.328345349794,13.275099359746399 +transit,100.32839469928834,13.28366109815033 +transit,100.32844405224269,13.292222830796844 +transit,100.32849340865961,13.300784557682498 +transit,100.32854276854167,13.309346278803861 +transit,100.32859213189141,13.3179079941575 +transit,100.3286414987114,13.326469703739976 +transit,100.32869086900419,13.335031407547852 +transit,100.32874024277234,13.343593105577696 +transit,100.32878962001841,13.352154797826074 +transit,100.32883900074496,13.360716484289556 +transit,100.32888838495454,13.369278164964706 +transit,100.32893777264971,13.377839839848091 +transit,100.32898716383305,13.386401508936281 +transit,100.3290365585071,13.394963172225848 +transit,100.32908595667442,13.403524829713355 +transit,100.3291353583376,13.412086481395372 +transit,100.32918476349919,13.420648127268477 +transit,100.32923417216173,13.429209767329235 +transit,100.32928358432781,13.437771401574219 +WP4,100.329333,13.44633303 +transit,100.32738963826714,13.454203588841562 +transit,100.3254461496106,13.462074127756567 +transit,100.32350253394532,13.469944646732305 +transit,100.32155879118619,13.477815145756043 +transit,100.31961492124809,13.485685624815059 +transit,100.31767092404587,13.493556083896632 +transit,100.31572679949439,13.501426522988032 +transit,100.31378254750845,13.509296942076535 +transit,100.31183816800285,13.517167341149399 +transit,100.30989366089239,13.525037720193898 +transit,100.3079490260918,13.532908079197295 +transit,100.30600426351585,13.540778418146852 +transit,100.30405937307923,13.54864873702983 +transit,100.30211435469664,13.556519035833485 +transit,100.30016920828278,13.564389314545078 +transit,100.2982239337523,13.572259573151857 +transit,100.29627853101984,13.580129811641081 +WP5,100.294333,13.58800003 +transit,100.29231766177654,13.59613358602131 +transit,100.29030218603909,13.604267120441008 +transit,100.2882865726931,13.612400633244965 +transit,100.28627082164402,13.62053412441904 +transit,100.28425493279732,13.62866759394911 +transit,100.28223890605837,13.636801041821029 +transit,100.28022274133257,13.644934468020663 +transit,100.27820643852526,13.653067872533864 +transit,100.2761899975418,13.661201255346494 +transit,100.27417341828749,13.669334616444402 +transit,100.27215670066762,13.67746795581344 +transit,100.27013984458746,13.685601273439463 +transit,100.26812284995226,13.693734569308306 +transit,100.26610571666723,13.701867843405827 +transit,100.26408844463755,13.710001095717853 +transit,100.26207103376844,13.718134326230237 +transit,100.260053483965,13.72626753492881 +transit,100.25803579513239,13.734400721799405 +transit,100.2560179671757,13.742533886827859 +WP6,100.254,13.75066703 +transit,100.2586740780304,13.758123399579667 +transit,100.26334845205756,13.765579676009509 +transit,100.26802312226344,13.773035859231898 +transit,100.27269808883001,13.780491949189194 +transit,100.27737335193929,13.78794794582375 +transit,100.28204891177329,13.795403849077895 +transit,100.28672476851409,13.80285965889396 +transit,100.29140092234381,13.810315375214255 +transit,100.2960773734446,13.81777099798109 +transit,100.30075412199864,13.825226527136744 +transit,100.30543116818812,13.832681962623504 +transit,100.31010851219531,13.840137304383626 +transit,100.31478615420248,13.847592552359382 +transit,100.31946409439196,13.855047706493 +transit,100.3241423329461,13.862502766726717 +transit,100.32882087004727,13.869957733002755 +transit,100.33349970587791,13.877412605263316 +transit,100.33817884062047,13.884867383450601 +transit,100.34285827445746,13.892322067506793 +transit,100.34753800757137,13.89977665737406 +transit,100.35221804014478,13.907231152994562 +transit,100.35689837236029,13.914685554310452 +transit,100.36157900440053,13.92213986126387 +transit,100.36625993644816,13.929594073796933 +transit,100.37094116868589,13.93704819185176 +transit,100.37562270129644,13.944502215370443 +transit,100.3803045344626,13.951956144295085 +transit,100.38498666836715,13.959409978567747 +transit,100.38966910319296,13.966863718130504 +transit,100.39435183912289,13.974317362925413 +transit,100.39903487633985,13.981770912894506 +transit,100.4037182150268,13.989224367979812 +transit,100.4084018553667,13.996677728123364 +transit,100.41308579754259,14.004130993267152 +transit,100.4177700417375,14.011584163353172 +transit,100.42245458813453,14.01903723832341 +transit,100.42713943691679,14.026490218119836 +transit,100.43182458826746,14.033943102684404 +transit,100.4365100423697,14.04139589195906 +transit,100.44119579940677,14.04884858588574 +transit,100.44588185956191,14.056301184406367 +transit,100.45056822301844,14.063753687462848 +transit,100.45525488995966,14.071206094997075 +transit,100.45994186056897,14.078658406950948 +transit,100.46462913502977,14.086110623266327 +transit,100.46931671352549,14.09356274388508 +transit,100.4740045962396,14.101014768749055 +transit,100.47869278335563,14.10846669780009 +transit,100.48338127505711,14.11591853098001 +transit,100.48807007152764,14.123370268230632 +transit,100.49275917295083,14.13082190949375 +transit,100.4974485795103,14.138273454711156 +transit,100.5021382913898,14.145724903824627 +transit,100.50682830877301,14.15317625677593 +transit,100.5115186318437,14.16062751350682 +transit,100.51620926078567,14.168078673959027 +transit,100.52090019578274,14.175529738074289 +transit,100.52559143701879,14.182980705794318 +transit,100.53028298467773,14.190431577060822 +transit,100.53497483894346,14.197882351815487 +WP7,100.539667,14.20533303 +transit,100.54797860533483,14.204279516957863 +transit,100.55629013377941,14.203225715194685 +transit,100.56460158531932,14.202171624735378 +transit,100.57291295994017,14.201117245604847 +transit,100.58122425762754,14.20006257782802 +transit,100.58953547836708,14.199007621429818 +transit,100.5978466221444,14.197952376435179 +transit,100.60615768894513,14.196896842869032 +transit,100.61446867875489,14.195841020756331 +transit,100.62277959155935,14.19478491012202 +transit,100.63109042734415,14.193728510991058 +transit,100.63940118609494,14.192671823388402 +transit,100.6477118677974,14.19161484733902 +transit,100.65602247243719,14.190557582867896 +WP8,100.664333,14.18950003 +transit,100.66664363112469,14.181428781010574 +transit,100.66895409878745,14.173357504322949 +transit,100.67126440309633,14.165286199954679 +transit,100.6735745441593,14.15721486792332 +transit,100.6758845220843,14.149143508246421 +transit,100.67819433697926,14.141072120941542 +transit,100.68050398895208,14.133000706026225 +transit,100.68281347811065,14.124929263518016 +transit,100.6851228045628,14.11685779343445 +transit,100.68743196841635,14.108786295793069 +transit,100.68974096977908,14.100714770611404 +transit,100.6920498087588,14.092643217906986 +transit,100.6943584854632,14.084571637697344 +WP9,100.696667,14.07650003 +transit,100.69257331716587,14.069046258352722 +transit,100.68847989956993,14.061592412710672 +transit,100.68438674705119,14.054138493118721 +transit,100.68029385944872,14.046684499621724 +transit,100.67620123660159,14.03923043226454 +transit,100.67210887834894,14.031776291092006 +transit,100.66801678452988,14.02432207614896 +transit,100.66392495498363,14.016867787480221 +transit,100.65983338954939,14.009413425130608 +transit,100.65574208806642,14.001958989144919 +transit,100.65165105037399,13.994504479567963 +transit,100.64756027631141,13.98704989644452 +transit,100.64346976571804,13.97959523981937 +transit,100.63937951843324,13.972140509737278 +transit,100.63528953429643,13.964685706243007 +transit,100.63119981314708,13.95723082938131 +transit,100.62711035482462,13.949775879196922 +transit,100.62302115916859,13.942320855734582 +transit,100.61893222601852,13.93486575903901 +transit,100.614843555214,13.92741058915492 +transit,100.6107551465946,13.919955346127017 +Don_Mueang,100.606667,13.91250003 +transit,100.6049446025679,13.90816671035839 +transit,100.60322226924221,13.903833377023446 +WP11,100.6015,13.89950003 +transit,100.59301296559651,13.901765024837376 +transit,100.5845257661695,13.904029724192878 +transit,100.5760384017093,13.906294128010886 +transit,100.56755087220628,13.908558236235775 +transit,100.55906317765078,13.910822048811921 +transit,100.55057531803321,13.913085565683714 +transit,100.54208729334393,13.915348786795532 +transit,100.53359910357337,13.91761171209177 +transit,100.52511074871194,13.919874341516824 +transit,100.51662222875008,13.922136675015082 +transit,100.50813354367824,13.924398712530953 +transit,100.4996446934869,13.926660454008832 +transit,100.49115567816652,13.928921899393133 +transit,100.48266649770757,13.931183048628265 +transit,100.47417715210061,13.933443901658633 +transit,100.4656876413361,13.935704458428669 +transit,100.45719796540463,13.937964718882776 +transit,100.4487081242967,13.940224682965392 +transit,100.4402181180029,13.942484350620933 +transit,100.4317279465138,13.944743721793836 +transit,100.42323760981999,13.947002796428533 +transit,100.41474710791208,13.94926157446946 +transit,100.40625644078068,13.951520055861057 +transit,100.3977656084164,13.953778240547772 +transit,100.38927461080993,13.956036128474047 +transit,100.38078344795191,13.958293719584336 +transit,100.37229211983302,13.960551013823093 +transit,100.36380062644393,13.962808011134772 +transit,100.35530896777537,13.965064711463835 +transit,100.34681714381804,13.967321114754752 +transit,100.33832515456265,13.969577220951981 +WP12,100.329833,13.97183303 +transit,100.32881180554787,13.980590646029246 +transit,100.3277905338607,13.989348251459255 +transit,100.32676918488234,13.998105846283291 +transit,100.32574775855662,14.00686343049461 +transit,100.32472625482737,14.01562100408648 +transit,100.32370467363837,14.024378567052155 +transit,100.32268301493345,14.033136119384896 +transit,100.32166127865634,14.04189366107797 +transit,100.32063946475083,14.050651192124619 +transit,100.31961757316064,14.05940871251812 +transit,100.31859560382952,14.068166222251723 +transit,100.31757355670116,14.076923721318687 +transit,100.31655143171928,14.085681209712273 +transit,100.31552922882751,14.094438687425734 +transit,100.31450694796958,14.103196154452334 +transit,100.31348458908909,14.11195361078533 +transit,100.3124621521297,14.12071105641797 +transit,100.31143963703501,14.129468491343523 +transit,100.31041704374863,14.13822591555524 +transit,100.30939437221413,14.146983329046378 +transit,100.3083716223751,14.155740731810196 +transit,100.3073487941751,14.164498123839945 +transit,100.30632588755765,14.173255505128882 +transit,100.30530290246627,14.182012875670265 +transit,100.30427983884448,14.190770235457352 +transit,100.30325669663576,14.199527584483393 +transit,100.3022334757836,14.208284922741642 +transit,100.30121017623144,14.217042250225358 +transit,100.30018679792275,14.22579956692779 +transit,100.29916334080092,14.234556872842198 +transit,100.2981398048094,14.243314167961831 +transit,100.29711618989155,14.252071452279944 +transit,100.29609249599079,14.260828725789787 +transit,100.29506872305045,14.269585988484623 +transit,100.2940448710139,14.278343240357696 +transit,100.29302093982444,14.287100481402256 +transit,100.29199692942542,14.295857711611566 +transit,100.29097283976014,14.304614930978866 +transit,100.28994867077186,14.313372139497416 +transit,100.28892442240387,14.322129337160467 +transit,100.28790009459941,14.330886523961267 +transit,100.28687568730172,14.339643699893067 +transit,100.285851200454,14.348400864949117 +transit,100.2848266339995,14.357158019122675 +transit,100.28380198788138,14.36591516240698 +transit,100.2827772620428,14.374672294795284 +transit,100.28175245642693,14.383429416280846 +transit,100.28072757097691,14.392186526856905 +transit,100.27970260563586,14.40094362651672 +transit,100.2786775603469,14.409700715253525 +transit,100.2776524350531,14.418457793060584 +transit,100.27662722969755,14.427214859931134 +transit,100.27560194422331,14.435971915858435 +transit,100.27457657857342,14.444728960835716 +transit,100.2735511326909,14.453485994856248 +transit,100.27252560651876,14.462243017913258 +WP13,100.2715,14.47100003 +transit,100.27028576553123,14.47940988010593 +transit,100.26907143958948,14.487819717938384 +transit,100.26785702211254,14.496229543489912 +transit,100.26664251303806,14.504639356753085 +transit,100.26542791230379,14.513049157720461 +transit,100.26421321984739,14.5214589463846 +transit,100.2629984356065,14.529868722738058 +transit,100.26178355951882,14.5382784867734 +transit,100.26056859152192,14.546688238483181 +transit,100.25935353155344,14.555097977859953 +transit,100.25813837955097,14.563507704896278 +transit,100.25692313545208,14.571917419584713 +transit,100.25570779919435,14.580327121917808 +transit,100.25449237071531,14.588736811888127 +transit,100.25327684995248,14.597146489488223 +transit,100.25206123684337,14.605556154710639 +transit,100.2508455313255,14.61396580754794 +transit,100.24962973333629,14.62237544799267 +transit,100.24841384281325,14.63078507603739 +transit,100.24719785969378,14.639194691674637 +transit,100.24598178391534,14.647604294896974 +transit,100.2447656154153,14.656013885696952 +transit,100.24354935413106,14.66442346406711 +WP14,100.242333,14.67283303 +transit,100.24311000160544,14.681240550739027 +transit,100.24388706258217,14.689648062801169 +transit,100.24466418297027,14.698055566181523 +transit,100.24544136280976,14.706463060875166 +transit,100.2462186021407,14.714870546877188 +transit,100.2469959010032,14.72327802418268 +transit,100.24777325943734,14.731685492786731 +transit,100.24855067748321,14.740092952684423 +transit,100.24932815518093,14.74850040387085 +transit,100.25010569257061,14.756907846341091 +transit,100.25088328969241,14.765315280090242 +transit,100.25166094658644,14.773722705113395 +transit,100.25243866329289,14.782130121405624 +transit,100.25321643985191,14.790537528962025 +transit,100.25399427630369,14.798944927777688 +transit,100.25477217268839,14.8073523178477 +transit,100.25555012904624,14.815759699167144 +transit,100.25632814541746,14.82416707173111 +transit,100.25710622184225,14.832574435534687 +transit,100.25788435836085,14.840981790572968 +transit,100.25866255501352,14.849389136841044 +transit,100.2594408118405,14.857796474333993 +transit,100.26021912888207,14.866203803046906 +transit,100.26099750617851,14.874611122974876 +transit,100.2617759437701,14.883018434112985 +transit,100.26255444169716,14.89142573645633 +WP15,100.263333,14.89983303 +transit,100.2605075745843,14.908345431356354 +transit,100.25768192704201,14.916857791535385 +transit,100.25485605722392,14.925370110510332 +transit,100.2520299649807,14.933882388254435 +transit,100.24920365016303,14.94239462474092 +transit,100.2463771126215,14.950906819943018 +transit,100.24355035220671,14.95941897383393 +transit,100.2407233687692,14.96793108638689 +transit,100.23789616215946,14.976443157575085 +transit,100.23506873222796,14.984955187371733 +transit,100.23224107882508,14.993467175750014 +transit,100.22941320180125,15.00197912268312 +transit,100.22658510100676,15.010491028144228 +transit,100.22375677629192,15.019002892106526 +transit,100.22092822750699,15.027514714543175 +transit,100.21809945450217,15.036026495427338 +transit,100.21527045712762,15.044538234732185 +transit,100.2124412352335,15.05304993243085 +transit,100.20961178866987,15.06156158849649 +transit,100.20678211728679,15.070073202902252 +transit,100.20395222093428,15.078584775621255 +transit,100.2011220994623,15.087096306626636 +transit,100.19829175272075,15.095607795891516 +transit,100.19546118055953,15.10411924338901 +transit,100.19263038282848,15.112630649092225 +transit,100.18979935937742,15.121142012974268 +transit,100.18696811005609,15.129653335008243 +transit,100.18413663471419,15.138164615167227 +transit,100.18130493320145,15.14667585342432 +transit,100.17847300536745,15.155187049752593 +transit,100.17564085106181,15.163698204125124 +transit,100.1728084701341,15.17220931651498 +transit,100.1699758624338,15.180720386895214 +transit,100.1671430278104,15.189231415238897 +transit,100.16430996611331,15.19774240151907 +transit,100.16147667719193,15.206253345708776 +transit,100.1586431608956,15.214764247781055 +transit,100.15580941707363,15.223275107708933 +transit,100.15297544557528,15.231785925465438 +transit,100.15014124624976,15.240296701023588 +transit,100.14730681894626,15.248807434356399 +transit,100.14447216351392,15.257318125436877 +transit,100.14163727980183,15.265828774238017 +transit,100.13880216765904,15.274339380732819 +transit,100.13596682693456,15.28284994489427 +transit,100.13313125747737,15.29136046669535 +transit,100.13029545913639,15.299870946109039 +transit,100.1274594317605,15.3083813831083 +transit,100.12462317519855,15.316891777666104 +transit,100.12178668929936,15.325402129755407 +transit,100.11894997391165,15.333912439349154 +transit,100.11611302888417,15.342422706420294 +transit,100.11327585406559,15.350932930941775 +transit,100.11043844930454,15.359443112886515 +transit,100.1076008144496,15.367953252227453 +transit,100.10476294934934,15.376463348937506 +transit,100.10192485385225,15.384973402989578 +transit,100.0990865278068,15.393483414356592 +transit,100.09624797106142,15.401993383011444 +transit,100.09340918346449,15.410503308927018 +transit,100.09057016486433,15.419013192076227 +transit,100.08773091510925,15.427523032431937 +transit,100.0848914340475,15.436032829967035 +transit,100.0820517215273,15.444542584654382 +transit,100.07921177739681,15.453052296466845 +transit,100.07637160150414,15.461561965377287 +transit,100.07353119369739,15.470071591358556 +transit,100.0706905538246,15.478581174383507 +transit,100.06784968173378,15.487090714424962 +transit,100.06500857727286,15.495600211455773 +transit,100.06216724028977,15.504109665448754 +transit,100.05932567063238,15.512619076376728 +transit,100.05648386814849,15.521128444212515 +transit,100.05364183268593,15.529637768928922 +transit,100.0507995640924,15.538147050498749 +transit,100.04795706221563,15.54665628889479 +transit,100.04511432690325,15.555165484089837 +transit,100.04227135800289,15.563674636056673 +transit,100.03942815536212,15.572183744768074 +transit,100.03658471882846,15.580692810196817 +transit,100.0337410482494,15.589201832315656 +transit,100.03089714347237,15.597710811097349 +transit,100.02805300434478,15.60621974651465 +transit,100.02520863071399,15.614728638540315 +transit,100.02236402242731,15.623237487147067 +transit,100.019519179332,15.631746292307646 +transit,100.01667410127527,15.640255053994785 +transit,100.01382878810433,15.64876377218119 +transit,100.01098323966632,15.657272446839583 +transit,100.00813745580832,15.665781077942668 +transit,100.00529143637739,15.674289665463148 +transit,100.00244518122054,15.682798209373718 +transit,99.99959869018473,15.691306709647064 +transit,99.99675196311688,15.699815166255869 +transit,99.99390499986389,15.708323579172806 +transit,99.99105780027257,15.71683194837055 +transit,99.98821036418973,15.725340273821754 +transit,99.9853626914621,15.733848555499081 +transit,99.98251478193642,15.74235679337518 +transit,99.97966663545931,15.750864987422695 +transit,99.97681825187742,15.75937313761426 +transit,99.97396963103729,15.767881243922508 +transit,99.9711207727855,15.77638930632006 +transit,99.96827167696848,15.78489732477954 +transit,99.96542234343272,15.793405299273555 +transit,99.96257277202459,15.80191322977471 +transit,99.95972296259045,15.810421116255604 +transit,99.95687291497663,15.818928958688828 +transit,99.95402262902938,15.827436757046963 +transit,99.95117210459492,15.835944511302595 +transit,99.94832134151945,15.844452221428298 +transit,99.94547033964908,15.852959887396633 +transit,99.94261909882992,15.861467509180162 +transit,99.93976761890802,15.869975086751435 +transit,99.93691589972937,15.878482620083002 +transit,99.93406394113994,15.886990109147405 +transit,99.93121174298564,15.895497553917169 +transit,99.92835930511232,15.904004954364835 +transit,99.92550662736586,15.912512310462906 +transit,99.922653709592,15.921019622183918 +transit,99.91980055163648,15.929526889500362 +transit,99.916947153345,15.938034112384738 +transit,99.91409351456323,15.946541290809549 +transit,99.91123963513675,15.955048424747282 +transit,99.90838551491115,15.963555514170414 +transit,99.9055311537319,15.97206255905143 +transit,99.9026765514445,15.980569559362786 +transit,99.89982170789438,15.989076515076952 +transit,99.89696662292691,15.997583426166381 +transit,99.89411129638745,16.006090292603517 +transit,99.89125572812127,16.01459711436081 +transit,99.88839991797363,16.023103891410695 +transit,99.88554386578973,16.031610623725594 +transit,99.88268757141473,16.040117311277942 +transit,99.87983103469377,16.04862395404014 +transit,99.87697425547186,16.05713055198461 +transit,99.87411723359409,16.06563710508374 +transit,99.8712599689054,16.074143613309943 +transit,99.86840246125075,16.082650076635602 +transit,99.865544710475,16.09115649503309 +transit,99.86268671642303,16.099662868474805 +transit,99.85982847893962,16.10816919693309 +transit,99.85696999786954,16.116675480380334 +transit,99.85411127305748,16.125181718788873 +transit,99.85125230434812,16.133687912131073 +transit,99.84839309158608,16.14219406037926 +transit,99.84553363461592,16.15070016350579 +transit,99.8426739332822,16.159206221482975 +transit,99.83981398742937,16.167712234283144 +transit,99.8369537969019,16.176218201878623 +transit,99.83409336154416,16.18472412424171 +transit,99.83123268120052,16.193230001344716 +transit,99.82837175571527,16.20173583315993 +transit,99.82551058493267,16.21024161965965 +transit,99.82264916869694,16.218747360816156 +transit,99.81978750685224,16.227253056601718 +transit,99.8169255992427,16.235758706988612 +transit,99.81406344571238,16.244264311949102 +transit,99.81120104610532,16.252769871455445 +transit,99.80833840026553,16.261275385479884 +transit,99.8054755080369,16.269780853994675 +transit,99.80261236926336,16.27828627697203 +transit,99.79974898378875,16.286791654384206 +transit,99.79688535145687,16.295296986203407 +transit,99.79402147211148,16.303802272401857 +transit,99.79115734559629,16.312307512951765 +transit,99.78829297175496,16.320812707825333 +transit,99.78542835043112,16.329317856994752 +transit,99.78256348146833,16.337822960432216 +transit,99.77969836471013,16.346328018109904 +WP16,99.776833,16.35483303 +transit,99.77618023461284,16.36352772012392 +transit,99.77552741141027,16.372222401058075 +transit,99.77487453035477,16.380917072797786 +transit,99.77422159140875,16.389611735338356 +transit,99.77356859453462,16.398306388675113 +transit,99.77291553969484,16.407001032803365 +transit,99.77226242685175,16.41569566771843 +transit,99.77160925596779,16.42439029341563 +transit,99.7709560270053,16.433084909890265 +transit,99.77030273992665,16.441779517137665 +transit,99.7696493946942,16.45047411515314 +transit,99.76899599127029,16.459168703932004 +transit,99.76834252961723,16.467863283469587 +transit,99.76768900969735,16.476557853761186 +transit,99.76703543147296,16.485252414802133 +transit,99.76638179490634,16.493946966587743 +transit,99.76572809995977,16.50264150911333 +transit,99.76507434659551,16.511336042374218 +transit,99.76442053477584,16.520030566365715 +transit,99.76376666446298,16.528725081083156 +transit,99.76311273561917,16.537419586521843 +transit,99.76245874820663,16.5461140826771 +transit,99.76180470218756,16.554808569544257 +transit,99.76115059752416,16.563503047118626 +transit,99.76049643417862,16.572197515395523 +transit,99.7598422121131,16.58089197437027 +transit,99.75918793128977,16.589586424038195 +transit,99.75853359167077,16.598280864394617 +transit,99.75787919321822,16.606975295434843 +transit,99.75722473589427,16.615669717154212 +transit,99.75657021966101,16.624364129548038 +transit,99.75591564448055,16.633058532611642 +transit,99.75526101031497,16.64175292634035 +transit,99.75460631712635,16.65044731072948 +transit,99.75395156487673,16.659141685774355 +transit,99.75329675352819,16.667836051470307 +transit,99.75264188304276,16.67653040781264 +transit,99.75198695338244,16.685224754796693 +transit,99.75133196450928,16.693919092417794 +transit,99.75067691638525,16.702613420671252 +transit,99.75002180897236,16.7113077395524 +transit,99.74936664223257,16.72000204905656 +transit,99.74871141612785,16.72869634917906 +transit,99.74805613062016,16.73739063991522 +transit,99.74740078567142,16.746084921260373 +transit,99.74674538124357,16.754779193209835 +transit,99.74608991729853,16.763473455758938 +transit,99.74543439379819,16.772167708903005 +transit,99.74477881070446,16.780861952637366 +transit,99.7441231679792,16.789556186957345 +transit,99.74346746558427,16.798250411858273 +transit,99.74281170348154,16.806944627335472 +transit,99.74215588163284,16.815638833384273 +WP17,99.7415,16.82433303 +transit,99.74429190475959,16.832429740308847 +transit,99.74708404678597,16.840526406302324 +transit,99.7498764262191,16.848623027955263 +transit,99.752669043199,16.856719605242482 +transit,99.75546189786576,16.8648161381388 +transit,99.75825499035943,16.872912626619026 +transit,99.7610483208202,16.88100907065797 +transit,99.7638418893882,16.889105470230426 +transit,99.76663569620369,16.897201825311186 +transit,99.76942974140691,16.905298135875043 +transit,99.77222402513819,16.913394401896774 +transit,99.77501854753783,16.921490623351154 +transit,99.77781330874623,16.929586800212952 +transit,99.78060830890382,16.93768293245693 +transit,99.78340354815106,16.945779020057852 +transit,99.78619902662844,16.95387506299046 +transit,99.78899474447651,16.961971061229494 +transit,99.79179070183586,16.970067014749702 +transit,99.79458689884711,16.978162923525804 +transit,99.79738333565093,16.986258787532545 +transit,99.80018001238801,16.994354606744626 +transit,99.8029769291991,17.002450381136764 +transit,99.80577408622501,17.01054611068368 +transit,99.80857148360654,17.01864179536006 +transit,99.81136912148457,17.026737435140607 +WP18,99.814167,17.03483303 +transit,99.81434040327201,17.043284529361696 +transit,99.81451382213099,17.051736021555545 +transit,99.81468725658654,17.0601875065784 +transit,99.81486070664826,17.068638984427135 +transit,99.81503417232577,17.07709045509859 +transit,99.81520765362868,17.085541918589627 +transit,99.8153811505666,17.093993374897117 +transit,99.81555466314913,17.1024448240179 +transit,99.81572819138593,17.110896265948856 +transit,99.81590173528662,17.119347700686838 +transit,99.8160752948608,17.127799128228713 +transit,99.8162488701181,17.136250548571326 +transit,99.81642246106819,17.14470196171156 +transit,99.81659606772067,17.153153367646272 +transit,99.8167696900852,17.16160476637232 +transit,99.8169433281714,17.17005615788658 +transit,99.81711698198895,17.17850754218591 +transit,99.81729065154748,17.18695891926717 +transit,99.81746433685664,17.195410289127235 +transit,99.81763803792609,17.203861651762978 +transit,99.81781175476549,17.212313007171257 +transit,99.81798548738449,17.220764355348937 +transit,99.81815923579278,17.2292156962929 +Sukhothai,99.818333,17.23766703 +transit,99.8109274024524,17.242972216999036 +transit,99.80352138185381,17.248277128540224 +transit,99.79611493806348,17.253581764518536 +transit,99.78870807094071,17.258886124828933 +transit,99.78130078034481,17.26419020936634 +transit,99.77389306613506,17.26949401802568 +transit,99.76648492817073,17.274797550701866 +transit,99.75907636631113,17.280100807289784 +transit,99.75166738041557,17.285403787684306 +transit,99.74425797034333,17.290706491780302 +transit,99.7368481359537,17.296008919472605 +transit,99.72943787710594,17.301311070656055 +transit,99.72202719365941,17.306612945225467 +transit,99.71461608547338,17.31191454307563 +transit,99.70720455240713,17.31721586410134 +transit,99.69979259431997,17.32251690819735 +transit,99.69238021107121,17.327817675258427 +transit,99.68496740252013,17.333118165179304 +transit,99.67755416852603,17.3384183778547 +transit,99.67014050894824,17.343718313179327 +transit,99.66272642364599,17.34901797104788 +transit,99.65531191247867,17.354317351355018 +transit,99.64789697530551,17.359616453995418 +transit,99.64048161198585,17.36491527886372 +transit,99.63306582237897,17.370213825854556 +transit,99.6256496063442,17.37551209486254 +transit,99.61823296374082,17.380810085782265 +transit,99.61081589442814,17.386107798508327 +transit,99.60339839826548,17.391405232935284 +transit,99.59598047511213,17.396702388957692 +transit,99.5885621248274,17.401999266470092 +transit,99.58114334727061,17.407295865367 +transit,99.57372414230106,17.41259218554293 +transit,99.56630450977806,17.41788822689237 +transit,99.5588844495609,17.42318398930979 +transit,99.55146396150894,17.42847947268966 +transit,99.54404304548144,17.433774676926422 +transit,99.53662170133775,17.4390696019145 +transit,99.52919992893716,17.444364247548318 +transit,99.521777728139,17.44965861372227 +transit,99.51435509880257,17.454952700330733 +transit,99.50693204078718,17.46024650726809 +transit,99.49950855395217,17.465540034428674 +transit,99.49208463815684,17.47083328170683 +transit,99.4846602932605,17.476126248996888 +transit,99.4772355191225,17.481418936193148 +transit,99.46981031560213,17.4867113431899 +transit,99.46238468255873,17.49200346988141 +transit,99.45495861985162,17.497295316161956 +transit,99.44753212734011,17.502586881925765 +transit,99.44010520488354,17.507878167067073 +transit,99.43267785234121,17.513169171480097 +transit,99.42525006957246,17.51845989505902 +transit,99.41782185643662,17.52375033769804 +transit,99.410393212793,17.529040499291316 +transit,99.40296413850095,17.534330379733 +transit,99.39553463341977,17.53961997891723 +transit,99.38810469740883,17.54490929673812 +transit,99.38067433032744,17.55019833308977 +transit,99.37324353203492,17.555487087866283 +transit,99.36581230239061,17.560775560961726 +transit,99.35838064125383,17.566063752270153 +transit,99.35094854848396,17.571351661685608 +transit,99.34351602394028,17.576639289102125 +transit,99.33608306748218,17.5819266344137 +transit,99.32864967896894,17.58721369751434 +transit,99.32121585825995,17.592500478298025 +transit,99.31378160521452,17.597786976658714 +transit,99.30634691969199,17.603073192490353 +transit,99.29891180155172,17.60835912568688 +transit,99.29147625065305,17.613644776142216 +transit,99.2840402668553,17.618930143750262 +transit,99.27660385001784,17.624215228404896 +WP20,99.269167,17.62950003 +transit,99.26635252996367,17.63792495855916 +transit,99.26353779835352,17.64634983976061 +transit,99.26072280501332,17.6547746735773 +transit,99.2579075497868,17.663199459982156 +transit,99.25509203251767,17.67162419894811 +transit,99.25227625304954,17.68004889044808 +transit,99.24946021122605,17.68847353445498 +transit,99.24664390689071,17.696898130941722 +transit,99.24382733988703,17.705322679881206 +transit,99.24101051005846,17.713747181246323 +transit,99.23819341724838,17.72217163500995 +transit,99.23537606130014,17.730596041144977 +transit,99.23255844205707,17.739020399624277 +transit,99.22974055936238,17.74744471042071 +transit,99.22692241305931,17.75586897350713 +transit,99.22410400299098,17.7642931888564 +transit,99.22128532900052,17.772717356441344 +transit,99.21846639093097,17.781141476234815 +transit,99.21564718862534,17.789565548209644 +transit,99.21282772192659,17.79798957233864 +transit,99.21000799067761,17.80641354859462 +transit,99.20718799472127,17.81483747695041 +transit,99.20436773390038,17.823261357378787 +transit,99.2015472080577,17.831685189852557 +transit,99.19872641703594,17.840108974344503 +transit,99.19590536067776,17.848532710827417 +transit,99.19308403882576,17.856956399274054 +transit,99.19026245132252,17.865380039657182 +transit,99.18744059801054,17.873803631949574 +transit,99.18461847873228,17.88222717612396 +transit,99.18179609333016,17.890650672153097 +transit,99.17897344164655,17.899074120009722 +transit,99.17615052352375,17.90749751966656 +transit,99.17332733880401,17.915920871096333 +transit,99.17050388732959,17.924344174271752 +transit,99.16768016894261,17.93276742916554 +transit,99.1648561834852,17.94119063575039 +transit,99.16203193079944,17.94961379399899 +transit,99.15920741072732,17.95803690388403 +transit,99.15638262311083,17.966459965378185 +transit,99.15355756779186,17.97488297845414 +transit,99.15073224461229,17.983305943084545 +transit,99.14790665341393,17.991728859242063 +transit,99.14508079403855,18.000151726899347 +transit,99.14225466632787,18.00857454602904 +transit,99.13942827012355,18.01699731660377 +transit,99.13660160526717,18.025420038596177 +transit,99.13377467160036,18.033842711978878 +transit,99.13094746896459,18.042265336724476 +transit,99.12811999720134,18.050687912805593 +transit,99.12529225615202,18.05911044019482 +transit,99.122464245658,18.067532918864757 +transit,99.11963596556058,18.075955348787982 +transit,99.11680741570102,18.084377729937074 +transit,99.11397859592054,18.092800062284606 +transit,99.11114950606033,18.101222345803134 +transit,99.10832014596146,18.109644580465226 +transit,99.10549051546501,18.118066766243413 +transit,99.10266061441197,18.126488903110253 +transit,99.09983044264334,18.13491099103827 +WP21,99.097,18.14333303 +transit,99.10065204694395,18.15053863299162 +transit,99.10430439321041,18.157744161260723 +transit,99.10795703894814,18.164949614770485 +transit,99.11160998430594,18.172154993484096 +transit,99.11526322943266,18.179360297364724 +transit,99.11891677447714,18.186565526375535 +transit,99.12257061958833,18.19377068047968 +transit,99.12622476491516,18.200975759640304 +transit,99.12987921060665,18.20818076382054 +transit,99.13353395681177,18.215385692983517 +transit,99.13718900367964,18.22259054709235 +transit,99.14084435135933,18.22979532611015 +WP22,99.1445,18.23700003 +transit,99.15146735747362,18.24206090597879 +transit,99.15843511817809,18.247121525852435 +transit,99.16540328223628,18.25218188953077 +transit,99.17237184977107,18.257241996923632 +transit,99.17934082090532,18.262301847940826 +transit,99.1863101957619,18.267361442492156 +transit,99.1932799744637,18.272420780487415 +transit,99.20025015713358,18.277479861836383 +transit,99.2072207438944,18.282538686448806 +transit,99.21419173486905,18.28759725423445 +transit,99.2211631301804,18.29265556510304 +transit,99.22813492995131,18.2977136189643 +transit,99.23510713430467,18.302771415727932 +transit,99.24207974336333,18.307828955303652 +transit,99.24905275725021,18.312886237601127 +transit,99.25602617608814,18.31794326253002 +WP23,99.263,18.32300003 +transit,99.25557382490359,18.32744088559543 +transit,99.2481472707872,18.331881450058834 +transit,99.2407203375578,18.336321723300404 +transit,99.23329302512239,18.34076170523036 +transit,99.22586533338799,18.345201395758863 +transit,99.21843726226156,18.349640794796098 +transit,99.21100881165015,18.35407990225223 +transit,99.20357998146078,18.358518718037413 +transit,99.19615077160049,18.362957242061793 +transit,99.1887211819763,18.367395474235504 +transit,99.18129121249532,18.37183341446868 +transit,99.17386086306458,18.376271062671425 +transit,99.16643013359115,18.380708418753848 +transit,99.15899902398213,18.385145482626054 +transit,99.1515675341446,18.389582254198125 +transit,99.1441356639857,18.394018733380133 +transit,99.13670341341249,18.398454920082145 +transit,99.12927078233214,18.402890814214228 +transit,99.12183777065178,18.40732641568642 +transit,99.11440437827852,18.411761724408755 +transit,99.10697060511956,18.416196740291273 +transit,99.09953645108203,18.420631463243982 +transit,99.09210191607312,18.42506589317689 +WP24,99.084667,18.42950003 +transit,99.07590508762327,18.42952644374126 +transit,99.06714317259124,18.429552453173475 +transit,99.05838125494486,18.429578058295917 +transit,99.04961933472507,18.429603259107854 +transit,99.04085741197284,18.42962805560859 +transit,99.0320954867291,18.429652447797427 +transit,99.02333355903484,18.42967643567368 +transit,99.01457162893098,18.429700019236673 +transit,99.00580969645848,18.429723198485757 +transit,98.99704776165832,18.429745973420264 +transit,98.98828582457143,18.429768344039562 +transit,98.97952388523878,18.42979031034303 +transit,98.97076194370132,18.429811872330045 +WP25,98.962,18.42983303 +transit,98.96202131799997,18.438512668615008 +transit,98.96204263814047,18.447192299299033 +transit,98.96206396042278,18.45587192204888 +transit,98.9620852848482,18.464551536861347 +transit,98.96210661141804,18.473231143733248 +transit,98.96212794013357,18.481910742661395 +transit,98.96214927099611,18.490590333642597 +transit,98.96217060400696,18.499269916673665 +transit,98.9621919391674,18.507949491751404 +transit,98.96221327647872,18.516629058872628 +transit,98.96223461594225,18.525308618034146 +transit,98.96225595755928,18.533988169232785 +transit,98.9622773013311,18.54266771246535 +transit,98.962298647259,18.551347247728643 +transit,98.96231999534432,18.5600267750195 +transit,98.96234134558831,18.568706294334728 +transit,98.96236269799232,18.577385805671142 +transit,98.96238405255762,18.58606530902557 +transit,98.96240540928552,18.594744804394814 +transit,98.96242676817734,18.60342429177571 +transit,98.96244812923435,18.612103771165064 +transit,98.96246949245788,18.620783242559707 +transit,98.96249085784923,18.62946270595645 +transit,98.9625122254097,18.638142161352125 +transit,98.96253359514058,18.64682160874355 +transit,98.96255496704322,18.655501048127554 +transit,98.96257634111889,18.664180479500953 +transit,98.9625977173689,18.672859902860576 +transit,98.96261909579457,18.68153931820326 +transit,98.96264047639718,18.690218725525803 +transit,98.96266185917808,18.69889812482506 +transit,98.96268324413855,18.70757751609785 +transit,98.9627046312799,18.716256899340998 +transit,98.96272602060345,18.72493627455134 +transit,98.96274741211052,18.733615641725706 +transit,98.96276880580238,18.74229500086092 +transit,98.96279020168038,18.750974351953822 +transit,98.96281159974582,18.759653695001234 +Chiang_Mai,98.962833,18.76833303 +transit,98.97102345626038,18.76608001026244 +transit,98.97921369496291,18.7638266311987 +transit,98.9874037161068,18.7615728928644 +transit,98.9955935196913,18.759318795315163 +transit,99.00378310571564,18.757064338606618 +transit,99.01197247417912,18.75480952279439 +transit,99.02016162508102,18.75255434793413 +transit,99.02835055842063,18.750298814081457 +transit,99.03653927419731,18.74804292129203 +transit,99.04472777241037,18.745786669621488 +transit,99.05291605305919,18.743530059125487 +transit,99.06110411614316,18.74127308985968 +transit,99.06929196166166,18.739015761879713 +transit,99.07747958961414,18.73675807524127 +WP27,99.085667,18.73450003 +transit,99.0856442495099,18.726204652347565 +transit,99.08562150123944,18.717909267353512 +transit,99.08559875518738,18.70961387502061 +transit,99.0855760113524,18.701318475351638 +transit,99.08555326973327,18.693023068349355 +transit,99.08553053032868,18.684727654016523 +transit,99.0855077931374,18.676432232355932 +transit,99.08548505815813,18.66813680337033 +transit,99.08546232538961,18.65984136706251 +transit,99.08543959483058,18.651545923435226 +transit,99.08541686647975,18.64325047249126 +transit,99.08539414033586,18.63495501423338 +transit,99.08537141639765,18.626659548664367 +transit,99.08534869466384,18.618364075786985 +transit,99.08532597513317,18.61006859560402 +transit,99.08530325780438,18.60177310811824 +transit,99.08528054267619,18.593477613332425 +transit,99.08525782974733,18.58518211124935 +transit,99.08523511901656,18.57688660187179 +transit,99.08521241048258,18.568591085202527 +transit,99.08518970414416,18.560295561244335 +WP28,99.085167,18.55200003 +transit,99.09421416772395,18.550220010116274 +transit,99.10326114792517,18.548439556428413 +transit,99.11230794058116,18.546658668989824 +transit,99.12135454566953,18.544877347853905 +transit,99.13040096316784,18.543095593074085 +transit,99.13944719305371,18.541313404703782 +transit,99.14849323530477,18.539530782796437 +transit,99.15753908989865,18.537747727405492 +transit,99.16658475681304,18.535964238584413 +transit,99.17563023602561,18.53418031638665 +transit,99.18467552751409,18.53239596086568 +transit,99.19372063125621,18.530611172074995 +transit,99.20276554722972,18.52882595006808 +transit,99.21181027541238,18.527040294898434 +transit,99.220854815782,18.525254206619564 +transit,99.2298991683164,18.523467685284995 +transit,99.2389433329934,18.521680730948255 +transit,99.24798730979086,18.519893343662883 +transit,99.25703109868668,18.51810552348242 +transit,99.26607469965876,18.51631727046042 +transit,99.27511811268498,18.514528584650456 +transit,99.28416133774331,18.512739466106098 +transit,99.29320437481171,18.51094991488093 +transit,99.30224722386818,18.50915993102853 +transit,99.31128988489068,18.507369514602523 +transit,99.32033235785728,18.505578665656515 +transit,99.329374642746,18.503787384244102 +transit,99.33841673953492,18.501995670418943 +transit,99.34745864820212,18.50020352423465 +transit,99.3565003687257,18.498410945744894 +transit,99.36554190108382,18.49661793500331 +transit,99.3745832452546,18.494824492063575 +transit,99.38362440121622,18.49303061697936 +transit,99.39266536894688,18.49123630980435 +transit,99.4017061484248,18.48944157059223 +transit,99.41074673962817,18.48764639939671 +transit,99.4197871425353,18.485850796271492 +transit,99.42882735712443,18.484054761270304 +transit,99.43786738337388,18.482258294446865 +transit,99.44690722126195,18.480461395854924 +transit,99.455946870767,18.47866406554822 +transit,99.46498633186737,18.47686630358051 +transit,99.47402560454144,18.47506811000555 +transit,99.48306468876761,18.473269484877136 +transit,99.49210358452433,18.471470428249035 +transit,99.50114229179,18.469670940175035 +transit,99.51018081054313,18.467871020708944 +transit,99.51921914076216,18.46607066990457 +transit,99.52825728242564,18.464269887815735 +transit,99.53729523551208,18.462468674496268 +WP29,99.546333,18.46066703 +transit,99.5545038256019,18.456384153671483 +transit,99.56267424596551,18.45210092339058 +transit,99.57084426117846,18.44781733926222 +transit,99.5790138713284,18.44353340139133 +transit,99.58718307650297,18.439249109882837 +transit,99.59535187678985,18.434964464841645 +transit,99.60352027227671,18.43067946637266 +transit,99.6116882630513,18.426394114580752 +transit,99.61985584920133,18.42210840957083 +transit,99.62802303081453,18.417822351447754 +transit,99.6361898079787,18.413535940316383 +transit,99.64435618078161,18.40924917628158 +transit,99.65252214931105,18.404962059448184 +transit,99.66068771365487,18.40067458992104 +transit,99.66885287390089,18.396386767804955 +transit,99.67701763013697,18.392098593204768 +transit,99.68518198245101,18.38781006622528 +transit,99.69334593093089,18.383521186971286 +transit,99.70150947566452,18.37923195554758 +transit,99.70967261673987,18.374942372058943 +transit,99.71783535424484,18.370652436610147 +transit,99.72599768826744,18.36636214930595 +transit,99.73415961889565,18.36207151025111 +transit,99.74232114621746,18.35778051955037 +transit,99.75048227032093,18.35348917730846 +transit,99.7586429912941,18.349197483630114 +transit,99.76680330922501,18.344905438620046 +transit,99.77496322420176,18.340613042382955 +transit,99.78312273631245,18.33632029502355 +transit,99.7912818456452,18.332027196646514 +transit,99.79944055228815,18.327733747356532 +transit,99.80759885632943,18.323439947258276 +transit,99.81575675785727,18.319145796456397 +transit,99.82391425695982,18.314851295055554 +transit,99.8320713537253,18.31055644316039 +transit,99.84022804824195,18.306261240875536 +transit,99.84838434059802,18.301965688305614 +transit,99.85654023088175,18.297669785555254 +transit,99.86469571918146,18.293373532729046 +transit,99.87285080558543,18.289076929931596 +transit,99.88100549018199,18.284779977267487 +transit,99.88915977305948,18.280482674841306 +transit,99.89731365430626,18.276185022757613 +transit,99.9054671340107,18.27188702112097 +transit,99.91362021226121,18.26758867003593 +transit,99.9217728891462,18.26328996960704 +transit,99.92992516475408,18.258990919938825 +transit,99.93807703917332,18.254691521135815 +transit,99.9462285124924,18.250391773302514 +transit,99.95437958479977,18.246091676543447 +transit,99.96253025618395,18.241791230963084 +transit,99.97068052673347,18.237490436665933 +transit,99.97883039653689,18.233189293756464 +transit,99.98697986568273,18.228887802339145 +transit,99.99512893425958,18.224585962518432 +transit,100.00327760235605,18.220283774398776 +transit,100.01142587006075,18.215981238084627 +transit,100.01957373746228,18.2116783536804 +transit,100.02772120464932,18.207375121290543 +transit,100.03586827171054,18.203071541019444 +transit,100.04401493873462,18.19876761297152 +transit,100.05216120581025,18.194463337251165 +transit,100.06030707302617,18.19015871396276 +transit,100.06845254047111,18.185853743210686 +transit,100.07659760823384,18.181548425099304 +transit,100.0847422764031,18.177242759732987 +transit,100.09288654506774,18.172936747216067 +transit,100.10103041431653,18.16863038765289 +transit,100.1091738842383,18.16432368114779 +transit,100.11731695492192,18.16001662780508 +transit,100.12545962645625,18.155709227729087 +transit,100.13360189893015,18.1514014810241 +transit,100.14174377243256,18.147093387794417 +transit,100.14988524705237,18.142784948144328 +transit,100.15802632287853,18.138476162178097 +WP30,100.166167,18.13416703 +transit,100.16699050577331,18.12526380141945 +transit,100.16781392828184,18.1163605610984 +transit,100.16863726757772,18.107457309042537 +transit,100.16946052371303,18.098554045257508 +transit,100.17028369673984,18.089650769749 +transit,100.17110678671024,18.08074748252267 +transit,100.17192979367624,18.071844183584194 +transit,100.17275271768987,18.062940872939237 +transit,100.17357555880314,18.05403755059347 +transit,100.17439831706803,18.04513421655257 +transit,100.1752209925365,18.036230870822198 +transit,100.17604358526052,18.02732751340802 +transit,100.17686609529198,18.018424144315723 +transit,100.17768852268283,18.009520763550956 +transit,100.17851086748496,18.00061737111941 +transit,100.17933312975022,17.991713967026733 +transit,100.18015530953049,17.982810551278607 +transit,100.18097740687762,17.973907123880704 +transit,100.1817994218434,17.965003684838692 +transit,100.18262135447964,17.95610023415824 +transit,100.18344320483813,17.94719677184501 +transit,100.18426497297064,17.938293297904693 +transit,100.18508665892891,17.929389812342936 +transit,100.18590826276468,17.920486315165423 +transit,100.18672978452966,17.911582806377822 +transit,100.18755122427554,17.9026792859858 +transit,100.18837258205399,17.893775753995037 +transit,100.18919385791668,17.88487221041119 +transit,100.19001505191525,17.87596865523994 +transit,100.19083616410131,17.867065088486957 +transit,100.19165719452647,17.858161510157903 +transit,100.19247814324231,17.849257920258456 +transit,100.19329901030042,17.840354318794283 +transit,100.19411979575233,17.831450705771058 +transit,100.19494049964956,17.822547081194454 +transit,100.19576112204365,17.81364344507013 +transit,100.19658166298608,17.804739797403776 +transit,100.19740212252833,17.79583613820105 +transit,100.19822250072187,17.786932467467622 +transit,100.19904279761813,17.778028785209173 +transit,100.19986301326854,17.769125091431366 +transit,100.20068314772452,17.76022138613987 +transit,100.20150320103743,17.75131766934037 +transit,100.20232317325865,17.74241394103852 +transit,100.20314306443954,17.73351020124001 +transit,100.20396287463144,17.72460644995049 +transit,100.20478260388566,17.715702687175646 +transit,100.2056022522535,17.706798912921148 +transit,100.20642181978623,17.69789512719267 +transit,100.20724130653514,17.688991329995876 +transit,100.20806071255146,17.68008752133644 +transit,100.20888003788642,17.671183701220038 +transit,100.20969928259122,17.662279869652338 +transit,100.21051844671707,17.653376026639016 +transit,100.21133753031515,17.64447217218574 +transit,100.2121565334366,17.635568306298183 +transit,100.21297545613257,17.626664428982014 +transit,100.21379429845418,17.617760540242912 +transit,100.21461306045254,17.608856640086547 +transit,100.21543174217872,17.59995272851859 +transit,100.21625034368381,17.59104880554471 +transit,100.21706886501885,17.582144871170584 +transit,100.21788730623487,17.57324092540189 +transit,100.2187056673829,17.56433696824429 +transit,100.21952394851395,17.555432999703466 +transit,100.22034214967898,17.546529019785076 +transit,100.22116027092896,17.537625028494805 +transit,100.22197831231483,17.528721025838326 +transit,100.22279627388754,17.519817011821306 +transit,100.22361415569797,17.510912986449423 +transit,100.22443195779705,17.502008949728346 +transit,100.22524968023563,17.49310490166375 +transit,100.22606732306458,17.484200842261306 +transit,100.22688488633474,17.475296771526693 +transit,100.22770237009695,17.46639268946558 +transit,100.22851977440199,17.45748859608363 +transit,100.22933709930066,17.448584491386537 +transit,100.23015434484375,17.439680375379965 +transit,100.23097151108199,17.430776248069588 +transit,100.23178859806613,17.421872109461066 +transit,100.23260560584689,17.4129679595601 +transit,100.23342253447497,17.40406379837234 +transit,100.23423938400106,17.395159625903467 +transit,100.23505615447581,17.386255442159158 +transit,100.23587284594991,17.37735124714509 +transit,100.23668945847396,17.368447040866933 +transit,100.23750599209859,17.359542823330347 +transit,100.23832244687439,17.35063859454103 +transit,100.23913882285196,17.341734354504638 +transit,100.23995512008185,17.332830103226854 +transit,100.2407713386146,17.323925840713354 +transit,100.24158747850078,17.315021566969808 +transit,100.24240353979084,17.30611728200189 +transit,100.24321952253534,17.29721298581528 +transit,100.24403542678472,17.28830867841564 +transit,100.24485125258946,17.27940435980865 +WP31,100.245667,17.27050003 +transit,100.24647026068472,17.261725471711873 +transit,100.24727344539025,17.25295090256133 +transit,100.24807655416477,17.244176322553795 +transit,100.24887958705645,17.2354017316947 +transit,100.24968254411345,17.22662712998947 +transit,100.25048542538393,17.217852517443536 +transit,100.25128823091599,17.209077894062318 +transit,100.25209096075777,17.200303259851253 +transit,100.25289361495734,17.191528614815773 +transit,100.25369619356279,17.182753958961296 +transit,100.25449869662219,17.173979292293247 +transit,100.25530112418357,17.165204614817068 +transit,100.25610347629498,17.156429926538177 +transit,100.25690575300443,17.14765522746201 +transit,100.2577079543599,17.13888051759399 +transit,100.2585100804094,17.13010579693954 +transit,100.25931213120087,17.12133106550411 +transit,100.2601141067823,17.1125563232931 +transit,100.26091600720159,17.10378157031196 +transit,100.26171783250666,17.0950068065661 +transit,100.26251958274544,17.086232032060977 +transit,100.26332125796579,17.07745724680199 +transit,100.2641228582156,17.06868245079459 +transit,100.26492438354272,17.059907644044195 +transit,100.265725833995,17.05113282655624 +transit,100.26652720962025,17.042357998336144 +transit,100.26732851046629,17.03358315938934 +transit,100.26812973658089,17.024808309721273 +transit,100.26893088801187,17.016033449337357 +transit,100.26973196480694,17.00725857824302 +transit,100.27053296701388,16.9984836964437 +transit,100.27133389468041,16.989708803944822 +transit,100.27213474785425,16.98093390075181 +transit,100.2729355265831,16.972158986870113 +transit,100.27373623091462,16.963384062305142 +transit,100.27453686089652,16.95460912706233 +transit,100.2753374165764,16.94583418114712 +transit,100.27613789800193,16.937059224564926 +transit,100.27693830522072,16.928284257321177 +transit,100.27773863828037,16.91950927942132 +transit,100.27853889722849,16.910734290870778 +transit,100.27933908211261,16.90195929167497 +transit,100.28013919298034,16.893184281839343 +transit,100.28093922987918,16.884409261369314 +transit,100.28173919285669,16.87563423027033 +transit,100.28253908196035,16.866859188547803 +transit,100.28333889723767,16.85808413620717 +transit,100.28413863873612,16.84930907325387 +transit,100.2849383065032,16.840533999693328 +transit,100.28573790058631,16.831758915530973 +transit,100.2865374210329,16.82298382077224 +transit,100.28733686789042,16.814208715422556 +transit,100.28813624120622,16.805433599487355 +transit,100.28893554102771,16.796658472972066 +transit,100.28973476740228,16.787883335882125 +transit,100.29053392037726,16.779108188222956 +Phitsanulok,100.291333,16.77033303 +transit,100.29136817727955,16.761526221146873 +transit,100.29140335132223,16.752719404776496 +transit,100.29143852213012,16.743912580892363 +transit,100.29147368970533,16.735105749497954 +transit,100.29150885404994,16.726298910596743 +transit,100.29154401516607,16.71749206419222 +transit,100.2915791730558,16.70868521028787 +transit,100.29161432772122,16.699878348887182 +transit,100.29164947916443,16.691071479993624 +transit,100.29168462738754,16.682264603610708 +transit,100.29171977239261,16.673457719741904 +transit,100.29175491418177,16.6646508283907 +transit,100.29179005275708,16.655843929560593 +transit,100.29182518812065,16.64703702325506 +transit,100.29186032027457,16.638230109477604 +transit,100.29189544922092,16.6294231882317 +transit,100.29193057496178,16.620616259520865 +transit,100.29196569749925,16.61180932334857 +transit,100.29200081683543,16.603002379718312 +transit,100.29203593297238,16.594195428633583 +transit,100.29207104591221,16.58538847009788 +transit,100.292106155657,16.5765815041147 +transit,100.29214126220882,16.567774530687533 +transit,100.29217636556977,16.55896754981988 +transit,100.29221146574193,16.550160561515234 +transit,100.29224656272737,16.541353565777104 +transit,100.29228165652819,16.532546562608974 +transit,100.29231674714646,16.52373955201435 +transit,100.29235183458427,16.51493253399673 +transit,100.29238691884368,16.506125508559624 +transit,100.29242199992679,16.49731847570652 +transit,100.29245707783568,16.488511435440927 +transit,100.29249215257241,16.479704387766347 +transit,100.29252722413908,16.470897332686278 +transit,100.29256229253774,16.462090270204232 +transit,100.29259735777049,16.45328320032371 +transit,100.29263241983939,16.444476123048226 +transit,100.29266747874652,16.435669038381274 +transit,100.29270253449396,16.426861946326365 +transit,100.29273758708376,16.418054846887017 +transit,100.29277263651802,16.40924774006672 +transit,100.29280768279881,16.400440625869 +transit,100.29284272592818,16.391633504297353 +transit,100.29287776590822,16.3828263753553 +transit,100.292912802741,16.374019239046344 +transit,100.29294783642857,16.365212095374012 +transit,100.29298286697302,16.3564049443418 +transit,100.2930178943764,16.34759778595323 +transit,100.2930529186408,16.338790620211814 +transit,100.29308793976826,16.329983447121073 +transit,100.29312295776086,16.32117626668451 +transit,100.29315797262066,16.312369078905654 +transit,100.29319298434974,16.30356188378801 +transit,100.29322799295015,16.294754681335107 +transit,100.29326299842396,16.285947471550458 +transit,100.29329800077322,16.277140254437583 +WP33,100.293333,16.26833303 +transit,100.29337072366047,16.25939350035479 +transit,100.29340844390907,16.250453963169708 +transit,100.2934461607481,16.241514418448443 +transit,100.29348387417984,16.232574866194685 +transit,100.29352158420659,16.223635306412106 +transit,100.29355929083063,16.2146957391044 +transit,100.29359699405423,16.205756164275254 +transit,100.2936346938797,16.196816581928353 +transit,100.2936723903093,16.187876992067388 +transit,100.29371008334532,16.178937394696046 +transit,100.29374777299003,16.169997789818012 +transit,100.29378545924574,16.161058177436978 +transit,100.29382314211472,16.152118557556648 +transit,100.29386082159924,16.143178930180696 +transit,100.29389849770158,16.134239295312824 +transit,100.29393617042402,16.125299652956723 +transit,100.29397383976884,16.116360003116085 +transit,100.29401150573831,16.107420345794612 +transit,100.29404916833472,16.09848068099599 +transit,100.29408682756033,16.089541008723923 +transit,100.29412448341743,16.0806013289821 +transit,100.29416213590828,16.071661641774227 +transit,100.29419978503516,16.062721947103995 +transit,100.29423743080034,16.05378224497511 +transit,100.2942750732061,16.044842535391272 +transit,100.2943127122547,16.035902818356174 +transit,100.2943503479484,16.026963093873523 +transit,100.29438798028949,16.01802336194703 +transit,100.29442560928022,16.009083622580377 +transit,100.29446323492289,16.000143875777283 +transit,100.29450085721973,15.991204121541449 +transit,100.29453847617303,15.98226435987658 +transit,100.29457609178505,15.973324590786381 +transit,100.29461370405804,15.964384814274554 +transit,100.29465131299429,15.955445030344817 +transit,100.29468891859605,15.94650523900087 +transit,100.29472652086558,15.937565440246429 +transit,100.29476411980515,15.928625634085197 +transit,100.29480171541702,15.91968582052088 +transit,100.29483930770344,15.910745999557196 +transit,100.2948768966667,15.90180617119786 +transit,100.29491448230901,15.892866335446582 +transit,100.29495206463267,15.88392649230707 +transit,100.29498964363992,15.874986641783046 +transit,100.29502721933302,15.866046783878213 +transit,100.29506479171424,15.857106918596296 +transit,100.2951023607858,15.848167045941008 +transit,100.29513992655001,15.839227165916071 +transit,100.29517748900908,15.83028727852519 +transit,100.29521504816526,15.821347383772098 +transit,100.29525260402083,15.812407481660507 +transit,100.29529015657803,15.803467572194137 +transit,100.29532770583913,15.79452765537671 +transit,100.29536525180634,15.785587731211944 +transit,100.29540279448194,15.77664779970356 +transit,100.29544033386819,15.767707860855294 +transit,100.2954778699673,15.758767914670852 +transit,100.29551540278153,15.749827961153965 +transit,100.29555293231316,15.740888000308354 +transit,100.2955904585644,15.731948032137758 +transit,100.2956279815375,15.723008056645888 +transit,100.29566550123474,15.714068073836485 +transit,100.29570301765833,15.705128083713264 +transit,100.2957405308105,15.696188086279957 +transit,100.29577804069353,15.687248081540293 +transit,100.29581554730964,15.67830806949801 +transit,100.29585305066108,15.669368050156828 +transit,100.2958905507501,15.66042802352049 +transit,100.29592804757891,15.651487989592715 +transit,100.29596554114978,15.642547948377242 +transit,100.29600303146493,15.633607899877804 +transit,100.29604051852661,15.624667844098143 +transit,100.29607800233705,15.61572778104198 +transit,100.29611548289849,15.606787710713057 +transit,100.29615296021316,15.597847633115112 +transit,100.2961904342833,15.588907548251884 +transit,100.29622790511115,15.57996745612711 +transit,100.29626537269893,15.571027356744525 +transit,100.29630283704888,15.562087250107867 +transit,100.29634029816324,15.553147136220877 +transit,100.29637775604424,15.544207015087304 +transit,100.2964152106941,15.535266886710884 +transit,100.29645266211504,15.52632675109536 +transit,100.29649011030932,15.51738660824447 +transit,100.29652755527916,15.508446458161966 +transit,100.29656499702678,15.499506300851582 +transit,100.2966024355544,15.490566136317074 +transit,100.29663987086427,15.481625964562182 +transit,100.2966773029586,15.472685785590649 +transit,100.29671473183961,15.463745599406233 +transit,100.29675215750954,15.454805406012671 +transit,100.29678957997062,15.445865205413721 +transit,100.29682699922505,15.436924997613124 +transit,100.29686441527505,15.427984782614642 +transit,100.29690182812287,15.419044560422003 +transit,100.29693923777072,15.410104331038985 +transit,100.29697664422082,15.401164094469324 +transit,100.29701404747537,15.392223850716775 +transit,100.29705144753662,15.3832835997851 +transit,100.29708884440677,15.374343341678044 +transit,100.29712623808804,15.365403076399367 +transit,100.29716362858267,15.356462803952828 +transit,100.29720101589284,15.347522524342171 +transit,100.29723840002077,15.338582237571163 +transit,100.2972757809687,15.329641943643564 +transit,100.29731315873885,15.32070164256313 +transit,100.29735053333339,15.311761334333612 +transit,100.29738790475457,15.302821018958783 +transit,100.29742527300459,15.293880696442397 +transit,100.29746263808566,15.284940366788215 +WP34,100.2975,15.27600003 +transit,100.30069924279596,15.26770949073969 +transit,100.30389823445499,15.259418899695044 +transit,100.30709697513836,15.251128256898525 +transit,100.31029546500737,15.24283756238261 +transit,100.31349370422318,15.234546816179758 +transit,100.31669169294699,15.226256018322408 +transit,100.31988943133992,15.217965168843028 +transit,100.32308691956304,15.209674267774032 +transit,100.32628415777738,15.20138331514786 +transit,100.32948114614398,15.193092310996935 +transit,100.33267788482374,15.184801255353674 +transit,100.3358743739776,15.176510148250474 +transit,100.33907061376644,15.168218989719747 +transit,100.34226660435107,15.15992777979387 +transit,100.34546234589229,15.15163651850525 +transit,100.3486578385508,15.143345205886236 +transit,100.35185308248737,15.135053841969224 +transit,100.35504807786259,15.126762426786561 +transit,100.35824282483712,15.118470960370601 +transit,100.36143732357152,15.110179442753697 +transit,100.36463157422632,15.101887873968192 +transit,100.367825576962,15.093596254046412 +transit,100.37101933193902,15.085304583020678 +transit,100.37421283931778,15.077012860923318 +transit,100.37740609925865,15.06872108778664 +transit,100.38059911192194,15.060429263642948 +transit,100.38379187746793,15.052137388524525 +transit,100.38698439605686,15.043845462463674 +transit,100.39017666784893,15.035553485492663 +transit,100.39336869300428,15.027261457643776 +transit,100.39656047168305,15.018969378949272 +transit,100.39975200404527,15.01067724944141 +transit,100.40294329025099,15.00238506915245 +transit,100.40613433046019,14.99409283811462 +transit,100.40932512483282,14.985800556360166 +transit,100.41251567352877,14.977508223921316 +transit,100.41570597670791,14.969215840830294 +transit,100.41889603453006,14.96092340711931 +transit,100.42208584715502,14.95263092282057 +transit,100.42527541474247,14.944338387966276 +transit,100.42846473745215,14.936045802588618 +transit,100.4316538154437,14.927753166719786 +transit,100.43484264887672,14.91946048039195 +transit,100.43803123791079,14.911167743637288 +transit,100.44121958270544,14.90287495648796 +transit,100.44440768342017,14.894582118976123 +transit,100.4475955402144,14.886289231133915 +transit,100.45078315324754,14.87799629299349 +transit,100.45397052267896,14.869703304586976 +transit,100.45715764866797,14.861410265946501 +transit,100.46034453137388,14.853117177104183 +transit,100.46353117095589,14.844824038092138 +transit,100.46671756757323,14.836530848942466 +transit,100.46990372138504,14.828237609687264 +transit,100.47308963255043,14.819944320358626 +transit,100.47627530122848,14.811650980988631 +transit,100.47946072757824,14.803357591609359 +transit,100.4826459117587,14.795064152252879 +transit,100.48583085392879,14.78677066295124 +transit,100.48901555424742,14.778477123736515 +transit,100.49220001287348,14.770183534640735 +transit,100.4953842299658,14.761889895695951 +transit,100.49856820568314,14.753596206934187 +transit,100.50175194018428,14.74530246838747 +transit,100.5049354336279,14.73700868008782 +transit,100.50811868617268,14.72871484206725 +transit,100.51130169797725,14.720420954357756 +transit,100.51448446920017,14.712127016991342 +WP35,100.517667,14.70383303 +transit,100.52002398109886,14.69557974768047 +transit,100.52238078523528,14.687326435559017 +transit,100.52473741252587,14.67907309365443 +transit,100.52709386308716,14.670819721985474 +transit,100.52945013703572,14.662566320570951 +transit,100.53180623448806,14.65431288942962 +transit,100.53416215556064,14.646059428580251 +transit,100.53651790036989,14.637805938041621 +transit,100.53887346903225,14.629552417832473 +transit,100.5412288616641,14.621298867971596 +transit,100.54358407838177,14.613045288477721 +transit,100.54593911930161,14.604791679369601 +transit,100.5482939845399,14.596538040666001 +transit,100.5506486742129,14.58828437238565 +transit,100.55300318843683,14.580030674547297 +transit,100.55535752732793,14.571776947169676 +transit,100.55771169100232,14.563523190271521 +transit,100.56006567957617,14.55526940387156 +transit,100.56241949316559,14.547015587988525 +transit,100.56477313188665,14.538761742641132 +transit,100.5671265958554,14.530507867848103 +transit,100.56947988518785,14.52225396362816 +WP36,100.571833,14.51400003 +transit,100.57420813650732,14.505680080989574 +transit,100.57658309567651,14.497360102068562 +transit,100.57895787762642,14.489040093256166 +transit,100.58133248247591,14.480720054571576 +transit,100.58370691034378,14.47239998603399 +transit,100.58608116134877,14.464079887662594 +transit,100.58845523560967,14.45575975947656 +transit,100.59082913324517,14.447439601495084 +transit,100.59320285437393,14.439119413737332 +transit,100.59557639911462,14.430799196222486 +transit,100.59794976758587,14.422478948969708 +transit,100.60032295990625,14.414158671998159 +transit,100.60269597619431,14.405838365327005 +transit,100.60506881656859,14.397518028975405 +transit,100.60744148114759,14.389197662962516 +transit,100.60981397004974,14.380877267307483 +transit,100.61218628339351,14.372556842029446 +transit,100.61455842129728,14.364236387147564 +transit,100.61693038387942,14.355915902680964 +transit,100.61930217125828,14.34759538864878 +transit,100.62167378355217,14.339274845070147 +transit,100.62404522087937,14.3309542719642 +transit,100.6264164833581,14.322633669350049 +transit,100.62878757110661,14.314313037246832 +transit,100.63115848424307,14.30599237567365 +transit,100.63352922288564,14.297671684649622 +transit,100.63589978715244,14.289350964193856 +transit,100.63827017716157,14.281030214325462 +transit,100.64064039303109,14.272709435063536 +transit,100.64301043487905,14.264388626427179 +transit,100.64538030282341,14.25606778843549 +transit,100.64774999698218,14.24774692110755 +transit,100.6501195174733,14.239426024462457 +transit,100.65248886441466,14.231105098519285 +transit,100.65485803792416,14.222784143297124 +transit,100.65722703811964,14.21446315881504 +transit,100.65959586511892,14.206142145092118 +transit,100.66196451903978,14.197821102147415 +WP37,100.664333,14.18950003 +transit,100.66664363112469,14.181428781010574 +transit,100.66895409878745,14.173357504322949 +transit,100.67126440309633,14.165286199954679 +transit,100.6735745441593,14.15721486792332 +transit,100.6758845220843,14.149143508246421 +transit,100.67819433697926,14.141072120941542 +transit,100.68050398895208,14.133000706026225 +transit,100.68281347811065,14.124929263518016 +transit,100.6851228045628,14.11685779343445 +transit,100.68743196841635,14.108786295793069 +transit,100.68974096977908,14.100714770611404 +transit,100.6920498087588,14.092643217906986 +transit,100.6943584854632,14.084571637697344 +WP38,100.696667,14.07650003 +transit,100.69257331716587,14.069046258352722 +transit,100.68847989956993,14.061592412710672 +transit,100.68438674705119,14.054138493118721 +transit,100.68029385944872,14.046684499621724 +transit,100.67620123660159,14.03923043226454 +transit,100.67210887834894,14.031776291092006 +transit,100.66801678452988,14.02432207614896 +transit,100.66392495498363,14.016867787480221 +transit,100.65983338954939,14.009413425130608 +transit,100.65574208806642,14.001958989144919 +transit,100.65165105037399,13.994504479567963 +transit,100.64756027631141,13.98704989644452 +transit,100.64346976571804,13.97959523981937 +transit,100.63937951843324,13.972140509737278 +transit,100.63528953429643,13.964685706243007 +transit,100.63119981314708,13.95723082938131 +transit,100.62711035482462,13.949775879196922 +transit,100.62302115916859,13.942320855734582 +transit,100.61893222601852,13.93486575903901 +transit,100.614843555214,13.92741058915492 +transit,100.6107551465946,13.919955346127017 +Don_Mueang,100.606667,13.91250003 +transit,100.599341342713,13.908266503833755 +transit,100.59201595181146,13.90403275628471 +transit,100.58469082721518,13.899798787430663 +transit,100.57736596884396,13.895564597349402 +transit,100.57004137661762,13.891330186118715 +transit,100.56271705045594,13.887095553816376 +transit,100.55539299027873,13.882860700520158 +transit,100.54806919600576,13.878625626307828 +transit,100.54074566755678,13.87439033125714 +transit,100.53342240485159,13.870154815445852 +transit,100.52609940780994,13.865919078951713 +transit,100.51877667635156,13.861683121852458 +transit,100.51145421039624,13.857446944225824 +transit,100.5041320098637,13.853210546149542 +transit,100.49681007467366,13.848973927701334 +transit,100.48948840474586,13.844737088958915 +WP40,100.482167,13.84050003 +transit,100.47628681767374,13.835061382455812 +transit,100.47040690852803,13.829622591498682 +transit,100.46452727244568,13.82418365719346 +transit,100.4586479093094,13.818744579604992 +transit,100.45276881900202,13.81330535879812 +transit,100.44689000140625,13.807865994837666 +transit,100.44101145640494,13.802426487788445 +transit,100.43513318388084,13.796986837715274 +transit,100.42925518371678,13.791547044682954 +transit,100.42337745579556,13.786107108756267 +WP41,100.4175,13.78066703 +transit,100.41831485710395,13.77205175376932 +transit,100.41912965452572,13.76343646882459 +transit,100.41994439230844,13.754821175171218 +transit,100.42075907049527,13.746205872814615 +transit,100.42157368912932,13.737590561760186 +transit,100.4223882482537,13.728975242013346 +transit,100.4232027479115,13.720359913579498 +transit,100.42401718814584,13.711744576464056 +transit,100.42483156899976,13.703129230672427 +transit,100.42564589051635,13.694513876210022 +transit,100.42646015273864,13.685898513082249 +transit,100.4272743557097,13.677283141294513 +transit,100.42808849947255,13.668667760852232 +transit,100.4289025840702,13.660052371760813 +transit,100.42971660954566,13.65143697402566 +transit,100.43053057594193,13.642821567652192 +transit,100.43134448330198,13.634206152645808 +transit,100.43215833166882,13.625590729011927 +transit,100.43297212108537,13.61697529675595 +transit,100.4337858515946,13.608359855883293 +transit,100.43459952323946,13.599744406399367 +transit,100.43541313606285,13.591128948309574 +transit,100.4362266901077,13.582513481619333 +transit,100.43704018541692,13.573898006334051 +transit,100.43785362203339,13.565282522459135 +WP42,100.438667,13.55666703 +transit,100.44645578706078,13.55271367800042 +transit,100.45424431666602,13.5487600820121 +transit,100.46203258888636,13.544806242116662 +transit,100.46982060379246,13.540852158395728 +transit,100.47760836145501,13.536897830930911 +transit,100.48539586194471,13.532943259803822 +transit,100.49318310533226,13.528988445096063 +transit,100.50097009168837,13.525033386889243 +transit,100.50875682108376,13.521078085264945 +transit,100.51654329358917,13.517122540304765 +transit,100.52432950927535,13.513166752090296 +transit,100.53211546821304,13.50921072070311 +transit,100.539901170473,13.505254446224786 +transit,100.54768661612604,13.5012979287369 +transit,100.55547180524292,13.497341168321014 +transit,100.56325673789445,13.4933841650587 +transit,100.57104141415144,13.489426919031505 +transit,100.5788258340847,13.485469430320986 +transit,100.58660999776507,13.481511699008696 +transit,100.59439390526337,13.477553725176172 +transit,100.60217755665047,13.473595508904957 +transit,100.60996095199724,13.469637050276585 +transit,100.61774409137453,13.465678349372583 +transit,100.62552697485323,13.461719406274481 +transit,100.63330960250424,13.457760221063795 +transit,100.64109197439845,13.453800793822044 +transit,100.64887409060678,13.449841124630735 +transit,100.65665595120016,13.44588121357138 +transit,100.66443755624954,13.441921060725473 +transit,100.67221890582583,13.437960666174517 +WP43,100.68,13.43400003 +transit,100.68409653236691,13.426354643687546 +transit,100.68819280541176,13.418709186178692 +transit,100.69228881930184,13.411063657519275 +transit,100.69638457420444,13.403418057755124 +transit,100.70048007028679,13.395772386932059 +transit,100.70457530771608,13.388126645095898 +transit,100.7086702866595,13.380480832292449 +transit,100.71276500728416,13.372834948567501 +transit,100.71685946975718,13.36518899396684 +transit,100.72095367424564,13.35754296853624 +transit,100.72504762091653,13.34989687232148 +transit,100.72914130993689,13.342250705368308 +transit,100.73323474147368,13.334604467722475 +transit,100.73732791569383,13.326958159429722 +transit,100.74142083276422,13.31931178053578 +transit,100.74551349285174,13.311665331086372 +transit,100.74960589612323,13.304018811127207 +transit,100.75369804274547,13.29637222070399 +transit,100.75778993288523,13.288725559862412 +transit,100.76188156670925,13.281078828648166 +transit,100.76597294438422,13.273432027106924 +transit,100.77006406607681,13.265785155284348 +transit,100.77415493195365,13.258138213226102 +transit,100.77824554218135,13.25049120097783 +transit,100.78233589692645,13.242844118585177 +transit,100.78642599635553,13.235196966093769 +transit,100.79051584063504,13.227549743549227 +transit,100.79460542993148,13.219902450997166 +transit,100.79869476441125,13.212255088483184 +transit,100.80278384424079,13.204607656052886 +transit,100.80687266958644,13.196960153751846 +transit,100.81096124061453,13.189312581625643 +transit,100.81504955749138,13.18166493971985 +transit,100.81913762038324,13.174017228080022 +transit,100.82322542945636,13.166369446751698 +transit,100.82731298487693,13.158721595780428 +transit,100.83140028681113,13.151073675211741 +transit,100.83548733542507,13.143425685091158 +transit,100.83957413088488,13.135777625464195 +transit,100.84366067335662,13.128129496376353 +transit,100.84774696300633,13.120481297873123 +WP44,100.851833,13.11283303 +transit,100.85449471198127,13.104854234186503 +transit,100.85715625248721,13.096875405965013 +transit,100.85981762163634,13.08889654535735 +transit,100.86247881954719,13.080917652385333 +transit,100.86513984633824,13.072938727070786 +transit,100.86780070212794,13.064959769435514 +transit,100.87046138703474,13.056980779501329 +transit,100.87312190117704,13.049001757290037 +transit,100.87578224467323,13.041022702823437 +transit,100.87844241764166,13.033043616123326 +transit,100.88110242020066,13.025064497211499 +transit,100.88376225246853,13.017085346109743 +transit,100.88642191456354,13.009106162839842 +transit,100.88908140660395,13.001126947423584 +transit,100.89174072870796,12.993147699882734 +transit,100.89439988099377,12.985168420239072 +transit,100.89705886357957,12.97718910851437 +transit,100.89971767658348,12.969209764730383 +transit,100.90237632012364,12.961230388908888 +transit,100.9050347943181,12.953250981071628 +transit,100.90769309928494,12.945271541240357 +transit,100.9103512351422,12.937292069436838 +transit,100.9130092020079,12.929312565682803 +WP45,100.915667,12.92133303 +transit,100.92314465033589,12.917429712328273 +transit,100.93062206848363,12.913526179498232 +transit,100.93809925451029,12.909622431583552 +transit,100.94557620848295,12.905718468657884 +transit,100.95305293046867,12.901814290794897 +transit,100.96052942053456,12.89790989806824 +transit,100.96800567874767,12.894005290551569 +transit,100.97548170517514,12.890100468318519 +transit,100.98295749988408,12.886195431442736 +transit,100.99043306294158,12.882290179997861 +transit,100.99790839441478,12.878384714057525 +transit,101.00538349437082,12.87447903369535 +transit,101.01285836287684,12.870573138984971 +WP46,101.020333,12.86666703 +transit,101.01963555555335,12.858174652191412 +transit,101.01893815799811,12.849682267042814 +transit,101.0182408072991,12.841189874558976 +transit,101.01754350342117,12.832697474744649 +transit,101.01684624632918,12.824205067604593 +transit,101.01614903598798,12.815712653143565 +transit,101.01545187236246,12.807220231366331 +transit,101.0147547554175,12.798727802277648 +transit,101.01405768511798,12.79023536588228 +transit,101.0133606614288,12.781742922184982 +transit,101.01266368431487,12.773250471190517 +transit,101.01196675374109,12.764758012903643 +transit,101.01126986967242,12.756265547329125 +transit,101.01057303207375,12.747773074471723 +transit,101.00987624091005,12.739280594336194 +transit,101.00917949614626,12.730788106927307 +transit,101.00848279774735,12.722295612249814 +transit,101.00778614567827,12.713803110308486 +transit,101.007089539904,12.705310601108073 +transit,101.00639298038953,12.69681808465335 +transit,101.00569646709987,12.68832556094907 +U_Tapao,101.005,12.67983303 diff --git a/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/all_plans/kuala_lumpur_waypoints.csv b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/all_plans/kuala_lumpur_waypoints.csv new file mode 100644 index 0000000..d39a56d --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/all_plans/kuala_lumpur_waypoints.csv @@ -0,0 +1,3844 @@ +city,utc_adjust +kuala_lumpur,8 +waypoint,lon,lat +WP1,101.5492,3.130800026 +transit,101.54671815629797,3.1394136350020267 +transit,101.54423627194012,3.148027236663594 +transit,101.54175434681403,3.1566408309644505 +transit,101.53927238080729,3.165254417884345 +transit,101.53679037380748,3.173867997403025 +transit,101.53430832570216,3.1824815695002364 +transit,101.53182623637889,3.1910951341557263 +transit,101.52934410572523,3.1997086913492376 +transit,101.52686193362874,3.2083222410605168 +transit,101.52437971997692,3.216935783269303 +transit,101.52189746465734,3.225549317955342 +transit,101.51941516755753,3.2341628450983726 +transit,101.51693282856498,3.242776364678136 +transit,101.51445044756721,3.25138987667437 +transit,101.51196802445175,3.2600033810668148 +transit,101.50948555910605,3.268616877835206 +transit,101.50700305141764,3.277230366959282 +transit,101.504520501274,3.2858438484187764 +transit,101.50203790856257,3.2944573221934257 +transit,101.49955527317086,3.3030707882629624 +transit,101.4970725949863,3.3116842466071192 +transit,101.49458987389636,3.320297697205628 +transit,101.49210710978849,3.3289111400382203 +transit,101.4896243025501,3.337524575084625 +transit,101.48714145206866,3.3461380023245715 +transit,101.48465855823156,3.3547514217377885 +transit,101.48217562092623,3.363364833304001 +transit,101.47969264004007,3.3719782370029368 +transit,101.4772096154605,3.3805916328143213 +transit,101.4747265470749,3.3892050207178777 +transit,101.47224343477065,3.3978184006933283 +transit,101.46976027843515,3.4064317727203974 +transit,101.46727707795574,3.4150451367788057 +transit,101.4647938332198,3.4236584928482725 +transit,101.4623105441147,3.432271840908518 +transit,101.45982721052776,3.44088518093926 +transit,101.45734383234634,3.4494985129202176 +transit,101.45486040945775,3.4581118368311032 +transit,101.45237694174935,3.4667251526516365 +transit,101.44989342910843,3.4753384603615296 +transit,101.4474098714223,3.483951759940496 +transit,101.44492626857826,3.4925650513682487 +transit,101.44244262046362,3.5011783346244996 +transit,101.43995892696566,3.5097916096889565 +transit,101.43747518797166,3.5184048765413327 +transit,101.43499140336887,3.5270181351613346 +transit,101.43250757304457,3.535631385528669 +transit,101.43002369688602,3.544244627623043 +transit,101.42753977478047,3.5528578614241626 +transit,101.42505580661513,3.5614710869117308 +transit,101.42257179227725,3.5700843040654515 +transit,101.42008773165406,3.5786975128650287 +transit,101.41760362463276,3.587310713290161 +transit,101.41511947110057,3.5959239053205514 +transit,101.41263527094466,3.6045370889358965 +transit,101.41015102405225,3.6131502641158972 +transit,101.40766673031052,3.6217634308402493 +transit,101.40518238960665,3.6303765890886495 +transit,101.40269800182779,3.6389897388407912 +transit,101.4002135668611,3.6476028800763705 +transit,101.39772908459373,3.656216012775081 +transit,101.39524455491284,3.6648291369166115 +transit,101.39275997770554,3.673442252480657 +transit,101.39027535285896,3.682055359446906 +transit,101.38779068026024,3.6906684577950455 +transit,101.38530595979645,3.699281547504767 +transit,101.38282119135474,3.7078946285557537 +transit,101.38033637482216,3.7165077009276932 +transit,101.37785151008582,3.725120764600269 +transit,101.37536659703278,3.7337338195531657 +transit,101.37288163555012,3.7423468657660672 +transit,101.37039662552489,3.7509599032186514 +transit,101.36791156684416,3.759572931890603 +transit,101.36542645939494,3.768185951761598 +transit,101.36294130306429,3.7767989628113146 +transit,101.36045609773923,3.7854119650194322 +transit,101.35797084330677,3.7940249583656254 +transit,101.35548553965394,3.802637942829569 +transit,101.35300018666771,3.811250918390939 +transit,101.35051478423509,3.8198638850294078 +transit,101.34802933224306,3.828476842724643 +transit,101.3455438305786,3.837089791456321 +transit,101.34305827912867,3.845702731204107 +transit,101.34057267778023,3.854315661947672 +transit,101.33808702642023,3.8629285836666845 +transit,101.33560132493561,3.8715414963408064 +transit,101.33311557321329,3.880154399949707 +transit,101.33062977114021,3.888767294473048 +transit,101.32814391860327,3.897380179890492 +transit,101.3256580154894,3.905993056181703 +transit,101.32317206168547,3.91460592332634 +transit,101.32068605707839,3.923218781304064 +transit,101.31820000155501,3.931831630094532 +transit,101.31571389500223,3.9404444696774013 +transit,101.3132277373069,3.94905730003233 +transit,101.31074152835589,3.9576701211389724 +transit,101.308255268036,3.9662829329769806 +transit,101.30576895623412,3.9748957355260095 +transit,101.30328259283704,3.9835085287657095 +transit,101.30079617773158,3.9921213126757333 +transit,101.29830971080456,4.000734087235728 +transit,101.29582319194279,4.009346852425342 +transit,101.29333662103303,4.017959608224223 +transit,101.29084999796208,4.026572354612019 +transit,101.28836332261672,4.035185091568371 +transit,101.2858765948837,4.043797819072925 +transit,101.28338981464978,4.052410537105323 +transit,101.28090298180172,4.061023245645206 +transit,101.27841609622622,4.069635944672215 +transit,101.27592915781004,4.0782486341659885 +transit,101.27344216643988,4.086861314106163 +transit,101.27095512200246,4.09547398447238 +transit,101.26846802438449,4.104086645244268 +transit,101.26598087347263,4.112699296401466 +transit,101.26349366915359,4.121311937923607 +transit,101.26100641131403,4.129924569790323 +transit,101.25851909984061,4.138537191981242 +transit,101.25603173461998,4.147149804475996 +transit,101.2535443155388,4.155762407254214 +transit,101.2510568424837,4.16437500029552 +transit,101.24856931534131,4.172987583579543 +transit,101.24608173399825,4.181600157085907 +transit,101.2435940983411,4.190212720794236 +transit,101.24110640825648,4.198825274684151 +transit,101.23861866363099,4.207437818735275 +transit,101.23613086435117,4.216050352927228 +transit,101.23364301030362,4.224662877239628 +transit,101.2311551013749,4.233275391652092 +transit,101.22866713745155,4.241887896144237 +transit,101.22617911842012,4.250500390695681 +transit,101.22369104416714,4.259112875286034 +transit,101.22120291457912,4.267725349894909 +transit,101.21871472954258,4.276337814501919 +transit,101.21622648894403,4.284950269086675 +transit,101.21373819266996,4.293562713628785 +transit,101.21124984060685,4.302175148107857 +transit,101.20876143264118,4.310787572503495 +transit,101.2062729686594,4.31939998679531 +transit,101.20378444854799,4.328012390962902 +transit,101.20129587219337,4.336624784985875 +transit,101.198807239482,4.345237168843831 +transit,101.19631855030028,4.35384954251637 +transit,101.19382980453463,4.36246190598309 +transit,101.19134100207147,4.37107425922359 +transit,101.18885214279719,4.379686602217468 +transit,101.18636322659817,4.388298934944316 +transit,101.1838742533608,4.396911257383732 +transit,101.18138522297144,4.405523569515307 +transit,101.17889613531645,4.414135871318632 +transit,101.17640699028216,4.422748162773298 +transit,101.17391778775493,4.431360443858896 +transit,101.17142852762109,4.43997271455501 +transit,101.16893920976692,4.4485849748412285 +transit,101.16644983407876,4.457197224697137 +transit,101.16396040044292,4.465809464102319 +transit,101.16147090874564,4.474421693036358 +transit,101.15898135887323,4.4830339114788345 +transit,101.15649175071196,4.491646119409329 +transit,101.15400208414808,4.500258316807418 +transit,101.15151235906782,4.508870503652683 +transit,101.14902257535744,4.517482679924698 +transit,101.14653273290315,4.52609484560304 +transit,101.1440428315912,4.53470700066728 +transit,101.14155287130774,4.54331914509699 +transit,101.13906285193902,4.551931278871744 +transit,101.13657277337119,4.560543401971109 +transit,101.13408263549043,4.569155514374654 +transit,101.13159243818293,4.577767616061948 +transit,101.12910218133483,4.586379707012555 +transit,101.12661186483227,4.594991787206039 +transit,101.12412148856139,4.603603856621966 +transit,101.1216310524083,4.612215915239894 +transit,101.11914055625914,4.620827963039385 +WP2,101.11665,4.62944 +transit,101.11163656307947,4.6367961180241295 +transit,101.10662302244387,4.644152198936055 +transit,101.10160937792632,4.65150824267596 +transit,101.0965956293599,4.658864249184025 +transit,101.09158177657767,4.666220218400423 +transit,101.0865678194127,4.673576150265327 +transit,101.08155375769807,4.680932044718904 +transit,101.07653959126681,4.688287901701314 +transit,101.07152531995195,4.695643721152719 +transit,101.06651094358652,4.70299950301327 +transit,101.06149646200353,4.71035524722312 +transit,101.05648187503598,4.7177109537224124 +transit,101.05146718251687,4.72506662245129 +transit,101.04645238427918,4.7324222533498865 +transit,101.04143748015588,4.739777846358341 +transit,101.03642246997993,4.747133401416775 +transit,101.03140735358427,4.754488918465319 +transit,101.02639213080187,4.76184439744409 +transit,101.02137680146562,4.769199838293204 +transit,101.01636136540846,4.7765552409527725 +transit,101.01134582246328,4.7839106053629035 +transit,101.006330172463,4.791265931463697 +transit,101.00131441524049,4.798621219195255 +transit,100.99629855062861,4.8059764684976685 +transit,100.99128257846026,4.813331679311029 +transit,100.98626649856827,4.820686851575422 +transit,100.98125031078548,4.828041985230926 +transit,100.97623401494472,4.835397080217622 +transit,100.97121761087884,4.842752136475578 +transit,100.96620109842061,4.850107153944866 +transit,100.96118447740284,4.857462132565549 +transit,100.95616774765833,4.864817072277681 +transit,100.95115090901986,4.872171973021322 +transit,100.94613396132017,4.879526834736521 +transit,100.94111690439203,4.8868816573633245 +transit,100.93609973806818,4.8942364408417705 +transit,100.93108246218137,4.901591185111901 +transit,100.9260650765643,4.9089458901137455 +transit,100.92104758104969,4.916300555787332 +transit,100.91602997547024,4.923655182072687 +transit,100.91101225965863,4.931009768909827 +transit,100.90599443344755,4.938364316238769 +transit,100.90097649666966,4.945718823999522 +transit,100.8959584491576,4.9530732921320935 +transit,100.89094029074406,4.960427720576481 +transit,100.88592202126162,4.967782109272686 +transit,100.88090364054293,4.9751364581607 +transit,100.8758851484206,4.982490767180508 +transit,100.8708665447272,4.989845036272097 +transit,100.86584782929536,4.9971992653754445 +transit,100.86082900195765,5.004553454430524 +transit,100.85581006254661,5.011907603377307 +transit,100.85079101089482,5.019261712155756 +transit,100.84577184683481,5.0266157807058365 +transit,100.8407525701991,5.0339698089675 +transit,100.83573318082024,5.041323796880702 +transit,100.83071367853071,5.048677744385387 +transit,100.82569406316303,5.056031651421497 +transit,100.82067433454968,5.063385517928972 +transit,100.81565449252312,5.070739343847745 +transit,100.81063453691584,5.078093129117744 +transit,100.80561446756028,5.085446873678894 +transit,100.80059428428886,5.092800577471113 +transit,100.79557398693403,5.100154240434319 +transit,100.79055357532822,5.107507862508419 +transit,100.78553304930381,5.114861443633323 +transit,100.78051240869321,5.122214983748927 +transit,100.7754916533288,5.12956848279513 +transit,100.77047078304295,5.136921940711825 +transit,100.76544979766803,5.144275357438897 +transit,100.76042869703636,5.151628732916229 +transit,100.75540748098031,5.158982067083698 +transit,100.75038614933219,5.166335359881179 +transit,100.74536470192432,5.17368861124854 +transit,100.74034313858898,5.1810418211256435 +transit,100.7353214591585,5.188394989452351 +transit,100.73029966346512,5.195748116168515 +transit,100.72527775134112,5.203101201213984 +transit,100.72025572261877,5.210454244528607 +transit,100.7152335771303,5.21780724605222 +transit,100.71021131470795,5.22516020572466 +transit,100.70518893518391,5.2325131234857585 +transit,100.70016643839044,5.239865999275342 +transit,100.69514382415969,5.24721883303323 +transit,100.69012109232386,5.25457162469924 +transit,100.68509824271514,5.261924374213183 +transit,100.68007527516566,5.269277081514867 +transit,100.6750521895076,5.276629746544092 +transit,100.67002898557308,5.283982369240659 +transit,100.66500566319422,5.291334949544358 +transit,100.65998222220314,5.298687487394977 +transit,100.65495866243195,5.306039982732301 +transit,100.64993498371273,5.313392435496106 +transit,100.64491118587755,5.320744845626166 +transit,100.6398872687585,5.328097213062249 +transit,100.6348632321876,5.335449537744121 +transit,100.62983907599693,5.342801819611537 +transit,100.62481480001848,5.3501540586042555 +transit,100.6197904040843,5.357506254662023 +transit,100.61476588802637,5.364858407724582 +transit,100.6097412516767,5.372210517731676 +transit,100.60471649486726,5.379562584623037 +transit,100.59969161743003,5.386914608338395 +transit,100.59466661919696,5.394266588817477 +WP3,100.5896415,5.401618526 +transit,100.5813445401226,5.398777679035525 +transit,100.57304765748664,5.395936718513381 +transit,100.56475085205356,5.393095644494695 +transit,100.55645412378486,5.390254457040593 +transit,100.54815747264199,5.3874131562122045 +transit,100.53986089858641,5.384571742070661 +transit,100.53156440157957,5.381730214677086 +transit,100.52326798158292,5.378888574092612 +transit,100.51497163855791,5.376046820378368 +transit,100.50667537246598,5.373204953595482 +transit,100.49837918326854,5.370362973805085 +transit,100.49008307092704,5.367520881068305 +transit,100.48178703540292,5.364678675446276 +transit,100.47349107665755,5.361836357000125 +transit,100.46519519465238,5.358993925790986 +transit,100.4568993893488,5.356151381879984 +transit,100.44860366070824,5.353308725328258 +transit,100.44030800869207,5.3504659561969365 +transit,100.43201243326168,5.347623074547148 +transit,100.42371693437848,5.344780080440028 +transit,100.41542151200383,5.341936973936709 +transit,100.40712616609913,5.339093755098322 +transit,100.39883089662574,5.336250423986 +transit,100.39053570354503,5.3334069806608735 +transit,100.38224058681836,5.330563425184082 +transit,100.37394554640707,5.327719757616753 +transit,100.36565058227255,5.324875978020024 +transit,100.35735569437612,5.322032086455028 +transit,100.34906088267914,5.319188082982897 +transit,100.34076614714292,5.316343967664767 +transit,100.33247148772882,5.313499740561776 +transit,100.32417690439816,5.310655401735053 +transit,100.31588239711225,5.307810951245737 +transit,100.30758796583241,5.304966389154963 +transit,100.29929361051997,5.302121715523866 +transit,100.29099933113622,5.299276930413582 +transit,100.28270512764246,5.296432033885248 +WP4,100.274411,5.293587026 +transit,100.27692121572846,5.284947654341158 +transit,100.27943136189771,5.276308270128779 +transit,100.28194143862395,5.267668873383704 +transit,100.28445144602334,5.2590294641267725 +transit,100.28696138421206,5.250390042378823 +transit,100.28947125330627,5.241750608160693 +transit,100.2919810534221,5.233111161493218 +transit,100.29449078467569,5.224471702397231 +transit,100.29700044718314,5.215832230893566 +transit,100.29951004106057,5.207192747003053 +transit,100.30201956642406,5.198553250746522 +transit,100.30452902338972,5.189913742144798 +transit,100.3070384120736,5.18127422121871 +transit,100.30954773259175,5.172634687989083 +transit,100.31205698506024,5.163995142476737 +transit,100.31456616959508,5.155355584702496 +transit,100.31707528631232,5.146716014687179 +transit,100.31958433532795,5.138076432451605 +transit,100.32209331675796,5.129436838016594 +transit,100.32460223071836,5.120797231402956 +transit,100.32711107732511,5.112157612631509 +transit,100.32961985669418,5.103517981723063 +transit,100.33212856894153,5.094878338698431 +transit,100.33463721418308,5.086238683578423 +transit,100.33714579253477,5.077599016383843 +transit,100.33965430411253,5.068959337135502 +transit,100.34216274903224,5.060319645854201 +transit,100.3446711274098,5.051679942560748 +transit,100.3471794393611,5.043040227275942 +transit,100.34968768500201,5.034400500020585 +transit,100.35219586444838,5.025760760815474 +transit,100.35470397781607,5.017121009681407 +transit,100.3572120252209,5.008481246639183 +transit,100.35972000677872,4.999841471709591 +transit,100.3622279226053,4.991201684913431 +transit,100.36473577281647,4.982561886271489 +transit,100.36724355752803,4.973922075804558 +transit,100.36975127685574,4.965282253533426 +transit,100.37225893091536,4.956642419478879 +transit,100.37476651982267,4.948002573661705 +transit,100.3772740436934,4.9393627161026865 +transit,100.37978150264328,4.930722846822606 +transit,100.38228889678804,4.922082965842248 +transit,100.38479622624338,4.91344307318239 +transit,100.38730349112501,4.904803168863809 +transit,100.38981069154862,4.896163252907287 +transit,100.39231782762987,4.887523325333594 +transit,100.39482489948443,4.8788833861635075 +transit,100.39733190722797,4.870243435417798 +transit,100.39983885097611,4.86160347311724 +transit,100.4023457308445,4.852963499282601 +transit,100.40485254694875,4.84432351393465 +transit,100.40735929940448,4.835683517094153 +transit,100.40986598832728,4.827043508781877 +transit,100.41237261383273,4.818403489018586 +transit,100.41487917603644,4.8097634578250394 +transit,100.41738567505392,4.801123415222004 +transit,100.41989211100078,4.792483361230237 +transit,100.42239848399252,4.783843295870497 +transit,100.42490479414471,4.77520321916354 +transit,100.42741104157284,4.766563131130122 +transit,100.42991722639245,4.757923031790999 +transit,100.432423348719,4.749282921166923 +transit,100.43492940866801,4.740642799278644 +transit,100.43743540635495,4.732002666146916 +transit,100.43994134189529,4.723362521792482 +transit,100.44244721540448,4.714722366236092 +transit,100.44495302699798,4.706082199498494 +transit,100.4474587767912,4.697442021600429 +transit,100.44996446489958,4.688801832562642 +transit,100.45247009143853,4.680161632405875 +transit,100.45497565652344,4.671521421150867 +transit,100.45748116026972,4.662881198818358 +transit,100.45998660279275,4.654240965429086 +transit,100.46249198420789,4.645600721003786 +transit,100.46499730463051,4.636960465563193 +transit,100.46750256417596,4.628320199128039 +transit,100.47000776295955,4.619679921719062 +transit,100.47251290109665,4.611039633356986 +transit,100.47501797870255,4.602399334062545 +transit,100.47752299589257,4.593759023856464 +transit,100.480027952782,4.585118702759472 +transit,100.48253284948612,4.576478370792293 +transit,100.48503768612021,4.567838027975652 +transit,100.48754246279954,4.559197674330269 +transit,100.49004717963936,4.5505573098768695 +transit,100.49255183675491,4.541916934636172 +transit,100.49505643426144,4.533276548628894 +transit,100.49756097227416,4.524636151875753 +transit,100.50006545090828,4.515995744397465 +transit,100.50256987027902,4.507355326214745 +transit,100.50507423050155,4.498714897348309 +transit,100.50757853169105,4.490074457818864 +transit,100.51008277396272,4.481434007647124 +transit,100.51258695743171,4.4727935468538 +transit,100.51509108221315,4.464153075459594 +transit,100.5175951484222,4.455512593485217 +transit,100.520099156174,4.446872100951376 +transit,100.52260310558364,4.438231597878771 +transit,100.52510699676625,4.42959108428811 +transit,100.52761082983695,4.4209505602000885 +transit,100.53011460491079,4.412310025635412 +transit,100.53261832210288,4.403669480614776 +transit,100.53512198152828,4.395028925158879 +transit,100.53762558330205,4.386388359288419 +transit,100.54012912753923,4.377747783024089 +transit,100.54263261435489,4.369107196386585 +transit,100.54513604386402,4.360466599396596 +transit,100.54763941618167,4.351825992074816 +transit,100.55014273142284,4.343185374441935 +transit,100.55264598970253,4.33454474651864 +transit,100.55514919113573,4.325904108325621 +transit,100.5576523358374,4.317263459883561 +transit,100.56015542392257,4.308622801213148 +transit,100.56265845550614,4.299982132335064 +transit,100.56516143070309,4.29134145326999 +transit,100.56766434962834,4.2827007640386086 +transit,100.57016721239685,4.2740600646616 +transit,100.57267001912352,4.265419355159642 +transit,100.57517276992327,4.256778635553414 +transit,100.57767546491101,4.2481379058635875 +transit,100.58017810420161,4.2394971661108425 +transit,100.58268068790997,4.230856416315849 +transit,100.58518321615097,4.22221565649928 +transit,100.58768568903945,4.2135748866818075 +transit,100.59018810669028,4.204934106884102 +transit,100.59269046921828,4.19629331712683 +transit,100.59519277673833,4.187652517430662 +transit,100.59769502936523,4.17901170781626 +transit,100.60019722721378,4.170370888304292 +transit,100.60269937039881,4.1617300589154205 +transit,100.6052014590351,4.15308921967031 +transit,100.60770349323745,4.14444837058962 +transit,100.61020547312063,4.1358075116940105 +transit,100.61270739879942,4.1271666430041405 +transit,100.61520927038855,4.118525764540668 +transit,100.6177110880028,4.109884876324249 +transit,100.62021285175689,4.101243978375539 +transit,100.62271456176556,4.092603070715192 +transit,100.62521621814354,4.083962153363863 +transit,100.62771782100552,4.075321226342201 +transit,100.63021937046621,4.066680289670856 +transit,100.63272086664031,4.058039343370478 +transit,100.6352223096425,4.049398387461716 +transit,100.63772369958747,4.040757421965217 +transit,100.64022503658985,4.032116446901626 +transit,100.64272632076433,4.023475462291587 +transit,100.64522755222553,4.014834468155744 +transit,100.64772873108812,4.006193464514738 +transit,100.6502298574667,3.9975524513892142 +transit,100.65273093147592,3.988911428799806 +transit,100.65523195323034,3.980270396767158 +transit,100.65773292284462,3.9716293553119044 +transit,100.6602338404333,3.962988304454682 +transit,100.66273470611101,3.9543472442161276 +transit,100.66523551999231,3.9457061746168716 +transit,100.66773628219174,3.937065095677551 +transit,100.67023699282387,3.9284240074187946 +transit,100.67273765200328,3.919782909861235 +transit,100.67523825984446,3.9111418030254987 +transit,100.67773881646197,3.9025006869322167 +transit,100.68023932197032,3.8938595616020164 +transit,100.68273977648403,3.885218427055523 +transit,100.68524018011759,3.8765772833133605 +transit,100.6877405329855,3.867936130396153 +transit,100.69024083520225,3.859294968324524 +transit,100.69274108688231,3.850653797119093 +transit,100.69524128814015,3.842012616800483 +transit,100.69774143909024,3.833371427389311 +transit,100.70024153984701,3.824730228906196 +transit,100.70274159052492,3.8160890213717553 +transit,100.70524159123839,3.8074478048066043 +transit,100.70774154210186,3.798806579231359 +transit,100.71024144322972,3.790165344666629 +transit,100.7127412947364,3.781524101133032 +transit,100.71524109673629,3.7728828486511756 +transit,100.71774084934378,3.7642415872416732 +transit,100.72024055267325,3.7556003169251313 +transit,100.72274020683908,3.7469590377221595 +transit,100.72523981195562,3.7383177496533655 +transit,100.72773936813724,3.7296764527393518 +transit,100.73023887549827,3.7210351470007286 +transit,100.73273833415307,3.7123938324580954 +transit,100.73523774421595,3.703752509132056 +transit,100.73773710580124,3.6951111770432115 +transit,100.74023641902326,3.6864698362121655 +transit,100.74273568399632,3.677828486659513 +transit,100.74523490083469,3.6691871284058553 +transit,100.74773406965268,3.6605457614717887 +transit,100.75023319056457,3.65190438587791 +transit,100.75273226368462,3.643263001644813 +transit,100.7552312891271,3.6346216087930916 +transit,100.75773026700627,3.6259802073433427 +transit,100.76022919743636,3.6173387973161546 +transit,100.76272808053162,3.6086973787321175 +transit,100.76522691640628,3.6000559516118256 +transit,100.76772570517456,3.5914145159758624 +transit,100.77022444695068,3.58277307184482 +transit,100.77272314184884,3.574131619239283 +transit,100.77522178998323,3.565490158179837 +transit,100.77772039146807,3.556848688687067 +transit,100.7802189464175,3.5482072107815568 +transit,100.78271745494571,3.5395657244838894 +transit,100.78521591716688,3.5309242298146435 +transit,100.78771433319515,3.5222827267944052 +transit,100.79021270314469,3.5136412154437484 +transit,100.79271102712961,3.504999695783254 +transit,100.79520930526407,3.4963581678335 +transit,100.79770753766218,3.487716631615061 +transit,100.80020572443806,3.4790750871485145 +transit,100.80270386570581,3.470433534454433 +transit,100.80520196157956,3.46179197355339 +transit,100.80770001217338,3.4531504044659584 +transit,100.81019801760137,3.4445088272127107 +transit,100.81269597797758,3.435867241814216 +transit,100.81519389341612,3.4272256482910426 +transit,100.81769176403104,3.4185840466637623 +transit,100.82018958993638,3.4099424369529365 +transit,100.82268737124619,3.4013008191791383 +transit,100.82518510807452,3.392659193362928 +transit,100.82768280053538,3.3840175595248736 +transit,100.83018044874282,3.375375917685536 +transit,100.83267805281086,3.3667342678654775 +transit,100.83517561285348,3.358092610085261 +transit,100.83767312898469,3.349450944365446 +transit,100.8401706013185,3.3408092707265924 +transit,100.84266802996888,3.3321675891892584 +transit,100.8451654150498,3.323525899774002 +transit,100.84766275667526,3.314884202501379 +transit,100.85016005495919,3.3062424973919446 +transit,100.85265731001557,3.2976007844662547 +transit,100.85515452195834,3.2889590637448634 +transit,100.85765169090143,3.2803173352483213 +transit,100.86014881695878,3.2716755989971817 +transit,100.86264590024433,3.2630338550119937 +transit,100.86514294087198,3.2543921033133096 +transit,100.86763993895563,3.245750343921676 +transit,100.87013689460922,3.237108576857644 +transit,100.87263380794663,3.228466802141756 +transit,100.87513067908172,3.219825019794561 +transit,100.87762750812841,3.2111832298366045 +transit,100.88012429520056,3.2025414322884296 +transit,100.88262104041203,3.19389962717058 +transit,100.8851177438767,3.1852578145035957 +transit,100.88761440570839,3.176615994308023 +transit,100.89011102602097,3.1679741666043983 +transit,100.89260760492829,3.1593323314132618 +transit,100.89510414254414,3.1506904887551532 +transit,100.89760063898237,3.14204863865061 +transit,100.9000970943568,3.133406781120168 +transit,100.90259350878122,3.1247649161843647 +transit,100.90508988236945,3.116123043863733 +transit,100.90758621523527,3.1074811641788096 +transit,100.91008250749249,3.0988392771501245 +transit,100.91257875925487,3.0901973827982125 +transit,100.9150749706362,3.0815554811436043 +transit,100.91757114175023,3.0729135722068293 +transit,100.92006727271072,3.0642716560084198 +transit,100.92256336363145,3.0556297325689004 +transit,100.92505941462615,3.046987801908803 +transit,100.92755542580855,3.038345864048651 +transit,100.93005139729239,3.029703919008973 +transit,100.9325473291914,3.021061966810293 +transit,100.93504322161928,3.0124200074731347 +transit,100.93753907468977,3.0037780410180224 +transit,100.94003488851655,2.995136067465479 +transit,100.94253066321333,2.9864940868360255 +transit,100.9450263988938,2.977852099150182 +transit,100.94752209567164,2.969210104428469 +transit,100.95001775366055,2.9605681026914064 +transit,100.95251337297418,2.9519260939595102 +transit,100.95500895372619,2.943284078253301 +transit,100.95750449603025,2.9346420555932924 +WP5,100.96,2.926000026 +transit,100.96736807373901,2.9208731072894585 +transit,100.97473608064752,2.915746139566842 +transit,100.982104020843,2.910619122918749 +transit,100.98947189444291,2.905492057431779 +transit,100.99683970156477,2.900364943192523 +transit,101.00420744232602,2.895237780287576 +transit,101.01157511684417,2.8901105688035282 +transit,101.01894272523668,2.8849833088269676 +transit,101.02631026762107,2.879856000444479 +transit,101.03367774411478,2.874728643742649 +transit,101.04104515483532,2.869601238808057 +transit,101.04841249990017,2.8644737857272835 +transit,101.0557797794268,2.859346284586906 +transit,101.0631469935327,2.8542187354735002 +transit,101.07051414233536,2.849091138473637 +transit,101.07788122595225,2.8439634936738916 +transit,101.08524824450087,2.8388358011608297 +transit,101.0926151980987,2.8337080610210186 +transit,101.0999820868632,2.8285802733410237 +transit,101.10734891091191,2.823452438207407 +transit,101.11471567036226,2.8183245557067305 +transit,101.12208236533176,2.813196625925549 +transit,101.12944899593789,2.808068648950422 +transit,101.13681556229815,2.8029406248679027 +transit,101.14418206453,2.797812553764542 +transit,101.15154850275094,2.792684435726891 +transit,101.15891487707846,2.787556270841498 +transit,101.16628118763005,2.7824280591949067 +transit,101.17364743452318,2.7772998008736636 +transit,101.18101361787534,2.772171495964307 +transit,101.18837973780401,2.7670431445533787 +transit,101.19574579442671,2.761914746727415 +transit,101.2031117878609,2.756786302572953 +transit,101.21047771822407,2.7516578121765236 +transit,101.21784358563372,2.746529275624659 +transit,101.22520939020733,2.741400693003888 +transit,101.23257513206238,2.73627206440074 +transit,101.23994081131636,2.731143389901736 +transit,101.24730642808677,2.7260146695934018 +transit,101.2546719824911,2.7208859035622575 +transit,101.26203747464683,2.715757091894822 +transit,101.26940290467145,2.7106282346776136 +transit,101.27676827268246,2.705499331997145 +transit,101.28413357879734,2.7003703839399296 +transit,101.29149882313357,2.69524139059248 +transit,101.29886400580865,2.6901123520413024 +transit,101.30622912694008,2.6849832683729047 +transit,101.31359418664533,2.6798541396737914 +transit,101.32095918504191,2.674724966030466 +transit,101.32832412224731,2.6695957475294287 +transit,101.335688998379,2.664466484257178 +transit,101.34305381355449,2.659337176300211 +transit,101.35041856789125,2.654207823745022 +transit,101.35778326150681,2.6490784266781042 +transit,101.36514789451863,2.6439489851859483 +transit,101.3725124670442,2.6388194993550425 +transit,101.37987697920104,2.6336899692718747 +transit,101.38724143110662,2.628560395022929 +transit,101.39460582287843,2.623430776694687 +transit,101.40197015463397,2.618301114373633 +transit,101.40933442649074,2.613171408146242 +transit,101.41669863856623,2.608041658098994 +transit,101.42406279097791,2.602911864318363 +transit,101.43142688384332,2.597782026890821 +transit,101.4387909172799,2.59265214590284 +transit,101.44615489140519,2.5875222214408895 +transit,101.45351880633665,2.582392253591437 +transit,101.46088266219179,2.577262242440946 +transit,101.4682464590881,2.572132188075882 +transit,101.47561019714308,2.5670020905827053 +transit,101.48297387647423,2.5618719500478755 +transit,101.49033749719904,2.5567417665578507 +transit,101.49770105943499,2.5516115401990853 +transit,101.50506456329958,2.546481271058034 +transit,101.51242800891032,2.5413509592211496 +transit,101.51979139638469,2.536220604774879 +transit,101.5271547258402,2.531090207805674 +transit,101.53451799739433,2.525959768399978 +transit,101.54188121116461,2.5208292866442363 +transit,101.54924436726849,2.5156987626248917 +transit,101.55660746582349,2.510568196428383 +transit,101.5639705069471,2.5054375881411506 +transit,101.57133349075683,2.50030693784963 +transit,101.57869641737017,2.4951762456402578 +transit,101.58605928690461,2.490045511599464 +transit,101.59342209947765,2.4849147358136827 +transit,101.6007848552068,2.4797839183693413 +transit,101.60814755420955,2.474653059352868 +transit,101.61551019660338,2.4695221588506877 +transit,101.62287278250582,2.4643912169492235 +transit,101.63023531203434,2.459260233734899 +transit,101.63759778530645,2.4541292092941327 +transit,101.64496020243966,2.448998143713344 +transit,101.65232256355146,2.4438670370789466 +transit,101.65968486875934,2.4387358894773596 +transit,101.6670471181808,2.433604700994991 +transit,101.67440931193336,2.428473471718254 +transit,101.68177145013449,2.4233422017335564 +transit,101.6891335329017,2.4182108911273064 +transit,101.69649556035252,2.413079539985908 +transit,101.7038575326044,2.4079481483957674 +transit,101.71121944977487,2.4028167164432834 +transit,101.71858131198142,2.3976852442148573 +transit,101.72594311934157,2.392553731796887 +transit,101.73330487197279,2.387422179275769 +transit,101.7406665699926,2.3822905867378976 +transit,101.7480282135185,2.377158954269665 +transit,101.75538980266798,2.3720272819574646 +transit,101.76275133755856,2.3668955698876823 +transit,101.77011281830771,2.361763818146708 +transit,101.77747424503296,2.356632026820926 +transit,101.78483561785181,2.3515001959967203 +transit,101.79219693688175,2.3463683257604733 +transit,101.7995582022403,2.341236416198566 +transit,101.80691941404494,2.336104467397376 +transit,101.81428057241318,2.3309724794432802 +transit,101.82164167746252,2.325840452422655 +transit,101.82900272931049,2.320708386421872 +transit,101.83636372807455,2.3155762815273033 +transit,101.84372467387223,2.31044413782532 +transit,101.85108556682103,2.305311955402289 +transit,101.85844640703843,2.3001797343445767 +transit,101.86580719464197,2.2950474747385483 +transit,101.87316792974913,2.289915176670566 +transit,101.88052861247742,2.2847828402269923 +transit,101.88788924294435,2.2796504654941856 +transit,101.89524982126743,2.274518052558505 +transit,101.90261034756413,2.269385601506305 +transit,101.90997082195199,2.264253112423941 +transit,101.91733124454849,2.259120585397766 +transit,101.92469161547116,2.2539880205141296 +transit,101.93205193483747,2.248855417859384 +transit,101.93941220276497,2.2437227775198725 +transit,101.94677241937113,2.2385900995819448 +transit,101.95413258477348,2.233457384131943 +transit,101.96149269908949,2.2283246312562115 +transit,101.96885276243671,2.2231918410410896 +transit,101.9762127749326,2.2180590135729177 +transit,101.98357273669471,2.2129261489380334 +transit,101.99093264784052,2.2077932472227713 +transit,101.99829250848754,2.2026603085134666 +transit,102.00565231875328,2.1975273328964513 +transit,102.01301207875524,2.192394320458058 +transit,102.02037178861093,2.1872612712846147 +transit,102.02773144843786,2.182128185462449 +transit,102.03509105835354,2.176995063077888 +transit,102.04245061847547,2.171861904217255 +transit,102.04981012892117,2.166728708966873 +transit,102.05716958980813,2.1615954774130643 +transit,102.06452900125385,2.1564622096421475 +transit,102.07188836337586,2.1513289057404394 +transit,102.07924767629166,2.146195565794258 +transit,102.08660694011877,2.1410621898899183 +transit,102.09396615497467,2.1359287781137315 +transit,102.10132532097688,2.1307953305520098 +transit,102.10868443824293,2.1256618472910653 +transit,102.1160435068903,2.120528328417203 +transit,102.12340252703652,2.115394774016732 +transit,102.13076149879907,2.1102611841759553 +transit,102.1381204222955,2.1051275589811773 +transit,102.14547929764329,2.0999938985187017 +transit,102.15283812495996,2.0948602028748264 +transit,102.160196904363,2.089726472135852 +transit,102.16755563596995,2.084592706388073 +transit,102.17491431989829,2.0794589057177886 +transit,102.18227295626555,2.0743250702112914 +transit,102.18963154518923,2.0691911999548736 +transit,102.19699008678685,2.0640572950348264 +transit,102.20434858117592,2.05892335553744 +transit,102.21170702847394,2.0537893815490005 +transit,102.21906542879843,2.048655373155795 +transit,102.22642378226689,2.0435213304441096 +transit,102.23378208899683,2.0383872535002268 +transit,102.24114034910578,2.033253142410428 +transit,102.24849856271123,2.028118997260994 +transit,102.2558567299307,2.0229848181382017 +transit,102.26321485088171,2.0178506051283316 +transit,102.27057292568176,2.012716358317656 +transit,102.27793095444835,2.007582077792452 +transit,102.28528893729903,2.00244776363899 +transit,102.29264687435126,1.9973134159435422 +transit,102.3000047657226,1.9921790347923782 +transit,102.30736261153054,1.9870446202717655 +transit,102.31472041189258,1.9819101724679717 +transit,102.32207816692626,1.9767756914672616 +transit,102.32943587674907,1.9716411773558984 +transit,102.33679354147853,1.9665066302201457 +transit,102.34415116123216,1.9613720501462628 +transit,102.35150873612747,1.9562374372205096 +transit,102.35886626628196,1.9511027915291435 +transit,102.36622375181315,1.9459681131584208 +transit,102.37358119283857,1.9408334021945972 +transit,102.38093858947572,1.935698658723926 +transit,102.3882959418421,1.9305638828326581 +transit,102.39565325005523,1.925429074607045 +transit,102.40301051423265,1.920294234133335 +transit,102.41036773449184,1.9151593614977762 +transit,102.41772491095034,1.910024456786615 +transit,102.42508204372564,1.9048895200860958 +transit,102.43243913293527,1.8997545514824623 +transit,102.43979617869674,1.8946195510619552 +transit,102.44715318112758,1.889484518910817 +transit,102.45451014034526,1.8843494551152842 +transit,102.46186705646734,1.8792143597615973 +transit,102.46922392961133,1.8740792329359908 +transit,102.47658075989472,1.868944074724699 +transit,102.48393754743505,1.8638088852139574 +transit,102.4912942923498,1.858673664489995 +transit,102.49865099475655,1.853538412639045 +transit,102.50600765477274,1.8484031297473364 +transit,102.51336427251593,1.8432678159010962 +transit,102.52072084810364,1.83813247118655 +transit,102.52807738165336,1.8329970956899249 +transit,102.53543387328261,1.8278616894974433 +transit,102.54279032310893,1.8227262526953285 +transit,102.55014673124981,1.8175907853697992 +transit,102.55750309782279,1.8124552876070774 +transit,102.56485942294536,1.8073197594933814 +transit,102.57221570673505,1.802184201114926 +transit,102.57957194930938,1.797048612557929 +transit,102.58692815078587,1.7919129939086027 +transit,102.59428431128202,1.7867773452531608 +transit,102.60164043091537,1.7816416666778148 +transit,102.6089965098034,1.7765059582687748 +transit,102.61635254806366,1.7713702201122492 +transit,102.62370854581367,1.7662344522944466 +transit,102.63106450317092,1.761098654901572 +transit,102.63842042025296,1.7559628280198303 +transit,102.64577629717728,1.7508269717354255 +transit,102.65313213406141,1.7456910861345591 +transit,102.66048793102286,1.7405551713034326 +transit,102.66784368817916,1.735419227328246 +transit,102.67519940564782,1.7302832542951962 +transit,102.68255508354636,1.725147252290482 +transit,102.6899107219923,1.7200112214002978 +transit,102.69726632110316,1.7148751617108373 +transit,102.70462188099646,1.7097390733082953 +transit,102.71197740178971,1.7046029562788627 +transit,102.71933288360043,1.6994668107087305 +transit,102.72668832654614,1.6943306366840876 +transit,102.73404373074436,1.6891944342911214 +transit,102.74139909631262,1.6840582036160194 +transit,102.74875442336842,1.678921944744967 +transit,102.75610971202929,1.673785657764148 +transit,102.76346496241275,1.6686493427597462 +transit,102.77082017463631,1.6635129998179425 +transit,102.77817534881751,1.6583766290249164 +transit,102.78553048507385,1.653240230466849 +transit,102.79288558352285,1.648103804229917 +transit,102.80024064428204,1.642967350400297 +transit,102.80759566746895,1.6378308690641663 +transit,102.81495065320107,1.6326943603076969 +transit,102.82230560159593,1.627557824217063 +transit,102.82966051277107,1.622421260878435 +transit,102.837015386844,1.6172846703779853 +transit,102.84437022393223,1.6121480528018823 +transit,102.85172502415328,1.6070114082362945 +transit,102.8590797876247,1.6018747367673885 +transit,102.86643451446398,1.5967380384813301 +transit,102.87378920478864,1.5916013134642835 +transit,102.88114385871621,1.5864645618024122 +transit,102.88849847636423,1.5813277835818789 +transit,102.89585305785019,1.576190978888844 +transit,102.90320760329163,1.5710541478094675 +transit,102.91056211280608,1.5659172904299077 +transit,102.91791658651103,1.5607804068363227 +transit,102.92527102452402,1.5556434971148676 +transit,102.93262542696257,1.5505065613516982 +transit,102.93997979394422,1.5453695996329682 +transit,102.94733412558647,1.5402326120448304 +transit,102.95468842200684,1.5350955986734367 +transit,102.96204268332286,1.5299585596049368 +transit,102.96939690965205,1.5248214949254808 +transit,102.97675110111193,1.519684404721216 +transit,102.98410525782003,1.5145472890782903 +transit,102.99145937989388,1.5094101480828477 +transit,102.99881346745097,1.5042729818210352 +transit,103.00616752060886,1.4991357903789955 +transit,103.01352153948505,1.493998573842871 +transit,103.02087552419707,1.4888613322988025 +transit,103.02822947486244,1.4837240658329311 +transit,103.03558339159869,1.4785867745313956 +transit,103.04293727452334,1.4734494584803337 +transit,103.0502911237539,1.4683121177658822 +transit,103.05764493940791,1.4631747524741774 +transit,103.06499872160289,1.4580373626913539 +transit,103.07235247045635,1.4528999485035443 +transit,103.07970618608584,1.4477625099968825 +transit,103.08705986860886,1.4426250472574986 +transit,103.09441351814294,1.4374875603715247 +transit,103.10176713480561,1.4323500494250883 +transit,103.1091207187144,1.4272125145043184 +transit,103.11647426998681,1.4220749556953414 +transit,103.12382778874039,1.4169373730842842 +transit,103.13118127509264,1.4117997667572708 +transit,103.13853472916111,1.4066621368004255 +transit,103.1458881510633,1.4015244832998714 +transit,103.15324154091674,1.3963868063417306 +transit,103.16059489883897,1.3912491060121224 +transit,103.16794822494751,1.3861113823971678 +transit,103.17530151935986,1.3809736355829842 +transit,103.18265478219358,1.3758358656556917 +transit,103.19000801356617,1.3706980727014035 +transit,103.19736121359517,1.3655602568062382 +transit,103.2047143823981,1.3604224180563078 +transit,103.21206752009248,1.3552845565377272 +transit,103.21942062679584,1.350146672336609 +transit,103.22677370262569,1.3450087655390632 +transit,103.23412674769959,1.3398708362312017 +transit,103.24147976213504,1.334732884499133 +transit,103.24883274604957,1.3295949104289662 +transit,103.2561856995607,1.324456914106809 +transit,103.26353862278596,1.3193188956187667 +transit,103.27089151584289,1.314180855050945 +transit,103.278244378849,1.3090427924894494 +transit,103.28559721192181,1.3039047080203823 +transit,103.29295001517886,1.2987666017298465 +transit,103.30030278873767,1.2936284737039434 +transit,103.30765553271577,1.288490324028774 +transit,103.3150082472307,1.2833521527904372 +transit,103.32236093239995,1.2782139600750326 +transit,103.32971358834106,1.2730757459686564 +transit,103.33706621517157,1.2679375105574051 +transit,103.344418813009,1.2627992539273767 +transit,103.35177138197088,1.257660976164664 +transit,103.35912392217473,1.2525226773553617 +transit,103.36647643373809,1.2473843575855623 +transit,103.37382891677846,1.2422460169413576 +transit,103.38118137141339,1.2371076555088392 +transit,103.3885337977604,1.231969273374096 +transit,103.39588619593702,1.226830870623219 +transit,103.40323856606076,1.221692447342295 +transit,103.41059090824918,1.2165540036174116 +transit,103.41794322261978,1.211415539534655 +transit,103.42529550929011,1.206277055180112 +transit,103.43264776837766,1.2011385506398657 +WP6,103.44,1.196000026 +transit,103.4440348984521,1.2037722281016348 +transit,103.44806981975256,1.2115444237502009 +transit,103.45210476404904,1.2193166129039905 +transit,103.45613973148924,1.2270887955212961 +transit,103.46017472222083,1.2348609715604077 +transit,103.4642097363915,1.242633140979616 +transit,103.46824477414893,1.2504053037372107 +transit,103.47227983564082,1.2581774597914792 +transit,103.47631492101488,1.2659496091007107 +transit,103.48035003041878,1.273721751623191 +transit,103.48438516400023,1.281493887317206 +transit,103.48842032190694,1.2892660161410416 +transit,103.49245550428662,1.2970381380529825 +transit,103.49649071128698,1.304810253011311 +transit,103.50052594305572,1.3125823609743108 +transit,103.50456119974056,1.3203544619002632 +transit,103.50859648148923,1.328126555747449 +transit,103.51263178844945,1.335898642474149 +transit,103.51666712076894,1.3436707220386421 +transit,103.52070247859544,1.3514427943992064 +transit,103.52473786207668,1.3592148595141196 +transit,103.52877327136038,1.3669869173416582 +transit,103.53280870659428,1.3747589678400982 +transit,103.53684416792613,1.3825310109677134 +transit,103.5408796555037,1.390303046682779 +transit,103.54491516947469,1.3980750749435669 +transit,103.5489507099869,1.4058470957083495 +transit,103.55298627718804,1.4136191089353984 +transit,103.5570218712259,1.421391114582983 +transit,103.56105749224824,1.4291631126093731 +transit,103.56509314040281,1.4369351029728372 +transit,103.56912881583737,1.4447070856316422 +transit,103.57316451869974,1.452479060544055 +transit,103.57720024913765,1.4602510276683411 +transit,103.5812360072989,1.4680229869627643 +transit,103.58527179333126,1.4757949383855895 +transit,103.58930760738252,1.4835668818950782 +transit,103.59334344960048,1.491338817449493 +transit,103.59737932013292,1.499110745007094 +transit,103.60141521912765,1.5068826645261406 +transit,103.60545114673245,1.5146545759648926 +transit,103.60948710309515,1.5224264792816067 +transit,103.61352308836354,1.5301983744345402 +transit,103.61755910268543,1.5379702613819488 +transit,103.62159514620865,1.5457421400820872 +transit,103.62563121908101,1.5535140104932088 +transit,103.62966732145033,1.561285872573567 +transit,103.63370345346443,1.5690577262814127 +transit,103.63773961527116,1.5768295715749974 +transit,103.64177580701833,1.5846014084125701 +transit,103.6458120288538,1.592373236752379 +transit,103.6498482809254,1.6001450565526734 +transit,103.65388456338096,1.607916867771698 +transit,103.65792087636835,1.6156886703676991 +transit,103.66195722003542,1.6234604642989214 +transit,103.66599359453001,1.6312322495236073 +WP7,103.67003,1.639004026 +transit,103.66240477485763,1.6435605098711012 +transit,103.65477951514863,1.648116964243239 +transit,103.64715422077721,1.6526733890344614 +transit,103.63952889164753,1.657229784162814 +transit,103.63190352766377,1.6617861495463415 +transit,103.62427812873014,1.6663424851030881 +transit,103.61665269475081,1.6708987907510977 +transit,103.60902722562999,1.6754550664084111 +transit,103.60140172127184,1.6800113119930717 +transit,103.59377618158057,1.6845675274231189 +transit,103.58615060646035,1.689123712616592 +transit,103.57852499581539,1.6936798674915303 +transit,103.57089934954988,1.6982359919659715 +transit,103.563273667568,1.7027920859579515 +transit,103.55564794977396,1.7073481493855067 +transit,103.54802219607193,1.711904182166672 +transit,103.54039640636613,1.716460184219482 +transit,103.53277058056074,1.721016155461969 +transit,103.52514471855996,1.725572095812165 +transit,103.517518820268,1.7301280051881018 +transit,103.50989288558903,1.7346838835078089 +transit,103.50226691442727,1.7392397306893157 +transit,103.49464090668691,1.743795546650651 +transit,103.48701486227216,1.7483513313098415 +transit,103.47938878108722,1.752907084584914 +transit,103.47176266303629,1.7574628063938937 +transit,103.46413650802356,1.762018496654805 +transit,103.45651031595324,1.7665741552856715 +transit,103.44888408672954,1.771129782204516 +transit,103.44125782025667,1.7756853773293593 +transit,103.43363151643881,1.7802409405782227 +transit,103.4260051751802,1.7847964718691254 +transit,103.41837879638501,1.7893519711200867 +transit,103.41075237995749,1.793907438249123 +transit,103.40312592580183,1.7984628731742522 +transit,103.39549943382222,1.8030182758134896 +transit,103.3878729039229,1.8075736460848493 +transit,103.38024633600807,1.8121289839063461 +transit,103.37261972998193,1.816684289195991 +transit,103.36499308574872,1.8212395618717976 +transit,103.35736640321262,1.8257948018517758 +transit,103.34973968227789,1.8303500090539349 +transit,103.34211292284868,1.8349051833962842 +transit,103.33448612482928,1.8394603247968309 +transit,103.32685928812386,1.8440154331735823 +transit,103.31923241263664,1.8485705084445434 +transit,103.31160549827186,1.8531255505277202 +transit,103.30397854493371,1.857680559341114 +transit,103.29635155252645,1.8622355348027306 +transit,103.28872452095426,1.8667904768305685 +transit,103.2810974501214,1.8713453853426305 +transit,103.27347033993205,1.8759002602569148 +transit,103.26584319029047,1.8804551014914208 +transit,103.25821600110088,1.885009908964146 +transit,103.25058877226748,1.8895646825930859 +transit,103.24296150369453,1.894119422296237 +transit,103.23533419528623,1.8986741279915933 +transit,103.22770684694682,1.9032287995971486 +transit,103.22007945858053,1.9077834370308946 +transit,103.21245203009158,1.9123380402108232 +transit,103.20482456138421,1.9168926090549236 +transit,103.19719705236267,1.9214471434811855 +transit,103.18956950293115,1.9260016434075975 +transit,103.1819419129939,1.9305561087521468 +transit,103.17431428245517,1.9351105394328183 +transit,103.16668661121918,1.9396649353675983 +transit,103.15905889919017,1.9442192964744696 +transit,103.15143114627237,1.9487736226714165 +transit,103.14380335237003,1.9533279138764188 +transit,103.13617551738737,1.957882170007458 +transit,103.12854764122865,1.962436390982514 +transit,103.1209197237981,1.9669905767195657 +transit,103.11329176499996,1.9715447271365898 +transit,103.10566376473847,1.976098842151563 +transit,103.09803572291787,1.9806529216824602 +transit,103.09040763944242,1.9852069656472566 +transit,103.08277951421636,1.9897609739639248 +transit,103.07515134714392,1.9943149465504364 +transit,103.06752313812935,1.998868883324763 +transit,103.05989488707691,2.003422784204874 +transit,103.05226659389083,2.007976649108739 +transit,103.04463825847539,2.0125304779543245 +transit,103.0370098807348,2.017084270659597 +transit,103.02938146057335,2.0216380271425236 +transit,103.02175299789526,2.0261917473210675 +transit,103.0141244926048,2.030745431113192 +transit,103.00649594460621,2.035299078436859 +transit,102.99886735380376,2.03985268921003 +transit,102.9912387201017,2.0444062633506648 +transit,102.98361004340428,2.0489598007767227 +transit,102.97598132361577,2.0535133014061597 +transit,102.96835256064043,2.058066765156934 +transit,102.96072375438249,2.0626201919469995 +transit,102.95309490474624,2.067173581694312 +transit,102.94546601163592,2.0717269343168243 +transit,102.93783707495581,2.076280249732488 +transit,102.93020809461017,2.080833527859254 +transit,102.92257907050325,2.085386768615072 +transit,102.91495000253931,2.0899399719178904 +transit,102.90732089062266,2.0944931376856575 +transit,102.89969173465752,2.0990462658363187 +transit,102.89206253454817,2.10359935628782 +transit,102.88443329019888,2.1081524089581047 +transit,102.87680400151393,2.1127054237651155 +transit,102.86917466839759,2.117258400626795 +transit,102.86154529075411,2.121811339461083 +transit,102.85391586848777,2.126364240185919 +transit,102.84628640150285,2.1309171027192413 +transit,102.83865688970364,2.1354699269789856 +transit,102.83102733299438,2.1400227128830918 +transit,102.82339773127937,2.14457546034949 +transit,102.81576808446289,2.1491281692961155 +transit,102.8081383924492,2.1536808396409013 +transit,102.80050865514258,2.158233471301778 +transit,102.79287887244733,2.162786064196675 +transit,102.78524904426772,2.167338618243522 +transit,102.77761917050802,2.171891133360247 +transit,102.76998925107253,2.176443609464775 +transit,102.76235928586553,2.1809960464750318 +transit,102.7547292747913,2.1855484443089415 +transit,102.74709921775414,2.190100802884428 +transit,102.73946911465832,2.1946531221194108 +transit,102.73183896540813,2.199205401931813 +transit,102.72420876990786,2.203757642239551 +transit,102.7165785280618,2.2083098429605448 +transit,102.70894823977424,2.212862004012711 +transit,102.70131790494949,2.217414125313964 +transit,102.69368752349183,2.2219662067822195 +transit,102.68605709530554,2.22651824833539 +transit,102.67842662029493,2.231070249891388 +transit,102.67079609836429,2.235622211368125 +transit,102.66316552941792,2.2401741326835083 +transit,102.65553491336013,2.244726013755447 +transit,102.6479042500952,2.2492778545018495 +transit,102.64027353952743,2.25382965484062 +transit,102.63264278156113,2.2583814146896644 +transit,102.6250119761006,2.262933133966885 +transit,102.61738112305014,2.2674848125901845 +transit,102.60975022231405,2.2720364504774637 +transit,102.60211927379666,2.276588047546622 +transit,102.59448827740223,2.281139603715559 +transit,102.58685723303512,2.2856911189021707 +transit,102.5792261405996,2.290242593024352 +WP8,102.571595,2.294794026 +transit,102.56431289950218,2.299920639760812 +transit,102.55703074701604,2.3050472157902515 +transit,102.5497485424256,2.3101737540038654 +transit,102.54246628561485,2.3153002543172034 +transit,102.53518397646778,2.3204267166458106 +transit,102.52790161486841,2.325553140905231 +transit,102.52061920070072,2.3306795270110077 +transit,102.51333673384873,2.335805874878681 +transit,102.50605421419644,2.340932184423789 +transit,102.49877164162784,2.346058455561871 +transit,102.49148901602695,2.351184688208461 +transit,102.48420633727774,2.3563108822790935 +transit,102.47692360526425,2.3614370376893 +transit,102.46964081987045,2.3665631543546124 +transit,102.46235798098036,2.3716892321905574 +transit,102.45507508847797,2.3768152711126636 +transit,102.44779214224731,2.3819412710364545 +transit,102.44050914217235,2.387067231877455 +transit,102.43322608813709,2.3921931535511853 +transit,102.42594298002557,2.3973190359731675 +transit,102.41865981772175,2.4024448790589177 +transit,102.41137660110967,2.4075706827239522 +transit,102.4040933300733,2.4126964468837877 +transit,102.39681000449666,2.4178221714539356 +transit,102.38952662426375,2.4229478563499063 +transit,102.38224318925857,2.4280735014872104 +transit,102.37495969936514,2.433199106781355 +transit,102.36767615446743,2.4383246721478455 +transit,102.36039255444948,2.4434501975021856 +transit,102.35310889919528,2.4485756827598784 +transit,102.3458251885888,2.453701127836423 +transit,102.3385414225141,2.4588265326473198 +transit,102.33125760085515,2.463951897108063 +transit,102.32397372349595,2.469077221134149 +transit,102.31668979032054,2.474202504641071 +transit,102.30940580121288,2.4793277475443203 +transit,102.30212175605699,2.484452949759386 +transit,102.29483765473688,2.489578111201755 +transit,102.28755349713656,2.494703231786915 +transit,102.28026928314,2.4998283114303477 +transit,102.27298501263125,2.5049533500475367 +transit,102.2657006854943,2.5100783475539625 +transit,102.25841630161314,2.5152033038651025 +transit,102.25113186087178,2.520328218896435 +transit,102.24384736315423,2.5254530925634318 +transit,102.23656280834449,2.5305779247815687 +transit,102.22927819632658,2.535702715466315 +transit,102.22199352698448,2.5408274645331415 +transit,102.21470880020222,2.5459521718975133 +transit,102.2074240158638,2.5510768374748984 +transit,102.2001391738532,2.5562014611807573 +transit,102.19285427405445,2.561326042930555 +transit,102.18556931635156,2.5664505826397495 +transit,102.17828430062852,2.571575080223798 +transit,102.17099922676935,2.576699535598158 +transit,102.16371409465805,2.581823948678284 +transit,102.15642890417861,2.5869483193796263 +transit,102.14914365521507,2.5920726476176372 +transit,102.14185834765141,2.597196933307763 +transit,102.13457298137165,2.6023211763654523 +transit,102.12728755625977,2.607445376706149 +transit,102.12000207219981,2.6125695342452966 +transit,102.11271652907577,2.617693648898334 +transit,102.10543092677165,2.622817720580701 +transit,102.09814526517145,2.627941749207835 +transit,102.09085954415919,2.633065734695171 +transit,102.08357376361887,2.6381896769581417 +transit,102.0762879234345,2.643313575912177 +transit,102.06900202349009,2.6484374314727086 +transit,102.06171606366964,2.6535612435551625 +transit,102.05443004385717,2.6586850120749643 +transit,102.04714396393666,2.663808736947536 +transit,102.03985782379215,2.6689324180883016 +transit,102.03257162330765,2.6740560554126773 +transit,102.02528536236713,2.679179648836083 +transit,102.01799904085463,2.684303198273934 +transit,102.01071265865416,2.6894267036416433 +transit,102.0034262156497,2.6945501648546224 +transit,101.99613971172529,2.699673581828281 +transit,101.98885314676492,2.704796954478027 +transit,101.9815665206526,2.7099202827192648 +transit,101.97427983327236,2.7150435664673993 +transit,101.96699308450819,2.720166805637832 +transit,101.95970627424408,2.725290000145962 +transit,101.95241940236409,2.730413149907187 +transit,101.94513246875218,2.7355362548369033 +transit,101.93784547329238,2.740659314850504 +transit,101.9305584158687,2.7457823298633808 +transit,101.92327129636516,2.750905299790924 +transit,101.91598411466575,2.7560282245485186 +transit,101.9086968706545,2.7611511040515526 +transit,101.90140956421538,2.766273938215409 +transit,101.89412219523246,2.7713967269554693 +transit,101.8868347635897,2.776519470187113 +transit,101.87954726917114,2.7816421678257166 +transit,101.87225971186078,2.786764819786656 +transit,101.86497209154263,2.791887425985305 +transit,101.8576844081007,2.7970099863370352 +transit,101.850396661419,2.8021325007572147 +transit,101.84310885138154,2.807254969161211 +transit,101.83582097787233,2.81237739146439 +transit,101.8285330407754,2.8174997675821123 +transit,101.82124503997474,2.8226220974297416 +transit,101.81395697535437,2.8277443809226352 +transit,101.8066688467983,2.8328666179761517 +transit,101.79938065419054,2.8379888085056435 +transit,101.7920923974151,2.8431109524264646 +transit,101.78480407635601,2.8482330496539654 +transit,101.77751569089726,2.8533551001034945 +transit,101.77022724092288,2.8584771036903978 +transit,101.76293872631686,2.86359906033002 +transit,101.75565014696322,2.8687209699377028 +transit,101.748361502746,2.8738428324287866 +transit,101.74107279354916,2.878964647718609 +transit,101.73378401925677,2.8840864157225057 +transit,101.7264951797528,2.889208136355812 +transit,101.71920627492129,2.894329809533858 +transit,101.71191730464624,2.8994514351719736 +transit,101.70462826881166,2.9045730131854857 +transit,101.69733916730158,2.9096945434897195 +WP9,101.69005,2.914816026 +transit,101.68535588738197,2.922015798814107 +transit,101.6806617149491,2.929215550992293 +transit,101.67596748255315,2.9364152824833907 +transit,101.6712731900459,2.9436149932362317 +transit,101.66657883727906,2.9508146831996442 +transit,101.66188442410441,2.9580143523224574 +transit,101.65718995037369,2.965214000553495 +transit,101.65249541593862,2.9724136278415783 +transit,101.64780082065093,2.979613234135528 +transit,101.64310616436235,2.9868128193841628 +transit,101.63841144692458,2.994012383536298 +transit,101.63371666818934,3.0012119265407464 +transit,101.62902182800832,3.0084114483463194 +transit,101.62432692623325,3.0156109489018266 +transit,101.61963196271579,3.0228104281560744 +transit,101.61493693730763,3.030009886057866 +transit,101.61024184986047,3.037209322556003 +transit,101.60554670022597,3.044408737599287 +transit,101.60085148825578,3.051608131136514 +transit,101.59615621380159,3.058807503116481 +transit,101.59146087671505,3.0660068534879774 +transit,101.58676547684779,3.0732061821997965 +transit,101.58207001405147,3.080405489200724 +transit,101.57737448817771,3.0876047744395483 +transit,101.57267889907816,3.0948040378650505 +transit,101.56798324660443,3.1020032794260133 +transit,101.56328753060814,3.1092024990712144 +transit,101.55859175094089,3.11640169674943 +transit,101.55389590745432,3.123600872409436 +WP1,101.5492,3.130800026 +transit,101.54671815629806,3.139413635151459 +transit,101.54423627194028,3.148027236962458 +transit,101.54175434681427,3.156640831412747 +transit,101.53927238080762,3.165254418482073 +transit,101.53679037380788,3.1738679981501847 +transit,101.53430832570264,3.182481570396828 +transit,101.53182623637944,3.1910951352017496 +transit,101.52934410572585,3.199708692544694 +transit,101.52686193362943,3.208322242405403 +transit,101.5243797199777,3.216935784763622 +transit,101.5218974646582,3.225549319599091 +transit,101.51941516755845,3.2341628468915533 +transit,101.51693282856597,3.2427763666207476 +transit,101.51445044756828,3.2513898787664135 +transit,101.51196802445287,3.260003383308289 +transit,101.50948555910726,3.2686168802261117 +transit,101.50700305141892,3.2772303694996183 +transit,101.50452050127534,3.2858438511085444 +transit,101.50203790856398,3.294457325032625 +transit,101.49955527317233,3.3030707912515926 +transit,101.49707259498784,3.3116842497451797 +transit,101.49458987389797,3.32029770049312 +transit,101.49210710979015,3.3289111434751426 +transit,101.48962430255183,3.337524578670978 +transit,101.48714145207045,3.346138006060355 +transit,101.4846585582334,3.354751425623002 +transit,101.48217562092815,3.3633648373386458 +transit,101.47969264004205,3.371978241187012 +transit,101.47720961546253,3.380591637147827 +transit,101.47472654707698,3.389205025200813 +transit,101.4722434347728,3.3978184053256952 +transit,101.46976027843735,3.4064317775021946 +transit,101.467277077958,3.4150451417100323 +transit,101.46479383322212,3.4236584979289284 +transit,101.46231054411707,3.4322718461386046 +transit,101.45982721053018,3.4408851863187766 +transit,101.45734383234881,3.4494985184491633 +transit,101.45486040946028,3.45811184250948 +transit,101.45237694175192,3.4667251584794423 +transit,101.44989342911106,3.4753384663387643 +transit,101.44740987142497,3.4839517660671615 +transit,101.44492626858099,3.4925650576443434 +transit,101.4424426204664,3.5011783410500232 +transit,101.43995892696849,3.5097916162639105 +transit,101.43747518797453,3.518404883265716 +transit,101.43499140337178,3.5270181420351463 +transit,101.43250757304754,3.53563139255191 +transit,101.43002369688902,3.5442446347957137 +transit,101.42753977478351,3.5528578687462615 +transit,101.42505580661822,3.5614710943832595 +transit,101.42257179228038,3.5700843116864105 +transit,101.42008773165722,3.578697520635415 +transit,101.41760362463596,3.587310721209977 +transit,101.4151194711038,3.595923913389796 +transit,101.41263527094794,3.60453709715457 +transit,101.41015102405557,3.6131502724839986 +transit,101.40766673031388,3.6217634393577787 +transit,101.40518238961003,3.6303765977556064 +transit,101.4026980018312,3.6389897476571775 +transit,101.40021356686454,3.6476028890421857 +transit,101.3977290845972,3.6562160218903226 +transit,101.39524455491633,3.6648291461812827 +transit,101.39275997770906,3.673442261894757 +transit,101.39027535286253,3.6820553690104316 +transit,101.38779068026382,3.690668467508 +transit,101.38530595980008,3.6992815573671485 +transit,101.38282119135837,3.7078946385675633 +transit,101.38033637482583,3.7165077110889295 +transit,101.37785151008951,3.7251207749109336 +transit,101.37536659703649,3.7337338300132594 +transit,101.37288163555385,3.742346876375586 +transit,101.37039662552866,3.7509599139775998 +transit,101.36791156684792,3.759572942798976 +transit,101.36542645939873,3.768185962819398 +transit,101.3629413030681,3.776798974018542 +transit,101.36045609774305,3.785411976376087 +transit,101.35797084331062,3.7940249698717072 +transit,101.35548553965779,3.8026379544850792 +transit,101.35300018667158,3.811250930195875 +transit,101.35051478423898,3.8198638969837684 +transit,101.34802933224697,3.828476854828432 +transit,101.34554383058251,3.837089803709535 +transit,101.34305827913259,3.8457027436067484 +transit,101.34057267778415,3.8543156744997398 +transit,101.33808702642416,3.862928596368177 +transit,101.33560132493955,3.871541509191725 +transit,101.33311557321724,3.8801544129500525 +transit,101.33062977114416,3.888767307622818 +transit,101.32814391860724,3.897380193189688 +transit,101.32565801549336,3.9059930696303256 +transit,101.32317206168943,3.914605936924388 +transit,101.32068605708234,3.923218795051537 +transit,101.31820000155898,3.931831643991432 +transit,101.3157138950062,3.9404444837237262 +transit,101.31322773731087,3.94905731422808 +transit,101.31074152835984,3.957670135484147 +transit,101.30825526803996,3.96628294747158 +transit,101.30576895623805,3.9748957501700337 +transit,101.30328259284097,3.983508543559159 +transit,101.3007961777355,3.9921213276186065 +transit,101.29830971080848,4.0007341023280265 +transit,101.2958231919467,4.009346867667064 +transit,101.29333662103693,4.017959623615371 +transit,101.29084999796596,4.02657237015259 +transit,101.28836332262058,4.035185107258367 +transit,101.28587659488755,4.043797834912345 +transit,101.28338981465362,4.052410553094166 +transit,101.28090298180553,4.061023261783475 +transit,101.27841609623002,4.069635960959906 +transit,101.27592915781382,4.078248650603104 +transit,101.27344216644364,4.086861330692703 +transit,101.2709551220062,4.095474001208342 +transit,101.2684680243882,4.104086662129656 +transit,101.26598087347632,4.112699313436277 +transit,101.26349366915726,4.12131195510784 +transit,101.26100641131767,4.129924587123978 +transit,101.25851909984422,4.138537209464321 +transit,101.25603173462356,4.1471498221084975 +transit,101.25354431554236,4.155762425036137 +transit,101.25105684248723,4.164375018226867 +transit,101.24856931534481,4.172987601660313 +transit,101.2460817340017,4.181600175316098 +transit,101.24359409834452,4.190212739173851 +transit,101.24110640825987,4.198825293213188 +transit,101.23861866363433,4.2074378374137344 +transit,101.23613086435448,4.216050371755109 +transit,101.23364301030689,4.224662896216931 +transit,101.23115510137814,4.233275410778818 +transit,101.22866713745474,4.241887915420385 +transit,101.22617911842326,4.25050041012125 +transit,101.22369104417024,4.259112894861023 +transit,101.22120291458218,4.26772536961932 +transit,101.2187147295456,4.2763378343757505 +transit,101.216226488947,4.284950289109929 +transit,101.21373819267288,4.293562733801459 +transit,101.21124984060971,4.302175168429952 +transit,101.208761432644,4.310787592975013 +transit,101.20627296866216,4.319400007416247 +transit,101.20378444855069,4.328012411733259 +transit,101.20129587219601,4.336624805905652 +transit,101.19880723948458,4.345237189913028 +transit,101.1963185503028,4.353849563734988 +transit,101.1938298045371,4.362461927351128 +transit,101.19134100207388,4.371074280741048 +transit,101.18885214279955,4.379686623884345 +transit,101.18636322660046,4.3882989567606145 +transit,101.18387425336303,4.39691127934945 +transit,101.1813852229736,4.405523591630444 +transit,101.17889613531854,4.414135893583188 +transit,101.17640699028419,4.422748185187274 +transit,101.17391778775689,4.43136046642229 +transit,101.17142852762296,4.439972737267824 +transit,101.16893920976874,4.448584997703461 +transit,101.16644983408051,4.4571972477087884 +transit,101.16396040044458,4.465809487263389 +transit,101.16147090874723,4.4744217163468445 +transit,101.15898135887475,4.4830339349387405 +transit,101.1564917507134,4.491646143018653 +transit,101.15400208414943,4.5002583405661625 +transit,101.1515123590691,4.508870527560845 +transit,101.14902257535863,4.517482703982278 +transit,101.14653273290426,4.526094869810036 +transit,101.14404283159222,4.534707025023693 +transit,101.14155287130868,4.543319169602823 +transit,101.13906285193985,4.551931303526992 +transit,101.13657277337194,4.560543426775776 +transit,101.13408263549111,4.569155539328738 +transit,101.13159243818352,4.5777676411654475 +transit,101.12910218133531,4.586379732265473 +transit,101.12661186483265,4.594991812608375 +transit,101.12412148856168,4.603603882173716 +transit,101.1216310524085,4.612215940941063 +transit,101.11914055625925,4.6208279888899675 +WP2,101.11665,4.629440026 +transit,101.1116365630793,4.636796143776513 +transit,101.10662302244353,4.6441522244408215 +transit,101.10160937792581,4.6515082679331075 +transit,101.09659562935923,4.658864274193555 +transit,101.09158177657683,4.6662202431623365 +transit,101.08656781941173,4.673576174779622 +transit,101.08155375769694,4.680932068985579 +transit,101.07653959126552,4.688287925720372 +transit,101.07152531995051,4.695643744924158 +transit,101.06651094358493,4.702999526537091 +transit,101.0614964620018,4.710355270499322 +transit,101.05648187503412,4.717710976750996 +transit,101.05146718251487,4.725066645232254 +transit,101.04645238427705,4.732422275883232 +transit,101.04143748015362,4.739777868644067 +transit,101.03642246997754,4.747133423454884 +transit,101.03140735358177,4.7544889402558095 +transit,101.02639213079924,4.761844418986961 +transit,101.02137680146286,4.769199859588455 +transit,101.01636136540559,4.776555262000405 +transit,101.0113458224603,4.783910626162916 +transit,101.00633017245991,4.791265952016091 +transit,101.00131441523729,4.7986212395000285 +transit,100.99629855062533,4.8059764885548235 +transit,100.99128257845688,4.813331699120564 +transit,100.98626649856479,4.820686871137338 +transit,100.9812503107819,4.828042004545224 +transit,100.97623401494107,4.835397099284299 +transit,100.97121761087509,4.842752155294637 +transit,100.96620109841678,4.850107172516305 +transit,100.96118447739893,4.857462150889367 +transit,100.95616774765435,4.864817090353879 +transit,100.9511509090158,4.872171990849901 +transit,100.94613396131604,4.87952685231748 +transit,100.94111690438784,4.886881674696663 +transit,100.93609973806393,4.894236457927489 +transit,100.93108246217706,4.90159120195 +transit,100.92606507655992,4.908945906704224 +transit,100.92104758104526,4.916300572130192 +transit,100.91602997546576,4.923655198167927 +transit,100.91101225965411,4.931009784757447 +transit,100.90599443344298,4.938364331838769 +transit,100.90097649666505,4.945718839351901 +transit,100.89595844915297,4.953073307236853 +transit,100.89094029073938,4.960427735433622 +transit,100.88592202125692,4.967782123882206 +transit,100.8809036405382,4.9751364725226 +transit,100.87588514841583,4.982490781294788 +transit,100.87086654472243,4.989845050138756 +transit,100.86584782929059,4.997199278994483 +transit,100.86082900195285,5.0045534678019425 +transit,100.8558100625418,5.011907616501104 +transit,100.85079101089,5.019261725031936 +transit,100.84577184682999,5.026615793334395 +transit,100.8407525701943,5.033969821348438 +transit,100.83573318081544,5.041323809014019 +transit,100.83071367852591,5.0486777562710845 +transit,100.82569406315825,5.056031663059574 +transit,100.8206743345449,5.063385529319429 +transit,100.81565449251838,5.070739354990583 +transit,100.81063453691111,5.078093140012962 +transit,100.80561446755557,5.085446884326492 +transit,100.80059428428419,5.092800587871093 +transit,100.7955739869294,5.100154250586678 +transit,100.79055357532363,5.1075078724131595 +transit,100.78553304929926,5.114861453290442 +transit,100.78051240868871,5.122214993158427 +transit,100.77549165332434,5.129568491957011 +transit,100.77047078303855,5.136921949626085 +transit,100.76544979766366,5.1442753661055365 +transit,100.76042869703207,5.151628741335249 +transit,100.75540748097607,5.1589820752551 +transit,100.75038614932802,5.166335367804962 +transit,100.74536470192022,5.173688618924702 +transit,100.74034313858496,5.1810418285541875 +transit,100.73532145915455,5.188394996633275 +transit,100.73029966346127,5.19574812310182 +transit,100.72527775133736,5.20310120789967 +transit,100.7202557226151,5.210454250966674 +transit,100.71523357712671,5.217807252242666 +transit,100.71021131470445,5.2251602116674905 +transit,100.70518893518053,5.232513129180969 +transit,100.70016643838714,5.2398660047229315 +transit,100.6951438241565,5.247218838233202 +transit,100.6901210923208,5.254571629651592 +transit,100.68509824271219,5.261924378917918 +transit,100.68007527516284,5.269277085971983 +transit,100.6750521895049,5.276629750753591 +transit,100.6700289855705,5.283982373202538 +transit,100.66500566319176,5.291334953258619 +transit,100.65998222220082,5.298687490861622 +transit,100.65495866242978,5.306039985951327 +transit,100.6499349837107,5.313392438467513 +transit,100.64491118587567,5.320744848349955 +transit,100.63988726875677,5.3280972155384205 +transit,100.63486323218602,5.335449539972675 +transit,100.6298390759955,5.342801821592474 +transit,100.62481480001722,5.350154060337575 +transit,100.6197904040832,5.3575062561477225 +transit,100.61476588802545,5.364858408962666 +transit,100.60974125167596,5.3722105187221425 +transit,100.60471649486671,5.379562585365886 +transit,100.59969161742966,5.386914608833628 +transit,100.59466661919677,5.394266589065092 +WP3,100.5896415,5.401618526 +transit,100.5813445401226,5.398777679035525 +transit,100.57304765748664,5.395936718513381 +transit,100.56475085205356,5.393095644494695 +transit,100.55645412378486,5.390254457040593 +transit,100.54815747264199,5.3874131562122045 +transit,100.53986089858641,5.384571742070661 +transit,100.53156440157957,5.381730214677086 +transit,100.52326798158292,5.378888574092612 +transit,100.51497163855791,5.376046820378368 +transit,100.50667537246598,5.373204953595482 +transit,100.49837918326854,5.370362973805085 +transit,100.49008307092704,5.367520881068305 +transit,100.48178703540292,5.364678675446276 +transit,100.47349107665755,5.361836357000125 +transit,100.46519519465238,5.358993925790986 +transit,100.4568993893488,5.356151381879984 +transit,100.44860366070824,5.353308725328258 +transit,100.44030800869207,5.3504659561969365 +transit,100.43201243326168,5.347623074547148 +transit,100.42371693437848,5.344780080440028 +transit,100.41542151200383,5.341936973936709 +transit,100.40712616609913,5.339093755098322 +transit,100.39883089662574,5.336250423986 +transit,100.39053570354503,5.3334069806608735 +transit,100.38224058681836,5.330563425184082 +transit,100.37394554640707,5.327719757616753 +transit,100.36565058227255,5.324875978020024 +transit,100.35735569437612,5.322032086455028 +transit,100.34906088267914,5.319188082982897 +transit,100.34076614714292,5.316343967664767 +transit,100.33247148772882,5.313499740561776 +transit,100.32417690439816,5.310655401735053 +transit,100.31588239711225,5.307810951245737 +transit,100.30758796583241,5.304966389154963 +transit,100.29929361051997,5.302121715523866 +transit,100.29099933113622,5.299276930413582 +transit,100.28270512764246,5.296432033885248 +WP4,100.274411,5.293587026 +transit,100.27692121572846,5.284947654341158 +transit,100.27943136189771,5.276308270128779 +transit,100.28194143862395,5.267668873383704 +transit,100.28445144602334,5.2590294641267725 +transit,100.28696138421206,5.250390042378823 +transit,100.28947125330627,5.241750608160693 +transit,100.2919810534221,5.233111161493218 +transit,100.29449078467569,5.224471702397231 +transit,100.29700044718314,5.215832230893566 +transit,100.29951004106057,5.207192747003053 +transit,100.30201956642406,5.198553250746522 +transit,100.30452902338972,5.189913742144798 +transit,100.3070384120736,5.18127422121871 +transit,100.30954773259175,5.172634687989083 +transit,100.31205698506024,5.163995142476737 +transit,100.31456616959508,5.155355584702496 +transit,100.31707528631232,5.146716014687179 +transit,100.31958433532795,5.138076432451605 +transit,100.32209331675796,5.129436838016594 +transit,100.32460223071836,5.120797231402956 +transit,100.32711107732511,5.112157612631509 +transit,100.32961985669418,5.103517981723063 +transit,100.33212856894153,5.094878338698431 +transit,100.33463721418308,5.086238683578423 +transit,100.33714579253477,5.077599016383843 +transit,100.33965430411253,5.068959337135502 +transit,100.34216274903224,5.060319645854201 +transit,100.3446711274098,5.051679942560748 +transit,100.3471794393611,5.043040227275942 +transit,100.34968768500201,5.034400500020585 +transit,100.35219586444838,5.025760760815474 +transit,100.35470397781607,5.017121009681407 +transit,100.3572120252209,5.008481246639183 +transit,100.35972000677872,4.999841471709591 +transit,100.3622279226053,4.991201684913431 +transit,100.36473577281647,4.982561886271489 +transit,100.36724355752803,4.973922075804558 +transit,100.36975127685574,4.965282253533426 +transit,100.37225893091536,4.956642419478879 +transit,100.37476651982267,4.948002573661705 +transit,100.3772740436934,4.9393627161026865 +transit,100.37978150264328,4.930722846822606 +transit,100.38228889678804,4.922082965842248 +transit,100.38479622624338,4.91344307318239 +transit,100.38730349112501,4.904803168863809 +transit,100.38981069154862,4.896163252907287 +transit,100.39231782762987,4.887523325333594 +transit,100.39482489948443,4.8788833861635075 +transit,100.39733190722797,4.870243435417798 +transit,100.39983885097611,4.86160347311724 +transit,100.4023457308445,4.852963499282601 +transit,100.40485254694875,4.84432351393465 +transit,100.40735929940448,4.835683517094153 +transit,100.40986598832728,4.827043508781877 +transit,100.41237261383273,4.818403489018586 +transit,100.41487917603644,4.8097634578250394 +transit,100.41738567505392,4.801123415222004 +transit,100.41989211100078,4.792483361230237 +transit,100.42239848399252,4.783843295870497 +transit,100.42490479414471,4.77520321916354 +transit,100.42741104157284,4.766563131130122 +transit,100.42991722639245,4.757923031790999 +transit,100.432423348719,4.749282921166923 +transit,100.43492940866801,4.740642799278644 +transit,100.43743540635495,4.732002666146916 +transit,100.43994134189529,4.723362521792482 +transit,100.44244721540448,4.714722366236092 +transit,100.44495302699798,4.706082199498494 +transit,100.4474587767912,4.697442021600429 +transit,100.44996446489958,4.688801832562642 +transit,100.45247009143853,4.680161632405875 +transit,100.45497565652344,4.671521421150867 +transit,100.45748116026972,4.662881198818358 +transit,100.45998660279275,4.654240965429086 +transit,100.46249198420789,4.645600721003786 +transit,100.46499730463051,4.636960465563193 +transit,100.46750256417596,4.628320199128039 +transit,100.47000776295955,4.619679921719062 +transit,100.47251290109665,4.611039633356986 +transit,100.47501797870255,4.602399334062545 +transit,100.47752299589257,4.593759023856464 +transit,100.480027952782,4.585118702759472 +transit,100.48253284948612,4.576478370792293 +transit,100.48503768612021,4.567838027975652 +transit,100.48754246279954,4.559197674330269 +transit,100.49004717963936,4.5505573098768695 +transit,100.49255183675491,4.541916934636172 +transit,100.49505643426144,4.533276548628894 +transit,100.49756097227416,4.524636151875753 +transit,100.50006545090828,4.515995744397465 +transit,100.50256987027902,4.507355326214745 +transit,100.50507423050155,4.498714897348309 +transit,100.50757853169105,4.490074457818864 +transit,100.51008277396272,4.481434007647124 +transit,100.51258695743171,4.4727935468538 +transit,100.51509108221315,4.464153075459594 +transit,100.5175951484222,4.455512593485217 +transit,100.520099156174,4.446872100951376 +transit,100.52260310558364,4.438231597878771 +transit,100.52510699676625,4.42959108428811 +transit,100.52761082983695,4.4209505602000885 +transit,100.53011460491079,4.412310025635412 +transit,100.53261832210288,4.403669480614776 +transit,100.53512198152828,4.395028925158879 +transit,100.53762558330205,4.386388359288419 +transit,100.54012912753923,4.377747783024089 +transit,100.54263261435489,4.369107196386585 +transit,100.54513604386402,4.360466599396596 +transit,100.54763941618167,4.351825992074816 +transit,100.55014273142284,4.343185374441935 +transit,100.55264598970253,4.33454474651864 +transit,100.55514919113573,4.325904108325621 +transit,100.5576523358374,4.317263459883561 +transit,100.56015542392257,4.308622801213148 +transit,100.56265845550614,4.299982132335064 +transit,100.56516143070309,4.29134145326999 +transit,100.56766434962834,4.2827007640386086 +transit,100.57016721239685,4.2740600646616 +transit,100.57267001912352,4.265419355159642 +transit,100.57517276992327,4.256778635553414 +transit,100.57767546491101,4.2481379058635875 +transit,100.58017810420161,4.2394971661108425 +transit,100.58268068790997,4.230856416315849 +transit,100.58518321615097,4.22221565649928 +transit,100.58768568903945,4.2135748866818075 +transit,100.59018810669028,4.204934106884102 +transit,100.59269046921828,4.19629331712683 +transit,100.59519277673833,4.187652517430662 +transit,100.59769502936523,4.17901170781626 +transit,100.60019722721378,4.170370888304292 +transit,100.60269937039881,4.1617300589154205 +transit,100.6052014590351,4.15308921967031 +transit,100.60770349323745,4.14444837058962 +transit,100.61020547312063,4.1358075116940105 +transit,100.61270739879942,4.1271666430041405 +transit,100.61520927038855,4.118525764540668 +transit,100.6177110880028,4.109884876324249 +transit,100.62021285175689,4.101243978375539 +transit,100.62271456176556,4.092603070715192 +transit,100.62521621814354,4.083962153363863 +transit,100.62771782100552,4.075321226342201 +transit,100.63021937046621,4.066680289670856 +transit,100.63272086664031,4.058039343370478 +transit,100.6352223096425,4.049398387461716 +transit,100.63772369958747,4.040757421965217 +transit,100.64022503658985,4.032116446901626 +transit,100.64272632076433,4.023475462291587 +transit,100.64522755222553,4.014834468155744 +transit,100.64772873108812,4.006193464514738 +transit,100.6502298574667,3.9975524513892142 +transit,100.65273093147592,3.988911428799806 +transit,100.65523195323034,3.980270396767158 +transit,100.65773292284462,3.9716293553119044 +transit,100.6602338404333,3.962988304454682 +transit,100.66273470611101,3.9543472442161276 +transit,100.66523551999231,3.9457061746168716 +transit,100.66773628219174,3.937065095677551 +transit,100.67023699282387,3.9284240074187946 +transit,100.67273765200328,3.919782909861235 +transit,100.67523825984446,3.9111418030254987 +transit,100.67773881646197,3.9025006869322167 +transit,100.68023932197032,3.8938595616020164 +transit,100.68273977648403,3.885218427055523 +transit,100.68524018011759,3.8765772833133605 +transit,100.6877405329855,3.867936130396153 +transit,100.69024083520225,3.859294968324524 +transit,100.69274108688231,3.850653797119093 +transit,100.69524128814015,3.842012616800483 +transit,100.69774143909024,3.833371427389311 +transit,100.70024153984701,3.824730228906196 +transit,100.70274159052492,3.8160890213717553 +transit,100.70524159123839,3.8074478048066043 +transit,100.70774154210186,3.798806579231359 +transit,100.71024144322972,3.790165344666629 +transit,100.7127412947364,3.781524101133032 +transit,100.71524109673629,3.7728828486511756 +transit,100.71774084934378,3.7642415872416732 +transit,100.72024055267325,3.7556003169251313 +transit,100.72274020683908,3.7469590377221595 +transit,100.72523981195562,3.7383177496533655 +transit,100.72773936813724,3.7296764527393518 +transit,100.73023887549827,3.7210351470007286 +transit,100.73273833415307,3.7123938324580954 +transit,100.73523774421595,3.703752509132056 +transit,100.73773710580124,3.6951111770432115 +transit,100.74023641902326,3.6864698362121655 +transit,100.74273568399632,3.677828486659513 +transit,100.74523490083469,3.6691871284058553 +transit,100.74773406965268,3.6605457614717887 +transit,100.75023319056457,3.65190438587791 +transit,100.75273226368462,3.643263001644813 +transit,100.7552312891271,3.6346216087930916 +transit,100.75773026700627,3.6259802073433427 +transit,100.76022919743636,3.6173387973161546 +transit,100.76272808053162,3.6086973787321175 +transit,100.76522691640628,3.6000559516118256 +transit,100.76772570517456,3.5914145159758624 +transit,100.77022444695068,3.58277307184482 +transit,100.77272314184884,3.574131619239283 +transit,100.77522178998323,3.565490158179837 +transit,100.77772039146807,3.556848688687067 +transit,100.7802189464175,3.5482072107815568 +transit,100.78271745494571,3.5395657244838894 +transit,100.78521591716688,3.5309242298146435 +transit,100.78771433319515,3.5222827267944052 +transit,100.79021270314469,3.5136412154437484 +transit,100.79271102712961,3.504999695783254 +transit,100.79520930526407,3.4963581678335 +transit,100.79770753766218,3.487716631615061 +transit,100.80020572443806,3.4790750871485145 +transit,100.80270386570581,3.470433534454433 +transit,100.80520196157956,3.46179197355339 +transit,100.80770001217338,3.4531504044659584 +transit,100.81019801760137,3.4445088272127107 +transit,100.81269597797758,3.435867241814216 +transit,100.81519389341612,3.4272256482910426 +transit,100.81769176403104,3.4185840466637623 +transit,100.82018958993638,3.4099424369529365 +transit,100.82268737124619,3.4013008191791383 +transit,100.82518510807452,3.392659193362928 +transit,100.82768280053538,3.3840175595248736 +transit,100.83018044874282,3.375375917685536 +transit,100.83267805281086,3.3667342678654775 +transit,100.83517561285348,3.358092610085261 +transit,100.83767312898469,3.349450944365446 +transit,100.8401706013185,3.3408092707265924 +transit,100.84266802996888,3.3321675891892584 +transit,100.8451654150498,3.323525899774002 +transit,100.84766275667526,3.314884202501379 +transit,100.85016005495919,3.3062424973919446 +transit,100.85265731001557,3.2976007844662547 +transit,100.85515452195834,3.2889590637448634 +transit,100.85765169090143,3.2803173352483213 +transit,100.86014881695878,3.2716755989971817 +transit,100.86264590024433,3.2630338550119937 +transit,100.86514294087198,3.2543921033133096 +transit,100.86763993895563,3.245750343921676 +transit,100.87013689460922,3.237108576857644 +transit,100.87263380794663,3.228466802141756 +transit,100.87513067908172,3.219825019794561 +transit,100.87762750812841,3.2111832298366045 +transit,100.88012429520056,3.2025414322884296 +transit,100.88262104041203,3.19389962717058 +transit,100.8851177438767,3.1852578145035957 +transit,100.88761440570839,3.176615994308023 +transit,100.89011102602097,3.1679741666043983 +transit,100.89260760492829,3.1593323314132618 +transit,100.89510414254414,3.1506904887551532 +transit,100.89760063898237,3.14204863865061 +transit,100.9000970943568,3.133406781120168 +transit,100.90259350878122,3.1247649161843647 +transit,100.90508988236945,3.116123043863733 +transit,100.90758621523527,3.1074811641788096 +transit,100.91008250749249,3.0988392771501245 +transit,100.91257875925487,3.0901973827982125 +transit,100.9150749706362,3.0815554811436043 +transit,100.91757114175023,3.0729135722068293 +transit,100.92006727271072,3.0642716560084198 +transit,100.92256336363145,3.0556297325689004 +transit,100.92505941462615,3.046987801908803 +transit,100.92755542580855,3.038345864048651 +transit,100.93005139729239,3.029703919008973 +transit,100.9325473291914,3.021061966810293 +transit,100.93504322161928,3.0124200074731347 +transit,100.93753907468977,3.0037780410180224 +transit,100.94003488851655,2.995136067465479 +transit,100.94253066321333,2.9864940868360255 +transit,100.9450263988938,2.977852099150182 +transit,100.94752209567164,2.969210104428469 +transit,100.95001775366055,2.9605681026914064 +transit,100.95251337297418,2.9519260939595102 +transit,100.95500895372619,2.943284078253301 +transit,100.95750449603025,2.9346420555932924 +WP5,100.96,2.926000026 +transit,100.96736807373901,2.9208731072894585 +transit,100.97473608064752,2.915746139566842 +transit,100.982104020843,2.910619122918749 +transit,100.98947189444291,2.905492057431779 +transit,100.99683970156477,2.900364943192523 +transit,101.00420744232602,2.895237780287576 +transit,101.01157511684417,2.8901105688035282 +transit,101.01894272523668,2.8849833088269676 +transit,101.02631026762107,2.879856000444479 +transit,101.03367774411478,2.874728643742649 +transit,101.04104515483532,2.869601238808057 +transit,101.04841249990017,2.8644737857272835 +transit,101.0557797794268,2.859346284586906 +transit,101.0631469935327,2.8542187354735002 +transit,101.07051414233536,2.849091138473637 +transit,101.07788122595225,2.8439634936738916 +transit,101.08524824450087,2.8388358011608297 +transit,101.0926151980987,2.8337080610210186 +transit,101.0999820868632,2.8285802733410237 +transit,101.10734891091191,2.823452438207407 +transit,101.11471567036226,2.8183245557067305 +transit,101.12208236533176,2.813196625925549 +transit,101.12944899593789,2.808068648950422 +transit,101.13681556229815,2.8029406248679027 +transit,101.14418206453,2.797812553764542 +transit,101.15154850275094,2.792684435726891 +transit,101.15891487707846,2.787556270841498 +transit,101.16628118763005,2.7824280591949067 +transit,101.17364743452318,2.7772998008736636 +transit,101.18101361787534,2.772171495964307 +transit,101.18837973780401,2.7670431445533787 +transit,101.19574579442671,2.761914746727415 +transit,101.2031117878609,2.756786302572953 +transit,101.21047771822407,2.7516578121765236 +transit,101.21784358563372,2.746529275624659 +transit,101.22520939020733,2.741400693003888 +transit,101.23257513206238,2.73627206440074 +transit,101.23994081131636,2.731143389901736 +transit,101.24730642808677,2.7260146695934018 +transit,101.2546719824911,2.7208859035622575 +transit,101.26203747464683,2.715757091894822 +transit,101.26940290467145,2.7106282346776136 +transit,101.27676827268246,2.705499331997145 +transit,101.28413357879734,2.7003703839399296 +transit,101.29149882313357,2.69524139059248 +transit,101.29886400580865,2.6901123520413024 +transit,101.30622912694008,2.6849832683729047 +transit,101.31359418664533,2.6798541396737914 +transit,101.32095918504191,2.674724966030466 +transit,101.32832412224731,2.6695957475294287 +transit,101.335688998379,2.664466484257178 +transit,101.34305381355449,2.659337176300211 +transit,101.35041856789125,2.654207823745022 +transit,101.35778326150681,2.6490784266781042 +transit,101.36514789451863,2.6439489851859483 +transit,101.3725124670442,2.6388194993550425 +transit,101.37987697920104,2.6336899692718747 +transit,101.38724143110662,2.628560395022929 +transit,101.39460582287843,2.623430776694687 +transit,101.40197015463397,2.618301114373633 +transit,101.40933442649074,2.613171408146242 +transit,101.41669863856623,2.608041658098994 +transit,101.42406279097791,2.602911864318363 +transit,101.43142688384332,2.597782026890821 +transit,101.4387909172799,2.59265214590284 +transit,101.44615489140519,2.5875222214408895 +transit,101.45351880633665,2.582392253591437 +transit,101.46088266219179,2.577262242440946 +transit,101.4682464590881,2.572132188075882 +transit,101.47561019714308,2.5670020905827053 +transit,101.48297387647423,2.5618719500478755 +transit,101.49033749719904,2.5567417665578507 +transit,101.49770105943499,2.5516115401990853 +transit,101.50506456329958,2.546481271058034 +transit,101.51242800891032,2.5413509592211496 +transit,101.51979139638469,2.536220604774879 +transit,101.5271547258402,2.531090207805674 +transit,101.53451799739433,2.525959768399978 +transit,101.54188121116461,2.5208292866442363 +transit,101.54924436726849,2.5156987626248917 +transit,101.55660746582349,2.510568196428383 +transit,101.5639705069471,2.5054375881411506 +transit,101.57133349075683,2.50030693784963 +transit,101.57869641737017,2.4951762456402578 +transit,101.58605928690461,2.490045511599464 +transit,101.59342209947765,2.4849147358136827 +transit,101.6007848552068,2.4797839183693413 +transit,101.60814755420955,2.474653059352868 +transit,101.61551019660338,2.4695221588506877 +transit,101.62287278250582,2.4643912169492235 +transit,101.63023531203434,2.459260233734899 +transit,101.63759778530645,2.4541292092941327 +transit,101.64496020243966,2.448998143713344 +transit,101.65232256355146,2.4438670370789466 +transit,101.65968486875934,2.4387358894773596 +transit,101.6670471181808,2.433604700994991 +transit,101.67440931193336,2.428473471718254 +transit,101.68177145013449,2.4233422017335564 +transit,101.6891335329017,2.4182108911273064 +transit,101.69649556035252,2.413079539985908 +transit,101.7038575326044,2.4079481483957674 +transit,101.71121944977487,2.4028167164432834 +transit,101.71858131198142,2.3976852442148573 +transit,101.72594311934157,2.392553731796887 +transit,101.73330487197279,2.387422179275769 +transit,101.7406665699926,2.3822905867378976 +transit,101.7480282135185,2.377158954269665 +transit,101.75538980266798,2.3720272819574646 +transit,101.76275133755856,2.3668955698876823 +transit,101.77011281830771,2.361763818146708 +transit,101.77747424503296,2.356632026820926 +transit,101.78483561785181,2.3515001959967203 +transit,101.79219693688175,2.3463683257604733 +transit,101.7995582022403,2.341236416198566 +transit,101.80691941404494,2.336104467397376 +transit,101.81428057241318,2.3309724794432802 +transit,101.82164167746252,2.325840452422655 +transit,101.82900272931049,2.320708386421872 +transit,101.83636372807455,2.3155762815273033 +transit,101.84372467387223,2.31044413782532 +transit,101.85108556682103,2.305311955402289 +transit,101.85844640703843,2.3001797343445767 +transit,101.86580719464197,2.2950474747385483 +transit,101.87316792974913,2.289915176670566 +transit,101.88052861247742,2.2847828402269923 +transit,101.88788924294435,2.2796504654941856 +transit,101.89524982126743,2.274518052558505 +transit,101.90261034756413,2.269385601506305 +transit,101.90997082195199,2.264253112423941 +transit,101.91733124454849,2.259120585397766 +transit,101.92469161547116,2.2539880205141296 +transit,101.93205193483747,2.248855417859384 +transit,101.93941220276497,2.2437227775198725 +transit,101.94677241937113,2.2385900995819448 +transit,101.95413258477348,2.233457384131943 +transit,101.96149269908949,2.2283246312562115 +transit,101.96885276243671,2.2231918410410896 +transit,101.9762127749326,2.2180590135729177 +transit,101.98357273669471,2.2129261489380334 +transit,101.99093264784052,2.2077932472227713 +transit,101.99829250848754,2.2026603085134666 +transit,102.00565231875328,2.1975273328964513 +transit,102.01301207875524,2.192394320458058 +transit,102.02037178861093,2.1872612712846147 +transit,102.02773144843786,2.182128185462449 +transit,102.03509105835354,2.176995063077888 +transit,102.04245061847547,2.171861904217255 +transit,102.04981012892117,2.166728708966873 +transit,102.05716958980813,2.1615954774130643 +transit,102.06452900125385,2.1564622096421475 +transit,102.07188836337586,2.1513289057404394 +transit,102.07924767629166,2.146195565794258 +transit,102.08660694011877,2.1410621898899183 +transit,102.09396615497467,2.1359287781137315 +transit,102.10132532097688,2.1307953305520098 +transit,102.10868443824293,2.1256618472910653 +transit,102.1160435068903,2.120528328417203 +transit,102.12340252703652,2.115394774016732 +transit,102.13076149879907,2.1102611841759553 +transit,102.1381204222955,2.1051275589811773 +transit,102.14547929764329,2.0999938985187017 +transit,102.15283812495996,2.0948602028748264 +transit,102.160196904363,2.089726472135852 +transit,102.16755563596995,2.084592706388073 +transit,102.17491431989829,2.0794589057177886 +transit,102.18227295626555,2.0743250702112914 +transit,102.18963154518923,2.0691911999548736 +transit,102.19699008678685,2.0640572950348264 +transit,102.20434858117592,2.05892335553744 +transit,102.21170702847394,2.0537893815490005 +transit,102.21906542879843,2.048655373155795 +transit,102.22642378226689,2.0435213304441096 +transit,102.23378208899683,2.0383872535002268 +transit,102.24114034910578,2.033253142410428 +transit,102.24849856271123,2.028118997260994 +transit,102.2558567299307,2.0229848181382017 +transit,102.26321485088171,2.0178506051283316 +transit,102.27057292568176,2.012716358317656 +transit,102.27793095444835,2.007582077792452 +transit,102.28528893729903,2.00244776363899 +transit,102.29264687435126,1.9973134159435422 +transit,102.3000047657226,1.9921790347923782 +transit,102.30736261153054,1.9870446202717655 +transit,102.31472041189258,1.9819101724679717 +transit,102.32207816692626,1.9767756914672616 +transit,102.32943587674907,1.9716411773558984 +transit,102.33679354147853,1.9665066302201457 +transit,102.34415116123216,1.9613720501462628 +transit,102.35150873612747,1.9562374372205096 +transit,102.35886626628196,1.9511027915291435 +transit,102.36622375181315,1.9459681131584208 +transit,102.37358119283857,1.9408334021945972 +transit,102.38093858947572,1.935698658723926 +transit,102.3882959418421,1.9305638828326581 +transit,102.39565325005523,1.925429074607045 +transit,102.40301051423265,1.920294234133335 +transit,102.41036773449184,1.9151593614977762 +transit,102.41772491095034,1.910024456786615 +transit,102.42508204372564,1.9048895200860958 +transit,102.43243913293527,1.8997545514824623 +transit,102.43979617869674,1.8946195510619552 +transit,102.44715318112758,1.889484518910817 +transit,102.45451014034526,1.8843494551152842 +transit,102.46186705646734,1.8792143597615973 +transit,102.46922392961133,1.8740792329359908 +transit,102.47658075989472,1.868944074724699 +transit,102.48393754743505,1.8638088852139574 +transit,102.4912942923498,1.858673664489995 +transit,102.49865099475655,1.853538412639045 +transit,102.50600765477274,1.8484031297473364 +transit,102.51336427251593,1.8432678159010962 +transit,102.52072084810364,1.83813247118655 +transit,102.52807738165336,1.8329970956899249 +transit,102.53543387328261,1.8278616894974433 +transit,102.54279032310893,1.8227262526953285 +transit,102.55014673124981,1.8175907853697992 +transit,102.55750309782279,1.8124552876070774 +transit,102.56485942294536,1.8073197594933814 +transit,102.57221570673505,1.802184201114926 +transit,102.57957194930938,1.797048612557929 +transit,102.58692815078587,1.7919129939086027 +transit,102.59428431128202,1.7867773452531608 +transit,102.60164043091537,1.7816416666778148 +transit,102.6089965098034,1.7765059582687748 +transit,102.61635254806366,1.7713702201122492 +transit,102.62370854581367,1.7662344522944466 +transit,102.63106450317092,1.761098654901572 +transit,102.63842042025296,1.7559628280198303 +transit,102.64577629717728,1.7508269717354255 +transit,102.65313213406141,1.7456910861345591 +transit,102.66048793102286,1.7405551713034326 +transit,102.66784368817916,1.735419227328246 +transit,102.67519940564782,1.7302832542951962 +transit,102.68255508354636,1.725147252290482 +transit,102.6899107219923,1.7200112214002978 +transit,102.69726632110316,1.7148751617108373 +transit,102.70462188099646,1.7097390733082953 +transit,102.71197740178971,1.7046029562788627 +transit,102.71933288360043,1.6994668107087305 +transit,102.72668832654614,1.6943306366840876 +transit,102.73404373074436,1.6891944342911214 +transit,102.74139909631262,1.6840582036160194 +transit,102.74875442336842,1.678921944744967 +transit,102.75610971202929,1.673785657764148 +transit,102.76346496241275,1.6686493427597462 +transit,102.77082017463631,1.6635129998179425 +transit,102.77817534881751,1.6583766290249164 +transit,102.78553048507385,1.653240230466849 +transit,102.79288558352285,1.648103804229917 +transit,102.80024064428204,1.642967350400297 +transit,102.80759566746895,1.6378308690641663 +transit,102.81495065320107,1.6326943603076969 +transit,102.82230560159593,1.627557824217063 +transit,102.82966051277107,1.622421260878435 +transit,102.837015386844,1.6172846703779853 +transit,102.84437022393223,1.6121480528018823 +transit,102.85172502415328,1.6070114082362945 +transit,102.8590797876247,1.6018747367673885 +transit,102.86643451446398,1.5967380384813301 +transit,102.87378920478864,1.5916013134642835 +transit,102.88114385871621,1.5864645618024122 +transit,102.88849847636423,1.5813277835818789 +transit,102.89585305785019,1.576190978888844 +transit,102.90320760329163,1.5710541478094675 +transit,102.91056211280608,1.5659172904299077 +transit,102.91791658651103,1.5607804068363227 +transit,102.92527102452402,1.5556434971148676 +transit,102.93262542696257,1.5505065613516982 +transit,102.93997979394422,1.5453695996329682 +transit,102.94733412558647,1.5402326120448304 +transit,102.95468842200684,1.5350955986734367 +transit,102.96204268332286,1.5299585596049368 +transit,102.96939690965205,1.5248214949254808 +transit,102.97675110111193,1.519684404721216 +transit,102.98410525782003,1.5145472890782903 +transit,102.99145937989388,1.5094101480828477 +transit,102.99881346745097,1.5042729818210352 +transit,103.00616752060886,1.4991357903789955 +transit,103.01352153948505,1.493998573842871 +transit,103.02087552419707,1.4888613322988025 +transit,103.02822947486244,1.4837240658329311 +transit,103.03558339159869,1.4785867745313956 +transit,103.04293727452334,1.4734494584803337 +transit,103.0502911237539,1.4683121177658822 +transit,103.05764493940791,1.4631747524741774 +transit,103.06499872160289,1.4580373626913539 +transit,103.07235247045635,1.4528999485035443 +transit,103.07970618608584,1.4477625099968825 +transit,103.08705986860886,1.4426250472574986 +transit,103.09441351814294,1.4374875603715247 +transit,103.10176713480561,1.4323500494250883 +transit,103.1091207187144,1.4272125145043184 +transit,103.11647426998681,1.4220749556953414 +transit,103.12382778874039,1.4169373730842842 +transit,103.13118127509264,1.4117997667572708 +transit,103.13853472916111,1.4066621368004255 +transit,103.1458881510633,1.4015244832998714 +transit,103.15324154091674,1.3963868063417306 +transit,103.16059489883897,1.3912491060121224 +transit,103.16794822494751,1.3861113823971678 +transit,103.17530151935986,1.3809736355829842 +transit,103.18265478219358,1.3758358656556917 +transit,103.19000801356617,1.3706980727014035 +transit,103.19736121359517,1.3655602568062382 +transit,103.2047143823981,1.3604224180563078 +transit,103.21206752009248,1.3552845565377272 +transit,103.21942062679584,1.350146672336609 +transit,103.22677370262569,1.3450087655390632 +transit,103.23412674769959,1.3398708362312017 +transit,103.24147976213504,1.334732884499133 +transit,103.24883274604957,1.3295949104289662 +transit,103.2561856995607,1.324456914106809 +transit,103.26353862278596,1.3193188956187667 +transit,103.27089151584289,1.314180855050945 +transit,103.278244378849,1.3090427924894494 +transit,103.28559721192181,1.3039047080203823 +transit,103.29295001517886,1.2987666017298465 +transit,103.30030278873767,1.2936284737039434 +transit,103.30765553271577,1.288490324028774 +transit,103.3150082472307,1.2833521527904372 +transit,103.32236093239995,1.2782139600750326 +transit,103.32971358834106,1.2730757459686564 +transit,103.33706621517157,1.2679375105574051 +transit,103.344418813009,1.2627992539273767 +transit,103.35177138197088,1.257660976164664 +transit,103.35912392217473,1.2525226773553617 +transit,103.36647643373809,1.2473843575855623 +transit,103.37382891677846,1.2422460169413576 +transit,103.38118137141339,1.2371076555088392 +transit,103.3885337977604,1.231969273374096 +transit,103.39588619593702,1.226830870623219 +transit,103.40323856606076,1.221692447342295 +transit,103.41059090824918,1.2165540036174116 +transit,103.41794322261978,1.211415539534655 +transit,103.42529550929011,1.206277055180112 +transit,103.43264776837766,1.2011385506398657 +WP6,103.44,1.196000026 +transit,103.4440348984521,1.2037722281016348 +transit,103.44806981975256,1.2115444237502009 +transit,103.45210476404904,1.2193166129039905 +transit,103.45613973148924,1.2270887955212961 +transit,103.46017472222083,1.2348609715604077 +transit,103.4642097363915,1.242633140979616 +transit,103.46824477414893,1.2504053037372107 +transit,103.47227983564082,1.2581774597914792 +transit,103.47631492101488,1.2659496091007107 +transit,103.48035003041878,1.273721751623191 +transit,103.48438516400023,1.281493887317206 +transit,103.48842032190694,1.2892660161410416 +transit,103.49245550428662,1.2970381380529825 +transit,103.49649071128698,1.304810253011311 +transit,103.50052594305572,1.3125823609743108 +transit,103.50456119974056,1.3203544619002632 +transit,103.50859648148923,1.328126555747449 +transit,103.51263178844945,1.335898642474149 +transit,103.51666712076894,1.3436707220386421 +transit,103.52070247859544,1.3514427943992064 +transit,103.52473786207668,1.3592148595141196 +transit,103.52877327136038,1.3669869173416582 +transit,103.53280870659428,1.3747589678400982 +transit,103.53684416792613,1.3825310109677134 +transit,103.5408796555037,1.390303046682779 +transit,103.54491516947469,1.3980750749435669 +transit,103.5489507099869,1.4058470957083495 +transit,103.55298627718804,1.4136191089353984 +transit,103.5570218712259,1.421391114582983 +transit,103.56105749224824,1.4291631126093731 +transit,103.56509314040281,1.4369351029728372 +transit,103.56912881583737,1.4447070856316422 +transit,103.57316451869974,1.452479060544055 +transit,103.57720024913765,1.4602510276683411 +transit,103.5812360072989,1.4680229869627643 +transit,103.58527179333126,1.4757949383855895 +transit,103.58930760738252,1.4835668818950782 +transit,103.59334344960048,1.491338817449493 +transit,103.59737932013292,1.499110745007094 +transit,103.60141521912765,1.5068826645261406 +transit,103.60545114673245,1.5146545759648926 +transit,103.60948710309515,1.5224264792816067 +transit,103.61352308836354,1.5301983744345402 +transit,103.61755910268543,1.5379702613819488 +transit,103.62159514620865,1.5457421400820872 +transit,103.62563121908101,1.5535140104932088 +transit,103.62966732145033,1.561285872573567 +transit,103.63370345346443,1.5690577262814127 +transit,103.63773961527116,1.5768295715749974 +transit,103.64177580701833,1.5846014084125701 +transit,103.6458120288538,1.592373236752379 +transit,103.6498482809254,1.6001450565526734 +transit,103.65388456338096,1.607916867771698 +transit,103.65792087636835,1.6156886703676991 +transit,103.66195722003542,1.6234604642989214 +transit,103.66599359453001,1.6312322495236073 +WP7,103.67003,1.639004026 +transit,103.66240477485763,1.6435605098711012 +transit,103.65477951514863,1.648116964243239 +transit,103.64715422077721,1.6526733890344614 +transit,103.63952889164753,1.657229784162814 +transit,103.63190352766377,1.6617861495463415 +transit,103.62427812873014,1.6663424851030881 +transit,103.61665269475081,1.6708987907510977 +transit,103.60902722562999,1.6754550664084111 +transit,103.60140172127184,1.6800113119930717 +transit,103.59377618158057,1.6845675274231189 +transit,103.58615060646035,1.689123712616592 +transit,103.57852499581539,1.6936798674915303 +transit,103.57089934954988,1.6982359919659715 +transit,103.563273667568,1.7027920859579515 +transit,103.55564794977396,1.7073481493855067 +transit,103.54802219607193,1.711904182166672 +transit,103.54039640636613,1.716460184219482 +transit,103.53277058056074,1.721016155461969 +transit,103.52514471855996,1.725572095812165 +transit,103.517518820268,1.7301280051881018 +transit,103.50989288558903,1.7346838835078089 +transit,103.50226691442727,1.7392397306893157 +transit,103.49464090668691,1.743795546650651 +transit,103.48701486227216,1.7483513313098415 +transit,103.47938878108722,1.752907084584914 +transit,103.47176266303629,1.7574628063938937 +transit,103.46413650802356,1.762018496654805 +transit,103.45651031595324,1.7665741552856715 +transit,103.44888408672954,1.771129782204516 +transit,103.44125782025667,1.7756853773293593 +transit,103.43363151643881,1.7802409405782227 +transit,103.4260051751802,1.7847964718691254 +transit,103.41837879638501,1.7893519711200867 +transit,103.41075237995749,1.793907438249123 +transit,103.40312592580183,1.7984628731742522 +transit,103.39549943382222,1.8030182758134896 +transit,103.3878729039229,1.8075736460848493 +transit,103.38024633600807,1.8121289839063461 +transit,103.37261972998193,1.816684289195991 +transit,103.36499308574872,1.8212395618717976 +transit,103.35736640321262,1.8257948018517758 +transit,103.34973968227789,1.8303500090539349 +transit,103.34211292284868,1.8349051833962842 +transit,103.33448612482928,1.8394603247968309 +transit,103.32685928812386,1.8440154331735823 +transit,103.31923241263664,1.8485705084445434 +transit,103.31160549827186,1.8531255505277202 +transit,103.30397854493371,1.857680559341114 +transit,103.29635155252645,1.8622355348027306 +transit,103.28872452095426,1.8667904768305685 +transit,103.2810974501214,1.8713453853426305 +transit,103.27347033993205,1.8759002602569148 +transit,103.26584319029047,1.8804551014914208 +transit,103.25821600110088,1.885009908964146 +transit,103.25058877226748,1.8895646825930859 +transit,103.24296150369453,1.894119422296237 +transit,103.23533419528623,1.8986741279915933 +transit,103.22770684694682,1.9032287995971486 +transit,103.22007945858053,1.9077834370308946 +transit,103.21245203009158,1.9123380402108232 +transit,103.20482456138421,1.9168926090549236 +transit,103.19719705236267,1.9214471434811855 +transit,103.18956950293115,1.9260016434075975 +transit,103.1819419129939,1.9305561087521468 +transit,103.17431428245517,1.9351105394328183 +transit,103.16668661121918,1.9396649353675983 +transit,103.15905889919017,1.9442192964744696 +transit,103.15143114627237,1.9487736226714165 +transit,103.14380335237003,1.9533279138764188 +transit,103.13617551738737,1.957882170007458 +transit,103.12854764122865,1.962436390982514 +transit,103.1209197237981,1.9669905767195657 +transit,103.11329176499996,1.9715447271365898 +transit,103.10566376473847,1.976098842151563 +transit,103.09803572291787,1.9806529216824602 +transit,103.09040763944242,1.9852069656472566 +transit,103.08277951421636,1.9897609739639248 +transit,103.07515134714392,1.9943149465504364 +transit,103.06752313812935,1.998868883324763 +transit,103.05989488707691,2.003422784204874 +transit,103.05226659389083,2.007976649108739 +transit,103.04463825847539,2.0125304779543245 +transit,103.0370098807348,2.017084270659597 +transit,103.02938146057335,2.0216380271425236 +transit,103.02175299789526,2.0261917473210675 +transit,103.0141244926048,2.030745431113192 +transit,103.00649594460621,2.035299078436859 +transit,102.99886735380376,2.03985268921003 +transit,102.9912387201017,2.0444062633506648 +transit,102.98361004340428,2.0489598007767227 +transit,102.97598132361577,2.0535133014061597 +transit,102.96835256064043,2.058066765156934 +transit,102.96072375438249,2.0626201919469995 +transit,102.95309490474624,2.067173581694312 +transit,102.94546601163592,2.0717269343168243 +transit,102.93783707495581,2.076280249732488 +transit,102.93020809461017,2.080833527859254 +transit,102.92257907050325,2.085386768615072 +transit,102.91495000253931,2.0899399719178904 +transit,102.90732089062266,2.0944931376856575 +transit,102.89969173465752,2.0990462658363187 +transit,102.89206253454817,2.10359935628782 +transit,102.88443329019888,2.1081524089581047 +transit,102.87680400151393,2.1127054237651155 +transit,102.86917466839759,2.117258400626795 +transit,102.86154529075411,2.121811339461083 +transit,102.85391586848777,2.126364240185919 +transit,102.84628640150285,2.1309171027192413 +transit,102.83865688970364,2.1354699269789856 +transit,102.83102733299438,2.1400227128830918 +transit,102.82339773127937,2.14457546034949 +transit,102.81576808446289,2.1491281692961155 +transit,102.8081383924492,2.1536808396409013 +transit,102.80050865514258,2.158233471301778 +transit,102.79287887244733,2.162786064196675 +transit,102.78524904426772,2.167338618243522 +transit,102.77761917050802,2.171891133360247 +transit,102.76998925107253,2.176443609464775 +transit,102.76235928586553,2.1809960464750318 +transit,102.7547292747913,2.1855484443089415 +transit,102.74709921775414,2.190100802884428 +transit,102.73946911465832,2.1946531221194108 +transit,102.73183896540813,2.199205401931813 +transit,102.72420876990786,2.203757642239551 +transit,102.7165785280618,2.2083098429605448 +transit,102.70894823977424,2.212862004012711 +transit,102.70131790494949,2.217414125313964 +transit,102.69368752349183,2.2219662067822195 +transit,102.68605709530554,2.22651824833539 +transit,102.67842662029493,2.231070249891388 +transit,102.67079609836429,2.235622211368125 +transit,102.66316552941792,2.2401741326835083 +transit,102.65553491336013,2.244726013755447 +transit,102.6479042500952,2.2492778545018495 +transit,102.64027353952743,2.25382965484062 +transit,102.63264278156113,2.2583814146896644 +transit,102.6250119761006,2.262933133966885 +transit,102.61738112305014,2.2674848125901845 +transit,102.60975022231405,2.2720364504774637 +transit,102.60211927379666,2.276588047546622 +transit,102.59448827740223,2.281139603715559 +transit,102.58685723303512,2.2856911189021707 +transit,102.5792261405996,2.290242593024352 +WP8,102.571595,2.294794026 +transit,102.56431289950218,2.299920639760812 +transit,102.55703074701604,2.3050472157902515 +transit,102.5497485424256,2.3101737540038654 +transit,102.54246628561485,2.3153002543172034 +transit,102.53518397646778,2.3204267166458106 +transit,102.52790161486841,2.325553140905231 +transit,102.52061920070072,2.3306795270110077 +transit,102.51333673384873,2.335805874878681 +transit,102.50605421419644,2.340932184423789 +transit,102.49877164162784,2.346058455561871 +transit,102.49148901602695,2.351184688208461 +transit,102.48420633727774,2.3563108822790935 +transit,102.47692360526425,2.3614370376893 +transit,102.46964081987045,2.3665631543546124 +transit,102.46235798098036,2.3716892321905574 +transit,102.45507508847797,2.3768152711126636 +transit,102.44779214224731,2.3819412710364545 +transit,102.44050914217235,2.387067231877455 +transit,102.43322608813709,2.3921931535511853 +transit,102.42594298002557,2.3973190359731675 +transit,102.41865981772175,2.4024448790589177 +transit,102.41137660110967,2.4075706827239522 +transit,102.4040933300733,2.4126964468837877 +transit,102.39681000449666,2.4178221714539356 +transit,102.38952662426375,2.4229478563499063 +transit,102.38224318925857,2.4280735014872104 +transit,102.37495969936514,2.433199106781355 +transit,102.36767615446743,2.4383246721478455 +transit,102.36039255444948,2.4434501975021856 +transit,102.35310889919528,2.4485756827598784 +transit,102.3458251885888,2.453701127836423 +transit,102.3385414225141,2.4588265326473198 +transit,102.33125760085515,2.463951897108063 +transit,102.32397372349595,2.469077221134149 +transit,102.31668979032054,2.474202504641071 +transit,102.30940580121288,2.4793277475443203 +transit,102.30212175605699,2.484452949759386 +transit,102.29483765473688,2.489578111201755 +transit,102.28755349713656,2.494703231786915 +transit,102.28026928314,2.4998283114303477 +transit,102.27298501263125,2.5049533500475367 +transit,102.2657006854943,2.5100783475539625 +transit,102.25841630161314,2.5152033038651025 +transit,102.25113186087178,2.520328218896435 +transit,102.24384736315423,2.5254530925634318 +transit,102.23656280834449,2.5305779247815687 +transit,102.22927819632658,2.535702715466315 +transit,102.22199352698448,2.5408274645331415 +transit,102.21470880020222,2.5459521718975133 +transit,102.2074240158638,2.5510768374748984 +transit,102.2001391738532,2.5562014611807573 +transit,102.19285427405445,2.561326042930555 +transit,102.18556931635156,2.5664505826397495 +transit,102.17828430062852,2.571575080223798 +transit,102.17099922676935,2.576699535598158 +transit,102.16371409465805,2.581823948678284 +transit,102.15642890417861,2.5869483193796263 +transit,102.14914365521507,2.5920726476176372 +transit,102.14185834765141,2.597196933307763 +transit,102.13457298137165,2.6023211763654523 +transit,102.12728755625977,2.607445376706149 +transit,102.12000207219981,2.6125695342452966 +transit,102.11271652907577,2.617693648898334 +transit,102.10543092677165,2.622817720580701 +transit,102.09814526517145,2.627941749207835 +transit,102.09085954415919,2.633065734695171 +transit,102.08357376361887,2.6381896769581417 +transit,102.0762879234345,2.643313575912177 +transit,102.06900202349009,2.6484374314727086 +transit,102.06171606366964,2.6535612435551625 +transit,102.05443004385717,2.6586850120749643 +transit,102.04714396393666,2.663808736947536 +transit,102.03985782379215,2.6689324180883016 +transit,102.03257162330765,2.6740560554126773 +transit,102.02528536236713,2.679179648836083 +transit,102.01799904085463,2.684303198273934 +transit,102.01071265865416,2.6894267036416433 +transit,102.0034262156497,2.6945501648546224 +transit,101.99613971172529,2.699673581828281 +transit,101.98885314676492,2.704796954478027 +transit,101.9815665206526,2.7099202827192648 +transit,101.97427983327236,2.7150435664673993 +transit,101.96699308450819,2.720166805637832 +transit,101.95970627424408,2.725290000145962 +transit,101.95241940236409,2.730413149907187 +transit,101.94513246875218,2.7355362548369033 +transit,101.93784547329238,2.740659314850504 +transit,101.9305584158687,2.7457823298633808 +transit,101.92327129636516,2.750905299790924 +transit,101.91598411466575,2.7560282245485186 +transit,101.9086968706545,2.7611511040515526 +transit,101.90140956421538,2.766273938215409 +transit,101.89412219523246,2.7713967269554693 +transit,101.8868347635897,2.776519470187113 +transit,101.87954726917114,2.7816421678257166 +transit,101.87225971186078,2.786764819786656 +transit,101.86497209154263,2.791887425985305 +transit,101.8576844081007,2.7970099863370352 +transit,101.850396661419,2.8021325007572147 +transit,101.84310885138154,2.807254969161211 +transit,101.83582097787233,2.81237739146439 +transit,101.8285330407754,2.8174997675821123 +transit,101.82124503997474,2.8226220974297416 +transit,101.81395697535437,2.8277443809226352 +transit,101.8066688467983,2.8328666179761517 +transit,101.79938065419054,2.8379888085056435 +transit,101.7920923974151,2.8431109524264646 +transit,101.78480407635601,2.8482330496539654 +transit,101.77751569089726,2.8533551001034945 +transit,101.77022724092288,2.8584771036903978 +transit,101.76293872631686,2.86359906033002 +transit,101.75565014696322,2.8687209699377028 +transit,101.748361502746,2.8738428324287866 +transit,101.74107279354916,2.878964647718609 +transit,101.73378401925677,2.8840864157225057 +transit,101.7264951797528,2.889208136355812 +transit,101.71920627492129,2.894329809533858 +transit,101.71191730464624,2.8994514351719736 +transit,101.70462826881166,2.9045730131854857 +transit,101.69733916730158,2.9096945434897195 +WP9,101.69005,2.914816026 +transit,101.68535588738197,2.922015798814107 +transit,101.6806617149491,2.929215550992293 +transit,101.67596748255315,2.9364152824833907 +transit,101.6712731900459,2.9436149932362317 +transit,101.66657883727906,2.9508146831996442 +transit,101.66188442410441,2.9580143523224574 +transit,101.65718995037369,2.965214000553495 +transit,101.65249541593862,2.9724136278415783 +transit,101.64780082065093,2.979613234135528 +transit,101.64310616436235,2.9868128193841628 +transit,101.63841144692458,2.994012383536298 +transit,101.63371666818934,3.0012119265407464 +transit,101.62902182800832,3.0084114483463194 +transit,101.62432692623325,3.0156109489018266 +transit,101.61963196271579,3.0228104281560744 +transit,101.61493693730763,3.030009886057866 +transit,101.61024184986047,3.037209322556003 +transit,101.60554670022597,3.044408737599287 +transit,101.60085148825578,3.051608131136514 +transit,101.59615621380159,3.058807503116481 +transit,101.59146087671505,3.0660068534879774 +transit,101.58676547684779,3.0732061821997965 +transit,101.58207001405147,3.080405489200724 +transit,101.57737448817771,3.0876047744395483 +transit,101.57267889907816,3.0948040378650505 +transit,101.56798324660443,3.1020032794260133 +transit,101.56328753060814,3.1092024990712144 +transit,101.55859175094089,3.11640169674943 +transit,101.55389590745432,3.123600872409436 +WP1,101.5492,3.130800026 +transit,101.54671815629806,3.139413635151459 +transit,101.54423627194028,3.148027236962458 +transit,101.54175434681427,3.156640831412747 +transit,101.53927238080762,3.165254418482073 +transit,101.53679037380788,3.1738679981501847 +transit,101.53430832570264,3.182481570396828 +transit,101.53182623637944,3.1910951352017496 +transit,101.52934410572585,3.199708692544694 +transit,101.52686193362943,3.208322242405403 +transit,101.5243797199777,3.216935784763622 +transit,101.5218974646582,3.225549319599091 +transit,101.51941516755845,3.2341628468915533 +transit,101.51693282856597,3.2427763666207476 +transit,101.51445044756828,3.2513898787664135 +transit,101.51196802445287,3.260003383308289 +transit,101.50948555910726,3.2686168802261117 +transit,101.50700305141892,3.2772303694996183 +transit,101.50452050127534,3.2858438511085444 +transit,101.50203790856398,3.294457325032625 +transit,101.49955527317233,3.3030707912515926 +transit,101.49707259498784,3.3116842497451797 +transit,101.49458987389797,3.32029770049312 +transit,101.49210710979015,3.3289111434751426 +transit,101.48962430255183,3.337524578670978 +transit,101.48714145207045,3.346138006060355 +transit,101.4846585582334,3.354751425623002 +transit,101.48217562092815,3.3633648373386458 +transit,101.47969264004205,3.371978241187012 +transit,101.47720961546253,3.380591637147827 +transit,101.47472654707698,3.389205025200813 +transit,101.4722434347728,3.3978184053256952 +transit,101.46976027843735,3.4064317775021946 +transit,101.467277077958,3.4150451417100323 +transit,101.46479383322212,3.4236584979289284 +transit,101.46231054411707,3.4322718461386046 +transit,101.45982721053018,3.4408851863187766 +transit,101.45734383234881,3.4494985184491633 +transit,101.45486040946028,3.45811184250948 +transit,101.45237694175192,3.4667251584794423 +transit,101.44989342911106,3.4753384663387643 +transit,101.44740987142497,3.4839517660671615 +transit,101.44492626858099,3.4925650576443434 +transit,101.4424426204664,3.5011783410500232 +transit,101.43995892696849,3.5097916162639105 +transit,101.43747518797453,3.518404883265716 +transit,101.43499140337178,3.5270181420351463 +transit,101.43250757304754,3.53563139255191 +transit,101.43002369688902,3.5442446347957137 +transit,101.42753977478351,3.5528578687462615 +transit,101.42505580661822,3.5614710943832595 +transit,101.42257179228038,3.5700843116864105 +transit,101.42008773165722,3.578697520635415 +transit,101.41760362463596,3.587310721209977 +transit,101.4151194711038,3.595923913389796 +transit,101.41263527094794,3.60453709715457 +transit,101.41015102405557,3.6131502724839986 +transit,101.40766673031388,3.6217634393577787 +transit,101.40518238961003,3.6303765977556064 +transit,101.4026980018312,3.6389897476571775 +transit,101.40021356686454,3.6476028890421857 +transit,101.3977290845972,3.6562160218903226 +transit,101.39524455491633,3.6648291461812827 +transit,101.39275997770906,3.673442261894757 +transit,101.39027535286253,3.6820553690104316 +transit,101.38779068026382,3.690668467508 +transit,101.38530595980008,3.6992815573671485 +transit,101.38282119135837,3.7078946385675633 +transit,101.38033637482583,3.7165077110889295 +transit,101.37785151008951,3.7251207749109336 +transit,101.37536659703649,3.7337338300132594 +transit,101.37288163555385,3.742346876375586 +transit,101.37039662552866,3.7509599139775998 +transit,101.36791156684792,3.759572942798976 +transit,101.36542645939873,3.768185962819398 +transit,101.3629413030681,3.776798974018542 +transit,101.36045609774305,3.785411976376087 +transit,101.35797084331062,3.7940249698717072 +transit,101.35548553965779,3.8026379544850792 +transit,101.35300018667158,3.811250930195875 +transit,101.35051478423898,3.8198638969837684 +transit,101.34802933224697,3.828476854828432 +transit,101.34554383058251,3.837089803709535 +transit,101.34305827913259,3.8457027436067484 +transit,101.34057267778415,3.8543156744997398 +transit,101.33808702642416,3.862928596368177 +transit,101.33560132493955,3.871541509191725 +transit,101.33311557321724,3.8801544129500525 +transit,101.33062977114416,3.888767307622818 +transit,101.32814391860724,3.897380193189688 +transit,101.32565801549336,3.9059930696303256 +transit,101.32317206168943,3.914605936924388 +transit,101.32068605708234,3.923218795051537 +transit,101.31820000155898,3.931831643991432 +transit,101.3157138950062,3.9404444837237262 +transit,101.31322773731087,3.94905731422808 +transit,101.31074152835984,3.957670135484147 +transit,101.30825526803996,3.96628294747158 +transit,101.30576895623805,3.9748957501700337 +transit,101.30328259284097,3.983508543559159 +transit,101.3007961777355,3.9921213276186065 +transit,101.29830971080848,4.0007341023280265 +transit,101.2958231919467,4.009346867667064 +transit,101.29333662103693,4.017959623615371 +transit,101.29084999796596,4.02657237015259 +transit,101.28836332262058,4.035185107258367 +transit,101.28587659488755,4.043797834912345 +transit,101.28338981465362,4.052410553094166 +transit,101.28090298180553,4.061023261783475 +transit,101.27841609623002,4.069635960959906 +transit,101.27592915781382,4.078248650603104 +transit,101.27344216644364,4.086861330692703 +transit,101.2709551220062,4.095474001208342 +transit,101.2684680243882,4.104086662129656 +transit,101.26598087347632,4.112699313436277 +transit,101.26349366915726,4.12131195510784 +transit,101.26100641131767,4.129924587123978 +transit,101.25851909984422,4.138537209464321 +transit,101.25603173462356,4.1471498221084975 +transit,101.25354431554236,4.155762425036137 +transit,101.25105684248723,4.164375018226867 +transit,101.24856931534481,4.172987601660313 +transit,101.2460817340017,4.181600175316098 +transit,101.24359409834452,4.190212739173851 +transit,101.24110640825987,4.198825293213188 +transit,101.23861866363433,4.2074378374137344 +transit,101.23613086435448,4.216050371755109 +transit,101.23364301030689,4.224662896216931 +transit,101.23115510137814,4.233275410778818 +transit,101.22866713745474,4.241887915420385 +transit,101.22617911842326,4.25050041012125 +transit,101.22369104417024,4.259112894861023 +transit,101.22120291458218,4.26772536961932 +transit,101.2187147295456,4.2763378343757505 +transit,101.216226488947,4.284950289109929 +transit,101.21373819267288,4.293562733801459 +transit,101.21124984060971,4.302175168429952 +transit,101.208761432644,4.310787592975013 +transit,101.20627296866216,4.319400007416247 +transit,101.20378444855069,4.328012411733259 +transit,101.20129587219601,4.336624805905652 +transit,101.19880723948458,4.345237189913028 +transit,101.1963185503028,4.353849563734988 +transit,101.1938298045371,4.362461927351128 +transit,101.19134100207388,4.371074280741048 +transit,101.18885214279955,4.379686623884345 +transit,101.18636322660046,4.3882989567606145 +transit,101.18387425336303,4.39691127934945 +transit,101.1813852229736,4.405523591630444 +transit,101.17889613531854,4.414135893583188 +transit,101.17640699028419,4.422748185187274 +transit,101.17391778775689,4.43136046642229 +transit,101.17142852762296,4.439972737267824 +transit,101.16893920976874,4.448584997703461 +transit,101.16644983408051,4.4571972477087884 +transit,101.16396040044458,4.465809487263389 +transit,101.16147090874723,4.4744217163468445 +transit,101.15898135887475,4.4830339349387405 +transit,101.1564917507134,4.491646143018653 +transit,101.15400208414943,4.5002583405661625 +transit,101.1515123590691,4.508870527560845 +transit,101.14902257535863,4.517482703982278 +transit,101.14653273290426,4.526094869810036 +transit,101.14404283159222,4.534707025023693 +transit,101.14155287130868,4.543319169602823 +transit,101.13906285193985,4.551931303526992 +transit,101.13657277337194,4.560543426775776 +transit,101.13408263549111,4.569155539328738 +transit,101.13159243818352,4.5777676411654475 +transit,101.12910218133531,4.586379732265473 +transit,101.12661186483265,4.594991812608375 +transit,101.12412148856168,4.603603882173716 +transit,101.1216310524085,4.612215940941063 +transit,101.11914055625925,4.6208279888899675 +WP2,101.11665,4.629440026 +transit,101.1116365630793,4.636796143776513 +transit,101.10662302244353,4.6441522244408215 +transit,101.10160937792581,4.6515082679331075 +transit,101.09659562935923,4.658864274193555 +transit,101.09158177657683,4.6662202431623365 +transit,101.08656781941173,4.673576174779622 +transit,101.08155375769694,4.680932068985579 +transit,101.07653959126552,4.688287925720372 +transit,101.07152531995051,4.695643744924158 +transit,101.06651094358493,4.702999526537091 +transit,101.0614964620018,4.710355270499322 +transit,101.05648187503412,4.717710976750996 +transit,101.05146718251487,4.725066645232254 +transit,101.04645238427705,4.732422275883232 +transit,101.04143748015362,4.739777868644067 +transit,101.03642246997754,4.747133423454884 +transit,101.03140735358177,4.7544889402558095 +transit,101.02639213079924,4.761844418986961 +transit,101.02137680146286,4.769199859588455 +transit,101.01636136540559,4.776555262000405 +transit,101.0113458224603,4.783910626162916 +transit,101.00633017245991,4.791265952016091 +transit,101.00131441523729,4.7986212395000285 +transit,100.99629855062533,4.8059764885548235 +transit,100.99128257845688,4.813331699120564 +transit,100.98626649856479,4.820686871137338 +transit,100.9812503107819,4.828042004545224 +transit,100.97623401494107,4.835397099284299 +transit,100.97121761087509,4.842752155294637 +transit,100.96620109841678,4.850107172516305 +transit,100.96118447739893,4.857462150889367 +transit,100.95616774765435,4.864817090353879 +transit,100.9511509090158,4.872171990849901 +transit,100.94613396131604,4.87952685231748 +transit,100.94111690438784,4.886881674696663 +transit,100.93609973806393,4.894236457927489 +transit,100.93108246217706,4.90159120195 +transit,100.92606507655992,4.908945906704224 +transit,100.92104758104526,4.916300572130192 +transit,100.91602997546576,4.923655198167927 +transit,100.91101225965411,4.931009784757447 +transit,100.90599443344298,4.938364331838769 +transit,100.90097649666505,4.945718839351901 +transit,100.89595844915297,4.953073307236853 +transit,100.89094029073938,4.960427735433622 +transit,100.88592202125692,4.967782123882206 +transit,100.8809036405382,4.9751364725226 +transit,100.87588514841583,4.982490781294788 +transit,100.87086654472243,4.989845050138756 +transit,100.86584782929059,4.997199278994483 +transit,100.86082900195285,5.0045534678019425 +transit,100.8558100625418,5.011907616501104 +transit,100.85079101089,5.019261725031936 +transit,100.84577184682999,5.026615793334395 +transit,100.8407525701943,5.033969821348438 +transit,100.83573318081544,5.041323809014019 +transit,100.83071367852591,5.0486777562710845 +transit,100.82569406315825,5.056031663059574 +transit,100.8206743345449,5.063385529319429 +transit,100.81565449251838,5.070739354990583 +transit,100.81063453691111,5.078093140012962 +transit,100.80561446755557,5.085446884326492 +transit,100.80059428428419,5.092800587871093 +transit,100.7955739869294,5.100154250586678 +transit,100.79055357532363,5.1075078724131595 +transit,100.78553304929926,5.114861453290442 +transit,100.78051240868871,5.122214993158427 +transit,100.77549165332434,5.129568491957011 +transit,100.77047078303855,5.136921949626085 +transit,100.76544979766366,5.1442753661055365 +transit,100.76042869703207,5.151628741335249 +transit,100.75540748097607,5.1589820752551 +transit,100.75038614932802,5.166335367804962 +transit,100.74536470192022,5.173688618924702 +transit,100.74034313858496,5.1810418285541875 +transit,100.73532145915455,5.188394996633275 +transit,100.73029966346127,5.19574812310182 +transit,100.72527775133736,5.20310120789967 +transit,100.7202557226151,5.210454250966674 +transit,100.71523357712671,5.217807252242666 +transit,100.71021131470445,5.2251602116674905 +transit,100.70518893518053,5.232513129180969 +transit,100.70016643838714,5.2398660047229315 +transit,100.6951438241565,5.247218838233202 +transit,100.6901210923208,5.254571629651592 +transit,100.68509824271219,5.261924378917918 +transit,100.68007527516284,5.269277085971983 +transit,100.6750521895049,5.276629750753591 +transit,100.6700289855705,5.283982373202538 +transit,100.66500566319176,5.291334953258619 +transit,100.65998222220082,5.298687490861622 +transit,100.65495866242978,5.306039985951327 +transit,100.6499349837107,5.313392438467513 +transit,100.64491118587567,5.320744848349955 +transit,100.63988726875677,5.3280972155384205 +transit,100.63486323218602,5.335449539972675 +transit,100.6298390759955,5.342801821592474 +transit,100.62481480001722,5.350154060337575 +transit,100.6197904040832,5.3575062561477225 +transit,100.61476588802545,5.364858408962666 +transit,100.60974125167596,5.3722105187221425 +transit,100.60471649486671,5.379562585365886 +transit,100.59969161742966,5.386914608833628 +transit,100.59466661919677,5.394266589065092 +WP3,100.5896415,5.401618526 +transit,100.5813445401226,5.398777679035525 +transit,100.57304765748664,5.395936718513381 +transit,100.56475085205356,5.393095644494695 +transit,100.55645412378486,5.390254457040593 +transit,100.54815747264199,5.3874131562122045 +transit,100.53986089858641,5.384571742070661 +transit,100.53156440157957,5.381730214677086 +transit,100.52326798158292,5.378888574092612 +transit,100.51497163855791,5.376046820378368 +transit,100.50667537246598,5.373204953595482 +transit,100.49837918326854,5.370362973805085 +transit,100.49008307092704,5.367520881068305 +transit,100.48178703540292,5.364678675446276 +transit,100.47349107665755,5.361836357000125 +transit,100.46519519465238,5.358993925790986 +transit,100.4568993893488,5.356151381879984 +transit,100.44860366070824,5.353308725328258 +transit,100.44030800869207,5.3504659561969365 +transit,100.43201243326168,5.347623074547148 +transit,100.42371693437848,5.344780080440028 +transit,100.41542151200383,5.341936973936709 +transit,100.40712616609913,5.339093755098322 +transit,100.39883089662574,5.336250423986 +transit,100.39053570354503,5.3334069806608735 +transit,100.38224058681836,5.330563425184082 +transit,100.37394554640707,5.327719757616753 +transit,100.36565058227255,5.324875978020024 +transit,100.35735569437612,5.322032086455028 +transit,100.34906088267914,5.319188082982897 +transit,100.34076614714292,5.316343967664767 +transit,100.33247148772882,5.313499740561776 +transit,100.32417690439816,5.310655401735053 +transit,100.31588239711225,5.307810951245737 +transit,100.30758796583241,5.304966389154963 +transit,100.29929361051997,5.302121715523866 +transit,100.29099933113622,5.299276930413582 +transit,100.28270512764246,5.296432033885248 +WP4,100.274411,5.293587026 +transit,100.27692121572846,5.284947654341158 +transit,100.27943136189771,5.276308270128779 +transit,100.28194143862395,5.267668873383704 +transit,100.28445144602334,5.2590294641267725 +transit,100.28696138421206,5.250390042378823 +transit,100.28947125330627,5.241750608160693 +transit,100.2919810534221,5.233111161493218 +transit,100.29449078467569,5.224471702397231 +transit,100.29700044718314,5.215832230893566 +transit,100.29951004106057,5.207192747003053 +transit,100.30201956642406,5.198553250746522 +transit,100.30452902338972,5.189913742144798 +transit,100.3070384120736,5.18127422121871 +transit,100.30954773259175,5.172634687989083 +transit,100.31205698506024,5.163995142476737 +transit,100.31456616959508,5.155355584702496 +transit,100.31707528631232,5.146716014687179 +transit,100.31958433532795,5.138076432451605 +transit,100.32209331675796,5.129436838016594 +transit,100.32460223071836,5.120797231402956 +transit,100.32711107732511,5.112157612631509 +transit,100.32961985669418,5.103517981723063 +transit,100.33212856894153,5.094878338698431 +transit,100.33463721418308,5.086238683578423 +transit,100.33714579253477,5.077599016383843 +transit,100.33965430411253,5.068959337135502 +transit,100.34216274903224,5.060319645854201 +transit,100.3446711274098,5.051679942560748 +transit,100.3471794393611,5.043040227275942 +transit,100.34968768500201,5.034400500020585 +transit,100.35219586444838,5.025760760815474 +transit,100.35470397781607,5.017121009681407 +transit,100.3572120252209,5.008481246639183 +transit,100.35972000677872,4.999841471709591 +transit,100.3622279226053,4.991201684913431 +transit,100.36473577281647,4.982561886271489 +transit,100.36724355752803,4.973922075804558 +transit,100.36975127685574,4.965282253533426 +transit,100.37225893091536,4.956642419478879 +transit,100.37476651982267,4.948002573661705 +transit,100.3772740436934,4.9393627161026865 +transit,100.37978150264328,4.930722846822606 +transit,100.38228889678804,4.922082965842248 +transit,100.38479622624338,4.91344307318239 +transit,100.38730349112501,4.904803168863809 +transit,100.38981069154862,4.896163252907287 +transit,100.39231782762987,4.887523325333594 +transit,100.39482489948443,4.8788833861635075 +transit,100.39733190722797,4.870243435417798 +transit,100.39983885097611,4.86160347311724 +transit,100.4023457308445,4.852963499282601 +transit,100.40485254694875,4.84432351393465 +transit,100.40735929940448,4.835683517094153 +transit,100.40986598832728,4.827043508781877 +transit,100.41237261383273,4.818403489018586 +transit,100.41487917603644,4.8097634578250394 +transit,100.41738567505392,4.801123415222004 +transit,100.41989211100078,4.792483361230237 +transit,100.42239848399252,4.783843295870497 +transit,100.42490479414471,4.77520321916354 +transit,100.42741104157284,4.766563131130122 +transit,100.42991722639245,4.757923031790999 +transit,100.432423348719,4.749282921166923 +transit,100.43492940866801,4.740642799278644 +transit,100.43743540635495,4.732002666146916 +transit,100.43994134189529,4.723362521792482 +transit,100.44244721540448,4.714722366236092 +transit,100.44495302699798,4.706082199498494 +transit,100.4474587767912,4.697442021600429 +transit,100.44996446489958,4.688801832562642 +transit,100.45247009143853,4.680161632405875 +transit,100.45497565652344,4.671521421150867 +transit,100.45748116026972,4.662881198818358 +transit,100.45998660279275,4.654240965429086 +transit,100.46249198420789,4.645600721003786 +transit,100.46499730463051,4.636960465563193 +transit,100.46750256417596,4.628320199128039 +transit,100.47000776295955,4.619679921719062 +transit,100.47251290109665,4.611039633356986 +transit,100.47501797870255,4.602399334062545 +transit,100.47752299589257,4.593759023856464 +transit,100.480027952782,4.585118702759472 +transit,100.48253284948612,4.576478370792293 +transit,100.48503768612021,4.567838027975652 +transit,100.48754246279954,4.559197674330269 +transit,100.49004717963936,4.5505573098768695 +transit,100.49255183675491,4.541916934636172 +transit,100.49505643426144,4.533276548628894 +transit,100.49756097227416,4.524636151875753 +transit,100.50006545090828,4.515995744397465 +transit,100.50256987027902,4.507355326214745 +transit,100.50507423050155,4.498714897348309 +transit,100.50757853169105,4.490074457818864 +transit,100.51008277396272,4.481434007647124 +transit,100.51258695743171,4.4727935468538 +transit,100.51509108221315,4.464153075459594 +transit,100.5175951484222,4.455512593485217 +transit,100.520099156174,4.446872100951376 +transit,100.52260310558364,4.438231597878771 +transit,100.52510699676625,4.42959108428811 +transit,100.52761082983695,4.4209505602000885 +transit,100.53011460491079,4.412310025635412 +transit,100.53261832210288,4.403669480614776 +transit,100.53512198152828,4.395028925158879 +transit,100.53762558330205,4.386388359288419 +transit,100.54012912753923,4.377747783024089 +transit,100.54263261435489,4.369107196386585 +transit,100.54513604386402,4.360466599396596 +transit,100.54763941618167,4.351825992074816 +transit,100.55014273142284,4.343185374441935 +transit,100.55264598970253,4.33454474651864 +transit,100.55514919113573,4.325904108325621 +transit,100.5576523358374,4.317263459883561 +transit,100.56015542392257,4.308622801213148 +transit,100.56265845550614,4.299982132335064 +transit,100.56516143070309,4.29134145326999 +transit,100.56766434962834,4.2827007640386086 +transit,100.57016721239685,4.2740600646616 +transit,100.57267001912352,4.265419355159642 +transit,100.57517276992327,4.256778635553414 +transit,100.57767546491101,4.2481379058635875 +transit,100.58017810420161,4.2394971661108425 +transit,100.58268068790997,4.230856416315849 +transit,100.58518321615097,4.22221565649928 +transit,100.58768568903945,4.2135748866818075 +transit,100.59018810669028,4.204934106884102 +transit,100.59269046921828,4.19629331712683 +transit,100.59519277673833,4.187652517430662 +transit,100.59769502936523,4.17901170781626 +transit,100.60019722721378,4.170370888304292 +transit,100.60269937039881,4.1617300589154205 +transit,100.6052014590351,4.15308921967031 +transit,100.60770349323745,4.14444837058962 +transit,100.61020547312063,4.1358075116940105 +transit,100.61270739879942,4.1271666430041405 +transit,100.61520927038855,4.118525764540668 +transit,100.6177110880028,4.109884876324249 +transit,100.62021285175689,4.101243978375539 +transit,100.62271456176556,4.092603070715192 +transit,100.62521621814354,4.083962153363863 +transit,100.62771782100552,4.075321226342201 +transit,100.63021937046621,4.066680289670856 +transit,100.63272086664031,4.058039343370478 +transit,100.6352223096425,4.049398387461716 +transit,100.63772369958747,4.040757421965217 +transit,100.64022503658985,4.032116446901626 +transit,100.64272632076433,4.023475462291587 +transit,100.64522755222553,4.014834468155744 +transit,100.64772873108812,4.006193464514738 +transit,100.6502298574667,3.9975524513892142 +transit,100.65273093147592,3.988911428799806 +transit,100.65523195323034,3.980270396767158 +transit,100.65773292284462,3.9716293553119044 +transit,100.6602338404333,3.962988304454682 +transit,100.66273470611101,3.9543472442161276 +transit,100.66523551999231,3.9457061746168716 +transit,100.66773628219174,3.937065095677551 +transit,100.67023699282387,3.9284240074187946 +transit,100.67273765200328,3.919782909861235 +transit,100.67523825984446,3.9111418030254987 +transit,100.67773881646197,3.9025006869322167 +transit,100.68023932197032,3.8938595616020164 +transit,100.68273977648403,3.885218427055523 +transit,100.68524018011759,3.8765772833133605 +transit,100.6877405329855,3.867936130396153 +transit,100.69024083520225,3.859294968324524 +transit,100.69274108688231,3.850653797119093 +transit,100.69524128814015,3.842012616800483 +transit,100.69774143909024,3.833371427389311 +transit,100.70024153984701,3.824730228906196 +transit,100.70274159052492,3.8160890213717553 +transit,100.70524159123839,3.8074478048066043 +transit,100.70774154210186,3.798806579231359 +transit,100.71024144322972,3.790165344666629 +transit,100.7127412947364,3.781524101133032 +transit,100.71524109673629,3.7728828486511756 +transit,100.71774084934378,3.7642415872416732 +transit,100.72024055267325,3.7556003169251313 +transit,100.72274020683908,3.7469590377221595 +transit,100.72523981195562,3.7383177496533655 +transit,100.72773936813724,3.7296764527393518 +transit,100.73023887549827,3.7210351470007286 +transit,100.73273833415307,3.7123938324580954 +transit,100.73523774421595,3.703752509132056 +transit,100.73773710580124,3.6951111770432115 +transit,100.74023641902326,3.6864698362121655 +transit,100.74273568399632,3.677828486659513 +transit,100.74523490083469,3.6691871284058553 +transit,100.74773406965268,3.6605457614717887 +transit,100.75023319056457,3.65190438587791 +transit,100.75273226368462,3.643263001644813 +transit,100.7552312891271,3.6346216087930916 +transit,100.75773026700627,3.6259802073433427 +transit,100.76022919743636,3.6173387973161546 +transit,100.76272808053162,3.6086973787321175 +transit,100.76522691640628,3.6000559516118256 +transit,100.76772570517456,3.5914145159758624 +transit,100.77022444695068,3.58277307184482 +transit,100.77272314184884,3.574131619239283 +transit,100.77522178998323,3.565490158179837 +transit,100.77772039146807,3.556848688687067 +transit,100.7802189464175,3.5482072107815568 +transit,100.78271745494571,3.5395657244838894 +transit,100.78521591716688,3.5309242298146435 +transit,100.78771433319515,3.5222827267944052 +transit,100.79021270314469,3.5136412154437484 +transit,100.79271102712961,3.504999695783254 +transit,100.79520930526407,3.4963581678335 +transit,100.79770753766218,3.487716631615061 +transit,100.80020572443806,3.4790750871485145 +transit,100.80270386570581,3.470433534454433 +transit,100.80520196157956,3.46179197355339 +transit,100.80770001217338,3.4531504044659584 +transit,100.81019801760137,3.4445088272127107 +transit,100.81269597797758,3.435867241814216 +transit,100.81519389341612,3.4272256482910426 +transit,100.81769176403104,3.4185840466637623 +transit,100.82018958993638,3.4099424369529365 +transit,100.82268737124619,3.4013008191791383 +transit,100.82518510807452,3.392659193362928 +transit,100.82768280053538,3.3840175595248736 +transit,100.83018044874282,3.375375917685536 +transit,100.83267805281086,3.3667342678654775 +transit,100.83517561285348,3.358092610085261 +transit,100.83767312898469,3.349450944365446 +transit,100.8401706013185,3.3408092707265924 +transit,100.84266802996888,3.3321675891892584 +transit,100.8451654150498,3.323525899774002 +transit,100.84766275667526,3.314884202501379 +transit,100.85016005495919,3.3062424973919446 +transit,100.85265731001557,3.2976007844662547 +transit,100.85515452195834,3.2889590637448634 +transit,100.85765169090143,3.2803173352483213 +transit,100.86014881695878,3.2716755989971817 +transit,100.86264590024433,3.2630338550119937 +transit,100.86514294087198,3.2543921033133096 +transit,100.86763993895563,3.245750343921676 +transit,100.87013689460922,3.237108576857644 +transit,100.87263380794663,3.228466802141756 +transit,100.87513067908172,3.219825019794561 +transit,100.87762750812841,3.2111832298366045 +transit,100.88012429520056,3.2025414322884296 +transit,100.88262104041203,3.19389962717058 +transit,100.8851177438767,3.1852578145035957 +transit,100.88761440570839,3.176615994308023 +transit,100.89011102602097,3.1679741666043983 +transit,100.89260760492829,3.1593323314132618 +transit,100.89510414254414,3.1506904887551532 +transit,100.89760063898237,3.14204863865061 +transit,100.9000970943568,3.133406781120168 +transit,100.90259350878122,3.1247649161843647 +transit,100.90508988236945,3.116123043863733 +transit,100.90758621523527,3.1074811641788096 +transit,100.91008250749249,3.0988392771501245 +transit,100.91257875925487,3.0901973827982125 +transit,100.9150749706362,3.0815554811436043 +transit,100.91757114175023,3.0729135722068293 +transit,100.92006727271072,3.0642716560084198 +transit,100.92256336363145,3.0556297325689004 +transit,100.92505941462615,3.046987801908803 +transit,100.92755542580855,3.038345864048651 +transit,100.93005139729239,3.029703919008973 +transit,100.9325473291914,3.021061966810293 +transit,100.93504322161928,3.0124200074731347 +transit,100.93753907468977,3.0037780410180224 +transit,100.94003488851655,2.995136067465479 +transit,100.94253066321333,2.9864940868360255 +transit,100.9450263988938,2.977852099150182 +transit,100.94752209567164,2.969210104428469 +transit,100.95001775366055,2.9605681026914064 +transit,100.95251337297418,2.9519260939595102 +transit,100.95500895372619,2.943284078253301 +transit,100.95750449603025,2.9346420555932924 +WP5,100.96,2.926000026 +transit,100.96736807373901,2.9208731072894585 +transit,100.97473608064752,2.915746139566842 +transit,100.982104020843,2.910619122918749 +transit,100.98947189444291,2.905492057431779 +transit,100.99683970156477,2.900364943192523 +transit,101.00420744232602,2.895237780287576 +transit,101.01157511684417,2.8901105688035282 +transit,101.01894272523668,2.8849833088269676 +transit,101.02631026762107,2.879856000444479 +transit,101.03367774411478,2.874728643742649 +transit,101.04104515483532,2.869601238808057 +transit,101.04841249990017,2.8644737857272835 +transit,101.0557797794268,2.859346284586906 +transit,101.0631469935327,2.8542187354735002 +transit,101.07051414233536,2.849091138473637 +transit,101.07788122595225,2.8439634936738916 +transit,101.08524824450087,2.8388358011608297 +transit,101.0926151980987,2.8337080610210186 +transit,101.0999820868632,2.8285802733410237 +transit,101.10734891091191,2.823452438207407 +transit,101.11471567036226,2.8183245557067305 +transit,101.12208236533176,2.813196625925549 +transit,101.12944899593789,2.808068648950422 +transit,101.13681556229815,2.8029406248679027 +transit,101.14418206453,2.797812553764542 +transit,101.15154850275094,2.792684435726891 +transit,101.15891487707846,2.787556270841498 +transit,101.16628118763005,2.7824280591949067 +transit,101.17364743452318,2.7772998008736636 +transit,101.18101361787534,2.772171495964307 +transit,101.18837973780401,2.7670431445533787 +transit,101.19574579442671,2.761914746727415 +transit,101.2031117878609,2.756786302572953 +transit,101.21047771822407,2.7516578121765236 +transit,101.21784358563372,2.746529275624659 +transit,101.22520939020733,2.741400693003888 +transit,101.23257513206238,2.73627206440074 +transit,101.23994081131636,2.731143389901736 +transit,101.24730642808677,2.7260146695934018 +transit,101.2546719824911,2.7208859035622575 +transit,101.26203747464683,2.715757091894822 +transit,101.26940290467145,2.7106282346776136 +transit,101.27676827268246,2.705499331997145 +transit,101.28413357879734,2.7003703839399296 +transit,101.29149882313357,2.69524139059248 +transit,101.29886400580865,2.6901123520413024 +transit,101.30622912694008,2.6849832683729047 +transit,101.31359418664533,2.6798541396737914 +transit,101.32095918504191,2.674724966030466 +transit,101.32832412224731,2.6695957475294287 +transit,101.335688998379,2.664466484257178 +transit,101.34305381355449,2.659337176300211 +transit,101.35041856789125,2.654207823745022 +transit,101.35778326150681,2.6490784266781042 +transit,101.36514789451863,2.6439489851859483 +transit,101.3725124670442,2.6388194993550425 +transit,101.37987697920104,2.6336899692718747 +transit,101.38724143110662,2.628560395022929 +transit,101.39460582287843,2.623430776694687 +transit,101.40197015463397,2.618301114373633 +transit,101.40933442649074,2.613171408146242 +transit,101.41669863856623,2.608041658098994 +transit,101.42406279097791,2.602911864318363 +transit,101.43142688384332,2.597782026890821 +transit,101.4387909172799,2.59265214590284 +transit,101.44615489140519,2.5875222214408895 +transit,101.45351880633665,2.582392253591437 +transit,101.46088266219179,2.577262242440946 +transit,101.4682464590881,2.572132188075882 +transit,101.47561019714308,2.5670020905827053 +transit,101.48297387647423,2.5618719500478755 +transit,101.49033749719904,2.5567417665578507 +transit,101.49770105943499,2.5516115401990853 +transit,101.50506456329958,2.546481271058034 +transit,101.51242800891032,2.5413509592211496 +transit,101.51979139638469,2.536220604774879 +transit,101.5271547258402,2.531090207805674 +transit,101.53451799739433,2.525959768399978 +transit,101.54188121116461,2.5208292866442363 +transit,101.54924436726849,2.5156987626248917 +transit,101.55660746582349,2.510568196428383 +transit,101.5639705069471,2.5054375881411506 +transit,101.57133349075683,2.50030693784963 +transit,101.57869641737017,2.4951762456402578 +transit,101.58605928690461,2.490045511599464 +transit,101.59342209947765,2.4849147358136827 +transit,101.6007848552068,2.4797839183693413 +transit,101.60814755420955,2.474653059352868 +transit,101.61551019660338,2.4695221588506877 +transit,101.62287278250582,2.4643912169492235 +transit,101.63023531203434,2.459260233734899 +transit,101.63759778530645,2.4541292092941327 +transit,101.64496020243966,2.448998143713344 +transit,101.65232256355146,2.4438670370789466 +transit,101.65968486875934,2.4387358894773596 +transit,101.6670471181808,2.433604700994991 +transit,101.67440931193336,2.428473471718254 +transit,101.68177145013449,2.4233422017335564 +transit,101.6891335329017,2.4182108911273064 +transit,101.69649556035252,2.413079539985908 +transit,101.7038575326044,2.4079481483957674 +transit,101.71121944977487,2.4028167164432834 +transit,101.71858131198142,2.3976852442148573 +transit,101.72594311934157,2.392553731796887 +transit,101.73330487197279,2.387422179275769 +transit,101.7406665699926,2.3822905867378976 +transit,101.7480282135185,2.377158954269665 +transit,101.75538980266798,2.3720272819574646 +transit,101.76275133755856,2.3668955698876823 +transit,101.77011281830771,2.361763818146708 +transit,101.77747424503296,2.356632026820926 +transit,101.78483561785181,2.3515001959967203 +transit,101.79219693688175,2.3463683257604733 +transit,101.7995582022403,2.341236416198566 +transit,101.80691941404494,2.336104467397376 +transit,101.81428057241318,2.3309724794432802 +transit,101.82164167746252,2.325840452422655 +transit,101.82900272931049,2.320708386421872 +transit,101.83636372807455,2.3155762815273033 +transit,101.84372467387223,2.31044413782532 +transit,101.85108556682103,2.305311955402289 +transit,101.85844640703843,2.3001797343445767 +transit,101.86580719464197,2.2950474747385483 +transit,101.87316792974913,2.289915176670566 +transit,101.88052861247742,2.2847828402269923 +transit,101.88788924294435,2.2796504654941856 +transit,101.89524982126743,2.274518052558505 +transit,101.90261034756413,2.269385601506305 +transit,101.90997082195199,2.264253112423941 +transit,101.91733124454849,2.259120585397766 +transit,101.92469161547116,2.2539880205141296 +transit,101.93205193483747,2.248855417859384 +transit,101.93941220276497,2.2437227775198725 +transit,101.94677241937113,2.2385900995819448 +transit,101.95413258477348,2.233457384131943 +transit,101.96149269908949,2.2283246312562115 +transit,101.96885276243671,2.2231918410410896 +transit,101.9762127749326,2.2180590135729177 +transit,101.98357273669471,2.2129261489380334 +transit,101.99093264784052,2.2077932472227713 +transit,101.99829250848754,2.2026603085134666 +transit,102.00565231875328,2.1975273328964513 +transit,102.01301207875524,2.192394320458058 +transit,102.02037178861093,2.1872612712846147 +transit,102.02773144843786,2.182128185462449 +transit,102.03509105835354,2.176995063077888 +transit,102.04245061847547,2.171861904217255 +transit,102.04981012892117,2.166728708966873 +transit,102.05716958980813,2.1615954774130643 +transit,102.06452900125385,2.1564622096421475 +transit,102.07188836337586,2.1513289057404394 +transit,102.07924767629166,2.146195565794258 +transit,102.08660694011877,2.1410621898899183 +transit,102.09396615497467,2.1359287781137315 +transit,102.10132532097688,2.1307953305520098 +transit,102.10868443824293,2.1256618472910653 +transit,102.1160435068903,2.120528328417203 +transit,102.12340252703652,2.115394774016732 +transit,102.13076149879907,2.1102611841759553 +transit,102.1381204222955,2.1051275589811773 +transit,102.14547929764329,2.0999938985187017 +transit,102.15283812495996,2.0948602028748264 +transit,102.160196904363,2.089726472135852 +transit,102.16755563596995,2.084592706388073 +transit,102.17491431989829,2.0794589057177886 +transit,102.18227295626555,2.0743250702112914 +transit,102.18963154518923,2.0691911999548736 +transit,102.19699008678685,2.0640572950348264 +transit,102.20434858117592,2.05892335553744 +transit,102.21170702847394,2.0537893815490005 +transit,102.21906542879843,2.048655373155795 +transit,102.22642378226689,2.0435213304441096 +transit,102.23378208899683,2.0383872535002268 +transit,102.24114034910578,2.033253142410428 +transit,102.24849856271123,2.028118997260994 +transit,102.2558567299307,2.0229848181382017 +transit,102.26321485088171,2.0178506051283316 +transit,102.27057292568176,2.012716358317656 +transit,102.27793095444835,2.007582077792452 +transit,102.28528893729903,2.00244776363899 +transit,102.29264687435126,1.9973134159435422 +transit,102.3000047657226,1.9921790347923782 +transit,102.30736261153054,1.9870446202717655 +transit,102.31472041189258,1.9819101724679717 +transit,102.32207816692626,1.9767756914672616 +transit,102.32943587674907,1.9716411773558984 +transit,102.33679354147853,1.9665066302201457 +transit,102.34415116123216,1.9613720501462628 +transit,102.35150873612747,1.9562374372205096 +transit,102.35886626628196,1.9511027915291435 +transit,102.36622375181315,1.9459681131584208 +transit,102.37358119283857,1.9408334021945972 +transit,102.38093858947572,1.935698658723926 +transit,102.3882959418421,1.9305638828326581 +transit,102.39565325005523,1.925429074607045 +transit,102.40301051423265,1.920294234133335 +transit,102.41036773449184,1.9151593614977762 +transit,102.41772491095034,1.910024456786615 +transit,102.42508204372564,1.9048895200860958 +transit,102.43243913293527,1.8997545514824623 +transit,102.43979617869674,1.8946195510619552 +transit,102.44715318112758,1.889484518910817 +transit,102.45451014034526,1.8843494551152842 +transit,102.46186705646734,1.8792143597615973 +transit,102.46922392961133,1.8740792329359908 +transit,102.47658075989472,1.868944074724699 +transit,102.48393754743505,1.8638088852139574 +transit,102.4912942923498,1.858673664489995 +transit,102.49865099475655,1.853538412639045 +transit,102.50600765477274,1.8484031297473364 +transit,102.51336427251593,1.8432678159010962 +transit,102.52072084810364,1.83813247118655 +transit,102.52807738165336,1.8329970956899249 +transit,102.53543387328261,1.8278616894974433 +transit,102.54279032310893,1.8227262526953285 +transit,102.55014673124981,1.8175907853697992 +transit,102.55750309782279,1.8124552876070774 +transit,102.56485942294536,1.8073197594933814 +transit,102.57221570673505,1.802184201114926 +transit,102.57957194930938,1.797048612557929 +transit,102.58692815078587,1.7919129939086027 +transit,102.59428431128202,1.7867773452531608 +transit,102.60164043091537,1.7816416666778148 +transit,102.6089965098034,1.7765059582687748 +transit,102.61635254806366,1.7713702201122492 +transit,102.62370854581367,1.7662344522944466 +transit,102.63106450317092,1.761098654901572 +transit,102.63842042025296,1.7559628280198303 +transit,102.64577629717728,1.7508269717354255 +transit,102.65313213406141,1.7456910861345591 +transit,102.66048793102286,1.7405551713034326 +transit,102.66784368817916,1.735419227328246 +transit,102.67519940564782,1.7302832542951962 +transit,102.68255508354636,1.725147252290482 +transit,102.6899107219923,1.7200112214002978 +transit,102.69726632110316,1.7148751617108373 +transit,102.70462188099646,1.7097390733082953 +transit,102.71197740178971,1.7046029562788627 +transit,102.71933288360043,1.6994668107087305 +transit,102.72668832654614,1.6943306366840876 +transit,102.73404373074436,1.6891944342911214 +transit,102.74139909631262,1.6840582036160194 +transit,102.74875442336842,1.678921944744967 +transit,102.75610971202929,1.673785657764148 +transit,102.76346496241275,1.6686493427597462 +transit,102.77082017463631,1.6635129998179425 +transit,102.77817534881751,1.6583766290249164 +transit,102.78553048507385,1.653240230466849 +transit,102.79288558352285,1.648103804229917 +transit,102.80024064428204,1.642967350400297 +transit,102.80759566746895,1.6378308690641663 +transit,102.81495065320107,1.6326943603076969 +transit,102.82230560159593,1.627557824217063 +transit,102.82966051277107,1.622421260878435 +transit,102.837015386844,1.6172846703779853 +transit,102.84437022393223,1.6121480528018823 +transit,102.85172502415328,1.6070114082362945 +transit,102.8590797876247,1.6018747367673885 +transit,102.86643451446398,1.5967380384813301 +transit,102.87378920478864,1.5916013134642835 +transit,102.88114385871621,1.5864645618024122 +transit,102.88849847636423,1.5813277835818789 +transit,102.89585305785019,1.576190978888844 +transit,102.90320760329163,1.5710541478094675 +transit,102.91056211280608,1.5659172904299077 +transit,102.91791658651103,1.5607804068363227 +transit,102.92527102452402,1.5556434971148676 +transit,102.93262542696257,1.5505065613516982 +transit,102.93997979394422,1.5453695996329682 +transit,102.94733412558647,1.5402326120448304 +transit,102.95468842200684,1.5350955986734367 +transit,102.96204268332286,1.5299585596049368 +transit,102.96939690965205,1.5248214949254808 +transit,102.97675110111193,1.519684404721216 +transit,102.98410525782003,1.5145472890782903 +transit,102.99145937989388,1.5094101480828477 +transit,102.99881346745097,1.5042729818210352 +transit,103.00616752060886,1.4991357903789955 +transit,103.01352153948505,1.493998573842871 +transit,103.02087552419707,1.4888613322988025 +transit,103.02822947486244,1.4837240658329311 +transit,103.03558339159869,1.4785867745313956 +transit,103.04293727452334,1.4734494584803337 +transit,103.0502911237539,1.4683121177658822 +transit,103.05764493940791,1.4631747524741774 +transit,103.06499872160289,1.4580373626913539 +transit,103.07235247045635,1.4528999485035443 +transit,103.07970618608584,1.4477625099968825 +transit,103.08705986860886,1.4426250472574986 +transit,103.09441351814294,1.4374875603715247 +transit,103.10176713480561,1.4323500494250883 +transit,103.1091207187144,1.4272125145043184 +transit,103.11647426998681,1.4220749556953414 +transit,103.12382778874039,1.4169373730842842 +transit,103.13118127509264,1.4117997667572708 +transit,103.13853472916111,1.4066621368004255 +transit,103.1458881510633,1.4015244832998714 +transit,103.15324154091674,1.3963868063417306 +transit,103.16059489883897,1.3912491060121224 +transit,103.16794822494751,1.3861113823971678 +transit,103.17530151935986,1.3809736355829842 +transit,103.18265478219358,1.3758358656556917 +transit,103.19000801356617,1.3706980727014035 +transit,103.19736121359517,1.3655602568062382 +transit,103.2047143823981,1.3604224180563078 +transit,103.21206752009248,1.3552845565377272 +transit,103.21942062679584,1.350146672336609 +transit,103.22677370262569,1.3450087655390632 +transit,103.23412674769959,1.3398708362312017 +transit,103.24147976213504,1.334732884499133 +transit,103.24883274604957,1.3295949104289662 +transit,103.2561856995607,1.324456914106809 +transit,103.26353862278596,1.3193188956187667 +transit,103.27089151584289,1.314180855050945 +transit,103.278244378849,1.3090427924894494 +transit,103.28559721192181,1.3039047080203823 +transit,103.29295001517886,1.2987666017298465 +transit,103.30030278873767,1.2936284737039434 +transit,103.30765553271577,1.288490324028774 +transit,103.3150082472307,1.2833521527904372 +transit,103.32236093239995,1.2782139600750326 +transit,103.32971358834106,1.2730757459686564 +transit,103.33706621517157,1.2679375105574051 +transit,103.344418813009,1.2627992539273767 +transit,103.35177138197088,1.257660976164664 +transit,103.35912392217473,1.2525226773553617 +transit,103.36647643373809,1.2473843575855623 +transit,103.37382891677846,1.2422460169413576 +transit,103.38118137141339,1.2371076555088392 +transit,103.3885337977604,1.231969273374096 +transit,103.39588619593702,1.226830870623219 +transit,103.40323856606076,1.221692447342295 +transit,103.41059090824918,1.2165540036174116 +transit,103.41794322261978,1.211415539534655 +transit,103.42529550929011,1.206277055180112 +transit,103.43264776837766,1.2011385506398657 +WP6,103.44,1.196000026 +transit,103.4440348984521,1.2037722281016348 +transit,103.44806981975256,1.2115444237502009 +transit,103.45210476404904,1.2193166129039905 +transit,103.45613973148924,1.2270887955212961 +transit,103.46017472222083,1.2348609715604077 +transit,103.4642097363915,1.242633140979616 +transit,103.46824477414893,1.2504053037372107 +transit,103.47227983564082,1.2581774597914792 +transit,103.47631492101488,1.2659496091007107 +transit,103.48035003041878,1.273721751623191 +transit,103.48438516400023,1.281493887317206 +transit,103.48842032190694,1.2892660161410416 +transit,103.49245550428662,1.2970381380529825 +transit,103.49649071128698,1.304810253011311 +transit,103.50052594305572,1.3125823609743108 +transit,103.50456119974056,1.3203544619002632 +transit,103.50859648148923,1.328126555747449 +transit,103.51263178844945,1.335898642474149 +transit,103.51666712076894,1.3436707220386421 +transit,103.52070247859544,1.3514427943992064 +transit,103.52473786207668,1.3592148595141196 +transit,103.52877327136038,1.3669869173416582 +transit,103.53280870659428,1.3747589678400982 +transit,103.53684416792613,1.3825310109677134 +transit,103.5408796555037,1.390303046682779 +transit,103.54491516947469,1.3980750749435669 +transit,103.5489507099869,1.4058470957083495 +transit,103.55298627718804,1.4136191089353984 +transit,103.5570218712259,1.421391114582983 +transit,103.56105749224824,1.4291631126093731 +transit,103.56509314040281,1.4369351029728372 +transit,103.56912881583737,1.4447070856316422 +transit,103.57316451869974,1.452479060544055 +transit,103.57720024913765,1.4602510276683411 +transit,103.5812360072989,1.4680229869627643 +transit,103.58527179333126,1.4757949383855895 +transit,103.58930760738252,1.4835668818950782 +transit,103.59334344960048,1.491338817449493 +transit,103.59737932013292,1.499110745007094 +transit,103.60141521912765,1.5068826645261406 +transit,103.60545114673245,1.5146545759648926 +transit,103.60948710309515,1.5224264792816067 +transit,103.61352308836354,1.5301983744345402 +transit,103.61755910268543,1.5379702613819488 +transit,103.62159514620865,1.5457421400820872 +transit,103.62563121908101,1.5535140104932088 +transit,103.62966732145033,1.561285872573567 +transit,103.63370345346443,1.5690577262814127 +transit,103.63773961527116,1.5768295715749974 +transit,103.64177580701833,1.5846014084125701 +transit,103.6458120288538,1.592373236752379 +transit,103.6498482809254,1.6001450565526734 +transit,103.65388456338096,1.607916867771698 +transit,103.65792087636835,1.6156886703676991 +transit,103.66195722003542,1.6234604642989214 +transit,103.66599359453001,1.6312322495236073 +WP7,103.67003,1.639004026 +transit,103.66240477485763,1.6435605098711012 +transit,103.65477951514863,1.648116964243239 +transit,103.64715422077721,1.6526733890344614 +transit,103.63952889164753,1.657229784162814 +transit,103.63190352766377,1.6617861495463415 +transit,103.62427812873014,1.6663424851030881 +transit,103.61665269475081,1.6708987907510977 +transit,103.60902722562999,1.6754550664084111 +transit,103.60140172127184,1.6800113119930717 +transit,103.59377618158057,1.6845675274231189 +transit,103.58615060646035,1.689123712616592 +transit,103.57852499581539,1.6936798674915303 +transit,103.57089934954988,1.6982359919659715 +transit,103.563273667568,1.7027920859579515 +transit,103.55564794977396,1.7073481493855067 +transit,103.54802219607193,1.711904182166672 +transit,103.54039640636613,1.716460184219482 +transit,103.53277058056074,1.721016155461969 +transit,103.52514471855996,1.725572095812165 +transit,103.517518820268,1.7301280051881018 +transit,103.50989288558903,1.7346838835078089 +transit,103.50226691442727,1.7392397306893157 +transit,103.49464090668691,1.743795546650651 +transit,103.48701486227216,1.7483513313098415 +transit,103.47938878108722,1.752907084584914 +transit,103.47176266303629,1.7574628063938937 +transit,103.46413650802356,1.762018496654805 +transit,103.45651031595324,1.7665741552856715 +transit,103.44888408672954,1.771129782204516 +transit,103.44125782025667,1.7756853773293593 +transit,103.43363151643881,1.7802409405782227 +transit,103.4260051751802,1.7847964718691254 +transit,103.41837879638501,1.7893519711200867 +transit,103.41075237995749,1.793907438249123 +transit,103.40312592580183,1.7984628731742522 +transit,103.39549943382222,1.8030182758134896 +transit,103.3878729039229,1.8075736460848493 +transit,103.38024633600807,1.8121289839063461 +transit,103.37261972998193,1.816684289195991 +transit,103.36499308574872,1.8212395618717976 +transit,103.35736640321262,1.8257948018517758 +transit,103.34973968227789,1.8303500090539349 +transit,103.34211292284868,1.8349051833962842 +transit,103.33448612482928,1.8394603247968309 +transit,103.32685928812386,1.8440154331735823 +transit,103.31923241263664,1.8485705084445434 +transit,103.31160549827186,1.8531255505277202 +transit,103.30397854493371,1.857680559341114 +transit,103.29635155252645,1.8622355348027306 +transit,103.28872452095426,1.8667904768305685 +transit,103.2810974501214,1.8713453853426305 +transit,103.27347033993205,1.8759002602569148 +transit,103.26584319029047,1.8804551014914208 +transit,103.25821600110088,1.885009908964146 +transit,103.25058877226748,1.8895646825930859 +transit,103.24296150369453,1.894119422296237 +transit,103.23533419528623,1.8986741279915933 +transit,103.22770684694682,1.9032287995971486 +transit,103.22007945858053,1.9077834370308946 +transit,103.21245203009158,1.9123380402108232 +transit,103.20482456138421,1.9168926090549236 +transit,103.19719705236267,1.9214471434811855 +transit,103.18956950293115,1.9260016434075975 +transit,103.1819419129939,1.9305561087521468 +transit,103.17431428245517,1.9351105394328183 +transit,103.16668661121918,1.9396649353675983 +transit,103.15905889919017,1.9442192964744696 +transit,103.15143114627237,1.9487736226714165 +transit,103.14380335237003,1.9533279138764188 +transit,103.13617551738737,1.957882170007458 +transit,103.12854764122865,1.962436390982514 +transit,103.1209197237981,1.9669905767195657 +transit,103.11329176499996,1.9715447271365898 +transit,103.10566376473847,1.976098842151563 +transit,103.09803572291787,1.9806529216824602 +transit,103.09040763944242,1.9852069656472566 +transit,103.08277951421636,1.9897609739639248 +transit,103.07515134714392,1.9943149465504364 +transit,103.06752313812935,1.998868883324763 +transit,103.05989488707691,2.003422784204874 +transit,103.05226659389083,2.007976649108739 +transit,103.04463825847539,2.0125304779543245 +transit,103.0370098807348,2.017084270659597 +transit,103.02938146057335,2.0216380271425236 +transit,103.02175299789526,2.0261917473210675 +transit,103.0141244926048,2.030745431113192 +transit,103.00649594460621,2.035299078436859 +transit,102.99886735380376,2.03985268921003 +transit,102.9912387201017,2.0444062633506648 +transit,102.98361004340428,2.0489598007767227 +transit,102.97598132361577,2.0535133014061597 +transit,102.96835256064043,2.058066765156934 +transit,102.96072375438249,2.0626201919469995 +transit,102.95309490474624,2.067173581694312 +transit,102.94546601163592,2.0717269343168243 +transit,102.93783707495581,2.076280249732488 +transit,102.93020809461017,2.080833527859254 +transit,102.92257907050325,2.085386768615072 +transit,102.91495000253931,2.0899399719178904 +transit,102.90732089062266,2.0944931376856575 +transit,102.89969173465752,2.0990462658363187 +transit,102.89206253454817,2.10359935628782 +transit,102.88443329019888,2.1081524089581047 +transit,102.87680400151393,2.1127054237651155 +transit,102.86917466839759,2.117258400626795 +transit,102.86154529075411,2.121811339461083 +transit,102.85391586848777,2.126364240185919 +transit,102.84628640150285,2.1309171027192413 +transit,102.83865688970364,2.1354699269789856 +transit,102.83102733299438,2.1400227128830918 +transit,102.82339773127937,2.14457546034949 +transit,102.81576808446289,2.1491281692961155 +transit,102.8081383924492,2.1536808396409013 +transit,102.80050865514258,2.158233471301778 +transit,102.79287887244733,2.162786064196675 +transit,102.78524904426772,2.167338618243522 +transit,102.77761917050802,2.171891133360247 +transit,102.76998925107253,2.176443609464775 +transit,102.76235928586553,2.1809960464750318 +transit,102.7547292747913,2.1855484443089415 +transit,102.74709921775414,2.190100802884428 +transit,102.73946911465832,2.1946531221194108 +transit,102.73183896540813,2.199205401931813 +transit,102.72420876990786,2.203757642239551 +transit,102.7165785280618,2.2083098429605448 +transit,102.70894823977424,2.212862004012711 +transit,102.70131790494949,2.217414125313964 +transit,102.69368752349183,2.2219662067822195 +transit,102.68605709530554,2.22651824833539 +transit,102.67842662029493,2.231070249891388 +transit,102.67079609836429,2.235622211368125 +transit,102.66316552941792,2.2401741326835083 +transit,102.65553491336013,2.244726013755447 +transit,102.6479042500952,2.2492778545018495 +transit,102.64027353952743,2.25382965484062 +transit,102.63264278156113,2.2583814146896644 +transit,102.6250119761006,2.262933133966885 +transit,102.61738112305014,2.2674848125901845 +transit,102.60975022231405,2.2720364504774637 +transit,102.60211927379666,2.276588047546622 +transit,102.59448827740223,2.281139603715559 +transit,102.58685723303512,2.2856911189021707 +transit,102.5792261405996,2.290242593024352 +WP8,102.571595,2.294794026 +transit,102.56431289950218,2.299920639760812 +transit,102.55703074701604,2.3050472157902515 +transit,102.5497485424256,2.3101737540038654 +transit,102.54246628561485,2.3153002543172034 +transit,102.53518397646778,2.3204267166458106 +transit,102.52790161486841,2.325553140905231 +transit,102.52061920070072,2.3306795270110077 +transit,102.51333673384873,2.335805874878681 +transit,102.50605421419644,2.340932184423789 +transit,102.49877164162784,2.346058455561871 +transit,102.49148901602695,2.351184688208461 +transit,102.48420633727774,2.3563108822790935 +transit,102.47692360526425,2.3614370376893 +transit,102.46964081987045,2.3665631543546124 +transit,102.46235798098036,2.3716892321905574 +transit,102.45507508847797,2.3768152711126636 +transit,102.44779214224731,2.3819412710364545 +transit,102.44050914217235,2.387067231877455 +transit,102.43322608813709,2.3921931535511853 +transit,102.42594298002557,2.3973190359731675 +transit,102.41865981772175,2.4024448790589177 +transit,102.41137660110967,2.4075706827239522 +transit,102.4040933300733,2.4126964468837877 +transit,102.39681000449666,2.4178221714539356 +transit,102.38952662426375,2.4229478563499063 +transit,102.38224318925857,2.4280735014872104 +transit,102.37495969936514,2.433199106781355 +transit,102.36767615446743,2.4383246721478455 +transit,102.36039255444948,2.4434501975021856 +transit,102.35310889919528,2.4485756827598784 +transit,102.3458251885888,2.453701127836423 +transit,102.3385414225141,2.4588265326473198 +transit,102.33125760085515,2.463951897108063 +transit,102.32397372349595,2.469077221134149 +transit,102.31668979032054,2.474202504641071 +transit,102.30940580121288,2.4793277475443203 +transit,102.30212175605699,2.484452949759386 +transit,102.29483765473688,2.489578111201755 +transit,102.28755349713656,2.494703231786915 +transit,102.28026928314,2.4998283114303477 +transit,102.27298501263125,2.5049533500475367 +transit,102.2657006854943,2.5100783475539625 +transit,102.25841630161314,2.5152033038651025 +transit,102.25113186087178,2.520328218896435 +transit,102.24384736315423,2.5254530925634318 +transit,102.23656280834449,2.5305779247815687 +transit,102.22927819632658,2.535702715466315 +transit,102.22199352698448,2.5408274645331415 +transit,102.21470880020222,2.5459521718975133 +transit,102.2074240158638,2.5510768374748984 +transit,102.2001391738532,2.5562014611807573 +transit,102.19285427405445,2.561326042930555 +transit,102.18556931635156,2.5664505826397495 +transit,102.17828430062852,2.571575080223798 +transit,102.17099922676935,2.576699535598158 +transit,102.16371409465805,2.581823948678284 +transit,102.15642890417861,2.5869483193796263 +transit,102.14914365521507,2.5920726476176372 +transit,102.14185834765141,2.597196933307763 +transit,102.13457298137165,2.6023211763654523 +transit,102.12728755625977,2.607445376706149 +transit,102.12000207219981,2.6125695342452966 +transit,102.11271652907577,2.617693648898334 +transit,102.10543092677165,2.622817720580701 +transit,102.09814526517145,2.627941749207835 +transit,102.09085954415919,2.633065734695171 +transit,102.08357376361887,2.6381896769581417 +transit,102.0762879234345,2.643313575912177 +transit,102.06900202349009,2.6484374314727086 +transit,102.06171606366964,2.6535612435551625 +transit,102.05443004385717,2.6586850120749643 +transit,102.04714396393666,2.663808736947536 +transit,102.03985782379215,2.6689324180883016 +transit,102.03257162330765,2.6740560554126773 +transit,102.02528536236713,2.679179648836083 +transit,102.01799904085463,2.684303198273934 +transit,102.01071265865416,2.6894267036416433 +transit,102.0034262156497,2.6945501648546224 +transit,101.99613971172529,2.699673581828281 +transit,101.98885314676492,2.704796954478027 +transit,101.9815665206526,2.7099202827192648 +transit,101.97427983327236,2.7150435664673993 +transit,101.96699308450819,2.720166805637832 +transit,101.95970627424408,2.725290000145962 +transit,101.95241940236409,2.730413149907187 +transit,101.94513246875218,2.7355362548369033 +transit,101.93784547329238,2.740659314850504 +transit,101.9305584158687,2.7457823298633808 +transit,101.92327129636516,2.750905299790924 +transit,101.91598411466575,2.7560282245485186 +transit,101.9086968706545,2.7611511040515526 +transit,101.90140956421538,2.766273938215409 +transit,101.89412219523246,2.7713967269554693 +transit,101.8868347635897,2.776519470187113 +transit,101.87954726917114,2.7816421678257166 +transit,101.87225971186078,2.786764819786656 +transit,101.86497209154263,2.791887425985305 +transit,101.8576844081007,2.7970099863370352 +transit,101.850396661419,2.8021325007572147 +transit,101.84310885138154,2.807254969161211 +transit,101.83582097787233,2.81237739146439 +transit,101.8285330407754,2.8174997675821123 +transit,101.82124503997474,2.8226220974297416 +transit,101.81395697535437,2.8277443809226352 +transit,101.8066688467983,2.8328666179761517 +transit,101.79938065419054,2.8379888085056435 +transit,101.7920923974151,2.8431109524264646 +transit,101.78480407635601,2.8482330496539654 +transit,101.77751569089726,2.8533551001034945 +transit,101.77022724092288,2.8584771036903978 +transit,101.76293872631686,2.86359906033002 +transit,101.75565014696322,2.8687209699377028 +transit,101.748361502746,2.8738428324287866 +transit,101.74107279354916,2.878964647718609 +transit,101.73378401925677,2.8840864157225057 +transit,101.7264951797528,2.889208136355812 +transit,101.71920627492129,2.894329809533858 +transit,101.71191730464624,2.8994514351719736 +transit,101.70462826881166,2.9045730131854857 +transit,101.69733916730158,2.9096945434897195 +WP9,101.69005,2.914816026 +transit,101.68535588738197,2.922015798814107 +transit,101.6806617149491,2.929215550992293 +transit,101.67596748255315,2.9364152824833907 +transit,101.6712731900459,2.9436149932362317 +transit,101.66657883727906,2.9508146831996442 +transit,101.66188442410441,2.9580143523224574 +transit,101.65718995037369,2.965214000553495 +transit,101.65249541593862,2.9724136278415783 +transit,101.64780082065093,2.979613234135528 +transit,101.64310616436235,2.9868128193841628 +transit,101.63841144692458,2.994012383536298 +transit,101.63371666818934,3.0012119265407464 +transit,101.62902182800832,3.0084114483463194 +transit,101.62432692623325,3.0156109489018266 +transit,101.61963196271579,3.0228104281560744 +transit,101.61493693730763,3.030009886057866 +transit,101.61024184986047,3.037209322556003 +transit,101.60554670022597,3.044408737599287 +transit,101.60085148825578,3.051608131136514 +transit,101.59615621380159,3.058807503116481 +transit,101.59146087671505,3.0660068534879774 +transit,101.58676547684779,3.0732061821997965 +transit,101.58207001405147,3.080405489200724 +transit,101.57737448817771,3.0876047744395483 +transit,101.57267889907816,3.0948040378650505 +transit,101.56798324660443,3.1020032794260133 +transit,101.56328753060814,3.1092024990712144 +transit,101.55859175094089,3.11640169674943 +transit,101.55389590745432,3.123600872409436 +WP1,101.5492,3.130800026 diff --git a/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/bangkok/bangkok_waypoints.csv b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/bangkok/bangkok_waypoints.csv new file mode 100644 index 0000000..6cd6241 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/bangkok/bangkok_waypoints.csv @@ -0,0 +1,3562 @@ +city,utc_adjust +bangkok,7 +waypoint,lon,lat +U_Tapao,101.005,12.67983303 +transit,100.99748524729382,12.68476491304953 +transit,100.98997020525702,12.689696581764105 +transit,100.98245487377469,12.694628036049753 +transit,100.97493925273196,12.69955927581249 +transit,100.96742334201394,12.704490300958334 +transit,100.95990714150577,12.70942111139328 +transit,100.95239065109256,12.714351707023324 +transit,100.94487387065945,12.719282087754447 +transit,100.93735680009158,12.724212253492627 +transit,100.92983943927409,12.729142204143825 +transit,100.92232178809209,12.734071939614005 +transit,100.91480384643079,12.739001459809106 +transit,100.90728561417528,12.74393076463507 +transit,100.89976709121075,12.74885985399783 +transit,100.89224827742235,12.7537887278033 +transit,100.88472917269523,12.758717385957395 +transit,100.87720977691457,12.763645828366014 +transit,100.86969008996553,12.768574054935053 +transit,100.86217011173328,12.773502065570394 +transit,100.854649842103,12.778429860177916 +transit,100.84712928095988,12.783357438663474 +transit,100.83960842818908,12.78828480093294 +transit,100.83208728367582,12.793211946892148 +transit,100.82456584730528,12.798138876446945 +transit,100.81704411896264,12.803065589503156 +transit,100.80952209853311,12.8079920859666 +transit,100.8019997859019,12.812918365743093 +transit,100.7944771809542,12.817844428738434 +transit,100.78695428357524,12.822770274858414 +transit,100.77943109365023,12.827695904008822 +transit,100.77190761106438,12.832621316095427 +transit,100.76438383570292,12.837546511023998 +transit,100.75685976745106,12.842471488700294 +transit,100.74933540619405,12.847396249030055 +transit,100.74181075181711,12.852320791919025 +transit,100.7342858042055,12.857245117272932 +transit,100.72676056324444,12.862169224997492 +transit,100.71923502881916,12.867093114998422 +transit,100.71170920081495,12.872016787181416 +transit,100.70418307911703,12.876940241452175 +transit,100.69665666361068,12.881863477716378 +transit,100.68912995418114,12.886786495879695 +transit,100.6816029507137,12.891709295847798 +transit,100.67407565309361,12.89663187752634 +transit,100.66654806120613,12.90155424082097 +transit,100.65902017493657,12.906476385637317 +transit,100.65149199417019,12.91139831188102 +transit,100.64396351879226,12.91632001945769 +transit,100.63643474868809,12.921241508272947 +transit,100.62890568374299,12.926162778232381 +transit,100.62137632384221,12.931083829241587 +transit,100.61384666887108,12.936004661206152 +transit,100.6063167187149,12.940925274031644 +transit,100.59878647325895,12.945845667623628 +transit,100.59125593238859,12.950765841887659 +transit,100.58372509598912,12.955685796729286 +transit,100.57619396394584,12.960605532054041 +transit,100.56866253614409,12.965525047767454 +transit,100.56113081246917,12.970444343775045 +transit,100.55359879280647,12.975363419982312 +transit,100.54606647704126,12.98028227629477 +transit,100.53853386505892,12.985200912617898 +transit,100.5310009567448,12.990119328857183 +transit,100.52346775198421,12.995037524918098 +transit,100.51593425066253,12.9999555007061 +transit,100.50840045266511,13.004873256126647 +transit,100.50086635787731,13.009790791085182 +transit,100.49333196618448,13.01470810548714 +transit,100.48579727747202,13.019625199237947 +transit,100.47826229162526,13.02454207224302 +transit,100.47072700852961,13.029458724407766 +transit,100.46319142807043,13.034375155637582 +transit,100.4556555501331,13.039291365837858 +transit,100.44811937460304,13.044207354913977 +transit,100.4405829013656,13.049123122771306 +transit,100.43304613030621,13.054038669315206 +transit,100.42550906131025,13.05895399445103 +transit,100.41797169426313,13.063869098084117 +transit,100.41043402905026,13.068783980119807 +transit,100.40289606555706,13.073698640463418 +transit,100.39535780366893,13.078613079020267 +transit,100.3878192432713,13.08352729569566 +transit,100.38028038424959,13.088441290394893 +transit,100.37274122648923,13.093355063023258 +transit,100.36520176987565,13.09826861348602 +transit,100.3576620142943,13.103181941688465 +transit,100.35012195963061,13.108095047535835 +transit,100.34258160577004,13.11300793093339 +transit,100.33504095259802,13.117920591786367 +transit,100.3275,13.12283303 +transit,100.32754165237236,13.130527555342772 +transit,100.32758330733789,13.1382220760861 +transit,100.32762496489835,13.145916592227486 +transit,100.32766662505544,13.153611103764428 +transit,100.32770828781092,13.161305610694422 +transit,100.32774995316653,13.169000113014974 +transit,100.32779162112399,13.176694610723583 +transit,100.32783329168505,13.184389103817743 +transit,100.32787496485145,13.192083592294967 +transit,100.3279166406249,13.199778076152752 +transit,100.32795831900718,13.207472555388593 +transit,100.328,13.21516703 +transit,100.32804932534562,13.22372880860958 +transit,100.3280986541334,13.232290581485813 +transit,100.32814798636589,13.24085234862526 +transit,100.32819732204565,13.24941411002448 +transit,100.32824666117523,13.25797586568004 +transit,100.32829600375716,13.26653761558849 +transit,100.328345349794,13.275099359746399 +transit,100.32839469928834,13.28366109815033 +transit,100.32844405224269,13.292222830796844 +transit,100.32849340865961,13.300784557682498 +transit,100.32854276854167,13.309346278803861 +transit,100.32859213189141,13.3179079941575 +transit,100.3286414987114,13.326469703739976 +transit,100.32869086900419,13.335031407547852 +transit,100.32874024277234,13.343593105577696 +transit,100.32878962001841,13.352154797826074 +transit,100.32883900074496,13.360716484289556 +transit,100.32888838495454,13.369278164964706 +transit,100.32893777264971,13.377839839848091 +transit,100.32898716383305,13.386401508936281 +transit,100.3290365585071,13.394963172225848 +transit,100.32908595667442,13.403524829713355 +transit,100.3291353583376,13.412086481395372 +transit,100.32918476349919,13.420648127268477 +transit,100.32923417216173,13.429209767329235 +transit,100.32928358432781,13.437771401574219 +transit,100.329333,13.44633303 +transit,100.32738963826714,13.454203588841562 +transit,100.3254461496106,13.462074127756567 +transit,100.32350253394532,13.469944646732305 +transit,100.32155879118619,13.477815145756043 +transit,100.31961492124809,13.485685624815059 +transit,100.31767092404587,13.493556083896632 +transit,100.31572679949439,13.501426522988032 +transit,100.31378254750845,13.509296942076535 +transit,100.31183816800285,13.517167341149399 +transit,100.30989366089239,13.525037720193898 +transit,100.3079490260918,13.532908079197295 +transit,100.30600426351585,13.540778418146852 +transit,100.30405937307923,13.54864873702983 +transit,100.30211435469664,13.556519035833485 +transit,100.30016920828278,13.564389314545078 +transit,100.2982239337523,13.572259573151857 +transit,100.29627853101984,13.580129811641081 +transit,100.294333,13.58800003 +transit,100.29231766177654,13.59613358602131 +transit,100.29030218603909,13.604267120441008 +transit,100.2882865726931,13.612400633244965 +transit,100.28627082164402,13.62053412441904 +transit,100.28425493279732,13.62866759394911 +transit,100.28223890605837,13.636801041821029 +transit,100.28022274133257,13.644934468020663 +transit,100.27820643852526,13.653067872533864 +transit,100.2761899975418,13.661201255346494 +transit,100.27417341828749,13.669334616444402 +transit,100.27215670066762,13.67746795581344 +transit,100.27013984458746,13.685601273439463 +transit,100.26812284995226,13.693734569308306 +transit,100.26610571666723,13.701867843405827 +transit,100.26408844463755,13.710001095717853 +transit,100.26207103376844,13.718134326230237 +transit,100.260053483965,13.72626753492881 +transit,100.25803579513239,13.734400721799405 +transit,100.2560179671757,13.742533886827859 +transit,100.254,13.75066703 +transit,100.2586740780304,13.758123399579667 +transit,100.26334845205756,13.765579676009509 +transit,100.26802312226344,13.773035859231898 +transit,100.27269808883001,13.780491949189194 +transit,100.27737335193929,13.78794794582375 +transit,100.28204891177329,13.795403849077895 +transit,100.28672476851409,13.80285965889396 +transit,100.29140092234381,13.810315375214255 +transit,100.2960773734446,13.81777099798109 +transit,100.30075412199864,13.825226527136744 +transit,100.30543116818812,13.832681962623504 +transit,100.31010851219531,13.840137304383626 +transit,100.31478615420248,13.847592552359382 +transit,100.31946409439196,13.855047706493 +transit,100.3241423329461,13.862502766726717 +transit,100.32882087004727,13.869957733002755 +transit,100.33349970587791,13.877412605263316 +transit,100.33817884062047,13.884867383450601 +transit,100.34285827445746,13.892322067506793 +transit,100.34753800757137,13.89977665737406 +transit,100.35221804014478,13.907231152994562 +transit,100.35689837236029,13.914685554310452 +transit,100.36157900440053,13.92213986126387 +transit,100.36625993644816,13.929594073796933 +transit,100.37094116868589,13.93704819185176 +transit,100.37562270129644,13.944502215370443 +transit,100.3803045344626,13.951956144295085 +transit,100.38498666836715,13.959409978567747 +transit,100.38966910319296,13.966863718130504 +transit,100.39435183912289,13.974317362925413 +transit,100.39903487633985,13.981770912894506 +transit,100.4037182150268,13.989224367979812 +transit,100.4084018553667,13.996677728123364 +transit,100.41308579754259,14.004130993267152 +transit,100.4177700417375,14.011584163353172 +transit,100.42245458813453,14.01903723832341 +transit,100.42713943691679,14.026490218119836 +transit,100.43182458826746,14.033943102684404 +transit,100.4365100423697,14.04139589195906 +transit,100.44119579940677,14.04884858588574 +transit,100.44588185956191,14.056301184406367 +transit,100.45056822301844,14.063753687462848 +transit,100.45525488995966,14.071206094997075 +transit,100.45994186056897,14.078658406950948 +transit,100.46462913502977,14.086110623266327 +transit,100.46931671352549,14.09356274388508 +transit,100.4740045962396,14.101014768749055 +transit,100.47869278335563,14.10846669780009 +transit,100.48338127505711,14.11591853098001 +transit,100.48807007152764,14.123370268230632 +transit,100.49275917295083,14.13082190949375 +transit,100.4974485795103,14.138273454711156 +transit,100.5021382913898,14.145724903824627 +transit,100.50682830877301,14.15317625677593 +transit,100.5115186318437,14.16062751350682 +transit,100.51620926078567,14.168078673959027 +transit,100.52090019578274,14.175529738074289 +transit,100.52559143701879,14.182980705794318 +transit,100.53028298467773,14.190431577060822 +transit,100.53497483894346,14.197882351815487 +transit,100.539667,14.20533303 +transit,100.54797860533483,14.204279516957863 +transit,100.55629013377941,14.203225715194685 +transit,100.56460158531932,14.202171624735378 +transit,100.57291295994017,14.201117245604847 +transit,100.58122425762754,14.20006257782802 +transit,100.58953547836708,14.199007621429818 +transit,100.5978466221444,14.197952376435179 +transit,100.60615768894513,14.196896842869032 +transit,100.61446867875489,14.195841020756331 +transit,100.62277959155935,14.19478491012202 +transit,100.63109042734415,14.193728510991058 +transit,100.63940118609494,14.192671823388402 +transit,100.6477118677974,14.19161484733902 +transit,100.65602247243719,14.190557582867896 +transit,100.664333,14.18950003 +transit,100.66664363112469,14.181428781010574 +transit,100.66895409878745,14.173357504322949 +transit,100.67126440309633,14.165286199954679 +transit,100.6735745441593,14.15721486792332 +transit,100.6758845220843,14.149143508246421 +transit,100.67819433697926,14.141072120941542 +transit,100.68050398895208,14.133000706026225 +transit,100.68281347811065,14.124929263518016 +transit,100.6851228045628,14.11685779343445 +transit,100.68743196841635,14.108786295793069 +transit,100.68974096977908,14.100714770611404 +transit,100.6920498087588,14.092643217906986 +transit,100.6943584854632,14.084571637697344 +transit,100.696667,14.07650003 +transit,100.69257331716587,14.069046258352722 +transit,100.68847989956993,14.061592412710672 +transit,100.68438674705119,14.054138493118721 +transit,100.68029385944872,14.046684499621724 +transit,100.67620123660159,14.03923043226454 +transit,100.67210887834894,14.031776291092006 +transit,100.66801678452988,14.02432207614896 +transit,100.66392495498363,14.016867787480221 +transit,100.65983338954939,14.009413425130608 +transit,100.65574208806642,14.001958989144919 +transit,100.65165105037399,13.994504479567963 +transit,100.64756027631141,13.98704989644452 +transit,100.64346976571804,13.97959523981937 +transit,100.63937951843324,13.972140509737278 +transit,100.63528953429643,13.964685706243007 +transit,100.63119981314708,13.95723082938131 +transit,100.62711035482462,13.949775879196922 +transit,100.62302115916859,13.942320855734582 +transit,100.61893222601852,13.93486575903901 +transit,100.614843555214,13.92741058915492 +transit,100.6107551465946,13.919955346127017 +Don_Mueang,100.606667,13.91250003 +transit,100.6049446025679,13.90816671035839 +transit,100.60322226924221,13.903833377023446 +transit,100.6015,13.89950003 +transit,100.59301296559651,13.901765024837376 +transit,100.5845257661695,13.904029724192878 +transit,100.5760384017093,13.906294128010886 +transit,100.56755087220628,13.908558236235775 +transit,100.55906317765078,13.910822048811921 +transit,100.55057531803321,13.913085565683714 +transit,100.54208729334393,13.915348786795532 +transit,100.53359910357337,13.91761171209177 +transit,100.52511074871194,13.919874341516824 +transit,100.51662222875008,13.922136675015082 +transit,100.50813354367824,13.924398712530953 +transit,100.4996446934869,13.926660454008832 +transit,100.49115567816652,13.928921899393133 +transit,100.48266649770757,13.931183048628265 +transit,100.47417715210061,13.933443901658633 +transit,100.4656876413361,13.935704458428669 +transit,100.45719796540463,13.937964718882776 +transit,100.4487081242967,13.940224682965392 +transit,100.4402181180029,13.942484350620933 +transit,100.4317279465138,13.944743721793836 +transit,100.42323760981999,13.947002796428533 +transit,100.41474710791208,13.94926157446946 +transit,100.40625644078068,13.951520055861057 +transit,100.3977656084164,13.953778240547772 +transit,100.38927461080993,13.956036128474047 +transit,100.38078344795191,13.958293719584336 +transit,100.37229211983302,13.960551013823093 +transit,100.36380062644393,13.962808011134772 +transit,100.35530896777537,13.965064711463835 +transit,100.34681714381804,13.967321114754752 +transit,100.33832515456265,13.969577220951981 +transit,100.329833,13.97183303 +transit,100.32881180554787,13.980590646029246 +transit,100.3277905338607,13.989348251459255 +transit,100.32676918488234,13.998105846283291 +transit,100.32574775855662,14.00686343049461 +transit,100.32472625482737,14.01562100408648 +transit,100.32370467363837,14.024378567052155 +transit,100.32268301493345,14.033136119384896 +transit,100.32166127865634,14.04189366107797 +transit,100.32063946475083,14.050651192124619 +transit,100.31961757316064,14.05940871251812 +transit,100.31859560382952,14.068166222251723 +transit,100.31757355670116,14.076923721318687 +transit,100.31655143171928,14.085681209712273 +transit,100.31552922882751,14.094438687425734 +transit,100.31450694796958,14.103196154452334 +transit,100.31348458908909,14.11195361078533 +transit,100.3124621521297,14.12071105641797 +transit,100.31143963703501,14.129468491343523 +transit,100.31041704374863,14.13822591555524 +transit,100.30939437221413,14.146983329046378 +transit,100.3083716223751,14.155740731810196 +transit,100.3073487941751,14.164498123839945 +transit,100.30632588755765,14.173255505128882 +transit,100.30530290246627,14.182012875670265 +transit,100.30427983884448,14.190770235457352 +transit,100.30325669663576,14.199527584483393 +transit,100.3022334757836,14.208284922741642 +transit,100.30121017623144,14.217042250225358 +transit,100.30018679792275,14.22579956692779 +transit,100.29916334080092,14.234556872842198 +transit,100.2981398048094,14.243314167961831 +transit,100.29711618989155,14.252071452279944 +transit,100.29609249599079,14.260828725789787 +transit,100.29506872305045,14.269585988484623 +transit,100.2940448710139,14.278343240357696 +transit,100.29302093982444,14.287100481402256 +transit,100.29199692942542,14.295857711611566 +transit,100.29097283976014,14.304614930978866 +transit,100.28994867077186,14.313372139497416 +transit,100.28892442240387,14.322129337160467 +transit,100.28790009459941,14.330886523961267 +transit,100.28687568730172,14.339643699893067 +transit,100.285851200454,14.348400864949117 +transit,100.2848266339995,14.357158019122675 +transit,100.28380198788138,14.36591516240698 +transit,100.2827772620428,14.374672294795284 +transit,100.28175245642693,14.383429416280846 +transit,100.28072757097691,14.392186526856905 +transit,100.27970260563586,14.40094362651672 +transit,100.2786775603469,14.409700715253525 +transit,100.2776524350531,14.418457793060584 +transit,100.27662722969755,14.427214859931134 +transit,100.27560194422331,14.435971915858435 +transit,100.27457657857342,14.444728960835716 +transit,100.2735511326909,14.453485994856248 +transit,100.27252560651876,14.462243017913258 +transit,100.2715,14.47100003 +transit,100.27028576553123,14.47940988010593 +transit,100.26907143958948,14.487819717938384 +transit,100.26785702211254,14.496229543489912 +transit,100.26664251303806,14.504639356753085 +transit,100.26542791230379,14.513049157720461 +transit,100.26421321984739,14.5214589463846 +transit,100.2629984356065,14.529868722738058 +transit,100.26178355951882,14.5382784867734 +transit,100.26056859152192,14.546688238483181 +transit,100.25935353155344,14.555097977859953 +transit,100.25813837955097,14.563507704896278 +transit,100.25692313545208,14.571917419584713 +transit,100.25570779919435,14.580327121917808 +transit,100.25449237071531,14.588736811888127 +transit,100.25327684995248,14.597146489488223 +transit,100.25206123684337,14.605556154710639 +transit,100.2508455313255,14.61396580754794 +transit,100.24962973333629,14.62237544799267 +transit,100.24841384281325,14.63078507603739 +transit,100.24719785969378,14.639194691674637 +transit,100.24598178391534,14.647604294896974 +transit,100.2447656154153,14.656013885696952 +transit,100.24354935413106,14.66442346406711 +transit,100.242333,14.67283303 +transit,100.24311000160544,14.681240550739027 +transit,100.24388706258217,14.689648062801169 +transit,100.24466418297027,14.698055566181523 +transit,100.24544136280976,14.706463060875166 +transit,100.2462186021407,14.714870546877188 +transit,100.2469959010032,14.72327802418268 +transit,100.24777325943734,14.731685492786731 +transit,100.24855067748321,14.740092952684423 +transit,100.24932815518093,14.74850040387085 +transit,100.25010569257061,14.756907846341091 +transit,100.25088328969241,14.765315280090242 +transit,100.25166094658644,14.773722705113395 +transit,100.25243866329289,14.782130121405624 +transit,100.25321643985191,14.790537528962025 +transit,100.25399427630369,14.798944927777688 +transit,100.25477217268839,14.8073523178477 +transit,100.25555012904624,14.815759699167144 +transit,100.25632814541746,14.82416707173111 +transit,100.25710622184225,14.832574435534687 +transit,100.25788435836085,14.840981790572968 +transit,100.25866255501352,14.849389136841044 +transit,100.2594408118405,14.857796474333993 +transit,100.26021912888207,14.866203803046906 +transit,100.26099750617851,14.874611122974876 +transit,100.2617759437701,14.883018434112985 +transit,100.26255444169716,14.89142573645633 +transit,100.263333,14.89983303 +transit,100.2605075745843,14.908345431356354 +transit,100.25768192704201,14.916857791535385 +transit,100.25485605722392,14.925370110510332 +transit,100.2520299649807,14.933882388254435 +transit,100.24920365016303,14.94239462474092 +transit,100.2463771126215,14.950906819943018 +transit,100.24355035220671,14.95941897383393 +transit,100.2407233687692,14.96793108638689 +transit,100.23789616215946,14.976443157575085 +transit,100.23506873222796,14.984955187371733 +transit,100.23224107882508,14.993467175750014 +transit,100.22941320180125,15.00197912268312 +transit,100.22658510100676,15.010491028144228 +transit,100.22375677629192,15.019002892106526 +transit,100.22092822750699,15.027514714543175 +transit,100.21809945450217,15.036026495427338 +transit,100.21527045712762,15.044538234732185 +transit,100.2124412352335,15.05304993243085 +transit,100.20961178866987,15.06156158849649 +transit,100.20678211728679,15.070073202902252 +transit,100.20395222093428,15.078584775621255 +transit,100.2011220994623,15.087096306626636 +transit,100.19829175272075,15.095607795891516 +transit,100.19546118055953,15.10411924338901 +transit,100.19263038282848,15.112630649092225 +transit,100.18979935937742,15.121142012974268 +transit,100.18696811005609,15.129653335008243 +transit,100.18413663471419,15.138164615167227 +transit,100.18130493320145,15.14667585342432 +transit,100.17847300536745,15.155187049752593 +transit,100.17564085106181,15.163698204125124 +transit,100.1728084701341,15.17220931651498 +transit,100.1699758624338,15.180720386895214 +transit,100.1671430278104,15.189231415238897 +transit,100.16430996611331,15.19774240151907 +transit,100.16147667719193,15.206253345708776 +transit,100.1586431608956,15.214764247781055 +transit,100.15580941707363,15.223275107708933 +transit,100.15297544557528,15.231785925465438 +transit,100.15014124624976,15.240296701023588 +transit,100.14730681894626,15.248807434356399 +transit,100.14447216351392,15.257318125436877 +transit,100.14163727980183,15.265828774238017 +transit,100.13880216765904,15.274339380732819 +transit,100.13596682693456,15.28284994489427 +transit,100.13313125747737,15.29136046669535 +transit,100.13029545913639,15.299870946109039 +transit,100.1274594317605,15.3083813831083 +transit,100.12462317519855,15.316891777666104 +transit,100.12178668929936,15.325402129755407 +transit,100.11894997391165,15.333912439349154 +transit,100.11611302888417,15.342422706420294 +transit,100.11327585406559,15.350932930941775 +transit,100.11043844930454,15.359443112886515 +transit,100.1076008144496,15.367953252227453 +transit,100.10476294934934,15.376463348937506 +transit,100.10192485385225,15.384973402989578 +transit,100.0990865278068,15.393483414356592 +transit,100.09624797106142,15.401993383011444 +transit,100.09340918346449,15.410503308927018 +transit,100.09057016486433,15.419013192076227 +transit,100.08773091510925,15.427523032431937 +transit,100.0848914340475,15.436032829967035 +transit,100.0820517215273,15.444542584654382 +transit,100.07921177739681,15.453052296466845 +transit,100.07637160150414,15.461561965377287 +transit,100.07353119369739,15.470071591358556 +transit,100.0706905538246,15.478581174383507 +transit,100.06784968173378,15.487090714424962 +transit,100.06500857727286,15.495600211455773 +transit,100.06216724028977,15.504109665448754 +transit,100.05932567063238,15.512619076376728 +transit,100.05648386814849,15.521128444212515 +transit,100.05364183268593,15.529637768928922 +transit,100.0507995640924,15.538147050498749 +transit,100.04795706221563,15.54665628889479 +transit,100.04511432690325,15.555165484089837 +transit,100.04227135800289,15.563674636056673 +transit,100.03942815536212,15.572183744768074 +transit,100.03658471882846,15.580692810196817 +transit,100.0337410482494,15.589201832315656 +transit,100.03089714347237,15.597710811097349 +transit,100.02805300434478,15.60621974651465 +transit,100.02520863071399,15.614728638540315 +transit,100.02236402242731,15.623237487147067 +transit,100.019519179332,15.631746292307646 +transit,100.01667410127527,15.640255053994785 +transit,100.01382878810433,15.64876377218119 +transit,100.01098323966632,15.657272446839583 +transit,100.00813745580832,15.665781077942668 +transit,100.00529143637739,15.674289665463148 +transit,100.00244518122054,15.682798209373718 +transit,99.99959869018473,15.691306709647064 +transit,99.99675196311688,15.699815166255869 +transit,99.99390499986389,15.708323579172806 +transit,99.99105780027257,15.71683194837055 +transit,99.98821036418973,15.725340273821754 +transit,99.9853626914621,15.733848555499081 +transit,99.98251478193642,15.74235679337518 +transit,99.97966663545931,15.750864987422695 +transit,99.97681825187742,15.75937313761426 +transit,99.97396963103729,15.767881243922508 +transit,99.9711207727855,15.77638930632006 +transit,99.96827167696848,15.78489732477954 +transit,99.96542234343272,15.793405299273555 +transit,99.96257277202459,15.80191322977471 +transit,99.95972296259045,15.810421116255604 +transit,99.95687291497663,15.818928958688828 +transit,99.95402262902938,15.827436757046963 +transit,99.95117210459492,15.835944511302595 +transit,99.94832134151945,15.844452221428298 +transit,99.94547033964908,15.852959887396633 +transit,99.94261909882992,15.861467509180162 +transit,99.93976761890802,15.869975086751435 +transit,99.93691589972937,15.878482620083002 +transit,99.93406394113994,15.886990109147405 +transit,99.93121174298564,15.895497553917169 +transit,99.92835930511232,15.904004954364835 +transit,99.92550662736586,15.912512310462906 +transit,99.922653709592,15.921019622183918 +transit,99.91980055163648,15.929526889500362 +transit,99.916947153345,15.938034112384738 +transit,99.91409351456323,15.946541290809549 +transit,99.91123963513675,15.955048424747282 +transit,99.90838551491115,15.963555514170414 +transit,99.9055311537319,15.97206255905143 +transit,99.9026765514445,15.980569559362786 +transit,99.89982170789438,15.989076515076952 +transit,99.89696662292691,15.997583426166381 +transit,99.89411129638745,16.006090292603517 +transit,99.89125572812127,16.01459711436081 +transit,99.88839991797363,16.023103891410695 +transit,99.88554386578973,16.031610623725594 +transit,99.88268757141473,16.040117311277942 +transit,99.87983103469377,16.04862395404014 +transit,99.87697425547186,16.05713055198461 +transit,99.87411723359409,16.06563710508374 +transit,99.8712599689054,16.074143613309943 +transit,99.86840246125075,16.082650076635602 +transit,99.865544710475,16.09115649503309 +transit,99.86268671642303,16.099662868474805 +transit,99.85982847893962,16.10816919693309 +transit,99.85696999786954,16.116675480380334 +transit,99.85411127305748,16.125181718788873 +transit,99.85125230434812,16.133687912131073 +transit,99.84839309158608,16.14219406037926 +transit,99.84553363461592,16.15070016350579 +transit,99.8426739332822,16.159206221482975 +transit,99.83981398742937,16.167712234283144 +transit,99.8369537969019,16.176218201878623 +transit,99.83409336154416,16.18472412424171 +transit,99.83123268120052,16.193230001344716 +transit,99.82837175571527,16.20173583315993 +transit,99.82551058493267,16.21024161965965 +transit,99.82264916869694,16.218747360816156 +transit,99.81978750685224,16.227253056601718 +transit,99.8169255992427,16.235758706988612 +transit,99.81406344571238,16.244264311949102 +transit,99.81120104610532,16.252769871455445 +transit,99.80833840026553,16.261275385479884 +transit,99.8054755080369,16.269780853994675 +transit,99.80261236926336,16.27828627697203 +transit,99.79974898378875,16.286791654384206 +transit,99.79688535145687,16.295296986203407 +transit,99.79402147211148,16.303802272401857 +transit,99.79115734559629,16.312307512951765 +transit,99.78829297175496,16.320812707825333 +transit,99.78542835043112,16.329317856994752 +transit,99.78256348146833,16.337822960432216 +transit,99.77969836471013,16.346328018109904 +transit,99.776833,16.35483303 +transit,99.77618023461284,16.36352772012392 +transit,99.77552741141027,16.372222401058075 +transit,99.77487453035477,16.380917072797786 +transit,99.77422159140875,16.389611735338356 +transit,99.77356859453462,16.398306388675113 +transit,99.77291553969484,16.407001032803365 +transit,99.77226242685175,16.41569566771843 +transit,99.77160925596779,16.42439029341563 +transit,99.7709560270053,16.433084909890265 +transit,99.77030273992665,16.441779517137665 +transit,99.7696493946942,16.45047411515314 +transit,99.76899599127029,16.459168703932004 +transit,99.76834252961723,16.467863283469587 +transit,99.76768900969735,16.476557853761186 +transit,99.76703543147296,16.485252414802133 +transit,99.76638179490634,16.493946966587743 +transit,99.76572809995977,16.50264150911333 +transit,99.76507434659551,16.511336042374218 +transit,99.76442053477584,16.520030566365715 +transit,99.76376666446298,16.528725081083156 +transit,99.76311273561917,16.537419586521843 +transit,99.76245874820663,16.5461140826771 +transit,99.76180470218756,16.554808569544257 +transit,99.76115059752416,16.563503047118626 +transit,99.76049643417862,16.572197515395523 +transit,99.7598422121131,16.58089197437027 +transit,99.75918793128977,16.589586424038195 +transit,99.75853359167077,16.598280864394617 +transit,99.75787919321822,16.606975295434843 +transit,99.75722473589427,16.615669717154212 +transit,99.75657021966101,16.624364129548038 +transit,99.75591564448055,16.633058532611642 +transit,99.75526101031497,16.64175292634035 +transit,99.75460631712635,16.65044731072948 +transit,99.75395156487673,16.659141685774355 +transit,99.75329675352819,16.667836051470307 +transit,99.75264188304276,16.67653040781264 +transit,99.75198695338244,16.685224754796693 +transit,99.75133196450928,16.693919092417794 +transit,99.75067691638525,16.702613420671252 +transit,99.75002180897236,16.7113077395524 +transit,99.74936664223257,16.72000204905656 +transit,99.74871141612785,16.72869634917906 +transit,99.74805613062016,16.73739063991522 +transit,99.74740078567142,16.746084921260373 +transit,99.74674538124357,16.754779193209835 +transit,99.74608991729853,16.763473455758938 +transit,99.74543439379819,16.772167708903005 +transit,99.74477881070446,16.780861952637366 +transit,99.7441231679792,16.789556186957345 +transit,99.74346746558427,16.798250411858273 +transit,99.74281170348154,16.806944627335472 +transit,99.74215588163284,16.815638833384273 +transit,99.7415,16.82433303 +transit,99.74429190475959,16.832429740308847 +transit,99.74708404678597,16.840526406302324 +transit,99.7498764262191,16.848623027955263 +transit,99.752669043199,16.856719605242482 +transit,99.75546189786576,16.8648161381388 +transit,99.75825499035943,16.872912626619026 +transit,99.7610483208202,16.88100907065797 +transit,99.7638418893882,16.889105470230426 +transit,99.76663569620369,16.897201825311186 +transit,99.76942974140691,16.905298135875043 +transit,99.77222402513819,16.913394401896774 +transit,99.77501854753783,16.921490623351154 +transit,99.77781330874623,16.929586800212952 +transit,99.78060830890382,16.93768293245693 +transit,99.78340354815106,16.945779020057852 +transit,99.78619902662844,16.95387506299046 +transit,99.78899474447651,16.961971061229494 +transit,99.79179070183586,16.970067014749702 +transit,99.79458689884711,16.978162923525804 +transit,99.79738333565093,16.986258787532545 +transit,99.80018001238801,16.994354606744626 +transit,99.8029769291991,17.002450381136764 +transit,99.80577408622501,17.01054611068368 +transit,99.80857148360654,17.01864179536006 +transit,99.81136912148457,17.026737435140607 +Sukhothai,99.814167,17.03483303 +transit,99.81434040327201,17.043284529361696 +transit,99.81451382213099,17.051736021555545 +transit,99.81468725658654,17.0601875065784 +transit,99.81486070664826,17.068638984427135 +transit,99.81503417232577,17.07709045509859 +transit,99.81520765362868,17.085541918589627 +transit,99.8153811505666,17.093993374897117 +transit,99.81555466314913,17.1024448240179 +transit,99.81572819138593,17.110896265948856 +transit,99.81590173528662,17.119347700686838 +transit,99.8160752948608,17.127799128228713 +transit,99.8162488701181,17.136250548571326 +transit,99.81642246106819,17.14470196171156 +transit,99.81659606772067,17.153153367646272 +transit,99.8167696900852,17.16160476637232 +transit,99.8169433281714,17.17005615788658 +transit,99.81711698198895,17.17850754218591 +transit,99.81729065154748,17.18695891926717 +transit,99.81746433685664,17.195410289127235 +transit,99.81763803792609,17.203861651762978 +transit,99.81781175476549,17.212313007171257 +transit,99.81798548738449,17.220764355348937 +transit,99.81815923579278,17.2292156962929 +transit,99.818333,17.23766703 +transit,99.8109274024524,17.242972216999036 +transit,99.80352138185381,17.248277128540224 +transit,99.79611493806348,17.253581764518536 +transit,99.78870807094071,17.258886124828933 +transit,99.78130078034481,17.26419020936634 +transit,99.77389306613506,17.26949401802568 +transit,99.76648492817073,17.274797550701866 +transit,99.75907636631113,17.280100807289784 +transit,99.75166738041557,17.285403787684306 +transit,99.74425797034333,17.290706491780302 +transit,99.7368481359537,17.296008919472605 +transit,99.72943787710594,17.301311070656055 +transit,99.72202719365941,17.306612945225467 +transit,99.71461608547338,17.31191454307563 +transit,99.70720455240713,17.31721586410134 +transit,99.69979259431997,17.32251690819735 +transit,99.69238021107121,17.327817675258427 +transit,99.68496740252013,17.333118165179304 +transit,99.67755416852603,17.3384183778547 +transit,99.67014050894824,17.343718313179327 +transit,99.66272642364599,17.34901797104788 +transit,99.65531191247867,17.354317351355018 +transit,99.64789697530551,17.359616453995418 +transit,99.64048161198585,17.36491527886372 +transit,99.63306582237897,17.370213825854556 +transit,99.6256496063442,17.37551209486254 +transit,99.61823296374082,17.380810085782265 +transit,99.61081589442814,17.386107798508327 +transit,99.60339839826548,17.391405232935284 +transit,99.59598047511213,17.396702388957692 +transit,99.5885621248274,17.401999266470092 +transit,99.58114334727061,17.407295865367 +transit,99.57372414230106,17.41259218554293 +transit,99.56630450977806,17.41788822689237 +transit,99.5588844495609,17.42318398930979 +transit,99.55146396150894,17.42847947268966 +transit,99.54404304548144,17.433774676926422 +transit,99.53662170133775,17.4390696019145 +transit,99.52919992893716,17.444364247548318 +transit,99.521777728139,17.44965861372227 +transit,99.51435509880257,17.454952700330733 +transit,99.50693204078718,17.46024650726809 +transit,99.49950855395217,17.465540034428674 +transit,99.49208463815684,17.47083328170683 +transit,99.4846602932605,17.476126248996888 +transit,99.4772355191225,17.481418936193148 +transit,99.46981031560213,17.4867113431899 +transit,99.46238468255873,17.49200346988141 +transit,99.45495861985162,17.497295316161956 +transit,99.44753212734011,17.502586881925765 +transit,99.44010520488354,17.507878167067073 +transit,99.43267785234121,17.513169171480097 +transit,99.42525006957246,17.51845989505902 +transit,99.41782185643662,17.52375033769804 +transit,99.410393212793,17.529040499291316 +transit,99.40296413850095,17.534330379733 +transit,99.39553463341977,17.53961997891723 +transit,99.38810469740883,17.54490929673812 +transit,99.38067433032744,17.55019833308977 +transit,99.37324353203492,17.555487087866283 +transit,99.36581230239061,17.560775560961726 +transit,99.35838064125383,17.566063752270153 +transit,99.35094854848396,17.571351661685608 +transit,99.34351602394028,17.576639289102125 +transit,99.33608306748218,17.5819266344137 +transit,99.32864967896894,17.58721369751434 +transit,99.32121585825995,17.592500478298025 +transit,99.31378160521452,17.597786976658714 +transit,99.30634691969199,17.603073192490353 +transit,99.29891180155172,17.60835912568688 +transit,99.29147625065305,17.613644776142216 +transit,99.2840402668553,17.618930143750262 +transit,99.27660385001784,17.624215228404896 +transit,99.269167,17.62950003 +transit,99.26635252996367,17.63792495855916 +transit,99.26353779835352,17.64634983976061 +transit,99.26072280501332,17.6547746735773 +transit,99.2579075497868,17.663199459982156 +transit,99.25509203251767,17.67162419894811 +transit,99.25227625304954,17.68004889044808 +transit,99.24946021122605,17.68847353445498 +transit,99.24664390689071,17.696898130941722 +transit,99.24382733988703,17.705322679881206 +transit,99.24101051005846,17.713747181246323 +transit,99.23819341724838,17.72217163500995 +transit,99.23537606130014,17.730596041144977 +transit,99.23255844205707,17.739020399624277 +transit,99.22974055936238,17.74744471042071 +transit,99.22692241305931,17.75586897350713 +transit,99.22410400299098,17.7642931888564 +transit,99.22128532900052,17.772717356441344 +transit,99.21846639093097,17.781141476234815 +transit,99.21564718862534,17.789565548209644 +transit,99.21282772192659,17.79798957233864 +transit,99.21000799067761,17.80641354859462 +transit,99.20718799472127,17.81483747695041 +transit,99.20436773390038,17.823261357378787 +transit,99.2015472080577,17.831685189852557 +transit,99.19872641703594,17.840108974344503 +transit,99.19590536067776,17.848532710827417 +transit,99.19308403882576,17.856956399274054 +transit,99.19026245132252,17.865380039657182 +transit,99.18744059801054,17.873803631949574 +transit,99.18461847873228,17.88222717612396 +transit,99.18179609333016,17.890650672153097 +transit,99.17897344164655,17.899074120009722 +transit,99.17615052352375,17.90749751966656 +transit,99.17332733880401,17.915920871096333 +transit,99.17050388732959,17.924344174271752 +transit,99.16768016894261,17.93276742916554 +transit,99.1648561834852,17.94119063575039 +transit,99.16203193079944,17.94961379399899 +transit,99.15920741072732,17.95803690388403 +transit,99.15638262311083,17.966459965378185 +transit,99.15355756779186,17.97488297845414 +transit,99.15073224461229,17.983305943084545 +transit,99.14790665341393,17.991728859242063 +transit,99.14508079403855,18.000151726899347 +transit,99.14225466632787,18.00857454602904 +transit,99.13942827012355,18.01699731660377 +transit,99.13660160526717,18.025420038596177 +transit,99.13377467160036,18.033842711978878 +transit,99.13094746896459,18.042265336724476 +transit,99.12811999720134,18.050687912805593 +transit,99.12529225615202,18.05911044019482 +transit,99.122464245658,18.067532918864757 +transit,99.11963596556058,18.075955348787982 +transit,99.11680741570102,18.084377729937074 +transit,99.11397859592054,18.092800062284606 +transit,99.11114950606033,18.101222345803134 +transit,99.10832014596146,18.109644580465226 +transit,99.10549051546501,18.118066766243413 +transit,99.10266061441197,18.126488903110253 +transit,99.09983044264334,18.13491099103827 +transit,99.097,18.14333303 +transit,99.10065204694395,18.15053863299162 +transit,99.10430439321041,18.157744161260723 +transit,99.10795703894814,18.164949614770485 +transit,99.11160998430594,18.172154993484096 +transit,99.11526322943266,18.179360297364724 +transit,99.11891677447714,18.186565526375535 +transit,99.12257061958833,18.19377068047968 +transit,99.12622476491516,18.200975759640304 +transit,99.12987921060665,18.20818076382054 +transit,99.13353395681177,18.215385692983517 +transit,99.13718900367964,18.22259054709235 +transit,99.14084435135933,18.22979532611015 +transit,99.1445,18.23700003 +transit,99.15146735747362,18.24206090597879 +transit,99.15843511817809,18.247121525852435 +transit,99.16540328223628,18.25218188953077 +transit,99.17237184977107,18.257241996923632 +transit,99.17934082090532,18.262301847940826 +transit,99.1863101957619,18.267361442492156 +transit,99.1932799744637,18.272420780487415 +transit,99.20025015713358,18.277479861836383 +transit,99.2072207438944,18.282538686448806 +transit,99.21419173486905,18.28759725423445 +transit,99.2211631301804,18.29265556510304 +transit,99.22813492995131,18.2977136189643 +transit,99.23510713430467,18.302771415727932 +transit,99.24207974336333,18.307828955303652 +transit,99.24905275725021,18.312886237601127 +transit,99.25602617608814,18.31794326253002 +transit,99.263,18.32300003 +transit,99.25557382490359,18.32744088559543 +transit,99.2481472707872,18.331881450058834 +transit,99.2407203375578,18.336321723300404 +transit,99.23329302512239,18.34076170523036 +transit,99.22586533338799,18.345201395758863 +transit,99.21843726226156,18.349640794796098 +transit,99.21100881165015,18.35407990225223 +transit,99.20357998146078,18.358518718037413 +transit,99.19615077160049,18.362957242061793 +transit,99.1887211819763,18.367395474235504 +transit,99.18129121249532,18.37183341446868 +transit,99.17386086306458,18.376271062671425 +transit,99.16643013359115,18.380708418753848 +transit,99.15899902398213,18.385145482626054 +transit,99.1515675341446,18.389582254198125 +transit,99.1441356639857,18.394018733380133 +transit,99.13670341341249,18.398454920082145 +transit,99.12927078233214,18.402890814214228 +transit,99.12183777065178,18.40732641568642 +transit,99.11440437827852,18.411761724408755 +transit,99.10697060511956,18.416196740291273 +transit,99.09953645108203,18.420631463243982 +transit,99.09210191607312,18.42506589317689 +transit,99.084667,18.42950003 +transit,99.07590508762327,18.42952644374126 +transit,99.06714317259124,18.429552453173475 +transit,99.05838125494486,18.429578058295917 +transit,99.04961933472507,18.429603259107854 +transit,99.04085741197284,18.42962805560859 +transit,99.0320954867291,18.429652447797427 +transit,99.02333355903484,18.42967643567368 +transit,99.01457162893098,18.429700019236673 +transit,99.00580969645848,18.429723198485757 +transit,98.99704776165832,18.429745973420264 +transit,98.98828582457143,18.429768344039562 +transit,98.97952388523878,18.42979031034303 +transit,98.97076194370132,18.429811872330045 +transit,98.962,18.42983303 +transit,98.96202131799997,18.438512668615008 +transit,98.96204263814047,18.447192299299033 +transit,98.96206396042278,18.45587192204888 +transit,98.9620852848482,18.464551536861347 +transit,98.96210661141804,18.473231143733248 +transit,98.96212794013357,18.481910742661395 +transit,98.96214927099611,18.490590333642597 +transit,98.96217060400696,18.499269916673665 +transit,98.9621919391674,18.507949491751404 +transit,98.96221327647872,18.516629058872628 +transit,98.96223461594225,18.525308618034146 +transit,98.96225595755928,18.533988169232785 +transit,98.9622773013311,18.54266771246535 +transit,98.962298647259,18.551347247728643 +transit,98.96231999534432,18.5600267750195 +transit,98.96234134558831,18.568706294334728 +transit,98.96236269799232,18.577385805671142 +transit,98.96238405255762,18.58606530902557 +transit,98.96240540928552,18.594744804394814 +transit,98.96242676817734,18.60342429177571 +transit,98.96244812923435,18.612103771165064 +transit,98.96246949245788,18.620783242559707 +transit,98.96249085784923,18.62946270595645 +transit,98.9625122254097,18.638142161352125 +transit,98.96253359514058,18.64682160874355 +transit,98.96255496704322,18.655501048127554 +transit,98.96257634111889,18.664180479500953 +transit,98.9625977173689,18.672859902860576 +transit,98.96261909579457,18.68153931820326 +transit,98.96264047639718,18.690218725525803 +transit,98.96266185917808,18.69889812482506 +transit,98.96268324413855,18.70757751609785 +transit,98.9627046312799,18.716256899340998 +transit,98.96272602060345,18.72493627455134 +transit,98.96274741211052,18.733615641725706 +transit,98.96276880580238,18.74229500086092 +transit,98.96279020168038,18.750974351953822 +transit,98.96281159974582,18.759653695001234 +Chiang_Mai,98.962833,18.76833303 +transit,98.97102345626038,18.76608001026244 +transit,98.97921369496291,18.7638266311987 +transit,98.9874037161068,18.7615728928644 +transit,98.9955935196913,18.759318795315163 +transit,99.00378310571564,18.757064338606618 +transit,99.01197247417912,18.75480952279439 +transit,99.02016162508102,18.75255434793413 +transit,99.02835055842063,18.750298814081457 +transit,99.03653927419731,18.74804292129203 +transit,99.04472777241037,18.745786669621488 +transit,99.05291605305919,18.743530059125487 +transit,99.06110411614316,18.74127308985968 +transit,99.06929196166166,18.739015761879713 +transit,99.07747958961414,18.73675807524127 +transit,99.085667,18.73450003 +transit,99.0856442495099,18.726204652347565 +transit,99.08562150123944,18.717909267353512 +transit,99.08559875518738,18.70961387502061 +transit,99.0855760113524,18.701318475351638 +transit,99.08555326973327,18.693023068349355 +transit,99.08553053032868,18.684727654016523 +transit,99.0855077931374,18.676432232355932 +transit,99.08548505815813,18.66813680337033 +transit,99.08546232538961,18.65984136706251 +transit,99.08543959483058,18.651545923435226 +transit,99.08541686647975,18.64325047249126 +transit,99.08539414033586,18.63495501423338 +transit,99.08537141639765,18.626659548664367 +transit,99.08534869466384,18.618364075786985 +transit,99.08532597513317,18.61006859560402 +transit,99.08530325780438,18.60177310811824 +transit,99.08528054267619,18.593477613332425 +transit,99.08525782974733,18.58518211124935 +transit,99.08523511901656,18.57688660187179 +transit,99.08521241048258,18.568591085202527 +transit,99.08518970414416,18.560295561244335 +transit,99.085167,18.55200003 +transit,99.09421416772395,18.550220010116274 +transit,99.10326114792517,18.548439556428413 +transit,99.11230794058116,18.546658668989824 +transit,99.12135454566953,18.544877347853905 +transit,99.13040096316784,18.543095593074085 +transit,99.13944719305371,18.541313404703782 +transit,99.14849323530477,18.539530782796437 +transit,99.15753908989865,18.537747727405492 +transit,99.16658475681304,18.535964238584413 +transit,99.17563023602561,18.53418031638665 +transit,99.18467552751409,18.53239596086568 +transit,99.19372063125621,18.530611172074995 +transit,99.20276554722972,18.52882595006808 +transit,99.21181027541238,18.527040294898434 +transit,99.220854815782,18.525254206619564 +transit,99.2298991683164,18.523467685284995 +transit,99.2389433329934,18.521680730948255 +transit,99.24798730979086,18.519893343662883 +transit,99.25703109868668,18.51810552348242 +transit,99.26607469965876,18.51631727046042 +transit,99.27511811268498,18.514528584650456 +transit,99.28416133774331,18.512739466106098 +transit,99.29320437481171,18.51094991488093 +transit,99.30224722386818,18.50915993102853 +transit,99.31128988489068,18.507369514602523 +transit,99.32033235785728,18.505578665656515 +transit,99.329374642746,18.503787384244102 +transit,99.33841673953492,18.501995670418943 +transit,99.34745864820212,18.50020352423465 +transit,99.3565003687257,18.498410945744894 +transit,99.36554190108382,18.49661793500331 +transit,99.3745832452546,18.494824492063575 +transit,99.38362440121622,18.49303061697936 +transit,99.39266536894688,18.49123630980435 +transit,99.4017061484248,18.48944157059223 +transit,99.41074673962817,18.48764639939671 +transit,99.4197871425353,18.485850796271492 +transit,99.42882735712443,18.484054761270304 +transit,99.43786738337388,18.482258294446865 +transit,99.44690722126195,18.480461395854924 +transit,99.455946870767,18.47866406554822 +transit,99.46498633186737,18.47686630358051 +transit,99.47402560454144,18.47506811000555 +transit,99.48306468876761,18.473269484877136 +transit,99.49210358452433,18.471470428249035 +transit,99.50114229179,18.469670940175035 +transit,99.51018081054313,18.467871020708944 +transit,99.51921914076216,18.46607066990457 +transit,99.52825728242564,18.464269887815735 +transit,99.53729523551208,18.462468674496268 +transit,99.546333,18.46066703 +transit,99.5545038256019,18.456384153671483 +transit,99.56267424596551,18.45210092339058 +transit,99.57084426117846,18.44781733926222 +transit,99.5790138713284,18.44353340139133 +transit,99.58718307650297,18.439249109882837 +transit,99.59535187678985,18.434964464841645 +transit,99.60352027227671,18.43067946637266 +transit,99.6116882630513,18.426394114580752 +transit,99.61985584920133,18.42210840957083 +transit,99.62802303081453,18.417822351447754 +transit,99.6361898079787,18.413535940316383 +transit,99.64435618078161,18.40924917628158 +transit,99.65252214931105,18.404962059448184 +transit,99.66068771365487,18.40067458992104 +transit,99.66885287390089,18.396386767804955 +transit,99.67701763013697,18.392098593204768 +transit,99.68518198245101,18.38781006622528 +transit,99.69334593093089,18.383521186971286 +transit,99.70150947566452,18.37923195554758 +transit,99.70967261673987,18.374942372058943 +transit,99.71783535424484,18.370652436610147 +transit,99.72599768826744,18.36636214930595 +transit,99.73415961889565,18.36207151025111 +transit,99.74232114621746,18.35778051955037 +transit,99.75048227032093,18.35348917730846 +transit,99.7586429912941,18.349197483630114 +transit,99.76680330922501,18.344905438620046 +transit,99.77496322420176,18.340613042382955 +transit,99.78312273631245,18.33632029502355 +transit,99.7912818456452,18.332027196646514 +transit,99.79944055228815,18.327733747356532 +transit,99.80759885632943,18.323439947258276 +transit,99.81575675785727,18.319145796456397 +transit,99.82391425695982,18.314851295055554 +transit,99.8320713537253,18.31055644316039 +transit,99.84022804824195,18.306261240875536 +transit,99.84838434059802,18.301965688305614 +transit,99.85654023088175,18.297669785555254 +transit,99.86469571918146,18.293373532729046 +transit,99.87285080558543,18.289076929931596 +transit,99.88100549018199,18.284779977267487 +transit,99.88915977305948,18.280482674841306 +transit,99.89731365430626,18.276185022757613 +transit,99.9054671340107,18.27188702112097 +transit,99.91362021226121,18.26758867003593 +transit,99.9217728891462,18.26328996960704 +transit,99.92992516475408,18.258990919938825 +transit,99.93807703917332,18.254691521135815 +transit,99.9462285124924,18.250391773302514 +transit,99.95437958479977,18.246091676543447 +transit,99.96253025618395,18.241791230963084 +transit,99.97068052673347,18.237490436665933 +transit,99.97883039653689,18.233189293756464 +transit,99.98697986568273,18.228887802339145 +transit,99.99512893425958,18.224585962518432 +transit,100.00327760235605,18.220283774398776 +transit,100.01142587006075,18.215981238084627 +transit,100.01957373746228,18.2116783536804 +transit,100.02772120464932,18.207375121290543 +transit,100.03586827171054,18.203071541019444 +transit,100.04401493873462,18.19876761297152 +transit,100.05216120581025,18.194463337251165 +transit,100.06030707302617,18.19015871396276 +transit,100.06845254047111,18.185853743210686 +transit,100.07659760823384,18.181548425099304 +transit,100.0847422764031,18.177242759732987 +transit,100.09288654506774,18.172936747216067 +transit,100.10103041431653,18.16863038765289 +transit,100.1091738842383,18.16432368114779 +transit,100.11731695492192,18.16001662780508 +transit,100.12545962645625,18.155709227729087 +transit,100.13360189893015,18.1514014810241 +transit,100.14174377243256,18.147093387794417 +transit,100.14988524705237,18.142784948144328 +transit,100.15802632287853,18.138476162178097 +Phrae,100.166167,18.13416703 +transit,100.16699050577331,18.12526380141945 +transit,100.16781392828184,18.1163605610984 +transit,100.16863726757772,18.107457309042537 +transit,100.16946052371303,18.098554045257508 +transit,100.17028369673984,18.089650769749 +transit,100.17110678671024,18.08074748252267 +transit,100.17192979367624,18.071844183584194 +transit,100.17275271768987,18.062940872939237 +transit,100.17357555880314,18.05403755059347 +transit,100.17439831706803,18.04513421655257 +transit,100.1752209925365,18.036230870822198 +transit,100.17604358526052,18.02732751340802 +transit,100.17686609529198,18.018424144315723 +transit,100.17768852268283,18.009520763550956 +transit,100.17851086748496,18.00061737111941 +transit,100.17933312975022,17.991713967026733 +transit,100.18015530953049,17.982810551278607 +transit,100.18097740687762,17.973907123880704 +transit,100.1817994218434,17.965003684838692 +transit,100.18262135447964,17.95610023415824 +transit,100.18344320483813,17.94719677184501 +transit,100.18426497297064,17.938293297904693 +transit,100.18508665892891,17.929389812342936 +transit,100.18590826276468,17.920486315165423 +transit,100.18672978452966,17.911582806377822 +transit,100.18755122427554,17.9026792859858 +transit,100.18837258205399,17.893775753995037 +transit,100.18919385791668,17.88487221041119 +transit,100.19001505191525,17.87596865523994 +transit,100.19083616410131,17.867065088486957 +transit,100.19165719452647,17.858161510157903 +transit,100.19247814324231,17.849257920258456 +transit,100.19329901030042,17.840354318794283 +transit,100.19411979575233,17.831450705771058 +transit,100.19494049964956,17.822547081194454 +transit,100.19576112204365,17.81364344507013 +transit,100.19658166298608,17.804739797403776 +transit,100.19740212252833,17.79583613820105 +transit,100.19822250072187,17.786932467467622 +transit,100.19904279761813,17.778028785209173 +transit,100.19986301326854,17.769125091431366 +transit,100.20068314772452,17.76022138613987 +transit,100.20150320103743,17.75131766934037 +transit,100.20232317325865,17.74241394103852 +transit,100.20314306443954,17.73351020124001 +transit,100.20396287463144,17.72460644995049 +transit,100.20478260388566,17.715702687175646 +transit,100.2056022522535,17.706798912921148 +transit,100.20642181978623,17.69789512719267 +transit,100.20724130653514,17.688991329995876 +transit,100.20806071255146,17.68008752133644 +transit,100.20888003788642,17.671183701220038 +transit,100.20969928259122,17.662279869652338 +transit,100.21051844671707,17.653376026639016 +transit,100.21133753031515,17.64447217218574 +transit,100.2121565334366,17.635568306298183 +transit,100.21297545613257,17.626664428982014 +transit,100.21379429845418,17.617760540242912 +transit,100.21461306045254,17.608856640086547 +transit,100.21543174217872,17.59995272851859 +transit,100.21625034368381,17.59104880554471 +transit,100.21706886501885,17.582144871170584 +transit,100.21788730623487,17.57324092540189 +transit,100.2187056673829,17.56433696824429 +transit,100.21952394851395,17.555432999703466 +transit,100.22034214967898,17.546529019785076 +transit,100.22116027092896,17.537625028494805 +transit,100.22197831231483,17.528721025838326 +transit,100.22279627388754,17.519817011821306 +transit,100.22361415569797,17.510912986449423 +transit,100.22443195779705,17.502008949728346 +transit,100.22524968023563,17.49310490166375 +transit,100.22606732306458,17.484200842261306 +transit,100.22688488633474,17.475296771526693 +transit,100.22770237009695,17.46639268946558 +transit,100.22851977440199,17.45748859608363 +transit,100.22933709930066,17.448584491386537 +transit,100.23015434484375,17.439680375379965 +transit,100.23097151108199,17.430776248069588 +transit,100.23178859806613,17.421872109461066 +transit,100.23260560584689,17.4129679595601 +transit,100.23342253447497,17.40406379837234 +transit,100.23423938400106,17.395159625903467 +transit,100.23505615447581,17.386255442159158 +transit,100.23587284594991,17.37735124714509 +transit,100.23668945847396,17.368447040866933 +transit,100.23750599209859,17.359542823330347 +transit,100.23832244687439,17.35063859454103 +transit,100.23913882285196,17.341734354504638 +transit,100.23995512008185,17.332830103226854 +transit,100.2407713386146,17.323925840713354 +transit,100.24158747850078,17.315021566969808 +transit,100.24240353979084,17.30611728200189 +transit,100.24321952253534,17.29721298581528 +transit,100.24403542678472,17.28830867841564 +transit,100.24485125258946,17.27940435980865 +transit,100.245667,17.27050003 +transit,100.24647026068472,17.261725471711873 +transit,100.24727344539025,17.25295090256133 +transit,100.24807655416477,17.244176322553795 +transit,100.24887958705645,17.2354017316947 +transit,100.24968254411345,17.22662712998947 +transit,100.25048542538393,17.217852517443536 +transit,100.25128823091599,17.209077894062318 +transit,100.25209096075777,17.200303259851253 +transit,100.25289361495734,17.191528614815773 +transit,100.25369619356279,17.182753958961296 +transit,100.25449869662219,17.173979292293247 +transit,100.25530112418357,17.165204614817068 +transit,100.25610347629498,17.156429926538177 +transit,100.25690575300443,17.14765522746201 +transit,100.2577079543599,17.13888051759399 +transit,100.2585100804094,17.13010579693954 +transit,100.25931213120087,17.12133106550411 +transit,100.2601141067823,17.1125563232931 +transit,100.26091600720159,17.10378157031196 +transit,100.26171783250666,17.0950068065661 +transit,100.26251958274544,17.086232032060977 +transit,100.26332125796579,17.07745724680199 +transit,100.2641228582156,17.06868245079459 +transit,100.26492438354272,17.059907644044195 +transit,100.265725833995,17.05113282655624 +transit,100.26652720962025,17.042357998336144 +transit,100.26732851046629,17.03358315938934 +transit,100.26812973658089,17.024808309721273 +transit,100.26893088801187,17.016033449337357 +transit,100.26973196480694,17.00725857824302 +transit,100.27053296701388,16.9984836964437 +transit,100.27133389468041,16.989708803944822 +transit,100.27213474785425,16.98093390075181 +transit,100.2729355265831,16.972158986870113 +transit,100.27373623091462,16.963384062305142 +transit,100.27453686089652,16.95460912706233 +transit,100.2753374165764,16.94583418114712 +transit,100.27613789800193,16.937059224564926 +transit,100.27693830522072,16.928284257321177 +transit,100.27773863828037,16.91950927942132 +transit,100.27853889722849,16.910734290870778 +transit,100.27933908211261,16.90195929167497 +transit,100.28013919298034,16.893184281839343 +transit,100.28093922987918,16.884409261369314 +transit,100.28173919285669,16.87563423027033 +transit,100.28253908196035,16.866859188547803 +transit,100.28333889723767,16.85808413620717 +transit,100.28413863873612,16.84930907325387 +transit,100.2849383065032,16.840533999693328 +transit,100.28573790058631,16.831758915530973 +transit,100.2865374210329,16.82298382077224 +transit,100.28733686789042,16.814208715422556 +transit,100.28813624120622,16.805433599487355 +transit,100.28893554102771,16.796658472972066 +transit,100.28973476740228,16.787883335882125 +transit,100.29053392037726,16.779108188222956 +Phitsanulok,100.291333,16.77033303 +transit,100.29136817727955,16.761526221146873 +transit,100.29140335132223,16.752719404776496 +transit,100.29143852213012,16.743912580892363 +transit,100.29147368970533,16.735105749497954 +transit,100.29150885404994,16.726298910596743 +transit,100.29154401516607,16.71749206419222 +transit,100.2915791730558,16.70868521028787 +transit,100.29161432772122,16.699878348887182 +transit,100.29164947916443,16.691071479993624 +transit,100.29168462738754,16.682264603610708 +transit,100.29171977239261,16.673457719741904 +transit,100.29175491418177,16.6646508283907 +transit,100.29179005275708,16.655843929560593 +transit,100.29182518812065,16.64703702325506 +transit,100.29186032027457,16.638230109477604 +transit,100.29189544922092,16.6294231882317 +transit,100.29193057496178,16.620616259520865 +transit,100.29196569749925,16.61180932334857 +transit,100.29200081683543,16.603002379718312 +transit,100.29203593297238,16.594195428633583 +transit,100.29207104591221,16.58538847009788 +transit,100.292106155657,16.5765815041147 +transit,100.29214126220882,16.567774530687533 +transit,100.29217636556977,16.55896754981988 +transit,100.29221146574193,16.550160561515234 +transit,100.29224656272737,16.541353565777104 +transit,100.29228165652819,16.532546562608974 +transit,100.29231674714646,16.52373955201435 +transit,100.29235183458427,16.51493253399673 +transit,100.29238691884368,16.506125508559624 +transit,100.29242199992679,16.49731847570652 +transit,100.29245707783568,16.488511435440927 +transit,100.29249215257241,16.479704387766347 +transit,100.29252722413908,16.470897332686278 +transit,100.29256229253774,16.462090270204232 +transit,100.29259735777049,16.45328320032371 +transit,100.29263241983939,16.444476123048226 +transit,100.29266747874652,16.435669038381274 +transit,100.29270253449396,16.426861946326365 +transit,100.29273758708376,16.418054846887017 +transit,100.29277263651802,16.40924774006672 +transit,100.29280768279881,16.400440625869 +transit,100.29284272592818,16.391633504297353 +transit,100.29287776590822,16.3828263753553 +transit,100.292912802741,16.374019239046344 +transit,100.29294783642857,16.365212095374012 +transit,100.29298286697302,16.3564049443418 +transit,100.2930178943764,16.34759778595323 +transit,100.2930529186408,16.338790620211814 +transit,100.29308793976826,16.329983447121073 +transit,100.29312295776086,16.32117626668451 +transit,100.29315797262066,16.312369078905654 +transit,100.29319298434974,16.30356188378801 +transit,100.29322799295015,16.294754681335107 +transit,100.29326299842396,16.285947471550458 +transit,100.29329800077322,16.277140254437583 +transit,100.293333,16.26833303 +transit,100.29337072366047,16.25939350035479 +transit,100.29340844390907,16.250453963169708 +transit,100.2934461607481,16.241514418448443 +transit,100.29348387417984,16.232574866194685 +transit,100.29352158420659,16.223635306412106 +transit,100.29355929083063,16.2146957391044 +transit,100.29359699405423,16.205756164275254 +transit,100.2936346938797,16.196816581928353 +transit,100.2936723903093,16.187876992067388 +transit,100.29371008334532,16.178937394696046 +transit,100.29374777299003,16.169997789818012 +transit,100.29378545924574,16.161058177436978 +transit,100.29382314211472,16.152118557556648 +transit,100.29386082159924,16.143178930180696 +transit,100.29389849770158,16.134239295312824 +transit,100.29393617042402,16.125299652956723 +transit,100.29397383976884,16.116360003116085 +transit,100.29401150573831,16.107420345794612 +transit,100.29404916833472,16.09848068099599 +transit,100.29408682756033,16.089541008723923 +transit,100.29412448341743,16.0806013289821 +transit,100.29416213590828,16.071661641774227 +transit,100.29419978503516,16.062721947103995 +transit,100.29423743080034,16.05378224497511 +transit,100.2942750732061,16.044842535391272 +transit,100.2943127122547,16.035902818356174 +transit,100.2943503479484,16.026963093873523 +transit,100.29438798028949,16.01802336194703 +transit,100.29442560928022,16.009083622580377 +transit,100.29446323492289,16.000143875777283 +transit,100.29450085721973,15.991204121541449 +transit,100.29453847617303,15.98226435987658 +transit,100.29457609178505,15.973324590786381 +transit,100.29461370405804,15.964384814274554 +transit,100.29465131299429,15.955445030344817 +transit,100.29468891859605,15.94650523900087 +transit,100.29472652086558,15.937565440246429 +transit,100.29476411980515,15.928625634085197 +transit,100.29480171541702,15.91968582052088 +transit,100.29483930770344,15.910745999557196 +transit,100.2948768966667,15.90180617119786 +transit,100.29491448230901,15.892866335446582 +transit,100.29495206463267,15.88392649230707 +transit,100.29498964363992,15.874986641783046 +transit,100.29502721933302,15.866046783878213 +transit,100.29506479171424,15.857106918596296 +transit,100.2951023607858,15.848167045941008 +transit,100.29513992655001,15.839227165916071 +transit,100.29517748900908,15.83028727852519 +transit,100.29521504816526,15.821347383772098 +transit,100.29525260402083,15.812407481660507 +transit,100.29529015657803,15.803467572194137 +transit,100.29532770583913,15.79452765537671 +transit,100.29536525180634,15.785587731211944 +transit,100.29540279448194,15.77664779970356 +transit,100.29544033386819,15.767707860855294 +transit,100.2954778699673,15.758767914670852 +transit,100.29551540278153,15.749827961153965 +transit,100.29555293231316,15.740888000308354 +transit,100.2955904585644,15.731948032137758 +transit,100.2956279815375,15.723008056645888 +transit,100.29566550123474,15.714068073836485 +transit,100.29570301765833,15.705128083713264 +transit,100.2957405308105,15.696188086279957 +transit,100.29577804069353,15.687248081540293 +transit,100.29581554730964,15.67830806949801 +transit,100.29585305066108,15.669368050156828 +transit,100.2958905507501,15.66042802352049 +transit,100.29592804757891,15.651487989592715 +transit,100.29596554114978,15.642547948377242 +transit,100.29600303146493,15.633607899877804 +transit,100.29604051852661,15.624667844098143 +transit,100.29607800233705,15.61572778104198 +transit,100.29611548289849,15.606787710713057 +transit,100.29615296021316,15.597847633115112 +transit,100.2961904342833,15.588907548251884 +transit,100.29622790511115,15.57996745612711 +transit,100.29626537269893,15.571027356744525 +transit,100.29630283704888,15.562087250107867 +transit,100.29634029816324,15.553147136220877 +transit,100.29637775604424,15.544207015087304 +transit,100.2964152106941,15.535266886710884 +transit,100.29645266211504,15.52632675109536 +transit,100.29649011030932,15.51738660824447 +transit,100.29652755527916,15.508446458161966 +transit,100.29656499702678,15.499506300851582 +transit,100.2966024355544,15.490566136317074 +transit,100.29663987086427,15.481625964562182 +transit,100.2966773029586,15.472685785590649 +transit,100.29671473183961,15.463745599406233 +transit,100.29675215750954,15.454805406012671 +transit,100.29678957997062,15.445865205413721 +transit,100.29682699922505,15.436924997613124 +transit,100.29686441527505,15.427984782614642 +transit,100.29690182812287,15.419044560422003 +transit,100.29693923777072,15.410104331038985 +transit,100.29697664422082,15.401164094469324 +transit,100.29701404747537,15.392223850716775 +transit,100.29705144753662,15.3832835997851 +transit,100.29708884440677,15.374343341678044 +transit,100.29712623808804,15.365403076399367 +transit,100.29716362858267,15.356462803952828 +transit,100.29720101589284,15.347522524342171 +transit,100.29723840002077,15.338582237571163 +transit,100.2972757809687,15.329641943643564 +transit,100.29731315873885,15.32070164256313 +transit,100.29735053333339,15.311761334333612 +transit,100.29738790475457,15.302821018958783 +transit,100.29742527300459,15.293880696442397 +transit,100.29746263808566,15.284940366788215 +Wing_Division_4,100.2975,15.27600003 +transit,100.30069924279596,15.26770949073969 +transit,100.30389823445499,15.259418899695044 +transit,100.30709697513836,15.251128256898525 +transit,100.31029546500737,15.24283756238261 +transit,100.31349370422318,15.234546816179758 +transit,100.31669169294699,15.226256018322408 +transit,100.31988943133992,15.217965168843028 +transit,100.32308691956304,15.209674267774032 +transit,100.32628415777738,15.20138331514786 +transit,100.32948114614398,15.193092310996935 +transit,100.33267788482374,15.184801255353674 +transit,100.3358743739776,15.176510148250474 +transit,100.33907061376644,15.168218989719747 +transit,100.34226660435107,15.15992777979387 +transit,100.34546234589229,15.15163651850525 +transit,100.3486578385508,15.143345205886236 +transit,100.35185308248737,15.135053841969224 +transit,100.35504807786259,15.126762426786561 +transit,100.35824282483712,15.118470960370601 +transit,100.36143732357152,15.110179442753697 +transit,100.36463157422632,15.101887873968192 +transit,100.367825576962,15.093596254046412 +transit,100.37101933193902,15.085304583020678 +transit,100.37421283931778,15.077012860923318 +transit,100.37740609925865,15.06872108778664 +transit,100.38059911192194,15.060429263642948 +transit,100.38379187746793,15.052137388524525 +transit,100.38698439605686,15.043845462463674 +transit,100.39017666784893,15.035553485492663 +transit,100.39336869300428,15.027261457643776 +transit,100.39656047168305,15.018969378949272 +transit,100.39975200404527,15.01067724944141 +transit,100.40294329025099,15.00238506915245 +transit,100.40613433046019,14.99409283811462 +transit,100.40932512483282,14.985800556360166 +transit,100.41251567352877,14.977508223921316 +transit,100.41570597670791,14.969215840830294 +transit,100.41889603453006,14.96092340711931 +transit,100.42208584715502,14.95263092282057 +transit,100.42527541474247,14.944338387966276 +transit,100.42846473745215,14.936045802588618 +transit,100.4316538154437,14.927753166719786 +transit,100.43484264887672,14.91946048039195 +transit,100.43803123791079,14.911167743637288 +transit,100.44121958270544,14.90287495648796 +transit,100.44440768342017,14.894582118976123 +transit,100.4475955402144,14.886289231133915 +transit,100.45078315324754,14.87799629299349 +transit,100.45397052267896,14.869703304586976 +transit,100.45715764866797,14.861410265946501 +transit,100.46034453137388,14.853117177104183 +transit,100.46353117095589,14.844824038092138 +transit,100.46671756757323,14.836530848942466 +transit,100.46990372138504,14.828237609687264 +transit,100.47308963255043,14.819944320358626 +transit,100.47627530122848,14.811650980988631 +transit,100.47946072757824,14.803357591609359 +transit,100.4826459117587,14.795064152252879 +transit,100.48583085392879,14.78677066295124 +transit,100.48901555424742,14.778477123736515 +transit,100.49220001287348,14.770183534640735 +transit,100.4953842299658,14.761889895695951 +transit,100.49856820568314,14.753596206934187 +transit,100.50175194018428,14.74530246838747 +transit,100.5049354336279,14.73700868008782 +transit,100.50811868617268,14.72871484206725 +transit,100.51130169797725,14.720420954357756 +transit,100.51448446920017,14.712127016991342 +transit,100.517667,14.70383303 +transit,100.52002398109886,14.69557974768047 +transit,100.52238078523528,14.687326435559017 +transit,100.52473741252587,14.67907309365443 +transit,100.52709386308716,14.670819721985474 +transit,100.52945013703572,14.662566320570951 +transit,100.53180623448806,14.65431288942962 +transit,100.53416215556064,14.646059428580251 +transit,100.53651790036989,14.637805938041621 +transit,100.53887346903225,14.629552417832473 +transit,100.5412288616641,14.621298867971596 +transit,100.54358407838177,14.613045288477721 +transit,100.54593911930161,14.604791679369601 +transit,100.5482939845399,14.596538040666001 +transit,100.5506486742129,14.58828437238565 +transit,100.55300318843683,14.580030674547297 +transit,100.55535752732793,14.571776947169676 +transit,100.55771169100232,14.563523190271521 +transit,100.56006567957617,14.55526940387156 +transit,100.56241949316559,14.547015587988525 +transit,100.56477313188665,14.538761742641132 +transit,100.5671265958554,14.530507867848103 +transit,100.56947988518785,14.52225396362816 +transit,100.571833,14.51400003 +transit,100.57420813650732,14.505680080989574 +transit,100.57658309567651,14.497360102068562 +transit,100.57895787762642,14.489040093256166 +transit,100.58133248247591,14.480720054571576 +transit,100.58370691034378,14.47239998603399 +transit,100.58608116134877,14.464079887662594 +transit,100.58845523560967,14.45575975947656 +transit,100.59082913324517,14.447439601495084 +transit,100.59320285437393,14.439119413737332 +transit,100.59557639911462,14.430799196222486 +transit,100.59794976758587,14.422478948969708 +transit,100.60032295990625,14.414158671998159 +transit,100.60269597619431,14.405838365327005 +transit,100.60506881656859,14.397518028975405 +transit,100.60744148114759,14.389197662962516 +transit,100.60981397004974,14.380877267307483 +transit,100.61218628339351,14.372556842029446 +transit,100.61455842129728,14.364236387147564 +transit,100.61693038387942,14.355915902680964 +transit,100.61930217125828,14.34759538864878 +transit,100.62167378355217,14.339274845070147 +transit,100.62404522087937,14.3309542719642 +transit,100.6264164833581,14.322633669350049 +transit,100.62878757110661,14.314313037246832 +transit,100.63115848424307,14.30599237567365 +transit,100.63352922288564,14.297671684649622 +transit,100.63589978715244,14.289350964193856 +transit,100.63827017716157,14.281030214325462 +transit,100.64064039303109,14.272709435063536 +transit,100.64301043487905,14.264388626427179 +transit,100.64538030282341,14.25606778843549 +transit,100.64774999698218,14.24774692110755 +transit,100.6501195174733,14.239426024462457 +transit,100.65248886441466,14.231105098519285 +transit,100.65485803792416,14.222784143297124 +transit,100.65722703811964,14.21446315881504 +transit,100.65959586511892,14.206142145092118 +transit,100.66196451903978,14.197821102147415 +transit,100.664333,14.18950003 +transit,100.66664363112469,14.181428781010574 +transit,100.66895409878745,14.173357504322949 +transit,100.67126440309633,14.165286199954679 +transit,100.6735745441593,14.15721486792332 +transit,100.6758845220843,14.149143508246421 +transit,100.67819433697926,14.141072120941542 +transit,100.68050398895208,14.133000706026225 +transit,100.68281347811065,14.124929263518016 +transit,100.6851228045628,14.11685779343445 +transit,100.68743196841635,14.108786295793069 +transit,100.68974096977908,14.100714770611404 +transit,100.6920498087588,14.092643217906986 +transit,100.6943584854632,14.084571637697344 +transit,100.696667,14.07650003 +transit,100.69257331716587,14.069046258352722 +transit,100.68847989956993,14.061592412710672 +transit,100.68438674705119,14.054138493118721 +transit,100.68029385944872,14.046684499621724 +transit,100.67620123660159,14.03923043226454 +transit,100.67210887834894,14.031776291092006 +transit,100.66801678452988,14.02432207614896 +transit,100.66392495498363,14.016867787480221 +transit,100.65983338954939,14.009413425130608 +transit,100.65574208806642,14.001958989144919 +transit,100.65165105037399,13.994504479567963 +transit,100.64756027631141,13.98704989644452 +transit,100.64346976571804,13.97959523981937 +transit,100.63937951843324,13.972140509737278 +transit,100.63528953429643,13.964685706243007 +transit,100.63119981314708,13.95723082938131 +transit,100.62711035482462,13.949775879196922 +transit,100.62302115916859,13.942320855734582 +transit,100.61893222601852,13.93486575903901 +transit,100.614843555214,13.92741058915492 +transit,100.6107551465946,13.919955346127017 +Don_Mueang,100.606667,13.91250003 +transit,100.599341342713,13.908266503833755 +transit,100.59201595181146,13.90403275628471 +transit,100.58469082721518,13.899798787430663 +transit,100.57736596884396,13.895564597349402 +transit,100.57004137661762,13.891330186118715 +transit,100.56271705045594,13.887095553816376 +transit,100.55539299027873,13.882860700520158 +transit,100.54806919600576,13.878625626307828 +transit,100.54074566755678,13.87439033125714 +transit,100.53342240485159,13.870154815445852 +transit,100.52609940780994,13.865919078951713 +transit,100.51877667635156,13.861683121852458 +transit,100.51145421039624,13.857446944225824 +transit,100.5041320098637,13.853210546149542 +transit,100.49681007467366,13.848973927701334 +transit,100.48948840474586,13.844737088958915 +transit,100.482167,13.84050003 +transit,100.47628681767374,13.835061382455812 +transit,100.47040690852803,13.829622591498682 +transit,100.46452727244568,13.82418365719346 +transit,100.4586479093094,13.818744579604992 +transit,100.45276881900202,13.81330535879812 +transit,100.44689000140625,13.807865994837666 +transit,100.44101145640494,13.802426487788445 +transit,100.43513318388084,13.796986837715274 +transit,100.42925518371678,13.791547044682954 +transit,100.42337745579556,13.786107108756267 +transit,100.4175,13.78066703 +transit,100.41831485710395,13.77205175376932 +transit,100.41912965452572,13.76343646882459 +transit,100.41994439230844,13.754821175171218 +transit,100.42075907049527,13.746205872814615 +transit,100.42157368912932,13.737590561760186 +transit,100.4223882482537,13.728975242013346 +transit,100.4232027479115,13.720359913579498 +transit,100.42401718814584,13.711744576464056 +transit,100.42483156899976,13.703129230672427 +transit,100.42564589051635,13.694513876210022 +transit,100.42646015273864,13.685898513082249 +transit,100.4272743557097,13.677283141294513 +transit,100.42808849947255,13.668667760852232 +transit,100.4289025840702,13.660052371760813 +transit,100.42971660954566,13.65143697402566 +transit,100.43053057594193,13.642821567652192 +transit,100.43134448330198,13.634206152645808 +transit,100.43215833166882,13.625590729011927 +transit,100.43297212108537,13.61697529675595 +transit,100.4337858515946,13.608359855883293 +transit,100.43459952323946,13.599744406399367 +transit,100.43541313606285,13.591128948309574 +transit,100.4362266901077,13.582513481619333 +transit,100.43704018541692,13.573898006334051 +transit,100.43785362203339,13.565282522459135 +transit,100.438667,13.55666703 +transit,100.44645578706078,13.55271367800042 +transit,100.45424431666602,13.5487600820121 +transit,100.46203258888636,13.544806242116662 +transit,100.46982060379246,13.540852158395728 +transit,100.47760836145501,13.536897830930911 +transit,100.48539586194471,13.532943259803822 +transit,100.49318310533226,13.528988445096063 +transit,100.50097009168837,13.525033386889243 +transit,100.50875682108376,13.521078085264945 +transit,100.51654329358917,13.517122540304765 +transit,100.52432950927535,13.513166752090296 +transit,100.53211546821304,13.50921072070311 +transit,100.539901170473,13.505254446224786 +transit,100.54768661612604,13.5012979287369 +transit,100.55547180524292,13.497341168321014 +transit,100.56325673789445,13.4933841650587 +transit,100.57104141415144,13.489426919031505 +transit,100.5788258340847,13.485469430320986 +transit,100.58660999776507,13.481511699008696 +transit,100.59439390526337,13.477553725176172 +transit,100.60217755665047,13.473595508904957 +transit,100.60996095199724,13.469637050276585 +transit,100.61774409137453,13.465678349372583 +transit,100.62552697485323,13.461719406274481 +transit,100.63330960250424,13.457760221063795 +transit,100.64109197439845,13.453800793822044 +transit,100.64887409060678,13.449841124630735 +transit,100.65665595120016,13.44588121357138 +transit,100.66443755624954,13.441921060725473 +transit,100.67221890582583,13.437960666174517 +transit,100.68,13.43400003 +transit,100.68409653236691,13.426354643687546 +transit,100.68819280541176,13.418709186178692 +transit,100.69228881930184,13.411063657519275 +transit,100.69638457420444,13.403418057755124 +transit,100.70048007028679,13.395772386932059 +transit,100.70457530771608,13.388126645095898 +transit,100.7086702866595,13.380480832292449 +transit,100.71276500728416,13.372834948567501 +transit,100.71685946975718,13.36518899396684 +transit,100.72095367424564,13.35754296853624 +transit,100.72504762091653,13.34989687232148 +transit,100.72914130993689,13.342250705368308 +transit,100.73323474147368,13.334604467722475 +transit,100.73732791569383,13.326958159429722 +transit,100.74142083276422,13.31931178053578 +transit,100.74551349285174,13.311665331086372 +transit,100.74960589612323,13.304018811127207 +transit,100.75369804274547,13.29637222070399 +transit,100.75778993288523,13.288725559862412 +transit,100.76188156670925,13.281078828648166 +transit,100.76597294438422,13.273432027106924 +transit,100.77006406607681,13.265785155284348 +transit,100.77415493195365,13.258138213226102 +transit,100.77824554218135,13.25049120097783 +transit,100.78233589692645,13.242844118585177 +transit,100.78642599635553,13.235196966093769 +transit,100.79051584063504,13.227549743549227 +transit,100.79460542993148,13.219902450997166 +transit,100.79869476441125,13.212255088483184 +transit,100.80278384424079,13.204607656052886 +transit,100.80687266958644,13.196960153751846 +transit,100.81096124061453,13.189312581625643 +transit,100.81504955749138,13.18166493971985 +transit,100.81913762038324,13.174017228080022 +transit,100.82322542945636,13.166369446751698 +transit,100.82731298487693,13.158721595780428 +transit,100.83140028681113,13.151073675211741 +transit,100.83548733542507,13.143425685091158 +transit,100.83957413088488,13.135777625464195 +transit,100.84366067335662,13.128129496376353 +transit,100.84774696300633,13.120481297873123 +transit,100.851833,13.11283303 +transit,100.85449471198127,13.104854234186503 +transit,100.85715625248721,13.096875405965013 +transit,100.85981762163634,13.08889654535735 +transit,100.86247881954719,13.080917652385333 +transit,100.86513984633824,13.072938727070786 +transit,100.86780070212794,13.064959769435514 +transit,100.87046138703474,13.056980779501329 +transit,100.87312190117704,13.049001757290037 +transit,100.87578224467323,13.041022702823437 +transit,100.87844241764166,13.033043616123326 +transit,100.88110242020066,13.025064497211499 +transit,100.88376225246853,13.017085346109743 +transit,100.88642191456354,13.009106162839842 +transit,100.88908140660395,13.001126947423584 +transit,100.89174072870796,12.993147699882734 +transit,100.89439988099377,12.985168420239072 +transit,100.89705886357957,12.97718910851437 +transit,100.89971767658348,12.969209764730383 +transit,100.90237632012364,12.961230388908888 +transit,100.9050347943181,12.953250981071628 +transit,100.90769309928494,12.945271541240357 +transit,100.9103512351422,12.937292069436838 +transit,100.9130092020079,12.929312565682803 +transit,100.915667,12.92133303 +transit,100.92314465033589,12.917429712328273 +transit,100.93062206848363,12.913526179498232 +transit,100.93809925451029,12.909622431583552 +transit,100.94557620848295,12.905718468657884 +transit,100.95305293046867,12.901814290794897 +transit,100.96052942053456,12.89790989806824 +transit,100.96800567874767,12.894005290551569 +transit,100.97548170517514,12.890100468318519 +transit,100.98295749988408,12.886195431442736 +transit,100.99043306294158,12.882290179997861 +transit,100.99790839441478,12.878384714057525 +transit,101.00538349437082,12.87447903369535 +transit,101.01285836287684,12.870573138984971 +transit,101.020333,12.86666703 +transit,101.01963555555335,12.858174652191412 +transit,101.01893815799811,12.849682267042814 +transit,101.0182408072991,12.841189874558976 +transit,101.01754350342117,12.832697474744649 +transit,101.01684624632918,12.824205067604593 +transit,101.01614903598798,12.815712653143565 +transit,101.01545187236246,12.807220231366331 +transit,101.0147547554175,12.798727802277648 +transit,101.01405768511798,12.79023536588228 +transit,101.0133606614288,12.781742922184982 +transit,101.01266368431487,12.773250471190517 +transit,101.01196675374109,12.764758012903643 +transit,101.01126986967242,12.756265547329125 +transit,101.01057303207375,12.747773074471723 +transit,101.00987624091005,12.739280594336194 +transit,101.00917949614626,12.730788106927307 +transit,101.00848279774735,12.722295612249814 +transit,101.00778614567827,12.713803110308486 +transit,101.007089539904,12.705310601108073 +transit,101.00639298038953,12.69681808465335 +transit,101.00569646709987,12.68832556094907 +U_Tapao,101.005,12.67983303 +transit,100.99748524729382,12.68476491304953 +transit,100.98997020525702,12.689696581764105 +transit,100.98245487377469,12.694628036049753 +transit,100.97493925273196,12.69955927581249 +transit,100.96742334201394,12.704490300958334 +transit,100.95990714150577,12.70942111139328 +transit,100.95239065109256,12.714351707023324 +transit,100.94487387065945,12.719282087754447 +transit,100.93735680009158,12.724212253492627 +transit,100.92983943927409,12.729142204143825 +transit,100.92232178809209,12.734071939614005 +transit,100.91480384643079,12.739001459809106 +transit,100.90728561417528,12.74393076463507 +transit,100.89976709121075,12.74885985399783 +transit,100.89224827742235,12.7537887278033 +transit,100.88472917269523,12.758717385957395 +transit,100.87720977691457,12.763645828366014 +transit,100.86969008996553,12.768574054935053 +transit,100.86217011173328,12.773502065570394 +transit,100.854649842103,12.778429860177916 +transit,100.84712928095988,12.783357438663474 +transit,100.83960842818908,12.78828480093294 +transit,100.83208728367582,12.793211946892148 +transit,100.82456584730528,12.798138876446945 +transit,100.81704411896264,12.803065589503156 +transit,100.80952209853311,12.8079920859666 +transit,100.8019997859019,12.812918365743093 +transit,100.7944771809542,12.817844428738434 +transit,100.78695428357524,12.822770274858414 +transit,100.77943109365023,12.827695904008822 +transit,100.77190761106438,12.832621316095427 +transit,100.76438383570292,12.837546511023998 +transit,100.75685976745106,12.842471488700294 +transit,100.74933540619405,12.847396249030055 +transit,100.74181075181711,12.852320791919025 +transit,100.7342858042055,12.857245117272932 +transit,100.72676056324444,12.862169224997492 +transit,100.71923502881916,12.867093114998422 +transit,100.71170920081495,12.872016787181416 +transit,100.70418307911703,12.876940241452175 +transit,100.69665666361068,12.881863477716378 +transit,100.68912995418114,12.886786495879695 +transit,100.6816029507137,12.891709295847798 +transit,100.67407565309361,12.89663187752634 +transit,100.66654806120613,12.90155424082097 +transit,100.65902017493657,12.906476385637317 +transit,100.65149199417019,12.91139831188102 +transit,100.64396351879226,12.91632001945769 +transit,100.63643474868809,12.921241508272947 +transit,100.62890568374299,12.926162778232381 +transit,100.62137632384221,12.931083829241587 +transit,100.61384666887108,12.936004661206152 +transit,100.6063167187149,12.940925274031644 +transit,100.59878647325895,12.945845667623628 +transit,100.59125593238859,12.950765841887659 +transit,100.58372509598912,12.955685796729286 +transit,100.57619396394584,12.960605532054041 +transit,100.56866253614409,12.965525047767454 +transit,100.56113081246917,12.970444343775045 +transit,100.55359879280647,12.975363419982312 +transit,100.54606647704126,12.98028227629477 +transit,100.53853386505892,12.985200912617898 +transit,100.5310009567448,12.990119328857183 +transit,100.52346775198421,12.995037524918098 +transit,100.51593425066253,12.9999555007061 +transit,100.50840045266511,13.004873256126647 +transit,100.50086635787731,13.009790791085182 +transit,100.49333196618448,13.01470810548714 +transit,100.48579727747202,13.019625199237947 +transit,100.47826229162526,13.02454207224302 +transit,100.47072700852961,13.029458724407766 +transit,100.46319142807043,13.034375155637582 +transit,100.4556555501331,13.039291365837858 +transit,100.44811937460304,13.044207354913977 +transit,100.4405829013656,13.049123122771306 +transit,100.43304613030621,13.054038669315206 +transit,100.42550906131025,13.05895399445103 +transit,100.41797169426313,13.063869098084117 +transit,100.41043402905026,13.068783980119807 +transit,100.40289606555706,13.073698640463418 +transit,100.39535780366893,13.078613079020267 +transit,100.3878192432713,13.08352729569566 +transit,100.38028038424959,13.088441290394893 +transit,100.37274122648923,13.093355063023258 +transit,100.36520176987565,13.09826861348602 +transit,100.3576620142943,13.103181941688465 +transit,100.35012195963061,13.108095047535835 +transit,100.34258160577004,13.11300793093339 +transit,100.33504095259802,13.117920591786367 +transit,100.3275,13.12283303 +transit,100.32754165237236,13.130527555342772 +transit,100.32758330733789,13.1382220760861 +transit,100.32762496489835,13.145916592227486 +transit,100.32766662505544,13.153611103764428 +transit,100.32770828781092,13.161305610694422 +transit,100.32774995316653,13.169000113014974 +transit,100.32779162112399,13.176694610723583 +transit,100.32783329168505,13.184389103817743 +transit,100.32787496485145,13.192083592294967 +transit,100.3279166406249,13.199778076152752 +transit,100.32795831900718,13.207472555388593 +transit,100.328,13.21516703 +transit,100.32804932534562,13.22372880860958 +transit,100.3280986541334,13.232290581485813 +transit,100.32814798636589,13.24085234862526 +transit,100.32819732204565,13.24941411002448 +transit,100.32824666117523,13.25797586568004 +transit,100.32829600375716,13.26653761558849 +transit,100.328345349794,13.275099359746399 +transit,100.32839469928834,13.28366109815033 +transit,100.32844405224269,13.292222830796844 +transit,100.32849340865961,13.300784557682498 +transit,100.32854276854167,13.309346278803861 +transit,100.32859213189141,13.3179079941575 +transit,100.3286414987114,13.326469703739976 +transit,100.32869086900419,13.335031407547852 +transit,100.32874024277234,13.343593105577696 +transit,100.32878962001841,13.352154797826074 +transit,100.32883900074496,13.360716484289556 +transit,100.32888838495454,13.369278164964706 +transit,100.32893777264971,13.377839839848091 +transit,100.32898716383305,13.386401508936281 +transit,100.3290365585071,13.394963172225848 +transit,100.32908595667442,13.403524829713355 +transit,100.3291353583376,13.412086481395372 +transit,100.32918476349919,13.420648127268477 +transit,100.32923417216173,13.429209767329235 +transit,100.32928358432781,13.437771401574219 +transit,100.329333,13.44633303 +transit,100.32738963826714,13.454203588841562 +transit,100.3254461496106,13.462074127756567 +transit,100.32350253394532,13.469944646732305 +transit,100.32155879118619,13.477815145756043 +transit,100.31961492124809,13.485685624815059 +transit,100.31767092404587,13.493556083896632 +transit,100.31572679949439,13.501426522988032 +transit,100.31378254750845,13.509296942076535 +transit,100.31183816800285,13.517167341149399 +transit,100.30989366089239,13.525037720193898 +transit,100.3079490260918,13.532908079197295 +transit,100.30600426351585,13.540778418146852 +transit,100.30405937307923,13.54864873702983 +transit,100.30211435469664,13.556519035833485 +transit,100.30016920828278,13.564389314545078 +transit,100.2982239337523,13.572259573151857 +transit,100.29627853101984,13.580129811641081 +transit,100.294333,13.58800003 +transit,100.29231766177654,13.59613358602131 +transit,100.29030218603909,13.604267120441008 +transit,100.2882865726931,13.612400633244965 +transit,100.28627082164402,13.62053412441904 +transit,100.28425493279732,13.62866759394911 +transit,100.28223890605837,13.636801041821029 +transit,100.28022274133257,13.644934468020663 +transit,100.27820643852526,13.653067872533864 +transit,100.2761899975418,13.661201255346494 +transit,100.27417341828749,13.669334616444402 +transit,100.27215670066762,13.67746795581344 +transit,100.27013984458746,13.685601273439463 +transit,100.26812284995226,13.693734569308306 +transit,100.26610571666723,13.701867843405827 +transit,100.26408844463755,13.710001095717853 +transit,100.26207103376844,13.718134326230237 +transit,100.260053483965,13.72626753492881 +transit,100.25803579513239,13.734400721799405 +transit,100.2560179671757,13.742533886827859 +transit,100.254,13.75066703 +transit,100.2586740780304,13.758123399579667 +transit,100.26334845205756,13.765579676009509 +transit,100.26802312226344,13.773035859231898 +transit,100.27269808883001,13.780491949189194 +transit,100.27737335193929,13.78794794582375 +transit,100.28204891177329,13.795403849077895 +transit,100.28672476851409,13.80285965889396 +transit,100.29140092234381,13.810315375214255 +transit,100.2960773734446,13.81777099798109 +transit,100.30075412199864,13.825226527136744 +transit,100.30543116818812,13.832681962623504 +transit,100.31010851219531,13.840137304383626 +transit,100.31478615420248,13.847592552359382 +transit,100.31946409439196,13.855047706493 +transit,100.3241423329461,13.862502766726717 +transit,100.32882087004727,13.869957733002755 +transit,100.33349970587791,13.877412605263316 +transit,100.33817884062047,13.884867383450601 +transit,100.34285827445746,13.892322067506793 +transit,100.34753800757137,13.89977665737406 +transit,100.35221804014478,13.907231152994562 +transit,100.35689837236029,13.914685554310452 +transit,100.36157900440053,13.92213986126387 +transit,100.36625993644816,13.929594073796933 +transit,100.37094116868589,13.93704819185176 +transit,100.37562270129644,13.944502215370443 +transit,100.3803045344626,13.951956144295085 +transit,100.38498666836715,13.959409978567747 +transit,100.38966910319296,13.966863718130504 +transit,100.39435183912289,13.974317362925413 +transit,100.39903487633985,13.981770912894506 +transit,100.4037182150268,13.989224367979812 +transit,100.4084018553667,13.996677728123364 +transit,100.41308579754259,14.004130993267152 +transit,100.4177700417375,14.011584163353172 +transit,100.42245458813453,14.01903723832341 +transit,100.42713943691679,14.026490218119836 +transit,100.43182458826746,14.033943102684404 +transit,100.4365100423697,14.04139589195906 +transit,100.44119579940677,14.04884858588574 +transit,100.44588185956191,14.056301184406367 +transit,100.45056822301844,14.063753687462848 +transit,100.45525488995966,14.071206094997075 +transit,100.45994186056897,14.078658406950948 +transit,100.46462913502977,14.086110623266327 +transit,100.46931671352549,14.09356274388508 +transit,100.4740045962396,14.101014768749055 +transit,100.47869278335563,14.10846669780009 +transit,100.48338127505711,14.11591853098001 +transit,100.48807007152764,14.123370268230632 +transit,100.49275917295083,14.13082190949375 +transit,100.4974485795103,14.138273454711156 +transit,100.5021382913898,14.145724903824627 +transit,100.50682830877301,14.15317625677593 +transit,100.5115186318437,14.16062751350682 +transit,100.51620926078567,14.168078673959027 +transit,100.52090019578274,14.175529738074289 +transit,100.52559143701879,14.182980705794318 +transit,100.53028298467773,14.190431577060822 +transit,100.53497483894346,14.197882351815487 +transit,100.539667,14.20533303 +transit,100.54797860533483,14.204279516957863 +transit,100.55629013377941,14.203225715194685 +transit,100.56460158531932,14.202171624735378 +transit,100.57291295994017,14.201117245604847 +transit,100.58122425762754,14.20006257782802 +transit,100.58953547836708,14.199007621429818 +transit,100.5978466221444,14.197952376435179 +transit,100.60615768894513,14.196896842869032 +transit,100.61446867875489,14.195841020756331 +transit,100.62277959155935,14.19478491012202 +transit,100.63109042734415,14.193728510991058 +transit,100.63940118609494,14.192671823388402 +transit,100.6477118677974,14.19161484733902 +transit,100.65602247243719,14.190557582867896 +transit,100.664333,14.18950003 +transit,100.66664363112469,14.181428781010574 +transit,100.66895409878745,14.173357504322949 +transit,100.67126440309633,14.165286199954679 +transit,100.6735745441593,14.15721486792332 +transit,100.6758845220843,14.149143508246421 +transit,100.67819433697926,14.141072120941542 +transit,100.68050398895208,14.133000706026225 +transit,100.68281347811065,14.124929263518016 +transit,100.6851228045628,14.11685779343445 +transit,100.68743196841635,14.108786295793069 +transit,100.68974096977908,14.100714770611404 +transit,100.6920498087588,14.092643217906986 +transit,100.6943584854632,14.084571637697344 +transit,100.696667,14.07650003 +transit,100.69257331716587,14.069046258352722 +transit,100.68847989956993,14.061592412710672 +transit,100.68438674705119,14.054138493118721 +transit,100.68029385944872,14.046684499621724 +transit,100.67620123660159,14.03923043226454 +transit,100.67210887834894,14.031776291092006 +transit,100.66801678452988,14.02432207614896 +transit,100.66392495498363,14.016867787480221 +transit,100.65983338954939,14.009413425130608 +transit,100.65574208806642,14.001958989144919 +transit,100.65165105037399,13.994504479567963 +transit,100.64756027631141,13.98704989644452 +transit,100.64346976571804,13.97959523981937 +transit,100.63937951843324,13.972140509737278 +transit,100.63528953429643,13.964685706243007 +transit,100.63119981314708,13.95723082938131 +transit,100.62711035482462,13.949775879196922 +transit,100.62302115916859,13.942320855734582 +transit,100.61893222601852,13.93486575903901 +transit,100.614843555214,13.92741058915492 +transit,100.6107551465946,13.919955346127017 +Don_Mueang,100.606667,13.91250003 +transit,100.6049446025679,13.90816671035839 +transit,100.60322226924221,13.903833377023446 +transit,100.6015,13.89950003 +transit,100.59301296559651,13.901765024837376 +transit,100.5845257661695,13.904029724192878 +transit,100.5760384017093,13.906294128010886 +transit,100.56755087220628,13.908558236235775 +transit,100.55906317765078,13.910822048811921 +transit,100.55057531803321,13.913085565683714 +transit,100.54208729334393,13.915348786795532 +transit,100.53359910357337,13.91761171209177 +transit,100.52511074871194,13.919874341516824 +transit,100.51662222875008,13.922136675015082 +transit,100.50813354367824,13.924398712530953 +transit,100.4996446934869,13.926660454008832 +transit,100.49115567816652,13.928921899393133 +transit,100.48266649770757,13.931183048628265 +transit,100.47417715210061,13.933443901658633 +transit,100.4656876413361,13.935704458428669 +transit,100.45719796540463,13.937964718882776 +transit,100.4487081242967,13.940224682965392 +transit,100.4402181180029,13.942484350620933 +transit,100.4317279465138,13.944743721793836 +transit,100.42323760981999,13.947002796428533 +transit,100.41474710791208,13.94926157446946 +transit,100.40625644078068,13.951520055861057 +transit,100.3977656084164,13.953778240547772 +transit,100.38927461080993,13.956036128474047 +transit,100.38078344795191,13.958293719584336 +transit,100.37229211983302,13.960551013823093 +transit,100.36380062644393,13.962808011134772 +transit,100.35530896777537,13.965064711463835 +transit,100.34681714381804,13.967321114754752 +transit,100.33832515456265,13.969577220951981 +transit,100.329833,13.97183303 +transit,100.32881180554787,13.980590646029246 +transit,100.3277905338607,13.989348251459255 +transit,100.32676918488234,13.998105846283291 +transit,100.32574775855662,14.00686343049461 +transit,100.32472625482737,14.01562100408648 +transit,100.32370467363837,14.024378567052155 +transit,100.32268301493345,14.033136119384896 +transit,100.32166127865634,14.04189366107797 +transit,100.32063946475083,14.050651192124619 +transit,100.31961757316064,14.05940871251812 +transit,100.31859560382952,14.068166222251723 +transit,100.31757355670116,14.076923721318687 +transit,100.31655143171928,14.085681209712273 +transit,100.31552922882751,14.094438687425734 +transit,100.31450694796958,14.103196154452334 +transit,100.31348458908909,14.11195361078533 +transit,100.3124621521297,14.12071105641797 +transit,100.31143963703501,14.129468491343523 +transit,100.31041704374863,14.13822591555524 +transit,100.30939437221413,14.146983329046378 +transit,100.3083716223751,14.155740731810196 +transit,100.3073487941751,14.164498123839945 +transit,100.30632588755765,14.173255505128882 +transit,100.30530290246627,14.182012875670265 +transit,100.30427983884448,14.190770235457352 +transit,100.30325669663576,14.199527584483393 +transit,100.3022334757836,14.208284922741642 +transit,100.30121017623144,14.217042250225358 +transit,100.30018679792275,14.22579956692779 +transit,100.29916334080092,14.234556872842198 +transit,100.2981398048094,14.243314167961831 +transit,100.29711618989155,14.252071452279944 +transit,100.29609249599079,14.260828725789787 +transit,100.29506872305045,14.269585988484623 +transit,100.2940448710139,14.278343240357696 +transit,100.29302093982444,14.287100481402256 +transit,100.29199692942542,14.295857711611566 +transit,100.29097283976014,14.304614930978866 +transit,100.28994867077186,14.313372139497416 +transit,100.28892442240387,14.322129337160467 +transit,100.28790009459941,14.330886523961267 +transit,100.28687568730172,14.339643699893067 +transit,100.285851200454,14.348400864949117 +transit,100.2848266339995,14.357158019122675 +transit,100.28380198788138,14.36591516240698 +transit,100.2827772620428,14.374672294795284 +transit,100.28175245642693,14.383429416280846 +transit,100.28072757097691,14.392186526856905 +transit,100.27970260563586,14.40094362651672 +transit,100.2786775603469,14.409700715253525 +transit,100.2776524350531,14.418457793060584 +transit,100.27662722969755,14.427214859931134 +transit,100.27560194422331,14.435971915858435 +transit,100.27457657857342,14.444728960835716 +transit,100.2735511326909,14.453485994856248 +transit,100.27252560651876,14.462243017913258 +transit,100.2715,14.47100003 +transit,100.27028576553123,14.47940988010593 +transit,100.26907143958948,14.487819717938384 +transit,100.26785702211254,14.496229543489912 +transit,100.26664251303806,14.504639356753085 +transit,100.26542791230379,14.513049157720461 +transit,100.26421321984739,14.5214589463846 +transit,100.2629984356065,14.529868722738058 +transit,100.26178355951882,14.5382784867734 +transit,100.26056859152192,14.546688238483181 +transit,100.25935353155344,14.555097977859953 +transit,100.25813837955097,14.563507704896278 +transit,100.25692313545208,14.571917419584713 +transit,100.25570779919435,14.580327121917808 +transit,100.25449237071531,14.588736811888127 +transit,100.25327684995248,14.597146489488223 +transit,100.25206123684337,14.605556154710639 +transit,100.2508455313255,14.61396580754794 +transit,100.24962973333629,14.62237544799267 +transit,100.24841384281325,14.63078507603739 +transit,100.24719785969378,14.639194691674637 +transit,100.24598178391534,14.647604294896974 +transit,100.2447656154153,14.656013885696952 +transit,100.24354935413106,14.66442346406711 +transit,100.242333,14.67283303 +transit,100.24311000160544,14.681240550739027 +transit,100.24388706258217,14.689648062801169 +transit,100.24466418297027,14.698055566181523 +transit,100.24544136280976,14.706463060875166 +transit,100.2462186021407,14.714870546877188 +transit,100.2469959010032,14.72327802418268 +transit,100.24777325943734,14.731685492786731 +transit,100.24855067748321,14.740092952684423 +transit,100.24932815518093,14.74850040387085 +transit,100.25010569257061,14.756907846341091 +transit,100.25088328969241,14.765315280090242 +transit,100.25166094658644,14.773722705113395 +transit,100.25243866329289,14.782130121405624 +transit,100.25321643985191,14.790537528962025 +transit,100.25399427630369,14.798944927777688 +transit,100.25477217268839,14.8073523178477 +transit,100.25555012904624,14.815759699167144 +transit,100.25632814541746,14.82416707173111 +transit,100.25710622184225,14.832574435534687 +transit,100.25788435836085,14.840981790572968 +transit,100.25866255501352,14.849389136841044 +transit,100.2594408118405,14.857796474333993 +transit,100.26021912888207,14.866203803046906 +transit,100.26099750617851,14.874611122974876 +transit,100.2617759437701,14.883018434112985 +transit,100.26255444169716,14.89142573645633 +transit,100.263333,14.89983303 +transit,100.2605075745843,14.908345431356354 +transit,100.25768192704201,14.916857791535385 +transit,100.25485605722392,14.925370110510332 +transit,100.2520299649807,14.933882388254435 +transit,100.24920365016303,14.94239462474092 +transit,100.2463771126215,14.950906819943018 +transit,100.24355035220671,14.95941897383393 +transit,100.2407233687692,14.96793108638689 +transit,100.23789616215946,14.976443157575085 +transit,100.23506873222796,14.984955187371733 +transit,100.23224107882508,14.993467175750014 +transit,100.22941320180125,15.00197912268312 +transit,100.22658510100676,15.010491028144228 +transit,100.22375677629192,15.019002892106526 +transit,100.22092822750699,15.027514714543175 +transit,100.21809945450217,15.036026495427338 +transit,100.21527045712762,15.044538234732185 +transit,100.2124412352335,15.05304993243085 +transit,100.20961178866987,15.06156158849649 +transit,100.20678211728679,15.070073202902252 +transit,100.20395222093428,15.078584775621255 +transit,100.2011220994623,15.087096306626636 +transit,100.19829175272075,15.095607795891516 +transit,100.19546118055953,15.10411924338901 +transit,100.19263038282848,15.112630649092225 +transit,100.18979935937742,15.121142012974268 +transit,100.18696811005609,15.129653335008243 +transit,100.18413663471419,15.138164615167227 +transit,100.18130493320145,15.14667585342432 +transit,100.17847300536745,15.155187049752593 +transit,100.17564085106181,15.163698204125124 +transit,100.1728084701341,15.17220931651498 +transit,100.1699758624338,15.180720386895214 +transit,100.1671430278104,15.189231415238897 +transit,100.16430996611331,15.19774240151907 +transit,100.16147667719193,15.206253345708776 +transit,100.1586431608956,15.214764247781055 +transit,100.15580941707363,15.223275107708933 +transit,100.15297544557528,15.231785925465438 +transit,100.15014124624976,15.240296701023588 +transit,100.14730681894626,15.248807434356399 +transit,100.14447216351392,15.257318125436877 +transit,100.14163727980183,15.265828774238017 +transit,100.13880216765904,15.274339380732819 +transit,100.13596682693456,15.28284994489427 +transit,100.13313125747737,15.29136046669535 +transit,100.13029545913639,15.299870946109039 +transit,100.1274594317605,15.3083813831083 +transit,100.12462317519855,15.316891777666104 +transit,100.12178668929936,15.325402129755407 +transit,100.11894997391165,15.333912439349154 +transit,100.11611302888417,15.342422706420294 +transit,100.11327585406559,15.350932930941775 +transit,100.11043844930454,15.359443112886515 +transit,100.1076008144496,15.367953252227453 +transit,100.10476294934934,15.376463348937506 +transit,100.10192485385225,15.384973402989578 +transit,100.0990865278068,15.393483414356592 +transit,100.09624797106142,15.401993383011444 +transit,100.09340918346449,15.410503308927018 +transit,100.09057016486433,15.419013192076227 +transit,100.08773091510925,15.427523032431937 +transit,100.0848914340475,15.436032829967035 +transit,100.0820517215273,15.444542584654382 +transit,100.07921177739681,15.453052296466845 +transit,100.07637160150414,15.461561965377287 +transit,100.07353119369739,15.470071591358556 +transit,100.0706905538246,15.478581174383507 +transit,100.06784968173378,15.487090714424962 +transit,100.06500857727286,15.495600211455773 +transit,100.06216724028977,15.504109665448754 +transit,100.05932567063238,15.512619076376728 +transit,100.05648386814849,15.521128444212515 +transit,100.05364183268593,15.529637768928922 +transit,100.0507995640924,15.538147050498749 +transit,100.04795706221563,15.54665628889479 +transit,100.04511432690325,15.555165484089837 +transit,100.04227135800289,15.563674636056673 +transit,100.03942815536212,15.572183744768074 +transit,100.03658471882846,15.580692810196817 +transit,100.0337410482494,15.589201832315656 +transit,100.03089714347237,15.597710811097349 +transit,100.02805300434478,15.60621974651465 +transit,100.02520863071399,15.614728638540315 +transit,100.02236402242731,15.623237487147067 +transit,100.019519179332,15.631746292307646 +transit,100.01667410127527,15.640255053994785 +transit,100.01382878810433,15.64876377218119 +transit,100.01098323966632,15.657272446839583 +transit,100.00813745580832,15.665781077942668 +transit,100.00529143637739,15.674289665463148 +transit,100.00244518122054,15.682798209373718 +transit,99.99959869018473,15.691306709647064 +transit,99.99675196311688,15.699815166255869 +transit,99.99390499986389,15.708323579172806 +transit,99.99105780027257,15.71683194837055 +transit,99.98821036418973,15.725340273821754 +transit,99.9853626914621,15.733848555499081 +transit,99.98251478193642,15.74235679337518 +transit,99.97966663545931,15.750864987422695 +transit,99.97681825187742,15.75937313761426 +transit,99.97396963103729,15.767881243922508 +transit,99.9711207727855,15.77638930632006 +transit,99.96827167696848,15.78489732477954 +transit,99.96542234343272,15.793405299273555 +transit,99.96257277202459,15.80191322977471 +transit,99.95972296259045,15.810421116255604 +transit,99.95687291497663,15.818928958688828 +transit,99.95402262902938,15.827436757046963 +transit,99.95117210459492,15.835944511302595 +transit,99.94832134151945,15.844452221428298 +transit,99.94547033964908,15.852959887396633 +transit,99.94261909882992,15.861467509180162 +transit,99.93976761890802,15.869975086751435 +transit,99.93691589972937,15.878482620083002 +transit,99.93406394113994,15.886990109147405 +transit,99.93121174298564,15.895497553917169 +transit,99.92835930511232,15.904004954364835 +transit,99.92550662736586,15.912512310462906 +transit,99.922653709592,15.921019622183918 +transit,99.91980055163648,15.929526889500362 +transit,99.916947153345,15.938034112384738 +transit,99.91409351456323,15.946541290809549 +transit,99.91123963513675,15.955048424747282 +transit,99.90838551491115,15.963555514170414 +transit,99.9055311537319,15.97206255905143 +transit,99.9026765514445,15.980569559362786 +transit,99.89982170789438,15.989076515076952 +transit,99.89696662292691,15.997583426166381 +transit,99.89411129638745,16.006090292603517 +transit,99.89125572812127,16.01459711436081 +transit,99.88839991797363,16.023103891410695 +transit,99.88554386578973,16.031610623725594 +transit,99.88268757141473,16.040117311277942 +transit,99.87983103469377,16.04862395404014 +transit,99.87697425547186,16.05713055198461 +transit,99.87411723359409,16.06563710508374 +transit,99.8712599689054,16.074143613309943 +transit,99.86840246125075,16.082650076635602 +transit,99.865544710475,16.09115649503309 +transit,99.86268671642303,16.099662868474805 +transit,99.85982847893962,16.10816919693309 +transit,99.85696999786954,16.116675480380334 +transit,99.85411127305748,16.125181718788873 +transit,99.85125230434812,16.133687912131073 +transit,99.84839309158608,16.14219406037926 +transit,99.84553363461592,16.15070016350579 +transit,99.8426739332822,16.159206221482975 +transit,99.83981398742937,16.167712234283144 +transit,99.8369537969019,16.176218201878623 +transit,99.83409336154416,16.18472412424171 +transit,99.83123268120052,16.193230001344716 +transit,99.82837175571527,16.20173583315993 +transit,99.82551058493267,16.21024161965965 +transit,99.82264916869694,16.218747360816156 +transit,99.81978750685224,16.227253056601718 +transit,99.8169255992427,16.235758706988612 +transit,99.81406344571238,16.244264311949102 +transit,99.81120104610532,16.252769871455445 +transit,99.80833840026553,16.261275385479884 +transit,99.8054755080369,16.269780853994675 +transit,99.80261236926336,16.27828627697203 +transit,99.79974898378875,16.286791654384206 +transit,99.79688535145687,16.295296986203407 +transit,99.79402147211148,16.303802272401857 +transit,99.79115734559629,16.312307512951765 +transit,99.78829297175496,16.320812707825333 +transit,99.78542835043112,16.329317856994752 +transit,99.78256348146833,16.337822960432216 +transit,99.77969836471013,16.346328018109904 +transit,99.776833,16.35483303 +transit,99.77618023461284,16.36352772012392 +transit,99.77552741141027,16.372222401058075 +transit,99.77487453035477,16.380917072797786 +transit,99.77422159140875,16.389611735338356 +transit,99.77356859453462,16.398306388675113 +transit,99.77291553969484,16.407001032803365 +transit,99.77226242685175,16.41569566771843 +transit,99.77160925596779,16.42439029341563 +transit,99.7709560270053,16.433084909890265 +transit,99.77030273992665,16.441779517137665 +transit,99.7696493946942,16.45047411515314 +transit,99.76899599127029,16.459168703932004 +transit,99.76834252961723,16.467863283469587 +transit,99.76768900969735,16.476557853761186 +transit,99.76703543147296,16.485252414802133 +transit,99.76638179490634,16.493946966587743 +transit,99.76572809995977,16.50264150911333 +transit,99.76507434659551,16.511336042374218 +transit,99.76442053477584,16.520030566365715 +transit,99.76376666446298,16.528725081083156 +transit,99.76311273561917,16.537419586521843 +transit,99.76245874820663,16.5461140826771 +transit,99.76180470218756,16.554808569544257 +transit,99.76115059752416,16.563503047118626 +transit,99.76049643417862,16.572197515395523 +transit,99.7598422121131,16.58089197437027 +transit,99.75918793128977,16.589586424038195 +transit,99.75853359167077,16.598280864394617 +transit,99.75787919321822,16.606975295434843 +transit,99.75722473589427,16.615669717154212 +transit,99.75657021966101,16.624364129548038 +transit,99.75591564448055,16.633058532611642 +transit,99.75526101031497,16.64175292634035 +transit,99.75460631712635,16.65044731072948 +transit,99.75395156487673,16.659141685774355 +transit,99.75329675352819,16.667836051470307 +transit,99.75264188304276,16.67653040781264 +transit,99.75198695338244,16.685224754796693 +transit,99.75133196450928,16.693919092417794 +transit,99.75067691638525,16.702613420671252 +transit,99.75002180897236,16.7113077395524 +transit,99.74936664223257,16.72000204905656 +transit,99.74871141612785,16.72869634917906 +transit,99.74805613062016,16.73739063991522 +transit,99.74740078567142,16.746084921260373 +transit,99.74674538124357,16.754779193209835 +transit,99.74608991729853,16.763473455758938 +transit,99.74543439379819,16.772167708903005 +transit,99.74477881070446,16.780861952637366 +transit,99.7441231679792,16.789556186957345 +transit,99.74346746558427,16.798250411858273 +transit,99.74281170348154,16.806944627335472 +transit,99.74215588163284,16.815638833384273 +transit,99.7415,16.82433303 +transit,99.74429190475959,16.832429740308847 +transit,99.74708404678597,16.840526406302324 +transit,99.7498764262191,16.848623027955263 +transit,99.752669043199,16.856719605242482 +transit,99.75546189786576,16.8648161381388 +transit,99.75825499035943,16.872912626619026 +transit,99.7610483208202,16.88100907065797 +transit,99.7638418893882,16.889105470230426 +transit,99.76663569620369,16.897201825311186 +transit,99.76942974140691,16.905298135875043 +transit,99.77222402513819,16.913394401896774 +transit,99.77501854753783,16.921490623351154 +transit,99.77781330874623,16.929586800212952 +transit,99.78060830890382,16.93768293245693 +transit,99.78340354815106,16.945779020057852 +transit,99.78619902662844,16.95387506299046 +transit,99.78899474447651,16.961971061229494 +transit,99.79179070183586,16.970067014749702 +transit,99.79458689884711,16.978162923525804 +transit,99.79738333565093,16.986258787532545 +transit,99.80018001238801,16.994354606744626 +transit,99.8029769291991,17.002450381136764 +transit,99.80577408622501,17.01054611068368 +transit,99.80857148360654,17.01864179536006 +transit,99.81136912148457,17.026737435140607 +Sukhothai,99.814167,17.03483303 +transit,99.81434040327201,17.043284529361696 +transit,99.81451382213099,17.051736021555545 +transit,99.81468725658654,17.0601875065784 +transit,99.81486070664826,17.068638984427135 +transit,99.81503417232577,17.07709045509859 +transit,99.81520765362868,17.085541918589627 +transit,99.8153811505666,17.093993374897117 +transit,99.81555466314913,17.1024448240179 +transit,99.81572819138593,17.110896265948856 +transit,99.81590173528662,17.119347700686838 +transit,99.8160752948608,17.127799128228713 +transit,99.8162488701181,17.136250548571326 +transit,99.81642246106819,17.14470196171156 +transit,99.81659606772067,17.153153367646272 +transit,99.8167696900852,17.16160476637232 +transit,99.8169433281714,17.17005615788658 +transit,99.81711698198895,17.17850754218591 +transit,99.81729065154748,17.18695891926717 +transit,99.81746433685664,17.195410289127235 +transit,99.81763803792609,17.203861651762978 +transit,99.81781175476549,17.212313007171257 +transit,99.81798548738449,17.220764355348937 +transit,99.81815923579278,17.2292156962929 +transit,99.818333,17.23766703 +transit,99.8109274024524,17.242972216999036 +transit,99.80352138185381,17.248277128540224 +transit,99.79611493806348,17.253581764518536 +transit,99.78870807094071,17.258886124828933 +transit,99.78130078034481,17.26419020936634 +transit,99.77389306613506,17.26949401802568 +transit,99.76648492817073,17.274797550701866 +transit,99.75907636631113,17.280100807289784 +transit,99.75166738041557,17.285403787684306 +transit,99.74425797034333,17.290706491780302 +transit,99.7368481359537,17.296008919472605 +transit,99.72943787710594,17.301311070656055 +transit,99.72202719365941,17.306612945225467 +transit,99.71461608547338,17.31191454307563 +transit,99.70720455240713,17.31721586410134 +transit,99.69979259431997,17.32251690819735 +transit,99.69238021107121,17.327817675258427 +transit,99.68496740252013,17.333118165179304 +transit,99.67755416852603,17.3384183778547 +transit,99.67014050894824,17.343718313179327 +transit,99.66272642364599,17.34901797104788 +transit,99.65531191247867,17.354317351355018 +transit,99.64789697530551,17.359616453995418 +transit,99.64048161198585,17.36491527886372 +transit,99.63306582237897,17.370213825854556 +transit,99.6256496063442,17.37551209486254 +transit,99.61823296374082,17.380810085782265 +transit,99.61081589442814,17.386107798508327 +transit,99.60339839826548,17.391405232935284 +transit,99.59598047511213,17.396702388957692 +transit,99.5885621248274,17.401999266470092 +transit,99.58114334727061,17.407295865367 +transit,99.57372414230106,17.41259218554293 +transit,99.56630450977806,17.41788822689237 +transit,99.5588844495609,17.42318398930979 +transit,99.55146396150894,17.42847947268966 +transit,99.54404304548144,17.433774676926422 +transit,99.53662170133775,17.4390696019145 +transit,99.52919992893716,17.444364247548318 +transit,99.521777728139,17.44965861372227 +transit,99.51435509880257,17.454952700330733 +transit,99.50693204078718,17.46024650726809 +transit,99.49950855395217,17.465540034428674 +transit,99.49208463815684,17.47083328170683 +transit,99.4846602932605,17.476126248996888 +transit,99.4772355191225,17.481418936193148 +transit,99.46981031560213,17.4867113431899 +transit,99.46238468255873,17.49200346988141 +transit,99.45495861985162,17.497295316161956 +transit,99.44753212734011,17.502586881925765 +transit,99.44010520488354,17.507878167067073 +transit,99.43267785234121,17.513169171480097 +transit,99.42525006957246,17.51845989505902 +transit,99.41782185643662,17.52375033769804 +transit,99.410393212793,17.529040499291316 +transit,99.40296413850095,17.534330379733 +transit,99.39553463341977,17.53961997891723 +transit,99.38810469740883,17.54490929673812 +transit,99.38067433032744,17.55019833308977 +transit,99.37324353203492,17.555487087866283 +transit,99.36581230239061,17.560775560961726 +transit,99.35838064125383,17.566063752270153 +transit,99.35094854848396,17.571351661685608 +transit,99.34351602394028,17.576639289102125 +transit,99.33608306748218,17.5819266344137 +transit,99.32864967896894,17.58721369751434 +transit,99.32121585825995,17.592500478298025 +transit,99.31378160521452,17.597786976658714 +transit,99.30634691969199,17.603073192490353 +transit,99.29891180155172,17.60835912568688 +transit,99.29147625065305,17.613644776142216 +transit,99.2840402668553,17.618930143750262 +transit,99.27660385001784,17.624215228404896 +transit,99.269167,17.62950003 +transit,99.26635252996367,17.63792495855916 +transit,99.26353779835352,17.64634983976061 +transit,99.26072280501332,17.6547746735773 +transit,99.2579075497868,17.663199459982156 +transit,99.25509203251767,17.67162419894811 +transit,99.25227625304954,17.68004889044808 +transit,99.24946021122605,17.68847353445498 +transit,99.24664390689071,17.696898130941722 +transit,99.24382733988703,17.705322679881206 +transit,99.24101051005846,17.713747181246323 +transit,99.23819341724838,17.72217163500995 +transit,99.23537606130014,17.730596041144977 +transit,99.23255844205707,17.739020399624277 +transit,99.22974055936238,17.74744471042071 +transit,99.22692241305931,17.75586897350713 +transit,99.22410400299098,17.7642931888564 +transit,99.22128532900052,17.772717356441344 +transit,99.21846639093097,17.781141476234815 +transit,99.21564718862534,17.789565548209644 +transit,99.21282772192659,17.79798957233864 +transit,99.21000799067761,17.80641354859462 +transit,99.20718799472127,17.81483747695041 +transit,99.20436773390038,17.823261357378787 +transit,99.2015472080577,17.831685189852557 +transit,99.19872641703594,17.840108974344503 +transit,99.19590536067776,17.848532710827417 +transit,99.19308403882576,17.856956399274054 +transit,99.19026245132252,17.865380039657182 +transit,99.18744059801054,17.873803631949574 +transit,99.18461847873228,17.88222717612396 +transit,99.18179609333016,17.890650672153097 +transit,99.17897344164655,17.899074120009722 +transit,99.17615052352375,17.90749751966656 +transit,99.17332733880401,17.915920871096333 +transit,99.17050388732959,17.924344174271752 +transit,99.16768016894261,17.93276742916554 +transit,99.1648561834852,17.94119063575039 +transit,99.16203193079944,17.94961379399899 +transit,99.15920741072732,17.95803690388403 +transit,99.15638262311083,17.966459965378185 +transit,99.15355756779186,17.97488297845414 +transit,99.15073224461229,17.983305943084545 +transit,99.14790665341393,17.991728859242063 +transit,99.14508079403855,18.000151726899347 +transit,99.14225466632787,18.00857454602904 +transit,99.13942827012355,18.01699731660377 +transit,99.13660160526717,18.025420038596177 +transit,99.13377467160036,18.033842711978878 +transit,99.13094746896459,18.042265336724476 +transit,99.12811999720134,18.050687912805593 +transit,99.12529225615202,18.05911044019482 +transit,99.122464245658,18.067532918864757 +transit,99.11963596556058,18.075955348787982 +transit,99.11680741570102,18.084377729937074 +transit,99.11397859592054,18.092800062284606 +transit,99.11114950606033,18.101222345803134 +transit,99.10832014596146,18.109644580465226 +transit,99.10549051546501,18.118066766243413 +transit,99.10266061441197,18.126488903110253 +transit,99.09983044264334,18.13491099103827 +transit,99.097,18.14333303 +transit,99.10065204694395,18.15053863299162 +transit,99.10430439321041,18.157744161260723 +transit,99.10795703894814,18.164949614770485 +transit,99.11160998430594,18.172154993484096 +transit,99.11526322943266,18.179360297364724 +transit,99.11891677447714,18.186565526375535 +transit,99.12257061958833,18.19377068047968 +transit,99.12622476491516,18.200975759640304 +transit,99.12987921060665,18.20818076382054 +transit,99.13353395681177,18.215385692983517 +transit,99.13718900367964,18.22259054709235 +transit,99.14084435135933,18.22979532611015 +transit,99.1445,18.23700003 +transit,99.15146735747362,18.24206090597879 +transit,99.15843511817809,18.247121525852435 +transit,99.16540328223628,18.25218188953077 +transit,99.17237184977107,18.257241996923632 +transit,99.17934082090532,18.262301847940826 +transit,99.1863101957619,18.267361442492156 +transit,99.1932799744637,18.272420780487415 +transit,99.20025015713358,18.277479861836383 +transit,99.2072207438944,18.282538686448806 +transit,99.21419173486905,18.28759725423445 +transit,99.2211631301804,18.29265556510304 +transit,99.22813492995131,18.2977136189643 +transit,99.23510713430467,18.302771415727932 +transit,99.24207974336333,18.307828955303652 +transit,99.24905275725021,18.312886237601127 +transit,99.25602617608814,18.31794326253002 +transit,99.263,18.32300003 +transit,99.25557382490359,18.32744088559543 +transit,99.2481472707872,18.331881450058834 +transit,99.2407203375578,18.336321723300404 +transit,99.23329302512239,18.34076170523036 +transit,99.22586533338799,18.345201395758863 +transit,99.21843726226156,18.349640794796098 +transit,99.21100881165015,18.35407990225223 +transit,99.20357998146078,18.358518718037413 +transit,99.19615077160049,18.362957242061793 +transit,99.1887211819763,18.367395474235504 +transit,99.18129121249532,18.37183341446868 +transit,99.17386086306458,18.376271062671425 +transit,99.16643013359115,18.380708418753848 +transit,99.15899902398213,18.385145482626054 +transit,99.1515675341446,18.389582254198125 +transit,99.1441356639857,18.394018733380133 +transit,99.13670341341249,18.398454920082145 +transit,99.12927078233214,18.402890814214228 +transit,99.12183777065178,18.40732641568642 +transit,99.11440437827852,18.411761724408755 +transit,99.10697060511956,18.416196740291273 +transit,99.09953645108203,18.420631463243982 +transit,99.09210191607312,18.42506589317689 +transit,99.084667,18.42950003 +transit,99.07590508762327,18.42952644374126 +transit,99.06714317259124,18.429552453173475 +transit,99.05838125494486,18.429578058295917 +transit,99.04961933472507,18.429603259107854 +transit,99.04085741197284,18.42962805560859 +transit,99.0320954867291,18.429652447797427 +transit,99.02333355903484,18.42967643567368 +transit,99.01457162893098,18.429700019236673 +transit,99.00580969645848,18.429723198485757 +transit,98.99704776165832,18.429745973420264 +transit,98.98828582457143,18.429768344039562 +transit,98.97952388523878,18.42979031034303 +transit,98.97076194370132,18.429811872330045 +transit,98.962,18.42983303 +transit,98.96202131799997,18.438512668615008 +transit,98.96204263814047,18.447192299299033 +transit,98.96206396042278,18.45587192204888 +transit,98.9620852848482,18.464551536861347 +transit,98.96210661141804,18.473231143733248 +transit,98.96212794013357,18.481910742661395 +transit,98.96214927099611,18.490590333642597 +transit,98.96217060400696,18.499269916673665 +transit,98.9621919391674,18.507949491751404 +transit,98.96221327647872,18.516629058872628 +transit,98.96223461594225,18.525308618034146 +transit,98.96225595755928,18.533988169232785 +transit,98.9622773013311,18.54266771246535 +transit,98.962298647259,18.551347247728643 +transit,98.96231999534432,18.5600267750195 +transit,98.96234134558831,18.568706294334728 +transit,98.96236269799232,18.577385805671142 +transit,98.96238405255762,18.58606530902557 +transit,98.96240540928552,18.594744804394814 +transit,98.96242676817734,18.60342429177571 +transit,98.96244812923435,18.612103771165064 +transit,98.96246949245788,18.620783242559707 +transit,98.96249085784923,18.62946270595645 +transit,98.9625122254097,18.638142161352125 +transit,98.96253359514058,18.64682160874355 +transit,98.96255496704322,18.655501048127554 +transit,98.96257634111889,18.664180479500953 +transit,98.9625977173689,18.672859902860576 +transit,98.96261909579457,18.68153931820326 +transit,98.96264047639718,18.690218725525803 +transit,98.96266185917808,18.69889812482506 +transit,98.96268324413855,18.70757751609785 +transit,98.9627046312799,18.716256899340998 +transit,98.96272602060345,18.72493627455134 +transit,98.96274741211052,18.733615641725706 +transit,98.96276880580238,18.74229500086092 +transit,98.96279020168038,18.750974351953822 +transit,98.96281159974582,18.759653695001234 +Chiang_Mai,98.962833,18.76833303 +transit,98.97102345626038,18.76608001026244 +transit,98.97921369496291,18.7638266311987 +transit,98.9874037161068,18.7615728928644 +transit,98.9955935196913,18.759318795315163 +transit,99.00378310571564,18.757064338606618 +transit,99.01197247417912,18.75480952279439 +transit,99.02016162508102,18.75255434793413 +transit,99.02835055842063,18.750298814081457 +transit,99.03653927419731,18.74804292129203 +transit,99.04472777241037,18.745786669621488 +transit,99.05291605305919,18.743530059125487 +transit,99.06110411614316,18.74127308985968 +transit,99.06929196166166,18.739015761879713 +transit,99.07747958961414,18.73675807524127 +transit,99.085667,18.73450003 +transit,99.0856442495099,18.726204652347565 +transit,99.08562150123944,18.717909267353512 +transit,99.08559875518738,18.70961387502061 +transit,99.0855760113524,18.701318475351638 +transit,99.08555326973327,18.693023068349355 +transit,99.08553053032868,18.684727654016523 +transit,99.0855077931374,18.676432232355932 +transit,99.08548505815813,18.66813680337033 +transit,99.08546232538961,18.65984136706251 +transit,99.08543959483058,18.651545923435226 +transit,99.08541686647975,18.64325047249126 +transit,99.08539414033586,18.63495501423338 +transit,99.08537141639765,18.626659548664367 +transit,99.08534869466384,18.618364075786985 +transit,99.08532597513317,18.61006859560402 +transit,99.08530325780438,18.60177310811824 +transit,99.08528054267619,18.593477613332425 +transit,99.08525782974733,18.58518211124935 +transit,99.08523511901656,18.57688660187179 +transit,99.08521241048258,18.568591085202527 +transit,99.08518970414416,18.560295561244335 +transit,99.085167,18.55200003 +transit,99.09421416772395,18.550220010116274 +transit,99.10326114792517,18.548439556428413 +transit,99.11230794058116,18.546658668989824 +transit,99.12135454566953,18.544877347853905 +transit,99.13040096316784,18.543095593074085 +transit,99.13944719305371,18.541313404703782 +transit,99.14849323530477,18.539530782796437 +transit,99.15753908989865,18.537747727405492 +transit,99.16658475681304,18.535964238584413 +transit,99.17563023602561,18.53418031638665 +transit,99.18467552751409,18.53239596086568 +transit,99.19372063125621,18.530611172074995 +transit,99.20276554722972,18.52882595006808 +transit,99.21181027541238,18.527040294898434 +transit,99.220854815782,18.525254206619564 +transit,99.2298991683164,18.523467685284995 +transit,99.2389433329934,18.521680730948255 +transit,99.24798730979086,18.519893343662883 +transit,99.25703109868668,18.51810552348242 +transit,99.26607469965876,18.51631727046042 +transit,99.27511811268498,18.514528584650456 +transit,99.28416133774331,18.512739466106098 +transit,99.29320437481171,18.51094991488093 +transit,99.30224722386818,18.50915993102853 +transit,99.31128988489068,18.507369514602523 +transit,99.32033235785728,18.505578665656515 +transit,99.329374642746,18.503787384244102 +transit,99.33841673953492,18.501995670418943 +transit,99.34745864820212,18.50020352423465 +transit,99.3565003687257,18.498410945744894 +transit,99.36554190108382,18.49661793500331 +transit,99.3745832452546,18.494824492063575 +transit,99.38362440121622,18.49303061697936 +transit,99.39266536894688,18.49123630980435 +transit,99.4017061484248,18.48944157059223 +transit,99.41074673962817,18.48764639939671 +transit,99.4197871425353,18.485850796271492 +transit,99.42882735712443,18.484054761270304 +transit,99.43786738337388,18.482258294446865 +transit,99.44690722126195,18.480461395854924 +transit,99.455946870767,18.47866406554822 +transit,99.46498633186737,18.47686630358051 +transit,99.47402560454144,18.47506811000555 +transit,99.48306468876761,18.473269484877136 +transit,99.49210358452433,18.471470428249035 +transit,99.50114229179,18.469670940175035 +transit,99.51018081054313,18.467871020708944 +transit,99.51921914076216,18.46607066990457 +transit,99.52825728242564,18.464269887815735 +transit,99.53729523551208,18.462468674496268 +transit,99.546333,18.46066703 +transit,99.5545038256019,18.456384153671483 +transit,99.56267424596551,18.45210092339058 +transit,99.57084426117846,18.44781733926222 +transit,99.5790138713284,18.44353340139133 +transit,99.58718307650297,18.439249109882837 +transit,99.59535187678985,18.434964464841645 +transit,99.60352027227671,18.43067946637266 +transit,99.6116882630513,18.426394114580752 +transit,99.61985584920133,18.42210840957083 +transit,99.62802303081453,18.417822351447754 +transit,99.6361898079787,18.413535940316383 +transit,99.64435618078161,18.40924917628158 +transit,99.65252214931105,18.404962059448184 +transit,99.66068771365487,18.40067458992104 +transit,99.66885287390089,18.396386767804955 +transit,99.67701763013697,18.392098593204768 +transit,99.68518198245101,18.38781006622528 +transit,99.69334593093089,18.383521186971286 +transit,99.70150947566452,18.37923195554758 +transit,99.70967261673987,18.374942372058943 +transit,99.71783535424484,18.370652436610147 +transit,99.72599768826744,18.36636214930595 +transit,99.73415961889565,18.36207151025111 +transit,99.74232114621746,18.35778051955037 +transit,99.75048227032093,18.35348917730846 +transit,99.7586429912941,18.349197483630114 +transit,99.76680330922501,18.344905438620046 +transit,99.77496322420176,18.340613042382955 +transit,99.78312273631245,18.33632029502355 +transit,99.7912818456452,18.332027196646514 +transit,99.79944055228815,18.327733747356532 +transit,99.80759885632943,18.323439947258276 +transit,99.81575675785727,18.319145796456397 +transit,99.82391425695982,18.314851295055554 +transit,99.8320713537253,18.31055644316039 +transit,99.84022804824195,18.306261240875536 +transit,99.84838434059802,18.301965688305614 +transit,99.85654023088175,18.297669785555254 +transit,99.86469571918146,18.293373532729046 +transit,99.87285080558543,18.289076929931596 +transit,99.88100549018199,18.284779977267487 +transit,99.88915977305948,18.280482674841306 +transit,99.89731365430626,18.276185022757613 +transit,99.9054671340107,18.27188702112097 +transit,99.91362021226121,18.26758867003593 +transit,99.9217728891462,18.26328996960704 +transit,99.92992516475408,18.258990919938825 +transit,99.93807703917332,18.254691521135815 +transit,99.9462285124924,18.250391773302514 +transit,99.95437958479977,18.246091676543447 +transit,99.96253025618395,18.241791230963084 +transit,99.97068052673347,18.237490436665933 +transit,99.97883039653689,18.233189293756464 +transit,99.98697986568273,18.228887802339145 +transit,99.99512893425958,18.224585962518432 +transit,100.00327760235605,18.220283774398776 +transit,100.01142587006075,18.215981238084627 +transit,100.01957373746228,18.2116783536804 +transit,100.02772120464932,18.207375121290543 +transit,100.03586827171054,18.203071541019444 +transit,100.04401493873462,18.19876761297152 +transit,100.05216120581025,18.194463337251165 +transit,100.06030707302617,18.19015871396276 +transit,100.06845254047111,18.185853743210686 +transit,100.07659760823384,18.181548425099304 +transit,100.0847422764031,18.177242759732987 +transit,100.09288654506774,18.172936747216067 +transit,100.10103041431653,18.16863038765289 +transit,100.1091738842383,18.16432368114779 +transit,100.11731695492192,18.16001662780508 +transit,100.12545962645625,18.155709227729087 +transit,100.13360189893015,18.1514014810241 +transit,100.14174377243256,18.147093387794417 +transit,100.14988524705237,18.142784948144328 +transit,100.15802632287853,18.138476162178097 +Phrae,100.166167,18.13416703 +transit,100.16699050577331,18.12526380141945 +transit,100.16781392828184,18.1163605610984 +transit,100.16863726757772,18.107457309042537 +transit,100.16946052371303,18.098554045257508 +transit,100.17028369673984,18.089650769749 +transit,100.17110678671024,18.08074748252267 +transit,100.17192979367624,18.071844183584194 +transit,100.17275271768987,18.062940872939237 +transit,100.17357555880314,18.05403755059347 +transit,100.17439831706803,18.04513421655257 +transit,100.1752209925365,18.036230870822198 +transit,100.17604358526052,18.02732751340802 +transit,100.17686609529198,18.018424144315723 +transit,100.17768852268283,18.009520763550956 +transit,100.17851086748496,18.00061737111941 +transit,100.17933312975022,17.991713967026733 +transit,100.18015530953049,17.982810551278607 +transit,100.18097740687762,17.973907123880704 +transit,100.1817994218434,17.965003684838692 +transit,100.18262135447964,17.95610023415824 +transit,100.18344320483813,17.94719677184501 +transit,100.18426497297064,17.938293297904693 +transit,100.18508665892891,17.929389812342936 +transit,100.18590826276468,17.920486315165423 +transit,100.18672978452966,17.911582806377822 +transit,100.18755122427554,17.9026792859858 +transit,100.18837258205399,17.893775753995037 +transit,100.18919385791668,17.88487221041119 +transit,100.19001505191525,17.87596865523994 +transit,100.19083616410131,17.867065088486957 +transit,100.19165719452647,17.858161510157903 +transit,100.19247814324231,17.849257920258456 +transit,100.19329901030042,17.840354318794283 +transit,100.19411979575233,17.831450705771058 +transit,100.19494049964956,17.822547081194454 +transit,100.19576112204365,17.81364344507013 +transit,100.19658166298608,17.804739797403776 +transit,100.19740212252833,17.79583613820105 +transit,100.19822250072187,17.786932467467622 +transit,100.19904279761813,17.778028785209173 +transit,100.19986301326854,17.769125091431366 +transit,100.20068314772452,17.76022138613987 +transit,100.20150320103743,17.75131766934037 +transit,100.20232317325865,17.74241394103852 +transit,100.20314306443954,17.73351020124001 +transit,100.20396287463144,17.72460644995049 +transit,100.20478260388566,17.715702687175646 +transit,100.2056022522535,17.706798912921148 +transit,100.20642181978623,17.69789512719267 +transit,100.20724130653514,17.688991329995876 +transit,100.20806071255146,17.68008752133644 +transit,100.20888003788642,17.671183701220038 +transit,100.20969928259122,17.662279869652338 +transit,100.21051844671707,17.653376026639016 +transit,100.21133753031515,17.64447217218574 +transit,100.2121565334366,17.635568306298183 +transit,100.21297545613257,17.626664428982014 +transit,100.21379429845418,17.617760540242912 +transit,100.21461306045254,17.608856640086547 +transit,100.21543174217872,17.59995272851859 +transit,100.21625034368381,17.59104880554471 +transit,100.21706886501885,17.582144871170584 +transit,100.21788730623487,17.57324092540189 +transit,100.2187056673829,17.56433696824429 +transit,100.21952394851395,17.555432999703466 +transit,100.22034214967898,17.546529019785076 +transit,100.22116027092896,17.537625028494805 +transit,100.22197831231483,17.528721025838326 +transit,100.22279627388754,17.519817011821306 +transit,100.22361415569797,17.510912986449423 +transit,100.22443195779705,17.502008949728346 +transit,100.22524968023563,17.49310490166375 +transit,100.22606732306458,17.484200842261306 +transit,100.22688488633474,17.475296771526693 +transit,100.22770237009695,17.46639268946558 +transit,100.22851977440199,17.45748859608363 +transit,100.22933709930066,17.448584491386537 +transit,100.23015434484375,17.439680375379965 +transit,100.23097151108199,17.430776248069588 +transit,100.23178859806613,17.421872109461066 +transit,100.23260560584689,17.4129679595601 +transit,100.23342253447497,17.40406379837234 +transit,100.23423938400106,17.395159625903467 +transit,100.23505615447581,17.386255442159158 +transit,100.23587284594991,17.37735124714509 +transit,100.23668945847396,17.368447040866933 +transit,100.23750599209859,17.359542823330347 +transit,100.23832244687439,17.35063859454103 +transit,100.23913882285196,17.341734354504638 +transit,100.23995512008185,17.332830103226854 +transit,100.2407713386146,17.323925840713354 +transit,100.24158747850078,17.315021566969808 +transit,100.24240353979084,17.30611728200189 +transit,100.24321952253534,17.29721298581528 +transit,100.24403542678472,17.28830867841564 +transit,100.24485125258946,17.27940435980865 +transit,100.245667,17.27050003 +transit,100.24647026068472,17.261725471711873 +transit,100.24727344539025,17.25295090256133 +transit,100.24807655416477,17.244176322553795 +transit,100.24887958705645,17.2354017316947 +transit,100.24968254411345,17.22662712998947 +transit,100.25048542538393,17.217852517443536 +transit,100.25128823091599,17.209077894062318 +transit,100.25209096075777,17.200303259851253 +transit,100.25289361495734,17.191528614815773 +transit,100.25369619356279,17.182753958961296 +transit,100.25449869662219,17.173979292293247 +transit,100.25530112418357,17.165204614817068 +transit,100.25610347629498,17.156429926538177 +transit,100.25690575300443,17.14765522746201 +transit,100.2577079543599,17.13888051759399 +transit,100.2585100804094,17.13010579693954 +transit,100.25931213120087,17.12133106550411 +transit,100.2601141067823,17.1125563232931 +transit,100.26091600720159,17.10378157031196 +transit,100.26171783250666,17.0950068065661 +transit,100.26251958274544,17.086232032060977 +transit,100.26332125796579,17.07745724680199 +transit,100.2641228582156,17.06868245079459 +transit,100.26492438354272,17.059907644044195 +transit,100.265725833995,17.05113282655624 +transit,100.26652720962025,17.042357998336144 +transit,100.26732851046629,17.03358315938934 +transit,100.26812973658089,17.024808309721273 +transit,100.26893088801187,17.016033449337357 +transit,100.26973196480694,17.00725857824302 +transit,100.27053296701388,16.9984836964437 +transit,100.27133389468041,16.989708803944822 +transit,100.27213474785425,16.98093390075181 +transit,100.2729355265831,16.972158986870113 +transit,100.27373623091462,16.963384062305142 +transit,100.27453686089652,16.95460912706233 +transit,100.2753374165764,16.94583418114712 +transit,100.27613789800193,16.937059224564926 +transit,100.27693830522072,16.928284257321177 +transit,100.27773863828037,16.91950927942132 +transit,100.27853889722849,16.910734290870778 +transit,100.27933908211261,16.90195929167497 +transit,100.28013919298034,16.893184281839343 +transit,100.28093922987918,16.884409261369314 +transit,100.28173919285669,16.87563423027033 +transit,100.28253908196035,16.866859188547803 +transit,100.28333889723767,16.85808413620717 +transit,100.28413863873612,16.84930907325387 +transit,100.2849383065032,16.840533999693328 +transit,100.28573790058631,16.831758915530973 +transit,100.2865374210329,16.82298382077224 +transit,100.28733686789042,16.814208715422556 +transit,100.28813624120622,16.805433599487355 +transit,100.28893554102771,16.796658472972066 +transit,100.28973476740228,16.787883335882125 +transit,100.29053392037726,16.779108188222956 +Phitsanulok,100.291333,16.77033303 +transit,100.29136817727955,16.761526221146873 +transit,100.29140335132223,16.752719404776496 +transit,100.29143852213012,16.743912580892363 +transit,100.29147368970533,16.735105749497954 +transit,100.29150885404994,16.726298910596743 +transit,100.29154401516607,16.71749206419222 +transit,100.2915791730558,16.70868521028787 +transit,100.29161432772122,16.699878348887182 +transit,100.29164947916443,16.691071479993624 +transit,100.29168462738754,16.682264603610708 +transit,100.29171977239261,16.673457719741904 +transit,100.29175491418177,16.6646508283907 +transit,100.29179005275708,16.655843929560593 +transit,100.29182518812065,16.64703702325506 +transit,100.29186032027457,16.638230109477604 +transit,100.29189544922092,16.6294231882317 +transit,100.29193057496178,16.620616259520865 +transit,100.29196569749925,16.61180932334857 +transit,100.29200081683543,16.603002379718312 +transit,100.29203593297238,16.594195428633583 +transit,100.29207104591221,16.58538847009788 +transit,100.292106155657,16.5765815041147 +transit,100.29214126220882,16.567774530687533 +transit,100.29217636556977,16.55896754981988 +transit,100.29221146574193,16.550160561515234 +transit,100.29224656272737,16.541353565777104 +transit,100.29228165652819,16.532546562608974 +transit,100.29231674714646,16.52373955201435 +transit,100.29235183458427,16.51493253399673 +transit,100.29238691884368,16.506125508559624 +transit,100.29242199992679,16.49731847570652 +transit,100.29245707783568,16.488511435440927 +transit,100.29249215257241,16.479704387766347 +transit,100.29252722413908,16.470897332686278 +transit,100.29256229253774,16.462090270204232 +transit,100.29259735777049,16.45328320032371 +transit,100.29263241983939,16.444476123048226 +transit,100.29266747874652,16.435669038381274 +transit,100.29270253449396,16.426861946326365 +transit,100.29273758708376,16.418054846887017 +transit,100.29277263651802,16.40924774006672 +transit,100.29280768279881,16.400440625869 +transit,100.29284272592818,16.391633504297353 +transit,100.29287776590822,16.3828263753553 +transit,100.292912802741,16.374019239046344 +transit,100.29294783642857,16.365212095374012 +transit,100.29298286697302,16.3564049443418 +transit,100.2930178943764,16.34759778595323 +transit,100.2930529186408,16.338790620211814 +transit,100.29308793976826,16.329983447121073 +transit,100.29312295776086,16.32117626668451 +transit,100.29315797262066,16.312369078905654 +transit,100.29319298434974,16.30356188378801 +transit,100.29322799295015,16.294754681335107 +transit,100.29326299842396,16.285947471550458 +transit,100.29329800077322,16.277140254437583 +transit,100.293333,16.26833303 +transit,100.29337072366047,16.25939350035479 +transit,100.29340844390907,16.250453963169708 +transit,100.2934461607481,16.241514418448443 +transit,100.29348387417984,16.232574866194685 +transit,100.29352158420659,16.223635306412106 +transit,100.29355929083063,16.2146957391044 +transit,100.29359699405423,16.205756164275254 +transit,100.2936346938797,16.196816581928353 +transit,100.2936723903093,16.187876992067388 +transit,100.29371008334532,16.178937394696046 +transit,100.29374777299003,16.169997789818012 +transit,100.29378545924574,16.161058177436978 +transit,100.29382314211472,16.152118557556648 +transit,100.29386082159924,16.143178930180696 +transit,100.29389849770158,16.134239295312824 +transit,100.29393617042402,16.125299652956723 +transit,100.29397383976884,16.116360003116085 +transit,100.29401150573831,16.107420345794612 +transit,100.29404916833472,16.09848068099599 +transit,100.29408682756033,16.089541008723923 +transit,100.29412448341743,16.0806013289821 +transit,100.29416213590828,16.071661641774227 +transit,100.29419978503516,16.062721947103995 +transit,100.29423743080034,16.05378224497511 +transit,100.2942750732061,16.044842535391272 +transit,100.2943127122547,16.035902818356174 +transit,100.2943503479484,16.026963093873523 +transit,100.29438798028949,16.01802336194703 +transit,100.29442560928022,16.009083622580377 +transit,100.29446323492289,16.000143875777283 +transit,100.29450085721973,15.991204121541449 +transit,100.29453847617303,15.98226435987658 +transit,100.29457609178505,15.973324590786381 +transit,100.29461370405804,15.964384814274554 +transit,100.29465131299429,15.955445030344817 +transit,100.29468891859605,15.94650523900087 +transit,100.29472652086558,15.937565440246429 +transit,100.29476411980515,15.928625634085197 +transit,100.29480171541702,15.91968582052088 +transit,100.29483930770344,15.910745999557196 +transit,100.2948768966667,15.90180617119786 +transit,100.29491448230901,15.892866335446582 +transit,100.29495206463267,15.88392649230707 +transit,100.29498964363992,15.874986641783046 +transit,100.29502721933302,15.866046783878213 +transit,100.29506479171424,15.857106918596296 +transit,100.2951023607858,15.848167045941008 +transit,100.29513992655001,15.839227165916071 +transit,100.29517748900908,15.83028727852519 +transit,100.29521504816526,15.821347383772098 +transit,100.29525260402083,15.812407481660507 +transit,100.29529015657803,15.803467572194137 +transit,100.29532770583913,15.79452765537671 +transit,100.29536525180634,15.785587731211944 +transit,100.29540279448194,15.77664779970356 +transit,100.29544033386819,15.767707860855294 +transit,100.2954778699673,15.758767914670852 +transit,100.29551540278153,15.749827961153965 +transit,100.29555293231316,15.740888000308354 +transit,100.2955904585644,15.731948032137758 +transit,100.2956279815375,15.723008056645888 +transit,100.29566550123474,15.714068073836485 +transit,100.29570301765833,15.705128083713264 +transit,100.2957405308105,15.696188086279957 +transit,100.29577804069353,15.687248081540293 +transit,100.29581554730964,15.67830806949801 +transit,100.29585305066108,15.669368050156828 +transit,100.2958905507501,15.66042802352049 +transit,100.29592804757891,15.651487989592715 +transit,100.29596554114978,15.642547948377242 +transit,100.29600303146493,15.633607899877804 +transit,100.29604051852661,15.624667844098143 +transit,100.29607800233705,15.61572778104198 +transit,100.29611548289849,15.606787710713057 +transit,100.29615296021316,15.597847633115112 +transit,100.2961904342833,15.588907548251884 +transit,100.29622790511115,15.57996745612711 +transit,100.29626537269893,15.571027356744525 +transit,100.29630283704888,15.562087250107867 +transit,100.29634029816324,15.553147136220877 +transit,100.29637775604424,15.544207015087304 +transit,100.2964152106941,15.535266886710884 +transit,100.29645266211504,15.52632675109536 +transit,100.29649011030932,15.51738660824447 +transit,100.29652755527916,15.508446458161966 +transit,100.29656499702678,15.499506300851582 +transit,100.2966024355544,15.490566136317074 +transit,100.29663987086427,15.481625964562182 +transit,100.2966773029586,15.472685785590649 +transit,100.29671473183961,15.463745599406233 +transit,100.29675215750954,15.454805406012671 +transit,100.29678957997062,15.445865205413721 +transit,100.29682699922505,15.436924997613124 +transit,100.29686441527505,15.427984782614642 +transit,100.29690182812287,15.419044560422003 +transit,100.29693923777072,15.410104331038985 +transit,100.29697664422082,15.401164094469324 +transit,100.29701404747537,15.392223850716775 +transit,100.29705144753662,15.3832835997851 +transit,100.29708884440677,15.374343341678044 +transit,100.29712623808804,15.365403076399367 +transit,100.29716362858267,15.356462803952828 +transit,100.29720101589284,15.347522524342171 +transit,100.29723840002077,15.338582237571163 +transit,100.2972757809687,15.329641943643564 +transit,100.29731315873885,15.32070164256313 +transit,100.29735053333339,15.311761334333612 +transit,100.29738790475457,15.302821018958783 +transit,100.29742527300459,15.293880696442397 +transit,100.29746263808566,15.284940366788215 +Wing Division 4,100.2975,15.27600003 +transit,100.30069924279596,15.26770949073969 +transit,100.30389823445499,15.259418899695044 +transit,100.30709697513836,15.251128256898525 +transit,100.31029546500737,15.24283756238261 +transit,100.31349370422318,15.234546816179758 +transit,100.31669169294699,15.226256018322408 +transit,100.31988943133992,15.217965168843028 +transit,100.32308691956304,15.209674267774032 +transit,100.32628415777738,15.20138331514786 +transit,100.32948114614398,15.193092310996935 +transit,100.33267788482374,15.184801255353674 +transit,100.3358743739776,15.176510148250474 +transit,100.33907061376644,15.168218989719747 +transit,100.34226660435107,15.15992777979387 +transit,100.34546234589229,15.15163651850525 +transit,100.3486578385508,15.143345205886236 +transit,100.35185308248737,15.135053841969224 +transit,100.35504807786259,15.126762426786561 +transit,100.35824282483712,15.118470960370601 +transit,100.36143732357152,15.110179442753697 +transit,100.36463157422632,15.101887873968192 +transit,100.367825576962,15.093596254046412 +transit,100.37101933193902,15.085304583020678 +transit,100.37421283931778,15.077012860923318 +transit,100.37740609925865,15.06872108778664 +transit,100.38059911192194,15.060429263642948 +transit,100.38379187746793,15.052137388524525 +transit,100.38698439605686,15.043845462463674 +transit,100.39017666784893,15.035553485492663 +transit,100.39336869300428,15.027261457643776 +transit,100.39656047168305,15.018969378949272 +transit,100.39975200404527,15.01067724944141 +transit,100.40294329025099,15.00238506915245 +transit,100.40613433046019,14.99409283811462 +transit,100.40932512483282,14.985800556360166 +transit,100.41251567352877,14.977508223921316 +transit,100.41570597670791,14.969215840830294 +transit,100.41889603453006,14.96092340711931 +transit,100.42208584715502,14.95263092282057 +transit,100.42527541474247,14.944338387966276 +transit,100.42846473745215,14.936045802588618 +transit,100.4316538154437,14.927753166719786 +transit,100.43484264887672,14.91946048039195 +transit,100.43803123791079,14.911167743637288 +transit,100.44121958270544,14.90287495648796 +transit,100.44440768342017,14.894582118976123 +transit,100.4475955402144,14.886289231133915 +transit,100.45078315324754,14.87799629299349 +transit,100.45397052267896,14.869703304586976 +transit,100.45715764866797,14.861410265946501 +transit,100.46034453137388,14.853117177104183 +transit,100.46353117095589,14.844824038092138 +transit,100.46671756757323,14.836530848942466 +transit,100.46990372138504,14.828237609687264 +transit,100.47308963255043,14.819944320358626 +transit,100.47627530122848,14.811650980988631 +transit,100.47946072757824,14.803357591609359 +transit,100.4826459117587,14.795064152252879 +transit,100.48583085392879,14.78677066295124 +transit,100.48901555424742,14.778477123736515 +transit,100.49220001287348,14.770183534640735 +transit,100.4953842299658,14.761889895695951 +transit,100.49856820568314,14.753596206934187 +transit,100.50175194018428,14.74530246838747 +transit,100.5049354336279,14.73700868008782 +transit,100.50811868617268,14.72871484206725 +transit,100.51130169797725,14.720420954357756 +transit,100.51448446920017,14.712127016991342 +transit,100.517667,14.70383303 +transit,100.52002398109886,14.69557974768047 +transit,100.52238078523528,14.687326435559017 +transit,100.52473741252587,14.67907309365443 +transit,100.52709386308716,14.670819721985474 +transit,100.52945013703572,14.662566320570951 +transit,100.53180623448806,14.65431288942962 +transit,100.53416215556064,14.646059428580251 +transit,100.53651790036989,14.637805938041621 +transit,100.53887346903225,14.629552417832473 +transit,100.5412288616641,14.621298867971596 +transit,100.54358407838177,14.613045288477721 +transit,100.54593911930161,14.604791679369601 +transit,100.5482939845399,14.596538040666001 +transit,100.5506486742129,14.58828437238565 +transit,100.55300318843683,14.580030674547297 +transit,100.55535752732793,14.571776947169676 +transit,100.55771169100232,14.563523190271521 +transit,100.56006567957617,14.55526940387156 +transit,100.56241949316559,14.547015587988525 +transit,100.56477313188665,14.538761742641132 +transit,100.5671265958554,14.530507867848103 +transit,100.56947988518785,14.52225396362816 +transit,100.571833,14.51400003 +transit,100.57420813650732,14.505680080989574 +transit,100.57658309567651,14.497360102068562 +transit,100.57895787762642,14.489040093256166 +transit,100.58133248247591,14.480720054571576 +transit,100.58370691034378,14.47239998603399 +transit,100.58608116134877,14.464079887662594 +transit,100.58845523560967,14.45575975947656 +transit,100.59082913324517,14.447439601495084 +transit,100.59320285437393,14.439119413737332 +transit,100.59557639911462,14.430799196222486 +transit,100.59794976758587,14.422478948969708 +transit,100.60032295990625,14.414158671998159 +transit,100.60269597619431,14.405838365327005 +transit,100.60506881656859,14.397518028975405 +transit,100.60744148114759,14.389197662962516 +transit,100.60981397004974,14.380877267307483 +transit,100.61218628339351,14.372556842029446 +transit,100.61455842129728,14.364236387147564 +transit,100.61693038387942,14.355915902680964 +transit,100.61930217125828,14.34759538864878 +transit,100.62167378355217,14.339274845070147 +transit,100.62404522087937,14.3309542719642 +transit,100.6264164833581,14.322633669350049 +transit,100.62878757110661,14.314313037246832 +transit,100.63115848424307,14.30599237567365 +transit,100.63352922288564,14.297671684649622 +transit,100.63589978715244,14.289350964193856 +transit,100.63827017716157,14.281030214325462 +transit,100.64064039303109,14.272709435063536 +transit,100.64301043487905,14.264388626427179 +transit,100.64538030282341,14.25606778843549 +transit,100.64774999698218,14.24774692110755 +transit,100.6501195174733,14.239426024462457 +transit,100.65248886441466,14.231105098519285 +transit,100.65485803792416,14.222784143297124 +transit,100.65722703811964,14.21446315881504 +transit,100.65959586511892,14.206142145092118 +transit,100.66196451903978,14.197821102147415 +transit,100.664333,14.18950003 +transit,100.66664363112469,14.181428781010574 +transit,100.66895409878745,14.173357504322949 +transit,100.67126440309633,14.165286199954679 +transit,100.6735745441593,14.15721486792332 +transit,100.6758845220843,14.149143508246421 +transit,100.67819433697926,14.141072120941542 +transit,100.68050398895208,14.133000706026225 +transit,100.68281347811065,14.124929263518016 +transit,100.6851228045628,14.11685779343445 +transit,100.68743196841635,14.108786295793069 +transit,100.68974096977908,14.100714770611404 +transit,100.6920498087588,14.092643217906986 +transit,100.6943584854632,14.084571637697344 +transit,100.696667,14.07650003 +transit,100.69257331716587,14.069046258352722 +transit,100.68847989956993,14.061592412710672 +transit,100.68438674705119,14.054138493118721 +transit,100.68029385944872,14.046684499621724 +transit,100.67620123660159,14.03923043226454 +transit,100.67210887834894,14.031776291092006 +transit,100.66801678452988,14.02432207614896 +transit,100.66392495498363,14.016867787480221 +transit,100.65983338954939,14.009413425130608 +transit,100.65574208806642,14.001958989144919 +transit,100.65165105037399,13.994504479567963 +transit,100.64756027631141,13.98704989644452 +transit,100.64346976571804,13.97959523981937 +transit,100.63937951843324,13.972140509737278 +transit,100.63528953429643,13.964685706243007 +transit,100.63119981314708,13.95723082938131 +transit,100.62711035482462,13.949775879196922 +transit,100.62302115916859,13.942320855734582 +transit,100.61893222601852,13.93486575903901 +transit,100.614843555214,13.92741058915492 +transit,100.6107551465946,13.919955346127017 +Don_Mueang,100.606667,13.91250003 +transit,100.599341342713,13.908266503833755 +transit,100.59201595181146,13.90403275628471 +transit,100.58469082721518,13.899798787430663 +transit,100.57736596884396,13.895564597349402 +transit,100.57004137661762,13.891330186118715 +transit,100.56271705045594,13.887095553816376 +transit,100.55539299027873,13.882860700520158 +transit,100.54806919600576,13.878625626307828 +transit,100.54074566755678,13.87439033125714 +transit,100.53342240485159,13.870154815445852 +transit,100.52609940780994,13.865919078951713 +transit,100.51877667635156,13.861683121852458 +transit,100.51145421039624,13.857446944225824 +transit,100.5041320098637,13.853210546149542 +transit,100.49681007467366,13.848973927701334 +transit,100.48948840474586,13.844737088958915 +transit,100.482167,13.84050003 +transit,100.47628681767374,13.835061382455812 +transit,100.47040690852803,13.829622591498682 +transit,100.46452727244568,13.82418365719346 +transit,100.4586479093094,13.818744579604992 +transit,100.45276881900202,13.81330535879812 +transit,100.44689000140625,13.807865994837666 +transit,100.44101145640494,13.802426487788445 +transit,100.43513318388084,13.796986837715274 +transit,100.42925518371678,13.791547044682954 +transit,100.42337745579556,13.786107108756267 +transit,100.4175,13.78066703 +transit,100.41831485710395,13.77205175376932 +transit,100.41912965452572,13.76343646882459 +transit,100.41994439230844,13.754821175171218 +transit,100.42075907049527,13.746205872814615 +transit,100.42157368912932,13.737590561760186 +transit,100.4223882482537,13.728975242013346 +transit,100.4232027479115,13.720359913579498 +transit,100.42401718814584,13.711744576464056 +transit,100.42483156899976,13.703129230672427 +transit,100.42564589051635,13.694513876210022 +transit,100.42646015273864,13.685898513082249 +transit,100.4272743557097,13.677283141294513 +transit,100.42808849947255,13.668667760852232 +transit,100.4289025840702,13.660052371760813 +transit,100.42971660954566,13.65143697402566 +transit,100.43053057594193,13.642821567652192 +transit,100.43134448330198,13.634206152645808 +transit,100.43215833166882,13.625590729011927 +transit,100.43297212108537,13.61697529675595 +transit,100.4337858515946,13.608359855883293 +transit,100.43459952323946,13.599744406399367 +transit,100.43541313606285,13.591128948309574 +transit,100.4362266901077,13.582513481619333 +transit,100.43704018541692,13.573898006334051 +transit,100.43785362203339,13.565282522459135 +transit,100.438667,13.55666703 +transit,100.44645578706078,13.55271367800042 +transit,100.45424431666602,13.5487600820121 +transit,100.46203258888636,13.544806242116662 +transit,100.46982060379246,13.540852158395728 +transit,100.47760836145501,13.536897830930911 +transit,100.48539586194471,13.532943259803822 +transit,100.49318310533226,13.528988445096063 +transit,100.50097009168837,13.525033386889243 +transit,100.50875682108376,13.521078085264945 +transit,100.51654329358917,13.517122540304765 +transit,100.52432950927535,13.513166752090296 +transit,100.53211546821304,13.50921072070311 +transit,100.539901170473,13.505254446224786 +transit,100.54768661612604,13.5012979287369 +transit,100.55547180524292,13.497341168321014 +transit,100.56325673789445,13.4933841650587 +transit,100.57104141415144,13.489426919031505 +transit,100.5788258340847,13.485469430320986 +transit,100.58660999776507,13.481511699008696 +transit,100.59439390526337,13.477553725176172 +transit,100.60217755665047,13.473595508904957 +transit,100.60996095199724,13.469637050276585 +transit,100.61774409137453,13.465678349372583 +transit,100.62552697485323,13.461719406274481 +transit,100.63330960250424,13.457760221063795 +transit,100.64109197439845,13.453800793822044 +transit,100.64887409060678,13.449841124630735 +transit,100.65665595120016,13.44588121357138 +transit,100.66443755624954,13.441921060725473 +transit,100.67221890582583,13.437960666174517 +transit,100.68,13.43400003 +transit,100.68409653236691,13.426354643687546 +transit,100.68819280541176,13.418709186178692 +transit,100.69228881930184,13.411063657519275 +transit,100.69638457420444,13.403418057755124 +transit,100.70048007028679,13.395772386932059 +transit,100.70457530771608,13.388126645095898 +transit,100.7086702866595,13.380480832292449 +transit,100.71276500728416,13.372834948567501 +transit,100.71685946975718,13.36518899396684 +transit,100.72095367424564,13.35754296853624 +transit,100.72504762091653,13.34989687232148 +transit,100.72914130993689,13.342250705368308 +transit,100.73323474147368,13.334604467722475 +transit,100.73732791569383,13.326958159429722 +transit,100.74142083276422,13.31931178053578 +transit,100.74551349285174,13.311665331086372 +transit,100.74960589612323,13.304018811127207 +transit,100.75369804274547,13.29637222070399 +transit,100.75778993288523,13.288725559862412 +transit,100.76188156670925,13.281078828648166 +transit,100.76597294438422,13.273432027106924 +transit,100.77006406607681,13.265785155284348 +transit,100.77415493195365,13.258138213226102 +transit,100.77824554218135,13.25049120097783 +transit,100.78233589692645,13.242844118585177 +transit,100.78642599635553,13.235196966093769 +transit,100.79051584063504,13.227549743549227 +transit,100.79460542993148,13.219902450997166 +transit,100.79869476441125,13.212255088483184 +transit,100.80278384424079,13.204607656052886 +transit,100.80687266958644,13.196960153751846 +transit,100.81096124061453,13.189312581625643 +transit,100.81504955749138,13.18166493971985 +transit,100.81913762038324,13.174017228080022 +transit,100.82322542945636,13.166369446751698 +transit,100.82731298487693,13.158721595780428 +transit,100.83140028681113,13.151073675211741 +transit,100.83548733542507,13.143425685091158 +transit,100.83957413088488,13.135777625464195 +transit,100.84366067335662,13.128129496376353 +transit,100.84774696300633,13.120481297873123 +transit,100.851833,13.11283303 +transit,100.85449471198127,13.104854234186503 +transit,100.85715625248721,13.096875405965013 +transit,100.85981762163634,13.08889654535735 +transit,100.86247881954719,13.080917652385333 +transit,100.86513984633824,13.072938727070786 +transit,100.86780070212794,13.064959769435514 +transit,100.87046138703474,13.056980779501329 +transit,100.87312190117704,13.049001757290037 +transit,100.87578224467323,13.041022702823437 +transit,100.87844241764166,13.033043616123326 +transit,100.88110242020066,13.025064497211499 +transit,100.88376225246853,13.017085346109743 +transit,100.88642191456354,13.009106162839842 +transit,100.88908140660395,13.001126947423584 +transit,100.89174072870796,12.993147699882734 +transit,100.89439988099377,12.985168420239072 +transit,100.89705886357957,12.97718910851437 +transit,100.89971767658348,12.969209764730383 +transit,100.90237632012364,12.961230388908888 +transit,100.9050347943181,12.953250981071628 +transit,100.90769309928494,12.945271541240357 +transit,100.9103512351422,12.937292069436838 +transit,100.9130092020079,12.929312565682803 +transit,100.915667,12.92133303 +transit,100.92314465033589,12.917429712328273 +transit,100.93062206848363,12.913526179498232 +transit,100.93809925451029,12.909622431583552 +transit,100.94557620848295,12.905718468657884 +transit,100.95305293046867,12.901814290794897 +transit,100.96052942053456,12.89790989806824 +transit,100.96800567874767,12.894005290551569 +transit,100.97548170517514,12.890100468318519 +transit,100.98295749988408,12.886195431442736 +transit,100.99043306294158,12.882290179997861 +transit,100.99790839441478,12.878384714057525 +transit,101.00538349437082,12.87447903369535 +transit,101.01285836287684,12.870573138984971 +transit,101.020333,12.86666703 +transit,101.01963555555335,12.858174652191412 +transit,101.01893815799811,12.849682267042814 +transit,101.0182408072991,12.841189874558976 +transit,101.01754350342117,12.832697474744649 +transit,101.01684624632918,12.824205067604593 +transit,101.01614903598798,12.815712653143565 +transit,101.01545187236246,12.807220231366331 +transit,101.0147547554175,12.798727802277648 +transit,101.01405768511798,12.79023536588228 +transit,101.0133606614288,12.781742922184982 +transit,101.01266368431487,12.773250471190517 +transit,101.01196675374109,12.764758012903643 +transit,101.01126986967242,12.756265547329125 +transit,101.01057303207375,12.747773074471723 +transit,101.00987624091005,12.739280594336194 +transit,101.00917949614626,12.730788106927307 +transit,101.00848279774735,12.722295612249814 +transit,101.00778614567827,12.713803110308486 +transit,101.007089539904,12.705310601108073 +transit,101.00639298038953,12.69681808465335 +transit,101.00569646709987,12.68832556094907 +U_Tapao,101.005,12.67983303 diff --git a/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/bangkok/bangkok_waypoints.csv.geopy b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/bangkok/bangkok_waypoints.csv.geopy new file mode 100644 index 0000000..d4a320e --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/bangkok/bangkok_waypoints.csv.geopy @@ -0,0 +1,3562 @@ +city,utc_adjust +bangkok,7 +waypoint,lon,lat +U_Tapao,101.005,12.67983303 +transit,100.99748524729382,12.68476491304953 +transit,100.98997020525702,12.689696581764105 +transit,100.98245487377469,12.694628036049753 +transit,100.97493925273196,12.69955927581249 +transit,100.96742334201394,12.704490300958334 +transit,100.95990714150577,12.70942111139328 +transit,100.95239065109256,12.714351707023324 +transit,100.94487387065945,12.719282087754447 +transit,100.93735680009158,12.724212253492627 +transit,100.92983943927409,12.729142204143825 +transit,100.92232178809209,12.734071939614005 +transit,100.91480384643079,12.739001459809106 +transit,100.90728561417528,12.74393076463507 +transit,100.89976709121075,12.74885985399783 +transit,100.89224827742235,12.7537887278033 +transit,100.88472917269523,12.758717385957395 +transit,100.87720977691457,12.763645828366014 +transit,100.86969008996553,12.768574054935053 +transit,100.86217011173328,12.773502065570394 +transit,100.854649842103,12.778429860177916 +transit,100.84712928095988,12.783357438663474 +transit,100.83960842818908,12.78828480093294 +transit,100.83208728367582,12.793211946892148 +transit,100.82456584730528,12.798138876446945 +transit,100.81704411896264,12.803065589503156 +transit,100.80952209853311,12.8079920859666 +transit,100.8019997859019,12.812918365743093 +transit,100.7944771809542,12.817844428738434 +transit,100.78695428357524,12.822770274858414 +transit,100.77943109365023,12.827695904008822 +transit,100.77190761106438,12.832621316095427 +transit,100.76438383570292,12.837546511023998 +transit,100.75685976745106,12.842471488700294 +transit,100.74933540619405,12.847396249030055 +transit,100.74181075181711,12.852320791919025 +transit,100.7342858042055,12.857245117272932 +transit,100.72676056324444,12.862169224997492 +transit,100.71923502881916,12.867093114998422 +transit,100.71170920081495,12.872016787181416 +transit,100.70418307911703,12.876940241452175 +transit,100.69665666361068,12.881863477716378 +transit,100.68912995418114,12.886786495879695 +transit,100.6816029507137,12.891709295847798 +transit,100.67407565309361,12.89663187752634 +transit,100.66654806120613,12.90155424082097 +transit,100.65902017493657,12.906476385637317 +transit,100.65149199417019,12.91139831188102 +transit,100.64396351879226,12.91632001945769 +transit,100.63643474868809,12.921241508272947 +transit,100.62890568374299,12.926162778232381 +transit,100.62137632384221,12.931083829241587 +transit,100.61384666887108,12.936004661206152 +transit,100.6063167187149,12.940925274031644 +transit,100.59878647325895,12.945845667623628 +transit,100.59125593238859,12.950765841887659 +transit,100.58372509598912,12.955685796729286 +transit,100.57619396394584,12.960605532054041 +transit,100.56866253614409,12.965525047767454 +transit,100.56113081246917,12.970444343775045 +transit,100.55359879280647,12.975363419982312 +transit,100.54606647704126,12.98028227629477 +transit,100.53853386505892,12.985200912617898 +transit,100.5310009567448,12.990119328857183 +transit,100.52346775198421,12.995037524918098 +transit,100.51593425066253,12.9999555007061 +transit,100.50840045266511,13.004873256126647 +transit,100.50086635787731,13.009790791085182 +transit,100.49333196618448,13.01470810548714 +transit,100.48579727747202,13.019625199237947 +transit,100.47826229162526,13.02454207224302 +transit,100.47072700852961,13.029458724407766 +transit,100.46319142807043,13.034375155637582 +transit,100.4556555501331,13.039291365837858 +transit,100.44811937460304,13.044207354913977 +transit,100.4405829013656,13.049123122771306 +transit,100.43304613030621,13.054038669315206 +transit,100.42550906131025,13.05895399445103 +transit,100.41797169426313,13.063869098084117 +transit,100.41043402905026,13.068783980119807 +transit,100.40289606555706,13.073698640463418 +transit,100.39535780366893,13.078613079020267 +transit,100.3878192432713,13.08352729569566 +transit,100.38028038424959,13.088441290394893 +transit,100.37274122648923,13.093355063023258 +transit,100.36520176987565,13.09826861348602 +transit,100.3576620142943,13.103181941688465 +transit,100.35012195963061,13.108095047535835 +transit,100.34258160577004,13.11300793093339 +transit,100.33504095259802,13.117920591786367 +Phetchaburi,100.3275,13.12283303 +transit,100.32754165237236,13.130527555342772 +transit,100.32758330733789,13.1382220760861 +transit,100.32762496489835,13.145916592227486 +transit,100.32766662505544,13.153611103764428 +transit,100.32770828781092,13.161305610694422 +transit,100.32774995316653,13.169000113014974 +transit,100.32779162112399,13.176694610723583 +transit,100.32783329168505,13.184389103817743 +transit,100.32787496485145,13.192083592294967 +transit,100.3279166406249,13.199778076152752 +transit,100.32795831900718,13.207472555388593 +Phetchaburi,100.328,13.21516703 +transit,100.32804932534562,13.22372880860958 +transit,100.3280986541334,13.232290581485813 +transit,100.32814798636589,13.24085234862526 +transit,100.32819732204565,13.24941411002448 +transit,100.32824666117523,13.25797586568004 +transit,100.32829600375716,13.26653761558849 +transit,100.328345349794,13.275099359746399 +transit,100.32839469928834,13.28366109815033 +transit,100.32844405224269,13.292222830796844 +transit,100.32849340865961,13.300784557682498 +transit,100.32854276854167,13.309346278803861 +transit,100.32859213189141,13.3179079941575 +transit,100.3286414987114,13.326469703739976 +transit,100.32869086900419,13.335031407547852 +transit,100.32874024277234,13.343593105577696 +transit,100.32878962001841,13.352154797826074 +transit,100.32883900074496,13.360716484289556 +transit,100.32888838495454,13.369278164964706 +transit,100.32893777264971,13.377839839848091 +transit,100.32898716383305,13.386401508936281 +transit,100.3290365585071,13.394963172225848 +transit,100.32908595667442,13.403524829713355 +transit,100.3291353583376,13.412086481395372 +transit,100.32918476349919,13.420648127268477 +transit,100.32923417216173,13.429209767329235 +transit,100.32928358432781,13.437771401574219 +Samut_Sakhon,100.329333,13.44633303 +transit,100.32738963826714,13.454203588841562 +transit,100.3254461496106,13.462074127756567 +transit,100.32350253394532,13.469944646732305 +transit,100.32155879118619,13.477815145756043 +transit,100.31961492124809,13.485685624815059 +transit,100.31767092404587,13.493556083896632 +transit,100.31572679949439,13.501426522988032 +transit,100.31378254750845,13.509296942076535 +transit,100.31183816800285,13.517167341149399 +transit,100.30989366089239,13.525037720193898 +transit,100.3079490260918,13.532908079197295 +transit,100.30600426351585,13.540778418146852 +transit,100.30405937307923,13.54864873702983 +transit,100.30211435469664,13.556519035833485 +transit,100.30016920828278,13.564389314545078 +transit,100.2982239337523,13.572259573151857 +transit,100.29627853101984,13.580129811641081 +Samut_Sakhon,100.294333,13.58800003 +transit,100.29231766177654,13.59613358602131 +transit,100.29030218603909,13.604267120441008 +transit,100.2882865726931,13.612400633244965 +transit,100.28627082164402,13.62053412441904 +transit,100.28425493279732,13.62866759394911 +transit,100.28223890605837,13.636801041821029 +transit,100.28022274133257,13.644934468020663 +transit,100.27820643852526,13.653067872533864 +transit,100.2761899975418,13.661201255346494 +transit,100.27417341828749,13.669334616444402 +transit,100.27215670066762,13.67746795581344 +transit,100.27013984458746,13.685601273439463 +transit,100.26812284995226,13.693734569308306 +transit,100.26610571666723,13.701867843405827 +transit,100.26408844463755,13.710001095717853 +transit,100.26207103376844,13.718134326230237 +transit,100.260053483965,13.72626753492881 +transit,100.25803579513239,13.734400721799405 +transit,100.2560179671757,13.742533886827859 +Rai_Khing,100.254,13.75066703 +transit,100.2586740780304,13.758123399579667 +transit,100.26334845205756,13.765579676009509 +transit,100.26802312226344,13.773035859231898 +transit,100.27269808883001,13.780491949189194 +transit,100.27737335193929,13.78794794582375 +transit,100.28204891177329,13.795403849077895 +transit,100.28672476851409,13.80285965889396 +transit,100.29140092234381,13.810315375214255 +transit,100.2960773734446,13.81777099798109 +transit,100.30075412199864,13.825226527136744 +transit,100.30543116818812,13.832681962623504 +transit,100.31010851219531,13.840137304383626 +transit,100.31478615420248,13.847592552359382 +transit,100.31946409439196,13.855047706493 +transit,100.3241423329461,13.862502766726717 +transit,100.32882087004727,13.869957733002755 +transit,100.33349970587791,13.877412605263316 +transit,100.33817884062047,13.884867383450601 +transit,100.34285827445746,13.892322067506793 +transit,100.34753800757137,13.89977665737406 +transit,100.35221804014478,13.907231152994562 +transit,100.35689837236029,13.914685554310452 +transit,100.36157900440053,13.92213986126387 +transit,100.36625993644816,13.929594073796933 +transit,100.37094116868589,13.93704819185176 +transit,100.37562270129644,13.944502215370443 +transit,100.3803045344626,13.951956144295085 +transit,100.38498666836715,13.959409978567747 +transit,100.38966910319296,13.966863718130504 +transit,100.39435183912289,13.974317362925413 +transit,100.39903487633985,13.981770912894506 +transit,100.4037182150268,13.989224367979812 +transit,100.4084018553667,13.996677728123364 +transit,100.41308579754259,14.004130993267152 +transit,100.4177700417375,14.011584163353172 +transit,100.42245458813453,14.01903723832341 +transit,100.42713943691679,14.026490218119836 +transit,100.43182458826746,14.033943102684404 +transit,100.4365100423697,14.04139589195906 +transit,100.44119579940677,14.04884858588574 +transit,100.44588185956191,14.056301184406367 +transit,100.45056822301844,14.063753687462848 +transit,100.45525488995966,14.071206094997075 +transit,100.45994186056897,14.078658406950948 +transit,100.46462913502977,14.086110623266327 +transit,100.46931671352549,14.09356274388508 +transit,100.4740045962396,14.101014768749055 +transit,100.47869278335563,14.10846669780009 +transit,100.48338127505711,14.11591853098001 +transit,100.48807007152764,14.123370268230632 +transit,100.49275917295083,14.13082190949375 +transit,100.4974485795103,14.138273454711156 +transit,100.5021382913898,14.145724903824627 +transit,100.50682830877301,14.15317625677593 +transit,100.5115186318437,14.16062751350682 +transit,100.51620926078567,14.168078673959027 +transit,100.52090019578274,14.175529738074289 +transit,100.52559143701879,14.182980705794318 +transit,100.53028298467773,14.190431577060822 +transit,100.53497483894346,14.197882351815487 +Ko_Koet,100.539667,14.20533303 +transit,100.54797860533483,14.204279516957863 +transit,100.55629013377941,14.203225715194685 +transit,100.56460158531932,14.202171624735378 +transit,100.57291295994017,14.201117245604847 +transit,100.58122425762754,14.20006257782802 +transit,100.58953547836708,14.199007621429818 +transit,100.5978466221444,14.197952376435179 +transit,100.60615768894513,14.196896842869032 +transit,100.61446867875489,14.195841020756331 +transit,100.62277959155935,14.19478491012202 +transit,100.63109042734415,14.193728510991058 +transit,100.63940118609494,14.192671823388402 +transit,100.6477118677974,14.19161484733902 +transit,100.65602247243719,14.190557582867896 +Ban_Khlong_Sam,100.664333,14.18950003 +transit,100.66664363112469,14.181428781010574 +transit,100.66895409878745,14.173357504322949 +transit,100.67126440309633,14.165286199954679 +transit,100.6735745441593,14.15721486792332 +transit,100.6758845220843,14.149143508246421 +transit,100.67819433697926,14.141072120941542 +transit,100.68050398895208,14.133000706026225 +transit,100.68281347811065,14.124929263518016 +transit,100.6851228045628,14.11685779343445 +transit,100.68743196841635,14.108786295793069 +transit,100.68974096977908,14.100714770611404 +transit,100.6920498087588,14.092643217906986 +transit,100.6943584854632,14.084571637697344 +Khlong_Si,100.696667,14.07650003 +transit,100.69257331716587,14.069046258352722 +transit,100.68847989956993,14.061592412710672 +transit,100.68438674705119,14.054138493118721 +transit,100.68029385944872,14.046684499621724 +transit,100.67620123660159,14.03923043226454 +transit,100.67210887834894,14.031776291092006 +transit,100.66801678452988,14.02432207614896 +transit,100.66392495498363,14.016867787480221 +transit,100.65983338954939,14.009413425130608 +transit,100.65574208806642,14.001958989144919 +transit,100.65165105037399,13.994504479567963 +transit,100.64756027631141,13.98704989644452 +transit,100.64346976571804,13.97959523981937 +transit,100.63937951843324,13.972140509737278 +transit,100.63528953429643,13.964685706243007 +transit,100.63119981314708,13.95723082938131 +transit,100.62711035482462,13.949775879196922 +transit,100.62302115916859,13.942320855734582 +transit,100.61893222601852,13.93486575903901 +transit,100.614843555214,13.92741058915492 +transit,100.6107551465946,13.919955346127017 +Don_Mueang,100.606667,13.91250003 +transit,100.6049446025679,13.90816671035839 +transit,100.60322226924221,13.903833377023446 +Sanam_Bin,100.6015,13.89950003 +transit,100.59301296559651,13.901765024837376 +transit,100.5845257661695,13.904029724192878 +transit,100.5760384017093,13.906294128010886 +transit,100.56755087220628,13.908558236235775 +transit,100.55906317765078,13.910822048811921 +transit,100.55057531803321,13.913085565683714 +transit,100.54208729334393,13.915348786795532 +transit,100.53359910357337,13.91761171209177 +transit,100.52511074871194,13.919874341516824 +transit,100.51662222875008,13.922136675015082 +transit,100.50813354367824,13.924398712530953 +transit,100.4996446934869,13.926660454008832 +transit,100.49115567816652,13.928921899393133 +transit,100.48266649770757,13.931183048628265 +transit,100.47417715210061,13.933443901658633 +transit,100.4656876413361,13.935704458428669 +transit,100.45719796540463,13.937964718882776 +transit,100.4487081242967,13.940224682965392 +transit,100.4402181180029,13.942484350620933 +transit,100.4317279465138,13.944743721793836 +transit,100.42323760981999,13.947002796428533 +transit,100.41474710791208,13.94926157446946 +transit,100.40625644078068,13.951520055861057 +transit,100.3977656084164,13.953778240547772 +transit,100.38927461080993,13.956036128474047 +transit,100.38078344795191,13.958293719584336 +transit,100.37229211983302,13.960551013823093 +transit,100.36380062644393,13.962808011134772 +transit,100.35530896777537,13.965064711463835 +transit,100.34681714381804,13.967321114754752 +transit,100.33832515456265,13.969577220951981 +Ban_Sai_Noi,100.329833,13.97183303 +transit,100.32881180554787,13.980590646029246 +transit,100.3277905338607,13.989348251459255 +transit,100.32676918488234,13.998105846283291 +transit,100.32574775855662,14.00686343049461 +transit,100.32472625482737,14.01562100408648 +transit,100.32370467363837,14.024378567052155 +transit,100.32268301493345,14.033136119384896 +transit,100.32166127865634,14.04189366107797 +transit,100.32063946475083,14.050651192124619 +transit,100.31961757316064,14.05940871251812 +transit,100.31859560382952,14.068166222251723 +transit,100.31757355670116,14.076923721318687 +transit,100.31655143171928,14.085681209712273 +transit,100.31552922882751,14.094438687425734 +transit,100.31450694796958,14.103196154452334 +transit,100.31348458908909,14.11195361078533 +transit,100.3124621521297,14.12071105641797 +transit,100.31143963703501,14.129468491343523 +transit,100.31041704374863,14.13822591555524 +transit,100.30939437221413,14.146983329046378 +transit,100.3083716223751,14.155740731810196 +transit,100.3073487941751,14.164498123839945 +transit,100.30632588755765,14.173255505128882 +transit,100.30530290246627,14.182012875670265 +transit,100.30427983884448,14.190770235457352 +transit,100.30325669663576,14.199527584483393 +transit,100.3022334757836,14.208284922741642 +transit,100.30121017623144,14.217042250225358 +transit,100.30018679792275,14.22579956692779 +transit,100.29916334080092,14.234556872842198 +transit,100.2981398048094,14.243314167961831 +transit,100.29711618989155,14.252071452279944 +transit,100.29609249599079,14.260828725789787 +transit,100.29506872305045,14.269585988484623 +transit,100.2940448710139,14.278343240357696 +transit,100.29302093982444,14.287100481402256 +transit,100.29199692942542,14.295857711611566 +transit,100.29097283976014,14.304614930978866 +transit,100.28994867077186,14.313372139497416 +transit,100.28892442240387,14.322129337160467 +transit,100.28790009459941,14.330886523961267 +transit,100.28687568730172,14.339643699893067 +transit,100.285851200454,14.348400864949117 +transit,100.2848266339995,14.357158019122675 +transit,100.28380198788138,14.36591516240698 +transit,100.2827772620428,14.374672294795284 +transit,100.28175245642693,14.383429416280846 +transit,100.28072757097691,14.392186526856905 +transit,100.27970260563586,14.40094362651672 +transit,100.2786775603469,14.409700715253525 +transit,100.2776524350531,14.418457793060584 +transit,100.27662722969755,14.427214859931134 +transit,100.27560194422331,14.435971915858435 +transit,100.27457657857342,14.444728960835716 +transit,100.2735511326909,14.453485994856248 +transit,100.27252560651876,14.462243017913258 +Ban_Khu_Khlong,100.2715,14.47100003 +transit,100.27028576553123,14.47940988010593 +transit,100.26907143958948,14.487819717938384 +transit,100.26785702211254,14.496229543489912 +transit,100.26664251303806,14.504639356753085 +transit,100.26542791230379,14.513049157720461 +transit,100.26421321984739,14.5214589463846 +transit,100.2629984356065,14.529868722738058 +transit,100.26178355951882,14.5382784867734 +transit,100.26056859152192,14.546688238483181 +transit,100.25935353155344,14.555097977859953 +transit,100.25813837955097,14.563507704896278 +transit,100.25692313545208,14.571917419584713 +transit,100.25570779919435,14.580327121917808 +transit,100.25449237071531,14.588736811888127 +transit,100.25327684995248,14.597146489488223 +transit,100.25206123684337,14.605556154710639 +transit,100.2508455313255,14.61396580754794 +transit,100.24962973333629,14.62237544799267 +transit,100.24841384281325,14.63078507603739 +transit,100.24719785969378,14.639194691674637 +transit,100.24598178391534,14.647604294896974 +transit,100.2447656154153,14.656013885696952 +transit,100.24354935413106,14.66442346406711 +Muang_Khan,100.242333,14.67283303 +transit,100.24311000160544,14.681240550739027 +transit,100.24388706258217,14.689648062801169 +transit,100.24466418297027,14.698055566181523 +transit,100.24544136280976,14.706463060875166 +transit,100.2462186021407,14.714870546877188 +transit,100.2469959010032,14.72327802418268 +transit,100.24777325943734,14.731685492786731 +transit,100.24855067748321,14.740092952684423 +transit,100.24932815518093,14.74850040387085 +transit,100.25010569257061,14.756907846341091 +transit,100.25088328969241,14.765315280090242 +transit,100.25166094658644,14.773722705113395 +transit,100.25243866329289,14.782130121405624 +transit,100.25321643985191,14.790537528962025 +transit,100.25399427630369,14.798944927777688 +transit,100.25477217268839,14.8073523178477 +transit,100.25555012904624,14.815759699167144 +transit,100.25632814541746,14.82416707173111 +transit,100.25710622184225,14.832574435534687 +transit,100.25788435836085,14.840981790572968 +transit,100.25866255501352,14.849389136841044 +transit,100.2594408118405,14.857796474333993 +transit,100.26021912888207,14.866203803046906 +transit,100.26099750617851,14.874611122974876 +transit,100.2617759437701,14.883018434112985 +transit,100.26255444169716,14.89142573645633 +Ban_Cha,100.263333,14.89983303 +transit,100.2605075745843,14.908345431356354 +transit,100.25768192704201,14.916857791535385 +transit,100.25485605722392,14.925370110510332 +transit,100.2520299649807,14.933882388254435 +transit,100.24920365016303,14.94239462474092 +transit,100.2463771126215,14.950906819943018 +transit,100.24355035220671,14.95941897383393 +transit,100.2407233687692,14.96793108638689 +transit,100.23789616215946,14.976443157575085 +transit,100.23506873222796,14.984955187371733 +transit,100.23224107882508,14.993467175750014 +transit,100.22941320180125,15.00197912268312 +transit,100.22658510100676,15.010491028144228 +transit,100.22375677629192,15.019002892106526 +transit,100.22092822750699,15.027514714543175 +transit,100.21809945450217,15.036026495427338 +transit,100.21527045712762,15.044538234732185 +transit,100.2124412352335,15.05304993243085 +transit,100.20961178866987,15.06156158849649 +transit,100.20678211728679,15.070073202902252 +transit,100.20395222093428,15.078584775621255 +transit,100.2011220994623,15.087096306626636 +transit,100.19829175272075,15.095607795891516 +transit,100.19546118055953,15.10411924338901 +transit,100.19263038282848,15.112630649092225 +transit,100.18979935937742,15.121142012974268 +transit,100.18696811005609,15.129653335008243 +transit,100.18413663471419,15.138164615167227 +transit,100.18130493320145,15.14667585342432 +transit,100.17847300536745,15.155187049752593 +transit,100.17564085106181,15.163698204125124 +transit,100.1728084701341,15.17220931651498 +transit,100.1699758624338,15.180720386895214 +transit,100.1671430278104,15.189231415238897 +transit,100.16430996611331,15.19774240151907 +transit,100.16147667719193,15.206253345708776 +transit,100.1586431608956,15.214764247781055 +transit,100.15580941707363,15.223275107708933 +transit,100.15297544557528,15.231785925465438 +transit,100.15014124624976,15.240296701023588 +transit,100.14730681894626,15.248807434356399 +transit,100.14447216351392,15.257318125436877 +transit,100.14163727980183,15.265828774238017 +transit,100.13880216765904,15.274339380732819 +transit,100.13596682693456,15.28284994489427 +transit,100.13313125747737,15.29136046669535 +transit,100.13029545913639,15.299870946109039 +transit,100.1274594317605,15.3083813831083 +transit,100.12462317519855,15.316891777666104 +transit,100.12178668929936,15.325402129755407 +transit,100.11894997391165,15.333912439349154 +transit,100.11611302888417,15.342422706420294 +transit,100.11327585406559,15.350932930941775 +transit,100.11043844930454,15.359443112886515 +transit,100.1076008144496,15.367953252227453 +transit,100.10476294934934,15.376463348937506 +transit,100.10192485385225,15.384973402989578 +transit,100.0990865278068,15.393483414356592 +transit,100.09624797106142,15.401993383011444 +transit,100.09340918346449,15.410503308927018 +transit,100.09057016486433,15.419013192076227 +transit,100.08773091510925,15.427523032431937 +transit,100.0848914340475,15.436032829967035 +transit,100.0820517215273,15.444542584654382 +transit,100.07921177739681,15.453052296466845 +transit,100.07637160150414,15.461561965377287 +transit,100.07353119369739,15.470071591358556 +transit,100.0706905538246,15.478581174383507 +transit,100.06784968173378,15.487090714424962 +transit,100.06500857727286,15.495600211455773 +transit,100.06216724028977,15.504109665448754 +transit,100.05932567063238,15.512619076376728 +transit,100.05648386814849,15.521128444212515 +transit,100.05364183268593,15.529637768928922 +transit,100.0507995640924,15.538147050498749 +transit,100.04795706221563,15.54665628889479 +transit,100.04511432690325,15.555165484089837 +transit,100.04227135800289,15.563674636056673 +transit,100.03942815536212,15.572183744768074 +transit,100.03658471882846,15.580692810196817 +transit,100.0337410482494,15.589201832315656 +transit,100.03089714347237,15.597710811097349 +transit,100.02805300434478,15.60621974651465 +transit,100.02520863071399,15.614728638540315 +transit,100.02236402242731,15.623237487147067 +transit,100.019519179332,15.631746292307646 +transit,100.01667410127527,15.640255053994785 +transit,100.01382878810433,15.64876377218119 +transit,100.01098323966632,15.657272446839583 +transit,100.00813745580832,15.665781077942668 +transit,100.00529143637739,15.674289665463148 +transit,100.00244518122054,15.682798209373718 +transit,99.99959869018473,15.691306709647064 +transit,99.99675196311688,15.699815166255869 +transit,99.99390499986389,15.708323579172806 +transit,99.99105780027257,15.71683194837055 +transit,99.98821036418973,15.725340273821754 +transit,99.9853626914621,15.733848555499081 +transit,99.98251478193642,15.74235679337518 +transit,99.97966663545931,15.750864987422695 +transit,99.97681825187742,15.75937313761426 +transit,99.97396963103729,15.767881243922508 +transit,99.9711207727855,15.77638930632006 +transit,99.96827167696848,15.78489732477954 +transit,99.96542234343272,15.793405299273555 +transit,99.96257277202459,15.80191322977471 +transit,99.95972296259045,15.810421116255604 +transit,99.95687291497663,15.818928958688828 +transit,99.95402262902938,15.827436757046963 +transit,99.95117210459492,15.835944511302595 +transit,99.94832134151945,15.844452221428298 +transit,99.94547033964908,15.852959887396633 +transit,99.94261909882992,15.861467509180162 +transit,99.93976761890802,15.869975086751435 +transit,99.93691589972937,15.878482620083002 +transit,99.93406394113994,15.886990109147405 +transit,99.93121174298564,15.895497553917169 +transit,99.92835930511232,15.904004954364835 +transit,99.92550662736586,15.912512310462906 +transit,99.922653709592,15.921019622183918 +transit,99.91980055163648,15.929526889500362 +transit,99.916947153345,15.938034112384738 +transit,99.91409351456323,15.946541290809549 +transit,99.91123963513675,15.955048424747282 +transit,99.90838551491115,15.963555514170414 +transit,99.9055311537319,15.97206255905143 +transit,99.9026765514445,15.980569559362786 +transit,99.89982170789438,15.989076515076952 +transit,99.89696662292691,15.997583426166381 +transit,99.89411129638745,16.006090292603517 +transit,99.89125572812127,16.01459711436081 +transit,99.88839991797363,16.023103891410695 +transit,99.88554386578973,16.031610623725594 +transit,99.88268757141473,16.040117311277942 +transit,99.87983103469377,16.04862395404014 +transit,99.87697425547186,16.05713055198461 +transit,99.87411723359409,16.06563710508374 +transit,99.8712599689054,16.074143613309943 +transit,99.86840246125075,16.082650076635602 +transit,99.865544710475,16.09115649503309 +transit,99.86268671642303,16.099662868474805 +transit,99.85982847893962,16.10816919693309 +transit,99.85696999786954,16.116675480380334 +transit,99.85411127305748,16.125181718788873 +transit,99.85125230434812,16.133687912131073 +transit,99.84839309158608,16.14219406037926 +transit,99.84553363461592,16.15070016350579 +transit,99.8426739332822,16.159206221482975 +transit,99.83981398742937,16.167712234283144 +transit,99.8369537969019,16.176218201878623 +transit,99.83409336154416,16.18472412424171 +transit,99.83123268120052,16.193230001344716 +transit,99.82837175571527,16.20173583315993 +transit,99.82551058493267,16.21024161965965 +transit,99.82264916869694,16.218747360816156 +transit,99.81978750685224,16.227253056601718 +transit,99.8169255992427,16.235758706988612 +transit,99.81406344571238,16.244264311949102 +transit,99.81120104610532,16.252769871455445 +transit,99.80833840026553,16.261275385479884 +transit,99.8054755080369,16.269780853994675 +transit,99.80261236926336,16.27828627697203 +transit,99.79974898378875,16.286791654384206 +transit,99.79688535145687,16.295296986203407 +transit,99.79402147211148,16.303802272401857 +transit,99.79115734559629,16.312307512951765 +transit,99.78829297175496,16.320812707825333 +transit,99.78542835043112,16.329317856994752 +transit,99.78256348146833,16.337822960432216 +transit,99.77969836471013,16.346328018109904 +Ban_Nong_Phai,99.776833,16.35483303 +transit,99.77618023461284,16.36352772012392 +transit,99.77552741141027,16.372222401058075 +transit,99.77487453035477,16.380917072797786 +transit,99.77422159140875,16.389611735338356 +transit,99.77356859453462,16.398306388675113 +transit,99.77291553969484,16.407001032803365 +transit,99.77226242685175,16.41569566771843 +transit,99.77160925596779,16.42439029341563 +transit,99.7709560270053,16.433084909890265 +transit,99.77030273992665,16.441779517137665 +transit,99.7696493946942,16.45047411515314 +transit,99.76899599127029,16.459168703932004 +transit,99.76834252961723,16.467863283469587 +transit,99.76768900969735,16.476557853761186 +transit,99.76703543147296,16.485252414802133 +transit,99.76638179490634,16.493946966587743 +transit,99.76572809995977,16.50264150911333 +transit,99.76507434659551,16.511336042374218 +transit,99.76442053477584,16.520030566365715 +transit,99.76376666446298,16.528725081083156 +transit,99.76311273561917,16.537419586521843 +transit,99.76245874820663,16.5461140826771 +transit,99.76180470218756,16.554808569544257 +transit,99.76115059752416,16.563503047118626 +transit,99.76049643417862,16.572197515395523 +transit,99.7598422121131,16.58089197437027 +transit,99.75918793128977,16.589586424038195 +transit,99.75853359167077,16.598280864394617 +transit,99.75787919321822,16.606975295434843 +transit,99.75722473589427,16.615669717154212 +transit,99.75657021966101,16.624364129548038 +transit,99.75591564448055,16.633058532611642 +transit,99.75526101031497,16.64175292634035 +transit,99.75460631712635,16.65044731072948 +transit,99.75395156487673,16.659141685774355 +transit,99.75329675352819,16.667836051470307 +transit,99.75264188304276,16.67653040781264 +transit,99.75198695338244,16.685224754796693 +transit,99.75133196450928,16.693919092417794 +transit,99.75067691638525,16.702613420671252 +transit,99.75002180897236,16.7113077395524 +transit,99.74936664223257,16.72000204905656 +transit,99.74871141612785,16.72869634917906 +transit,99.74805613062016,16.73739063991522 +transit,99.74740078567142,16.746084921260373 +transit,99.74674538124357,16.754779193209835 +transit,99.74608991729853,16.763473455758938 +transit,99.74543439379819,16.772167708903005 +transit,99.74477881070446,16.780861952637366 +transit,99.7441231679792,16.789556186957345 +transit,99.74346746558427,16.798250411858273 +transit,99.74281170348154,16.806944627335472 +transit,99.74215588163284,16.815638833384273 +Khiri_Mat_District,99.7415,16.82433303 +transit,99.74429190475959,16.832429740308847 +transit,99.74708404678597,16.840526406302324 +transit,99.7498764262191,16.848623027955263 +transit,99.752669043199,16.856719605242482 +transit,99.75546189786576,16.8648161381388 +transit,99.75825499035943,16.872912626619026 +transit,99.7610483208202,16.88100907065797 +transit,99.7638418893882,16.889105470230426 +transit,99.76663569620369,16.897201825311186 +transit,99.76942974140691,16.905298135875043 +transit,99.77222402513819,16.913394401896774 +transit,99.77501854753783,16.921490623351154 +transit,99.77781330874623,16.929586800212952 +transit,99.78060830890382,16.93768293245693 +transit,99.78340354815106,16.945779020057852 +transit,99.78619902662844,16.95387506299046 +transit,99.78899474447651,16.961971061229494 +transit,99.79179070183586,16.970067014749702 +transit,99.79458689884711,16.978162923525804 +transit,99.79738333565093,16.986258787532545 +transit,99.80018001238801,16.994354606744626 +transit,99.8029769291991,17.002450381136764 +transit,99.80577408622501,17.01054611068368 +transit,99.80857148360654,17.01864179536006 +transit,99.81136912148457,17.026737435140607 +Sukhothai,99.814167,17.03483303 +transit,99.81434040327201,17.043284529361696 +transit,99.81451382213099,17.051736021555545 +transit,99.81468725658654,17.0601875065784 +transit,99.81486070664826,17.068638984427135 +transit,99.81503417232577,17.07709045509859 +transit,99.81520765362868,17.085541918589627 +transit,99.8153811505666,17.093993374897117 +transit,99.81555466314913,17.1024448240179 +transit,99.81572819138593,17.110896265948856 +transit,99.81590173528662,17.119347700686838 +transit,99.8160752948608,17.127799128228713 +transit,99.8162488701181,17.136250548571326 +transit,99.81642246106819,17.14470196171156 +transit,99.81659606772067,17.153153367646272 +transit,99.8167696900852,17.16160476637232 +transit,99.8169433281714,17.17005615788658 +transit,99.81711698198895,17.17850754218591 +transit,99.81729065154748,17.18695891926717 +transit,99.81746433685664,17.195410289127235 +transit,99.81763803792609,17.203861651762978 +transit,99.81781175476549,17.212313007171257 +transit,99.81798548738449,17.220764355348937 +transit,99.81815923579278,17.2292156962929 +Sukhothai,99.818333,17.23766703 +transit,99.8109274024524,17.242972216999036 +transit,99.80352138185381,17.248277128540224 +transit,99.79611493806348,17.253581764518536 +transit,99.78870807094071,17.258886124828933 +transit,99.78130078034481,17.26419020936634 +transit,99.77389306613506,17.26949401802568 +transit,99.76648492817073,17.274797550701866 +transit,99.75907636631113,17.280100807289784 +transit,99.75166738041557,17.285403787684306 +transit,99.74425797034333,17.290706491780302 +transit,99.7368481359537,17.296008919472605 +transit,99.72943787710594,17.301311070656055 +transit,99.72202719365941,17.306612945225467 +transit,99.71461608547338,17.31191454307563 +transit,99.70720455240713,17.31721586410134 +transit,99.69979259431997,17.32251690819735 +transit,99.69238021107121,17.327817675258427 +transit,99.68496740252013,17.333118165179304 +transit,99.67755416852603,17.3384183778547 +transit,99.67014050894824,17.343718313179327 +transit,99.66272642364599,17.34901797104788 +transit,99.65531191247867,17.354317351355018 +transit,99.64789697530551,17.359616453995418 +transit,99.64048161198585,17.36491527886372 +transit,99.63306582237897,17.370213825854556 +transit,99.6256496063442,17.37551209486254 +transit,99.61823296374082,17.380810085782265 +transit,99.61081589442814,17.386107798508327 +transit,99.60339839826548,17.391405232935284 +transit,99.59598047511213,17.396702388957692 +transit,99.5885621248274,17.401999266470092 +transit,99.58114334727061,17.407295865367 +transit,99.57372414230106,17.41259218554293 +transit,99.56630450977806,17.41788822689237 +transit,99.5588844495609,17.42318398930979 +transit,99.55146396150894,17.42847947268966 +transit,99.54404304548144,17.433774676926422 +transit,99.53662170133775,17.4390696019145 +transit,99.52919992893716,17.444364247548318 +transit,99.521777728139,17.44965861372227 +transit,99.51435509880257,17.454952700330733 +transit,99.50693204078718,17.46024650726809 +transit,99.49950855395217,17.465540034428674 +transit,99.49208463815684,17.47083328170683 +transit,99.4846602932605,17.476126248996888 +transit,99.4772355191225,17.481418936193148 +transit,99.46981031560213,17.4867113431899 +transit,99.46238468255873,17.49200346988141 +transit,99.45495861985162,17.497295316161956 +transit,99.44753212734011,17.502586881925765 +transit,99.44010520488354,17.507878167067073 +transit,99.43267785234121,17.513169171480097 +transit,99.42525006957246,17.51845989505902 +transit,99.41782185643662,17.52375033769804 +transit,99.410393212793,17.529040499291316 +transit,99.40296413850095,17.534330379733 +transit,99.39553463341977,17.53961997891723 +transit,99.38810469740883,17.54490929673812 +transit,99.38067433032744,17.55019833308977 +transit,99.37324353203492,17.555487087866283 +transit,99.36581230239061,17.560775560961726 +transit,99.35838064125383,17.566063752270153 +transit,99.35094854848396,17.571351661685608 +transit,99.34351602394028,17.576639289102125 +transit,99.33608306748218,17.5819266344137 +transit,99.32864967896894,17.58721369751434 +transit,99.32121585825995,17.592500478298025 +transit,99.31378160521452,17.597786976658714 +transit,99.30634691969199,17.603073192490353 +transit,99.29891180155172,17.60835912568688 +transit,99.29147625065305,17.613644776142216 +transit,99.2840402668553,17.618930143750262 +transit,99.27660385001784,17.624215228404896 +Ban_Saliam_Wan,99.269167,17.62950003 +transit,99.26635252996367,17.63792495855916 +transit,99.26353779835352,17.64634983976061 +transit,99.26072280501332,17.6547746735773 +transit,99.2579075497868,17.663199459982156 +transit,99.25509203251767,17.67162419894811 +transit,99.25227625304954,17.68004889044808 +transit,99.24946021122605,17.68847353445498 +transit,99.24664390689071,17.696898130941722 +transit,99.24382733988703,17.705322679881206 +transit,99.24101051005846,17.713747181246323 +transit,99.23819341724838,17.72217163500995 +transit,99.23537606130014,17.730596041144977 +transit,99.23255844205707,17.739020399624277 +transit,99.22974055936238,17.74744471042071 +transit,99.22692241305931,17.75586897350713 +transit,99.22410400299098,17.7642931888564 +transit,99.22128532900052,17.772717356441344 +transit,99.21846639093097,17.781141476234815 +transit,99.21564718862534,17.789565548209644 +transit,99.21282772192659,17.79798957233864 +transit,99.21000799067761,17.80641354859462 +transit,99.20718799472127,17.81483747695041 +transit,99.20436773390038,17.823261357378787 +transit,99.2015472080577,17.831685189852557 +transit,99.19872641703594,17.840108974344503 +transit,99.19590536067776,17.848532710827417 +transit,99.19308403882576,17.856956399274054 +transit,99.19026245132252,17.865380039657182 +transit,99.18744059801054,17.873803631949574 +transit,99.18461847873228,17.88222717612396 +transit,99.18179609333016,17.890650672153097 +transit,99.17897344164655,17.899074120009722 +transit,99.17615052352375,17.90749751966656 +transit,99.17332733880401,17.915920871096333 +transit,99.17050388732959,17.924344174271752 +transit,99.16768016894261,17.93276742916554 +transit,99.1648561834852,17.94119063575039 +transit,99.16203193079944,17.94961379399899 +transit,99.15920741072732,17.95803690388403 +transit,99.15638262311083,17.966459965378185 +transit,99.15355756779186,17.97488297845414 +transit,99.15073224461229,17.983305943084545 +transit,99.14790665341393,17.991728859242063 +transit,99.14508079403855,18.000151726899347 +transit,99.14225466632787,18.00857454602904 +transit,99.13942827012355,18.01699731660377 +transit,99.13660160526717,18.025420038596177 +transit,99.13377467160036,18.033842711978878 +transit,99.13094746896459,18.042265336724476 +transit,99.12811999720134,18.050687912805593 +transit,99.12529225615202,18.05911044019482 +transit,99.122464245658,18.067532918864757 +transit,99.11963596556058,18.075955348787982 +transit,99.11680741570102,18.084377729937074 +transit,99.11397859592054,18.092800062284606 +transit,99.11114950606033,18.101222345803134 +transit,99.10832014596146,18.109644580465226 +transit,99.10549051546501,18.118066766243413 +transit,99.10266061441197,18.126488903110253 +transit,99.09983044264334,18.13491099103827 +Lampang,99.097,18.14333303 +transit,99.10065204694395,18.15053863299162 +transit,99.10430439321041,18.157744161260723 +transit,99.10795703894814,18.164949614770485 +transit,99.11160998430594,18.172154993484096 +transit,99.11526322943266,18.179360297364724 +transit,99.11891677447714,18.186565526375535 +transit,99.12257061958833,18.19377068047968 +transit,99.12622476491516,18.200975759640304 +transit,99.12987921060665,18.20818076382054 +transit,99.13353395681177,18.215385692983517 +transit,99.13718900367964,18.22259054709235 +transit,99.14084435135933,18.22979532611015 +Mueang_Yao,99.1445,18.23700003 +transit,99.15146735747362,18.24206090597879 +transit,99.15843511817809,18.247121525852435 +transit,99.16540328223628,18.25218188953077 +transit,99.17237184977107,18.257241996923632 +transit,99.17934082090532,18.262301847940826 +transit,99.1863101957619,18.267361442492156 +transit,99.1932799744637,18.272420780487415 +transit,99.20025015713358,18.277479861836383 +transit,99.2072207438944,18.282538686448806 +transit,99.21419173486905,18.28759725423445 +transit,99.2211631301804,18.29265556510304 +transit,99.22813492995131,18.2977136189643 +transit,99.23510713430467,18.302771415727932 +transit,99.24207974336333,18.307828955303652 +transit,99.24905275725021,18.312886237601127 +transit,99.25602617608814,18.31794326253002 +Super_Highway,99.263,18.32300003 +transit,99.25557382490359,18.32744088559543 +transit,99.2481472707872,18.331881450058834 +transit,99.2407203375578,18.336321723300404 +transit,99.23329302512239,18.34076170523036 +transit,99.22586533338799,18.345201395758863 +transit,99.21843726226156,18.349640794796098 +transit,99.21100881165015,18.35407990225223 +transit,99.20357998146078,18.358518718037413 +transit,99.19615077160049,18.362957242061793 +transit,99.1887211819763,18.367395474235504 +transit,99.18129121249532,18.37183341446868 +transit,99.17386086306458,18.376271062671425 +transit,99.16643013359115,18.380708418753848 +transit,99.15899902398213,18.385145482626054 +transit,99.1515675341446,18.389582254198125 +transit,99.1441356639857,18.394018733380133 +transit,99.13670341341249,18.398454920082145 +transit,99.12927078233214,18.402890814214228 +transit,99.12183777065178,18.40732641568642 +transit,99.11440437827852,18.411761724408755 +transit,99.10697060511956,18.416196740291273 +transit,99.09953645108203,18.420631463243982 +transit,99.09210191607312,18.42506589317689 +Tha_Sop_Chai,99.084667,18.42950003 +transit,99.07590508762327,18.42952644374126 +transit,99.06714317259124,18.429552453173475 +transit,99.05838125494486,18.429578058295917 +transit,99.04961933472507,18.429603259107854 +transit,99.04085741197284,18.42962805560859 +transit,99.0320954867291,18.429652447797427 +transit,99.02333355903484,18.42967643567368 +transit,99.01457162893098,18.429700019236673 +transit,99.00580969645848,18.429723198485757 +transit,98.99704776165832,18.429745973420264 +transit,98.98828582457143,18.429768344039562 +transit,98.97952388523878,18.42979031034303 +transit,98.97076194370132,18.429811872330045 +Ban_Fang_Min,98.962,18.42983303 +transit,98.96202131799997,18.438512668615008 +transit,98.96204263814047,18.447192299299033 +transit,98.96206396042278,18.45587192204888 +transit,98.9620852848482,18.464551536861347 +transit,98.96210661141804,18.473231143733248 +transit,98.96212794013357,18.481910742661395 +transit,98.96214927099611,18.490590333642597 +transit,98.96217060400696,18.499269916673665 +transit,98.9621919391674,18.507949491751404 +transit,98.96221327647872,18.516629058872628 +transit,98.96223461594225,18.525308618034146 +transit,98.96225595755928,18.533988169232785 +transit,98.9622773013311,18.54266771246535 +transit,98.962298647259,18.551347247728643 +transit,98.96231999534432,18.5600267750195 +transit,98.96234134558831,18.568706294334728 +transit,98.96236269799232,18.577385805671142 +transit,98.96238405255762,18.58606530902557 +transit,98.96240540928552,18.594744804394814 +transit,98.96242676817734,18.60342429177571 +transit,98.96244812923435,18.612103771165064 +transit,98.96246949245788,18.620783242559707 +transit,98.96249085784923,18.62946270595645 +transit,98.9625122254097,18.638142161352125 +transit,98.96253359514058,18.64682160874355 +transit,98.96255496704322,18.655501048127554 +transit,98.96257634111889,18.664180479500953 +transit,98.9625977173689,18.672859902860576 +transit,98.96261909579457,18.68153931820326 +transit,98.96264047639718,18.690218725525803 +transit,98.96266185917808,18.69889812482506 +transit,98.96268324413855,18.70757751609785 +transit,98.9627046312799,18.716256899340998 +transit,98.96272602060345,18.72493627455134 +transit,98.96274741211052,18.733615641725706 +transit,98.96276880580238,18.74229500086092 +transit,98.96279020168038,18.750974351953822 +transit,98.96281159974582,18.759653695001234 +Chiang_Mai,98.962833,18.76833303 +transit,98.97102345626038,18.76608001026244 +transit,98.97921369496291,18.7638266311987 +transit,98.9874037161068,18.7615728928644 +transit,98.9955935196913,18.759318795315163 +transit,99.00378310571564,18.757064338606618 +transit,99.01197247417912,18.75480952279439 +transit,99.02016162508102,18.75255434793413 +transit,99.02835055842063,18.750298814081457 +transit,99.03653927419731,18.74804292129203 +transit,99.04472777241037,18.745786669621488 +transit,99.05291605305919,18.743530059125487 +transit,99.06110411614316,18.74127308985968 +transit,99.06929196166166,18.739015761879713 +transit,99.07747958961414,18.73675807524127 +Inizio,99.085667,18.73450003 +transit,99.0856442495099,18.726204652347565 +transit,99.08562150123944,18.717909267353512 +transit,99.08559875518738,18.70961387502061 +transit,99.0855760113524,18.701318475351638 +transit,99.08555326973327,18.693023068349355 +transit,99.08553053032868,18.684727654016523 +transit,99.0855077931374,18.676432232355932 +transit,99.08548505815813,18.66813680337033 +transit,99.08546232538961,18.65984136706251 +transit,99.08543959483058,18.651545923435226 +transit,99.08541686647975,18.64325047249126 +transit,99.08539414033586,18.63495501423338 +transit,99.08537141639765,18.626659548664367 +transit,99.08534869466384,18.618364075786985 +transit,99.08532597513317,18.61006859560402 +transit,99.08530325780438,18.60177310811824 +transit,99.08528054267619,18.593477613332425 +transit,99.08525782974733,18.58518211124935 +transit,99.08523511901656,18.57688660187179 +transit,99.08521241048258,18.568591085202527 +transit,99.08518970414416,18.560295561244335 +Ban_Sa_Laeng,99.085167,18.55200003 +transit,99.09421416772395,18.550220010116274 +transit,99.10326114792517,18.548439556428413 +transit,99.11230794058116,18.546658668989824 +transit,99.12135454566953,18.544877347853905 +transit,99.13040096316784,18.543095593074085 +transit,99.13944719305371,18.541313404703782 +transit,99.14849323530477,18.539530782796437 +transit,99.15753908989865,18.537747727405492 +transit,99.16658475681304,18.535964238584413 +transit,99.17563023602561,18.53418031638665 +transit,99.18467552751409,18.53239596086568 +transit,99.19372063125621,18.530611172074995 +transit,99.20276554722972,18.52882595006808 +transit,99.21181027541238,18.527040294898434 +transit,99.220854815782,18.525254206619564 +transit,99.2298991683164,18.523467685284995 +transit,99.2389433329934,18.521680730948255 +transit,99.24798730979086,18.519893343662883 +transit,99.25703109868668,18.51810552348242 +transit,99.26607469965876,18.51631727046042 +transit,99.27511811268498,18.514528584650456 +transit,99.28416133774331,18.512739466106098 +transit,99.29320437481171,18.51094991488093 +transit,99.30224722386818,18.50915993102853 +transit,99.31128988489068,18.507369514602523 +transit,99.32033235785728,18.505578665656515 +transit,99.329374642746,18.503787384244102 +transit,99.33841673953492,18.501995670418943 +transit,99.34745864820212,18.50020352423465 +transit,99.3565003687257,18.498410945744894 +transit,99.36554190108382,18.49661793500331 +transit,99.3745832452546,18.494824492063575 +transit,99.38362440121622,18.49303061697936 +transit,99.39266536894688,18.49123630980435 +transit,99.4017061484248,18.48944157059223 +transit,99.41074673962817,18.48764639939671 +transit,99.4197871425353,18.485850796271492 +transit,99.42882735712443,18.484054761270304 +transit,99.43786738337388,18.482258294446865 +transit,99.44690722126195,18.480461395854924 +transit,99.455946870767,18.47866406554822 +transit,99.46498633186737,18.47686630358051 +transit,99.47402560454144,18.47506811000555 +transit,99.48306468876761,18.473269484877136 +transit,99.49210358452433,18.471470428249035 +transit,99.50114229179,18.469670940175035 +transit,99.51018081054313,18.467871020708944 +transit,99.51921914076216,18.46607066990457 +transit,99.52825728242564,18.464269887815735 +transit,99.53729523551208,18.462468674496268 +Ton_Thong_Chai,99.546333,18.46066703 +transit,99.5545038256019,18.456384153671483 +transit,99.56267424596551,18.45210092339058 +transit,99.57084426117846,18.44781733926222 +transit,99.5790138713284,18.44353340139133 +transit,99.58718307650297,18.439249109882837 +transit,99.59535187678985,18.434964464841645 +transit,99.60352027227671,18.43067946637266 +transit,99.6116882630513,18.426394114580752 +transit,99.61985584920133,18.42210840957083 +transit,99.62802303081453,18.417822351447754 +transit,99.6361898079787,18.413535940316383 +transit,99.64435618078161,18.40924917628158 +transit,99.65252214931105,18.404962059448184 +transit,99.66068771365487,18.40067458992104 +transit,99.66885287390089,18.396386767804955 +transit,99.67701763013697,18.392098593204768 +transit,99.68518198245101,18.38781006622528 +transit,99.69334593093089,18.383521186971286 +transit,99.70150947566452,18.37923195554758 +transit,99.70967261673987,18.374942372058943 +transit,99.71783535424484,18.370652436610147 +transit,99.72599768826744,18.36636214930595 +transit,99.73415961889565,18.36207151025111 +transit,99.74232114621746,18.35778051955037 +transit,99.75048227032093,18.35348917730846 +transit,99.7586429912941,18.349197483630114 +transit,99.76680330922501,18.344905438620046 +transit,99.77496322420176,18.340613042382955 +transit,99.78312273631245,18.33632029502355 +transit,99.7912818456452,18.332027196646514 +transit,99.79944055228815,18.327733747356532 +transit,99.80759885632943,18.323439947258276 +transit,99.81575675785727,18.319145796456397 +transit,99.82391425695982,18.314851295055554 +transit,99.8320713537253,18.31055644316039 +transit,99.84022804824195,18.306261240875536 +transit,99.84838434059802,18.301965688305614 +transit,99.85654023088175,18.297669785555254 +transit,99.86469571918146,18.293373532729046 +transit,99.87285080558543,18.289076929931596 +transit,99.88100549018199,18.284779977267487 +transit,99.88915977305948,18.280482674841306 +transit,99.89731365430626,18.276185022757613 +transit,99.9054671340107,18.27188702112097 +transit,99.91362021226121,18.26758867003593 +transit,99.9217728891462,18.26328996960704 +transit,99.92992516475408,18.258990919938825 +transit,99.93807703917332,18.254691521135815 +transit,99.9462285124924,18.250391773302514 +transit,99.95437958479977,18.246091676543447 +transit,99.96253025618395,18.241791230963084 +transit,99.97068052673347,18.237490436665933 +transit,99.97883039653689,18.233189293756464 +transit,99.98697986568273,18.228887802339145 +transit,99.99512893425958,18.224585962518432 +transit,100.00327760235605,18.220283774398776 +transit,100.01142587006075,18.215981238084627 +transit,100.01957373746228,18.2116783536804 +transit,100.02772120464932,18.207375121290543 +transit,100.03586827171054,18.203071541019444 +transit,100.04401493873462,18.19876761297152 +transit,100.05216120581025,18.194463337251165 +transit,100.06030707302617,18.19015871396276 +transit,100.06845254047111,18.185853743210686 +transit,100.07659760823384,18.181548425099304 +transit,100.0847422764031,18.177242759732987 +transit,100.09288654506774,18.172936747216067 +transit,100.10103041431653,18.16863038765289 +transit,100.1091738842383,18.16432368114779 +transit,100.11731695492192,18.16001662780508 +transit,100.12545962645625,18.155709227729087 +transit,100.13360189893015,18.1514014810241 +transit,100.14174377243256,18.147093387794417 +transit,100.14988524705237,18.142784948144328 +transit,100.15802632287853,18.138476162178097 +Phrae_Airport,100.166167,18.13416703 +transit,100.16699050577331,18.12526380141945 +transit,100.16781392828184,18.1163605610984 +transit,100.16863726757772,18.107457309042537 +transit,100.16946052371303,18.098554045257508 +transit,100.17028369673984,18.089650769749 +transit,100.17110678671024,18.08074748252267 +transit,100.17192979367624,18.071844183584194 +transit,100.17275271768987,18.062940872939237 +transit,100.17357555880314,18.05403755059347 +transit,100.17439831706803,18.04513421655257 +transit,100.1752209925365,18.036230870822198 +transit,100.17604358526052,18.02732751340802 +transit,100.17686609529198,18.018424144315723 +transit,100.17768852268283,18.009520763550956 +transit,100.17851086748496,18.00061737111941 +transit,100.17933312975022,17.991713967026733 +transit,100.18015530953049,17.982810551278607 +transit,100.18097740687762,17.973907123880704 +transit,100.1817994218434,17.965003684838692 +transit,100.18262135447964,17.95610023415824 +transit,100.18344320483813,17.94719677184501 +transit,100.18426497297064,17.938293297904693 +transit,100.18508665892891,17.929389812342936 +transit,100.18590826276468,17.920486315165423 +transit,100.18672978452966,17.911582806377822 +transit,100.18755122427554,17.9026792859858 +transit,100.18837258205399,17.893775753995037 +transit,100.18919385791668,17.88487221041119 +transit,100.19001505191525,17.87596865523994 +transit,100.19083616410131,17.867065088486957 +transit,100.19165719452647,17.858161510157903 +transit,100.19247814324231,17.849257920258456 +transit,100.19329901030042,17.840354318794283 +transit,100.19411979575233,17.831450705771058 +transit,100.19494049964956,17.822547081194454 +transit,100.19576112204365,17.81364344507013 +transit,100.19658166298608,17.804739797403776 +transit,100.19740212252833,17.79583613820105 +transit,100.19822250072187,17.786932467467622 +transit,100.19904279761813,17.778028785209173 +transit,100.19986301326854,17.769125091431366 +transit,100.20068314772452,17.76022138613987 +transit,100.20150320103743,17.75131766934037 +transit,100.20232317325865,17.74241394103852 +transit,100.20314306443954,17.73351020124001 +transit,100.20396287463144,17.72460644995049 +transit,100.20478260388566,17.715702687175646 +transit,100.2056022522535,17.706798912921148 +transit,100.20642181978623,17.69789512719267 +transit,100.20724130653514,17.688991329995876 +transit,100.20806071255146,17.68008752133644 +transit,100.20888003788642,17.671183701220038 +transit,100.20969928259122,17.662279869652338 +transit,100.21051844671707,17.653376026639016 +transit,100.21133753031515,17.64447217218574 +transit,100.2121565334366,17.635568306298183 +transit,100.21297545613257,17.626664428982014 +transit,100.21379429845418,17.617760540242912 +transit,100.21461306045254,17.608856640086547 +transit,100.21543174217872,17.59995272851859 +transit,100.21625034368381,17.59104880554471 +transit,100.21706886501885,17.582144871170584 +transit,100.21788730623487,17.57324092540189 +transit,100.2187056673829,17.56433696824429 +transit,100.21952394851395,17.555432999703466 +transit,100.22034214967898,17.546529019785076 +transit,100.22116027092896,17.537625028494805 +transit,100.22197831231483,17.528721025838326 +transit,100.22279627388754,17.519817011821306 +transit,100.22361415569797,17.510912986449423 +transit,100.22443195779705,17.502008949728346 +transit,100.22524968023563,17.49310490166375 +transit,100.22606732306458,17.484200842261306 +transit,100.22688488633474,17.475296771526693 +transit,100.22770237009695,17.46639268946558 +transit,100.22851977440199,17.45748859608363 +transit,100.22933709930066,17.448584491386537 +transit,100.23015434484375,17.439680375379965 +transit,100.23097151108199,17.430776248069588 +transit,100.23178859806613,17.421872109461066 +transit,100.23260560584689,17.4129679595601 +transit,100.23342253447497,17.40406379837234 +transit,100.23423938400106,17.395159625903467 +transit,100.23505615447581,17.386255442159158 +transit,100.23587284594991,17.37735124714509 +transit,100.23668945847396,17.368447040866933 +transit,100.23750599209859,17.359542823330347 +transit,100.23832244687439,17.35063859454103 +transit,100.23913882285196,17.341734354504638 +transit,100.23995512008185,17.332830103226854 +transit,100.2407713386146,17.323925840713354 +transit,100.24158747850078,17.315021566969808 +transit,100.24240353979084,17.30611728200189 +transit,100.24321952253534,17.29721298581528 +transit,100.24403542678472,17.28830867841564 +transit,100.24485125258946,17.27940435980865 +Uttaradit,100.245667,17.27050003 +transit,100.24647026068472,17.261725471711873 +transit,100.24727344539025,17.25295090256133 +transit,100.24807655416477,17.244176322553795 +transit,100.24887958705645,17.2354017316947 +transit,100.24968254411345,17.22662712998947 +transit,100.25048542538393,17.217852517443536 +transit,100.25128823091599,17.209077894062318 +transit,100.25209096075777,17.200303259851253 +transit,100.25289361495734,17.191528614815773 +transit,100.25369619356279,17.182753958961296 +transit,100.25449869662219,17.173979292293247 +transit,100.25530112418357,17.165204614817068 +transit,100.25610347629498,17.156429926538177 +transit,100.25690575300443,17.14765522746201 +transit,100.2577079543599,17.13888051759399 +transit,100.2585100804094,17.13010579693954 +transit,100.25931213120087,17.12133106550411 +transit,100.2601141067823,17.1125563232931 +transit,100.26091600720159,17.10378157031196 +transit,100.26171783250666,17.0950068065661 +transit,100.26251958274544,17.086232032060977 +transit,100.26332125796579,17.07745724680199 +transit,100.2641228582156,17.06868245079459 +transit,100.26492438354272,17.059907644044195 +transit,100.265725833995,17.05113282655624 +transit,100.26652720962025,17.042357998336144 +transit,100.26732851046629,17.03358315938934 +transit,100.26812973658089,17.024808309721273 +transit,100.26893088801187,17.016033449337357 +transit,100.26973196480694,17.00725857824302 +transit,100.27053296701388,16.9984836964437 +transit,100.27133389468041,16.989708803944822 +transit,100.27213474785425,16.98093390075181 +transit,100.2729355265831,16.972158986870113 +transit,100.27373623091462,16.963384062305142 +transit,100.27453686089652,16.95460912706233 +transit,100.2753374165764,16.94583418114712 +transit,100.27613789800193,16.937059224564926 +transit,100.27693830522072,16.928284257321177 +transit,100.27773863828037,16.91950927942132 +transit,100.27853889722849,16.910734290870778 +transit,100.27933908211261,16.90195929167497 +transit,100.28013919298034,16.893184281839343 +transit,100.28093922987918,16.884409261369314 +transit,100.28173919285669,16.87563423027033 +transit,100.28253908196035,16.866859188547803 +transit,100.28333889723767,16.85808413620717 +transit,100.28413863873612,16.84930907325387 +transit,100.2849383065032,16.840533999693328 +transit,100.28573790058631,16.831758915530973 +transit,100.2865374210329,16.82298382077224 +transit,100.28733686789042,16.814208715422556 +transit,100.28813624120622,16.805433599487355 +transit,100.28893554102771,16.796658472972066 +transit,100.28973476740228,16.787883335882125 +transit,100.29053392037726,16.779108188222956 +Phitsanulok,100.291333,16.77033303 +transit,100.29136817727955,16.761526221146873 +transit,100.29140335132223,16.752719404776496 +transit,100.29143852213012,16.743912580892363 +transit,100.29147368970533,16.735105749497954 +transit,100.29150885404994,16.726298910596743 +transit,100.29154401516607,16.71749206419222 +transit,100.2915791730558,16.70868521028787 +transit,100.29161432772122,16.699878348887182 +transit,100.29164947916443,16.691071479993624 +transit,100.29168462738754,16.682264603610708 +transit,100.29171977239261,16.673457719741904 +transit,100.29175491418177,16.6646508283907 +transit,100.29179005275708,16.655843929560593 +transit,100.29182518812065,16.64703702325506 +transit,100.29186032027457,16.638230109477604 +transit,100.29189544922092,16.6294231882317 +transit,100.29193057496178,16.620616259520865 +transit,100.29196569749925,16.61180932334857 +transit,100.29200081683543,16.603002379718312 +transit,100.29203593297238,16.594195428633583 +transit,100.29207104591221,16.58538847009788 +transit,100.292106155657,16.5765815041147 +transit,100.29214126220882,16.567774530687533 +transit,100.29217636556977,16.55896754981988 +transit,100.29221146574193,16.550160561515234 +transit,100.29224656272737,16.541353565777104 +transit,100.29228165652819,16.532546562608974 +transit,100.29231674714646,16.52373955201435 +transit,100.29235183458427,16.51493253399673 +transit,100.29238691884368,16.506125508559624 +transit,100.29242199992679,16.49731847570652 +transit,100.29245707783568,16.488511435440927 +transit,100.29249215257241,16.479704387766347 +transit,100.29252722413908,16.470897332686278 +transit,100.29256229253774,16.462090270204232 +transit,100.29259735777049,16.45328320032371 +transit,100.29263241983939,16.444476123048226 +transit,100.29266747874652,16.435669038381274 +transit,100.29270253449396,16.426861946326365 +transit,100.29273758708376,16.418054846887017 +transit,100.29277263651802,16.40924774006672 +transit,100.29280768279881,16.400440625869 +transit,100.29284272592818,16.391633504297353 +transit,100.29287776590822,16.3828263753553 +transit,100.292912802741,16.374019239046344 +transit,100.29294783642857,16.365212095374012 +transit,100.29298286697302,16.3564049443418 +transit,100.2930178943764,16.34759778595323 +transit,100.2930529186408,16.338790620211814 +transit,100.29308793976826,16.329983447121073 +transit,100.29312295776086,16.32117626668451 +transit,100.29315797262066,16.312369078905654 +transit,100.29319298434974,16.30356188378801 +transit,100.29322799295015,16.294754681335107 +transit,100.29326299842396,16.285947471550458 +transit,100.29329800077322,16.277140254437583 +Ban_Pho_Prathap_Chang,100.293333,16.26833303 +transit,100.29337072366047,16.25939350035479 +transit,100.29340844390907,16.250453963169708 +transit,100.2934461607481,16.241514418448443 +transit,100.29348387417984,16.232574866194685 +transit,100.29352158420659,16.223635306412106 +transit,100.29355929083063,16.2146957391044 +transit,100.29359699405423,16.205756164275254 +transit,100.2936346938797,16.196816581928353 +transit,100.2936723903093,16.187876992067388 +transit,100.29371008334532,16.178937394696046 +transit,100.29374777299003,16.169997789818012 +transit,100.29378545924574,16.161058177436978 +transit,100.29382314211472,16.152118557556648 +transit,100.29386082159924,16.143178930180696 +transit,100.29389849770158,16.134239295312824 +transit,100.29393617042402,16.125299652956723 +transit,100.29397383976884,16.116360003116085 +transit,100.29401150573831,16.107420345794612 +transit,100.29404916833472,16.09848068099599 +transit,100.29408682756033,16.089541008723923 +transit,100.29412448341743,16.0806013289821 +transit,100.29416213590828,16.071661641774227 +transit,100.29419978503516,16.062721947103995 +transit,100.29423743080034,16.05378224497511 +transit,100.2942750732061,16.044842535391272 +transit,100.2943127122547,16.035902818356174 +transit,100.2943503479484,16.026963093873523 +transit,100.29438798028949,16.01802336194703 +transit,100.29442560928022,16.009083622580377 +transit,100.29446323492289,16.000143875777283 +transit,100.29450085721973,15.991204121541449 +transit,100.29453847617303,15.98226435987658 +transit,100.29457609178505,15.973324590786381 +transit,100.29461370405804,15.964384814274554 +transit,100.29465131299429,15.955445030344817 +transit,100.29468891859605,15.94650523900087 +transit,100.29472652086558,15.937565440246429 +transit,100.29476411980515,15.928625634085197 +transit,100.29480171541702,15.91968582052088 +transit,100.29483930770344,15.910745999557196 +transit,100.2948768966667,15.90180617119786 +transit,100.29491448230901,15.892866335446582 +transit,100.29495206463267,15.88392649230707 +transit,100.29498964363992,15.874986641783046 +transit,100.29502721933302,15.866046783878213 +transit,100.29506479171424,15.857106918596296 +transit,100.2951023607858,15.848167045941008 +transit,100.29513992655001,15.839227165916071 +transit,100.29517748900908,15.83028727852519 +transit,100.29521504816526,15.821347383772098 +transit,100.29525260402083,15.812407481660507 +transit,100.29529015657803,15.803467572194137 +transit,100.29532770583913,15.79452765537671 +transit,100.29536525180634,15.785587731211944 +transit,100.29540279448194,15.77664779970356 +transit,100.29544033386819,15.767707860855294 +transit,100.2954778699673,15.758767914670852 +transit,100.29551540278153,15.749827961153965 +transit,100.29555293231316,15.740888000308354 +transit,100.2955904585644,15.731948032137758 +transit,100.2956279815375,15.723008056645888 +transit,100.29566550123474,15.714068073836485 +transit,100.29570301765833,15.705128083713264 +transit,100.2957405308105,15.696188086279957 +transit,100.29577804069353,15.687248081540293 +transit,100.29581554730964,15.67830806949801 +transit,100.29585305066108,15.669368050156828 +transit,100.2958905507501,15.66042802352049 +transit,100.29592804757891,15.651487989592715 +transit,100.29596554114978,15.642547948377242 +transit,100.29600303146493,15.633607899877804 +transit,100.29604051852661,15.624667844098143 +transit,100.29607800233705,15.61572778104198 +transit,100.29611548289849,15.606787710713057 +transit,100.29615296021316,15.597847633115112 +transit,100.2961904342833,15.588907548251884 +transit,100.29622790511115,15.57996745612711 +transit,100.29626537269893,15.571027356744525 +transit,100.29630283704888,15.562087250107867 +transit,100.29634029816324,15.553147136220877 +transit,100.29637775604424,15.544207015087304 +transit,100.2964152106941,15.535266886710884 +transit,100.29645266211504,15.52632675109536 +transit,100.29649011030932,15.51738660824447 +transit,100.29652755527916,15.508446458161966 +transit,100.29656499702678,15.499506300851582 +transit,100.2966024355544,15.490566136317074 +transit,100.29663987086427,15.481625964562182 +transit,100.2966773029586,15.472685785590649 +transit,100.29671473183961,15.463745599406233 +transit,100.29675215750954,15.454805406012671 +transit,100.29678957997062,15.445865205413721 +transit,100.29682699922505,15.436924997613124 +transit,100.29686441527505,15.427984782614642 +transit,100.29690182812287,15.419044560422003 +transit,100.29693923777072,15.410104331038985 +transit,100.29697664422082,15.401164094469324 +transit,100.29701404747537,15.392223850716775 +transit,100.29705144753662,15.3832835997851 +transit,100.29708884440677,15.374343341678044 +transit,100.29712623808804,15.365403076399367 +transit,100.29716362858267,15.356462803952828 +transit,100.29720101589284,15.347522524342171 +transit,100.29723840002077,15.338582237571163 +transit,100.2972757809687,15.329641943643564 +transit,100.29731315873885,15.32070164256313 +transit,100.29735053333339,15.311761334333612 +transit,100.29738790475457,15.302821018958783 +transit,100.29742527300459,15.293880696442397 +transit,100.29746263808566,15.284940366788215 +Takhli_Royal_Thai_AFB,100.2975,15.27600003 +transit,100.30069924279596,15.26770949073969 +transit,100.30389823445499,15.259418899695044 +transit,100.30709697513836,15.251128256898525 +transit,100.31029546500737,15.24283756238261 +transit,100.31349370422318,15.234546816179758 +transit,100.31669169294699,15.226256018322408 +transit,100.31988943133992,15.217965168843028 +transit,100.32308691956304,15.209674267774032 +transit,100.32628415777738,15.20138331514786 +transit,100.32948114614398,15.193092310996935 +transit,100.33267788482374,15.184801255353674 +transit,100.3358743739776,15.176510148250474 +transit,100.33907061376644,15.168218989719747 +transit,100.34226660435107,15.15992777979387 +transit,100.34546234589229,15.15163651850525 +transit,100.3486578385508,15.143345205886236 +transit,100.35185308248737,15.135053841969224 +transit,100.35504807786259,15.126762426786561 +transit,100.35824282483712,15.118470960370601 +transit,100.36143732357152,15.110179442753697 +transit,100.36463157422632,15.101887873968192 +transit,100.367825576962,15.093596254046412 +transit,100.37101933193902,15.085304583020678 +transit,100.37421283931778,15.077012860923318 +transit,100.37740609925865,15.06872108778664 +transit,100.38059911192194,15.060429263642948 +transit,100.38379187746793,15.052137388524525 +transit,100.38698439605686,15.043845462463674 +transit,100.39017666784893,15.035553485492663 +transit,100.39336869300428,15.027261457643776 +transit,100.39656047168305,15.018969378949272 +transit,100.39975200404527,15.01067724944141 +transit,100.40294329025099,15.00238506915245 +transit,100.40613433046019,14.99409283811462 +transit,100.40932512483282,14.985800556360166 +transit,100.41251567352877,14.977508223921316 +transit,100.41570597670791,14.969215840830294 +transit,100.41889603453006,14.96092340711931 +transit,100.42208584715502,14.95263092282057 +transit,100.42527541474247,14.944338387966276 +transit,100.42846473745215,14.936045802588618 +transit,100.4316538154437,14.927753166719786 +transit,100.43484264887672,14.91946048039195 +transit,100.43803123791079,14.911167743637288 +transit,100.44121958270544,14.90287495648796 +transit,100.44440768342017,14.894582118976123 +transit,100.4475955402144,14.886289231133915 +transit,100.45078315324754,14.87799629299349 +transit,100.45397052267896,14.869703304586976 +transit,100.45715764866797,14.861410265946501 +transit,100.46034453137388,14.853117177104183 +transit,100.46353117095589,14.844824038092138 +transit,100.46671756757323,14.836530848942466 +transit,100.46990372138504,14.828237609687264 +transit,100.47308963255043,14.819944320358626 +transit,100.47627530122848,14.811650980988631 +transit,100.47946072757824,14.803357591609359 +transit,100.4826459117587,14.795064152252879 +transit,100.48583085392879,14.78677066295124 +transit,100.48901555424742,14.778477123736515 +transit,100.49220001287348,14.770183534640735 +transit,100.4953842299658,14.761889895695951 +transit,100.49856820568314,14.753596206934187 +transit,100.50175194018428,14.74530246838747 +transit,100.5049354336279,14.73700868008782 +transit,100.50811868617268,14.72871484206725 +transit,100.51130169797725,14.720420954357756 +transit,100.51448446920017,14.712127016991342 +Pho_Talat_Kaeo,100.517667,14.70383303 +transit,100.52002398109886,14.69557974768047 +transit,100.52238078523528,14.687326435559017 +transit,100.52473741252587,14.67907309365443 +transit,100.52709386308716,14.670819721985474 +transit,100.52945013703572,14.662566320570951 +transit,100.53180623448806,14.65431288942962 +transit,100.53416215556064,14.646059428580251 +transit,100.53651790036989,14.637805938041621 +transit,100.53887346903225,14.629552417832473 +transit,100.5412288616641,14.621298867971596 +transit,100.54358407838177,14.613045288477721 +transit,100.54593911930161,14.604791679369601 +transit,100.5482939845399,14.596538040666001 +transit,100.5506486742129,14.58828437238565 +transit,100.55300318843683,14.580030674547297 +transit,100.55535752732793,14.571776947169676 +transit,100.55771169100232,14.563523190271521 +transit,100.56006567957617,14.55526940387156 +transit,100.56241949316559,14.547015587988525 +transit,100.56477313188665,14.538761742641132 +transit,100.5671265958554,14.530507867848103 +transit,100.56947988518785,14.52225396362816 +Ban_Khok,100.571833,14.51400003 +transit,100.57420813650732,14.505680080989574 +transit,100.57658309567651,14.497360102068562 +transit,100.57895787762642,14.489040093256166 +transit,100.58133248247591,14.480720054571576 +transit,100.58370691034378,14.47239998603399 +transit,100.58608116134877,14.464079887662594 +transit,100.58845523560967,14.45575975947656 +transit,100.59082913324517,14.447439601495084 +transit,100.59320285437393,14.439119413737332 +transit,100.59557639911462,14.430799196222486 +transit,100.59794976758587,14.422478948969708 +transit,100.60032295990625,14.414158671998159 +transit,100.60269597619431,14.405838365327005 +transit,100.60506881656859,14.397518028975405 +transit,100.60744148114759,14.389197662962516 +transit,100.60981397004974,14.380877267307483 +transit,100.61218628339351,14.372556842029446 +transit,100.61455842129728,14.364236387147564 +transit,100.61693038387942,14.355915902680964 +transit,100.61930217125828,14.34759538864878 +transit,100.62167378355217,14.339274845070147 +transit,100.62404522087937,14.3309542719642 +transit,100.6264164833581,14.322633669350049 +transit,100.62878757110661,14.314313037246832 +transit,100.63115848424307,14.30599237567365 +transit,100.63352922288564,14.297671684649622 +transit,100.63589978715244,14.289350964193856 +transit,100.63827017716157,14.281030214325462 +transit,100.64064039303109,14.272709435063536 +transit,100.64301043487905,14.264388626427179 +transit,100.64538030282341,14.25606778843549 +transit,100.64774999698218,14.24774692110755 +transit,100.6501195174733,14.239426024462457 +transit,100.65248886441466,14.231105098519285 +transit,100.65485803792416,14.222784143297124 +transit,100.65722703811964,14.21446315881504 +transit,100.65959586511892,14.206142145092118 +transit,100.66196451903978,14.197821102147415 +Ban_Khlong_Sam,100.664333,14.18950003 +transit,100.66664363112469,14.181428781010574 +transit,100.66895409878745,14.173357504322949 +transit,100.67126440309633,14.165286199954679 +transit,100.6735745441593,14.15721486792332 +transit,100.6758845220843,14.149143508246421 +transit,100.67819433697926,14.141072120941542 +transit,100.68050398895208,14.133000706026225 +transit,100.68281347811065,14.124929263518016 +transit,100.6851228045628,14.11685779343445 +transit,100.68743196841635,14.108786295793069 +transit,100.68974096977908,14.100714770611404 +transit,100.6920498087588,14.092643217906986 +transit,100.6943584854632,14.084571637697344 +Khlong_Si,100.696667,14.07650003 +transit,100.69257331716587,14.069046258352722 +transit,100.68847989956993,14.061592412710672 +transit,100.68438674705119,14.054138493118721 +transit,100.68029385944872,14.046684499621724 +transit,100.67620123660159,14.03923043226454 +transit,100.67210887834894,14.031776291092006 +transit,100.66801678452988,14.02432207614896 +transit,100.66392495498363,14.016867787480221 +transit,100.65983338954939,14.009413425130608 +transit,100.65574208806642,14.001958989144919 +transit,100.65165105037399,13.994504479567963 +transit,100.64756027631141,13.98704989644452 +transit,100.64346976571804,13.97959523981937 +transit,100.63937951843324,13.972140509737278 +transit,100.63528953429643,13.964685706243007 +transit,100.63119981314708,13.95723082938131 +transit,100.62711035482462,13.949775879196922 +transit,100.62302115916859,13.942320855734582 +transit,100.61893222601852,13.93486575903901 +transit,100.614843555214,13.92741058915492 +transit,100.6107551465946,13.919955346127017 +Don_Mueang,100.606667,13.91250003 +transit,100.599341342713,13.908266503833755 +transit,100.59201595181146,13.90403275628471 +transit,100.58469082721518,13.899798787430663 +transit,100.57736596884396,13.895564597349402 +transit,100.57004137661762,13.891330186118715 +transit,100.56271705045594,13.887095553816376 +transit,100.55539299027873,13.882860700520158 +transit,100.54806919600576,13.878625626307828 +transit,100.54074566755678,13.87439033125714 +transit,100.53342240485159,13.870154815445852 +transit,100.52609940780994,13.865919078951713 +transit,100.51877667635156,13.861683121852458 +transit,100.51145421039624,13.857446944225824 +transit,100.5041320098637,13.853210546149542 +transit,100.49681007467366,13.848973927701334 +transit,100.48948840474586,13.844737088958915 +Bang_Si_Mueang,100.482167,13.84050003 +transit,100.47628681767374,13.835061382455812 +transit,100.47040690852803,13.829622591498682 +transit,100.46452727244568,13.82418365719346 +transit,100.4586479093094,13.818744579604992 +transit,100.45276881900202,13.81330535879812 +transit,100.44689000140625,13.807865994837666 +transit,100.44101145640494,13.802426487788445 +transit,100.43513318388084,13.796986837715274 +transit,100.42925518371678,13.791547044682954 +transit,100.42337745579556,13.786107108756267 +Atsawaphichet,100.4175,13.78066703 +transit,100.41831485710395,13.77205175376932 +transit,100.41912965452572,13.76343646882459 +transit,100.41994439230844,13.754821175171218 +transit,100.42075907049527,13.746205872814615 +transit,100.42157368912932,13.737590561760186 +transit,100.4223882482537,13.728975242013346 +transit,100.4232027479115,13.720359913579498 +transit,100.42401718814584,13.711744576464056 +transit,100.42483156899976,13.703129230672427 +transit,100.42564589051635,13.694513876210022 +transit,100.42646015273864,13.685898513082249 +transit,100.4272743557097,13.677283141294513 +transit,100.42808849947255,13.668667760852232 +transit,100.4289025840702,13.660052371760813 +transit,100.42971660954566,13.65143697402566 +transit,100.43053057594193,13.642821567652192 +transit,100.43134448330198,13.634206152645808 +transit,100.43215833166882,13.625590729011927 +transit,100.43297212108537,13.61697529675595 +transit,100.4337858515946,13.608359855883293 +transit,100.43459952323946,13.599744406399367 +transit,100.43541313606285,13.591128948309574 +transit,100.4362266901077,13.582513481619333 +transit,100.43704018541692,13.573898006334051 +transit,100.43785362203339,13.565282522459135 +Bang_Pheniang,100.438667,13.55666703 +transit,100.44645578706078,13.55271367800042 +transit,100.45424431666602,13.5487600820121 +transit,100.46203258888636,13.544806242116662 +transit,100.46982060379246,13.540852158395728 +transit,100.47760836145501,13.536897830930911 +transit,100.48539586194471,13.532943259803822 +transit,100.49318310533226,13.528988445096063 +transit,100.50097009168837,13.525033386889243 +transit,100.50875682108376,13.521078085264945 +transit,100.51654329358917,13.517122540304765 +transit,100.52432950927535,13.513166752090296 +transit,100.53211546821304,13.50921072070311 +transit,100.539901170473,13.505254446224786 +transit,100.54768661612604,13.5012979287369 +transit,100.55547180524292,13.497341168321014 +transit,100.56325673789445,13.4933841650587 +transit,100.57104141415144,13.489426919031505 +transit,100.5788258340847,13.485469430320986 +transit,100.58660999776507,13.481511699008696 +transit,100.59439390526337,13.477553725176172 +transit,100.60217755665047,13.473595508904957 +transit,100.60996095199724,13.469637050276585 +transit,100.61774409137453,13.465678349372583 +transit,100.62552697485323,13.461719406274481 +transit,100.63330960250424,13.457760221063795 +transit,100.64109197439845,13.453800793822044 +transit,100.64887409060678,13.449841124630735 +transit,100.65665595120016,13.44588121357138 +transit,100.66443755624954,13.441921060725473 +transit,100.67221890582583,13.437960666174517 +Samut_Prakan,100.68,13.43400003 +transit,100.68409653236691,13.426354643687546 +transit,100.68819280541176,13.418709186178692 +transit,100.69228881930184,13.411063657519275 +transit,100.69638457420444,13.403418057755124 +transit,100.70048007028679,13.395772386932059 +transit,100.70457530771608,13.388126645095898 +transit,100.7086702866595,13.380480832292449 +transit,100.71276500728416,13.372834948567501 +transit,100.71685946975718,13.36518899396684 +transit,100.72095367424564,13.35754296853624 +transit,100.72504762091653,13.34989687232148 +transit,100.72914130993689,13.342250705368308 +transit,100.73323474147368,13.334604467722475 +transit,100.73732791569383,13.326958159429722 +transit,100.74142083276422,13.31931178053578 +transit,100.74551349285174,13.311665331086372 +transit,100.74960589612323,13.304018811127207 +transit,100.75369804274547,13.29637222070399 +transit,100.75778993288523,13.288725559862412 +transit,100.76188156670925,13.281078828648166 +transit,100.76597294438422,13.273432027106924 +transit,100.77006406607681,13.265785155284348 +transit,100.77415493195365,13.258138213226102 +transit,100.77824554218135,13.25049120097783 +transit,100.78233589692645,13.242844118585177 +transit,100.78642599635553,13.235196966093769 +transit,100.79051584063504,13.227549743549227 +transit,100.79460542993148,13.219902450997166 +transit,100.79869476441125,13.212255088483184 +transit,100.80278384424079,13.204607656052886 +transit,100.80687266958644,13.196960153751846 +transit,100.81096124061453,13.189312581625643 +transit,100.81504955749138,13.18166493971985 +transit,100.81913762038324,13.174017228080022 +transit,100.82322542945636,13.166369446751698 +transit,100.82731298487693,13.158721595780428 +transit,100.83140028681113,13.151073675211741 +transit,100.83548733542507,13.143425685091158 +transit,100.83957413088488,13.135777625464195 +transit,100.84366067335662,13.128129496376353 +transit,100.84774696300633,13.120481297873123 +Ko_Si_Chang,100.851833,13.11283303 +transit,100.85449471198127,13.104854234186503 +transit,100.85715625248721,13.096875405965013 +transit,100.85981762163634,13.08889654535735 +transit,100.86247881954719,13.080917652385333 +transit,100.86513984633824,13.072938727070786 +transit,100.86780070212794,13.064959769435514 +transit,100.87046138703474,13.056980779501329 +transit,100.87312190117704,13.049001757290037 +transit,100.87578224467323,13.041022702823437 +transit,100.87844241764166,13.033043616123326 +transit,100.88110242020066,13.025064497211499 +transit,100.88376225246853,13.017085346109743 +transit,100.88642191456354,13.009106162839842 +transit,100.88908140660395,13.001126947423584 +transit,100.89174072870796,12.993147699882734 +transit,100.89439988099377,12.985168420239072 +transit,100.89705886357957,12.97718910851437 +transit,100.89971767658348,12.969209764730383 +transit,100.90237632012364,12.961230388908888 +transit,100.9050347943181,12.953250981071628 +transit,100.90769309928494,12.945271541240357 +transit,100.9103512351422,12.937292069436838 +transit,100.9130092020079,12.929312565682803 +Chokchai_Village,100.915667,12.92133303 +transit,100.92314465033589,12.917429712328273 +transit,100.93062206848363,12.913526179498232 +transit,100.93809925451029,12.909622431583552 +transit,100.94557620848295,12.905718468657884 +transit,100.95305293046867,12.901814290794897 +transit,100.96052942053456,12.89790989806824 +transit,100.96800567874767,12.894005290551569 +transit,100.97548170517514,12.890100468318519 +transit,100.98295749988408,12.886195431442736 +transit,100.99043306294158,12.882290179997861 +transit,100.99790839441478,12.878384714057525 +transit,101.00538349437082,12.87447903369535 +transit,101.01285836287684,12.870573138984971 +Huai_Yai,101.020333,12.86666703 +transit,101.01963555555335,12.858174652191412 +transit,101.01893815799811,12.849682267042814 +transit,101.0182408072991,12.841189874558976 +transit,101.01754350342117,12.832697474744649 +transit,101.01684624632918,12.824205067604593 +transit,101.01614903598798,12.815712653143565 +transit,101.01545187236246,12.807220231366331 +transit,101.0147547554175,12.798727802277648 +transit,101.01405768511798,12.79023536588228 +transit,101.0133606614288,12.781742922184982 +transit,101.01266368431487,12.773250471190517 +transit,101.01196675374109,12.764758012903643 +transit,101.01126986967242,12.756265547329125 +transit,101.01057303207375,12.747773074471723 +transit,101.00987624091005,12.739280594336194 +transit,101.00917949614626,12.730788106927307 +transit,101.00848279774735,12.722295612249814 +transit,101.00778614567827,12.713803110308486 +transit,101.007089539904,12.705310601108073 +transit,101.00639298038953,12.69681808465335 +transit,101.00569646709987,12.68832556094907 +U_Tapao,101.005,12.67983303 +transit,100.99748524729382,12.68476491304953 +transit,100.98997020525702,12.689696581764105 +transit,100.98245487377469,12.694628036049753 +transit,100.97493925273196,12.69955927581249 +transit,100.96742334201394,12.704490300958334 +transit,100.95990714150577,12.70942111139328 +transit,100.95239065109256,12.714351707023324 +transit,100.94487387065945,12.719282087754447 +transit,100.93735680009158,12.724212253492627 +transit,100.92983943927409,12.729142204143825 +transit,100.92232178809209,12.734071939614005 +transit,100.91480384643079,12.739001459809106 +transit,100.90728561417528,12.74393076463507 +transit,100.89976709121075,12.74885985399783 +transit,100.89224827742235,12.7537887278033 +transit,100.88472917269523,12.758717385957395 +transit,100.87720977691457,12.763645828366014 +transit,100.86969008996553,12.768574054935053 +transit,100.86217011173328,12.773502065570394 +transit,100.854649842103,12.778429860177916 +transit,100.84712928095988,12.783357438663474 +transit,100.83960842818908,12.78828480093294 +transit,100.83208728367582,12.793211946892148 +transit,100.82456584730528,12.798138876446945 +transit,100.81704411896264,12.803065589503156 +transit,100.80952209853311,12.8079920859666 +transit,100.8019997859019,12.812918365743093 +transit,100.7944771809542,12.817844428738434 +transit,100.78695428357524,12.822770274858414 +transit,100.77943109365023,12.827695904008822 +transit,100.77190761106438,12.832621316095427 +transit,100.76438383570292,12.837546511023998 +transit,100.75685976745106,12.842471488700294 +transit,100.74933540619405,12.847396249030055 +transit,100.74181075181711,12.852320791919025 +transit,100.7342858042055,12.857245117272932 +transit,100.72676056324444,12.862169224997492 +transit,100.71923502881916,12.867093114998422 +transit,100.71170920081495,12.872016787181416 +transit,100.70418307911703,12.876940241452175 +transit,100.69665666361068,12.881863477716378 +transit,100.68912995418114,12.886786495879695 +transit,100.6816029507137,12.891709295847798 +transit,100.67407565309361,12.89663187752634 +transit,100.66654806120613,12.90155424082097 +transit,100.65902017493657,12.906476385637317 +transit,100.65149199417019,12.91139831188102 +transit,100.64396351879226,12.91632001945769 +transit,100.63643474868809,12.921241508272947 +transit,100.62890568374299,12.926162778232381 +transit,100.62137632384221,12.931083829241587 +transit,100.61384666887108,12.936004661206152 +transit,100.6063167187149,12.940925274031644 +transit,100.59878647325895,12.945845667623628 +transit,100.59125593238859,12.950765841887659 +transit,100.58372509598912,12.955685796729286 +transit,100.57619396394584,12.960605532054041 +transit,100.56866253614409,12.965525047767454 +transit,100.56113081246917,12.970444343775045 +transit,100.55359879280647,12.975363419982312 +transit,100.54606647704126,12.98028227629477 +transit,100.53853386505892,12.985200912617898 +transit,100.5310009567448,12.990119328857183 +transit,100.52346775198421,12.995037524918098 +transit,100.51593425066253,12.9999555007061 +transit,100.50840045266511,13.004873256126647 +transit,100.50086635787731,13.009790791085182 +transit,100.49333196618448,13.01470810548714 +transit,100.48579727747202,13.019625199237947 +transit,100.47826229162526,13.02454207224302 +transit,100.47072700852961,13.029458724407766 +transit,100.46319142807043,13.034375155637582 +transit,100.4556555501331,13.039291365837858 +transit,100.44811937460304,13.044207354913977 +transit,100.4405829013656,13.049123122771306 +transit,100.43304613030621,13.054038669315206 +transit,100.42550906131025,13.05895399445103 +transit,100.41797169426313,13.063869098084117 +transit,100.41043402905026,13.068783980119807 +transit,100.40289606555706,13.073698640463418 +transit,100.39535780366893,13.078613079020267 +transit,100.3878192432713,13.08352729569566 +transit,100.38028038424959,13.088441290394893 +transit,100.37274122648923,13.093355063023258 +transit,100.36520176987565,13.09826861348602 +transit,100.3576620142943,13.103181941688465 +transit,100.35012195963061,13.108095047535835 +transit,100.34258160577004,13.11300793093339 +transit,100.33504095259802,13.117920591786367 +Phetchaburi,100.3275,13.12283303 +transit,100.32754165237236,13.130527555342772 +transit,100.32758330733789,13.1382220760861 +transit,100.32762496489835,13.145916592227486 +transit,100.32766662505544,13.153611103764428 +transit,100.32770828781092,13.161305610694422 +transit,100.32774995316653,13.169000113014974 +transit,100.32779162112399,13.176694610723583 +transit,100.32783329168505,13.184389103817743 +transit,100.32787496485145,13.192083592294967 +transit,100.3279166406249,13.199778076152752 +transit,100.32795831900718,13.207472555388593 +Phetchaburi,100.328,13.21516703 +transit,100.32804932534562,13.22372880860958 +transit,100.3280986541334,13.232290581485813 +transit,100.32814798636589,13.24085234862526 +transit,100.32819732204565,13.24941411002448 +transit,100.32824666117523,13.25797586568004 +transit,100.32829600375716,13.26653761558849 +transit,100.328345349794,13.275099359746399 +transit,100.32839469928834,13.28366109815033 +transit,100.32844405224269,13.292222830796844 +transit,100.32849340865961,13.300784557682498 +transit,100.32854276854167,13.309346278803861 +transit,100.32859213189141,13.3179079941575 +transit,100.3286414987114,13.326469703739976 +transit,100.32869086900419,13.335031407547852 +transit,100.32874024277234,13.343593105577696 +transit,100.32878962001841,13.352154797826074 +transit,100.32883900074496,13.360716484289556 +transit,100.32888838495454,13.369278164964706 +transit,100.32893777264971,13.377839839848091 +transit,100.32898716383305,13.386401508936281 +transit,100.3290365585071,13.394963172225848 +transit,100.32908595667442,13.403524829713355 +transit,100.3291353583376,13.412086481395372 +transit,100.32918476349919,13.420648127268477 +transit,100.32923417216173,13.429209767329235 +transit,100.32928358432781,13.437771401574219 +Samut_Sakhon,100.329333,13.44633303 +transit,100.32738963826714,13.454203588841562 +transit,100.3254461496106,13.462074127756567 +transit,100.32350253394532,13.469944646732305 +transit,100.32155879118619,13.477815145756043 +transit,100.31961492124809,13.485685624815059 +transit,100.31767092404587,13.493556083896632 +transit,100.31572679949439,13.501426522988032 +transit,100.31378254750845,13.509296942076535 +transit,100.31183816800285,13.517167341149399 +transit,100.30989366089239,13.525037720193898 +transit,100.3079490260918,13.532908079197295 +transit,100.30600426351585,13.540778418146852 +transit,100.30405937307923,13.54864873702983 +transit,100.30211435469664,13.556519035833485 +transit,100.30016920828278,13.564389314545078 +transit,100.2982239337523,13.572259573151857 +transit,100.29627853101984,13.580129811641081 +Samut_Sakhon,100.294333,13.58800003 +transit,100.29231766177654,13.59613358602131 +transit,100.29030218603909,13.604267120441008 +transit,100.2882865726931,13.612400633244965 +transit,100.28627082164402,13.62053412441904 +transit,100.28425493279732,13.62866759394911 +transit,100.28223890605837,13.636801041821029 +transit,100.28022274133257,13.644934468020663 +transit,100.27820643852526,13.653067872533864 +transit,100.2761899975418,13.661201255346494 +transit,100.27417341828749,13.669334616444402 +transit,100.27215670066762,13.67746795581344 +transit,100.27013984458746,13.685601273439463 +transit,100.26812284995226,13.693734569308306 +transit,100.26610571666723,13.701867843405827 +transit,100.26408844463755,13.710001095717853 +transit,100.26207103376844,13.718134326230237 +transit,100.260053483965,13.72626753492881 +transit,100.25803579513239,13.734400721799405 +transit,100.2560179671757,13.742533886827859 +Rai_Khing,100.254,13.75066703 +transit,100.2586740780304,13.758123399579667 +transit,100.26334845205756,13.765579676009509 +transit,100.26802312226344,13.773035859231898 +transit,100.27269808883001,13.780491949189194 +transit,100.27737335193929,13.78794794582375 +transit,100.28204891177329,13.795403849077895 +transit,100.28672476851409,13.80285965889396 +transit,100.29140092234381,13.810315375214255 +transit,100.2960773734446,13.81777099798109 +transit,100.30075412199864,13.825226527136744 +transit,100.30543116818812,13.832681962623504 +transit,100.31010851219531,13.840137304383626 +transit,100.31478615420248,13.847592552359382 +transit,100.31946409439196,13.855047706493 +transit,100.3241423329461,13.862502766726717 +transit,100.32882087004727,13.869957733002755 +transit,100.33349970587791,13.877412605263316 +transit,100.33817884062047,13.884867383450601 +transit,100.34285827445746,13.892322067506793 +transit,100.34753800757137,13.89977665737406 +transit,100.35221804014478,13.907231152994562 +transit,100.35689837236029,13.914685554310452 +transit,100.36157900440053,13.92213986126387 +transit,100.36625993644816,13.929594073796933 +transit,100.37094116868589,13.93704819185176 +transit,100.37562270129644,13.944502215370443 +transit,100.3803045344626,13.951956144295085 +transit,100.38498666836715,13.959409978567747 +transit,100.38966910319296,13.966863718130504 +transit,100.39435183912289,13.974317362925413 +transit,100.39903487633985,13.981770912894506 +transit,100.4037182150268,13.989224367979812 +transit,100.4084018553667,13.996677728123364 +transit,100.41308579754259,14.004130993267152 +transit,100.4177700417375,14.011584163353172 +transit,100.42245458813453,14.01903723832341 +transit,100.42713943691679,14.026490218119836 +transit,100.43182458826746,14.033943102684404 +transit,100.4365100423697,14.04139589195906 +transit,100.44119579940677,14.04884858588574 +transit,100.44588185956191,14.056301184406367 +transit,100.45056822301844,14.063753687462848 +transit,100.45525488995966,14.071206094997075 +transit,100.45994186056897,14.078658406950948 +transit,100.46462913502977,14.086110623266327 +transit,100.46931671352549,14.09356274388508 +transit,100.4740045962396,14.101014768749055 +transit,100.47869278335563,14.10846669780009 +transit,100.48338127505711,14.11591853098001 +transit,100.48807007152764,14.123370268230632 +transit,100.49275917295083,14.13082190949375 +transit,100.4974485795103,14.138273454711156 +transit,100.5021382913898,14.145724903824627 +transit,100.50682830877301,14.15317625677593 +transit,100.5115186318437,14.16062751350682 +transit,100.51620926078567,14.168078673959027 +transit,100.52090019578274,14.175529738074289 +transit,100.52559143701879,14.182980705794318 +transit,100.53028298467773,14.190431577060822 +transit,100.53497483894346,14.197882351815487 +Ko_Koet,100.539667,14.20533303 +transit,100.54797860533483,14.204279516957863 +transit,100.55629013377941,14.203225715194685 +transit,100.56460158531932,14.202171624735378 +transit,100.57291295994017,14.201117245604847 +transit,100.58122425762754,14.20006257782802 +transit,100.58953547836708,14.199007621429818 +transit,100.5978466221444,14.197952376435179 +transit,100.60615768894513,14.196896842869032 +transit,100.61446867875489,14.195841020756331 +transit,100.62277959155935,14.19478491012202 +transit,100.63109042734415,14.193728510991058 +transit,100.63940118609494,14.192671823388402 +transit,100.6477118677974,14.19161484733902 +transit,100.65602247243719,14.190557582867896 +Ban_Khlong_Sam,100.664333,14.18950003 +transit,100.66664363112469,14.181428781010574 +transit,100.66895409878745,14.173357504322949 +transit,100.67126440309633,14.165286199954679 +transit,100.6735745441593,14.15721486792332 +transit,100.6758845220843,14.149143508246421 +transit,100.67819433697926,14.141072120941542 +transit,100.68050398895208,14.133000706026225 +transit,100.68281347811065,14.124929263518016 +transit,100.6851228045628,14.11685779343445 +transit,100.68743196841635,14.108786295793069 +transit,100.68974096977908,14.100714770611404 +transit,100.6920498087588,14.092643217906986 +transit,100.6943584854632,14.084571637697344 +Khlong_Si,100.696667,14.07650003 +transit,100.69257331716587,14.069046258352722 +transit,100.68847989956993,14.061592412710672 +transit,100.68438674705119,14.054138493118721 +transit,100.68029385944872,14.046684499621724 +transit,100.67620123660159,14.03923043226454 +transit,100.67210887834894,14.031776291092006 +transit,100.66801678452988,14.02432207614896 +transit,100.66392495498363,14.016867787480221 +transit,100.65983338954939,14.009413425130608 +transit,100.65574208806642,14.001958989144919 +transit,100.65165105037399,13.994504479567963 +transit,100.64756027631141,13.98704989644452 +transit,100.64346976571804,13.97959523981937 +transit,100.63937951843324,13.972140509737278 +transit,100.63528953429643,13.964685706243007 +transit,100.63119981314708,13.95723082938131 +transit,100.62711035482462,13.949775879196922 +transit,100.62302115916859,13.942320855734582 +transit,100.61893222601852,13.93486575903901 +transit,100.614843555214,13.92741058915492 +transit,100.6107551465946,13.919955346127017 +Don_Mueang,100.606667,13.91250003 +transit,100.6049446025679,13.90816671035839 +transit,100.60322226924221,13.903833377023446 +Sanam_Bin,100.6015,13.89950003 +transit,100.59301296559651,13.901765024837376 +transit,100.5845257661695,13.904029724192878 +transit,100.5760384017093,13.906294128010886 +transit,100.56755087220628,13.908558236235775 +transit,100.55906317765078,13.910822048811921 +transit,100.55057531803321,13.913085565683714 +transit,100.54208729334393,13.915348786795532 +transit,100.53359910357337,13.91761171209177 +transit,100.52511074871194,13.919874341516824 +transit,100.51662222875008,13.922136675015082 +transit,100.50813354367824,13.924398712530953 +transit,100.4996446934869,13.926660454008832 +transit,100.49115567816652,13.928921899393133 +transit,100.48266649770757,13.931183048628265 +transit,100.47417715210061,13.933443901658633 +transit,100.4656876413361,13.935704458428669 +transit,100.45719796540463,13.937964718882776 +transit,100.4487081242967,13.940224682965392 +transit,100.4402181180029,13.942484350620933 +transit,100.4317279465138,13.944743721793836 +transit,100.42323760981999,13.947002796428533 +transit,100.41474710791208,13.94926157446946 +transit,100.40625644078068,13.951520055861057 +transit,100.3977656084164,13.953778240547772 +transit,100.38927461080993,13.956036128474047 +transit,100.38078344795191,13.958293719584336 +transit,100.37229211983302,13.960551013823093 +transit,100.36380062644393,13.962808011134772 +transit,100.35530896777537,13.965064711463835 +transit,100.34681714381804,13.967321114754752 +transit,100.33832515456265,13.969577220951981 +Ban_Sai_Noi,100.329833,13.97183303 +transit,100.32881180554787,13.980590646029246 +transit,100.3277905338607,13.989348251459255 +transit,100.32676918488234,13.998105846283291 +transit,100.32574775855662,14.00686343049461 +transit,100.32472625482737,14.01562100408648 +transit,100.32370467363837,14.024378567052155 +transit,100.32268301493345,14.033136119384896 +transit,100.32166127865634,14.04189366107797 +transit,100.32063946475083,14.050651192124619 +transit,100.31961757316064,14.05940871251812 +transit,100.31859560382952,14.068166222251723 +transit,100.31757355670116,14.076923721318687 +transit,100.31655143171928,14.085681209712273 +transit,100.31552922882751,14.094438687425734 +transit,100.31450694796958,14.103196154452334 +transit,100.31348458908909,14.11195361078533 +transit,100.3124621521297,14.12071105641797 +transit,100.31143963703501,14.129468491343523 +transit,100.31041704374863,14.13822591555524 +transit,100.30939437221413,14.146983329046378 +transit,100.3083716223751,14.155740731810196 +transit,100.3073487941751,14.164498123839945 +transit,100.30632588755765,14.173255505128882 +transit,100.30530290246627,14.182012875670265 +transit,100.30427983884448,14.190770235457352 +transit,100.30325669663576,14.199527584483393 +transit,100.3022334757836,14.208284922741642 +transit,100.30121017623144,14.217042250225358 +transit,100.30018679792275,14.22579956692779 +transit,100.29916334080092,14.234556872842198 +transit,100.2981398048094,14.243314167961831 +transit,100.29711618989155,14.252071452279944 +transit,100.29609249599079,14.260828725789787 +transit,100.29506872305045,14.269585988484623 +transit,100.2940448710139,14.278343240357696 +transit,100.29302093982444,14.287100481402256 +transit,100.29199692942542,14.295857711611566 +transit,100.29097283976014,14.304614930978866 +transit,100.28994867077186,14.313372139497416 +transit,100.28892442240387,14.322129337160467 +transit,100.28790009459941,14.330886523961267 +transit,100.28687568730172,14.339643699893067 +transit,100.285851200454,14.348400864949117 +transit,100.2848266339995,14.357158019122675 +transit,100.28380198788138,14.36591516240698 +transit,100.2827772620428,14.374672294795284 +transit,100.28175245642693,14.383429416280846 +transit,100.28072757097691,14.392186526856905 +transit,100.27970260563586,14.40094362651672 +transit,100.2786775603469,14.409700715253525 +transit,100.2776524350531,14.418457793060584 +transit,100.27662722969755,14.427214859931134 +transit,100.27560194422331,14.435971915858435 +transit,100.27457657857342,14.444728960835716 +transit,100.2735511326909,14.453485994856248 +transit,100.27252560651876,14.462243017913258 +Ban_Khu_Khlong,100.2715,14.47100003 +transit,100.27028576553123,14.47940988010593 +transit,100.26907143958948,14.487819717938384 +transit,100.26785702211254,14.496229543489912 +transit,100.26664251303806,14.504639356753085 +transit,100.26542791230379,14.513049157720461 +transit,100.26421321984739,14.5214589463846 +transit,100.2629984356065,14.529868722738058 +transit,100.26178355951882,14.5382784867734 +transit,100.26056859152192,14.546688238483181 +transit,100.25935353155344,14.555097977859953 +transit,100.25813837955097,14.563507704896278 +transit,100.25692313545208,14.571917419584713 +transit,100.25570779919435,14.580327121917808 +transit,100.25449237071531,14.588736811888127 +transit,100.25327684995248,14.597146489488223 +transit,100.25206123684337,14.605556154710639 +transit,100.2508455313255,14.61396580754794 +transit,100.24962973333629,14.62237544799267 +transit,100.24841384281325,14.63078507603739 +transit,100.24719785969378,14.639194691674637 +transit,100.24598178391534,14.647604294896974 +transit,100.2447656154153,14.656013885696952 +transit,100.24354935413106,14.66442346406711 +Muang_Khan,100.242333,14.67283303 +transit,100.24311000160544,14.681240550739027 +transit,100.24388706258217,14.689648062801169 +transit,100.24466418297027,14.698055566181523 +transit,100.24544136280976,14.706463060875166 +transit,100.2462186021407,14.714870546877188 +transit,100.2469959010032,14.72327802418268 +transit,100.24777325943734,14.731685492786731 +transit,100.24855067748321,14.740092952684423 +transit,100.24932815518093,14.74850040387085 +transit,100.25010569257061,14.756907846341091 +transit,100.25088328969241,14.765315280090242 +transit,100.25166094658644,14.773722705113395 +transit,100.25243866329289,14.782130121405624 +transit,100.25321643985191,14.790537528962025 +transit,100.25399427630369,14.798944927777688 +transit,100.25477217268839,14.8073523178477 +transit,100.25555012904624,14.815759699167144 +transit,100.25632814541746,14.82416707173111 +transit,100.25710622184225,14.832574435534687 +transit,100.25788435836085,14.840981790572968 +transit,100.25866255501352,14.849389136841044 +transit,100.2594408118405,14.857796474333993 +transit,100.26021912888207,14.866203803046906 +transit,100.26099750617851,14.874611122974876 +transit,100.2617759437701,14.883018434112985 +transit,100.26255444169716,14.89142573645633 +Ban_Cha,100.263333,14.89983303 +transit,100.2605075745843,14.908345431356354 +transit,100.25768192704201,14.916857791535385 +transit,100.25485605722392,14.925370110510332 +transit,100.2520299649807,14.933882388254435 +transit,100.24920365016303,14.94239462474092 +transit,100.2463771126215,14.950906819943018 +transit,100.24355035220671,14.95941897383393 +transit,100.2407233687692,14.96793108638689 +transit,100.23789616215946,14.976443157575085 +transit,100.23506873222796,14.984955187371733 +transit,100.23224107882508,14.993467175750014 +transit,100.22941320180125,15.00197912268312 +transit,100.22658510100676,15.010491028144228 +transit,100.22375677629192,15.019002892106526 +transit,100.22092822750699,15.027514714543175 +transit,100.21809945450217,15.036026495427338 +transit,100.21527045712762,15.044538234732185 +transit,100.2124412352335,15.05304993243085 +transit,100.20961178866987,15.06156158849649 +transit,100.20678211728679,15.070073202902252 +transit,100.20395222093428,15.078584775621255 +transit,100.2011220994623,15.087096306626636 +transit,100.19829175272075,15.095607795891516 +transit,100.19546118055953,15.10411924338901 +transit,100.19263038282848,15.112630649092225 +transit,100.18979935937742,15.121142012974268 +transit,100.18696811005609,15.129653335008243 +transit,100.18413663471419,15.138164615167227 +transit,100.18130493320145,15.14667585342432 +transit,100.17847300536745,15.155187049752593 +transit,100.17564085106181,15.163698204125124 +transit,100.1728084701341,15.17220931651498 +transit,100.1699758624338,15.180720386895214 +transit,100.1671430278104,15.189231415238897 +transit,100.16430996611331,15.19774240151907 +transit,100.16147667719193,15.206253345708776 +transit,100.1586431608956,15.214764247781055 +transit,100.15580941707363,15.223275107708933 +transit,100.15297544557528,15.231785925465438 +transit,100.15014124624976,15.240296701023588 +transit,100.14730681894626,15.248807434356399 +transit,100.14447216351392,15.257318125436877 +transit,100.14163727980183,15.265828774238017 +transit,100.13880216765904,15.274339380732819 +transit,100.13596682693456,15.28284994489427 +transit,100.13313125747737,15.29136046669535 +transit,100.13029545913639,15.299870946109039 +transit,100.1274594317605,15.3083813831083 +transit,100.12462317519855,15.316891777666104 +transit,100.12178668929936,15.325402129755407 +transit,100.11894997391165,15.333912439349154 +transit,100.11611302888417,15.342422706420294 +transit,100.11327585406559,15.350932930941775 +transit,100.11043844930454,15.359443112886515 +transit,100.1076008144496,15.367953252227453 +transit,100.10476294934934,15.376463348937506 +transit,100.10192485385225,15.384973402989578 +transit,100.0990865278068,15.393483414356592 +transit,100.09624797106142,15.401993383011444 +transit,100.09340918346449,15.410503308927018 +transit,100.09057016486433,15.419013192076227 +transit,100.08773091510925,15.427523032431937 +transit,100.0848914340475,15.436032829967035 +transit,100.0820517215273,15.444542584654382 +transit,100.07921177739681,15.453052296466845 +transit,100.07637160150414,15.461561965377287 +transit,100.07353119369739,15.470071591358556 +transit,100.0706905538246,15.478581174383507 +transit,100.06784968173378,15.487090714424962 +transit,100.06500857727286,15.495600211455773 +transit,100.06216724028977,15.504109665448754 +transit,100.05932567063238,15.512619076376728 +transit,100.05648386814849,15.521128444212515 +transit,100.05364183268593,15.529637768928922 +transit,100.0507995640924,15.538147050498749 +transit,100.04795706221563,15.54665628889479 +transit,100.04511432690325,15.555165484089837 +transit,100.04227135800289,15.563674636056673 +transit,100.03942815536212,15.572183744768074 +transit,100.03658471882846,15.580692810196817 +transit,100.0337410482494,15.589201832315656 +transit,100.03089714347237,15.597710811097349 +transit,100.02805300434478,15.60621974651465 +transit,100.02520863071399,15.614728638540315 +transit,100.02236402242731,15.623237487147067 +transit,100.019519179332,15.631746292307646 +transit,100.01667410127527,15.640255053994785 +transit,100.01382878810433,15.64876377218119 +transit,100.01098323966632,15.657272446839583 +transit,100.00813745580832,15.665781077942668 +transit,100.00529143637739,15.674289665463148 +transit,100.00244518122054,15.682798209373718 +transit,99.99959869018473,15.691306709647064 +transit,99.99675196311688,15.699815166255869 +transit,99.99390499986389,15.708323579172806 +transit,99.99105780027257,15.71683194837055 +transit,99.98821036418973,15.725340273821754 +transit,99.9853626914621,15.733848555499081 +transit,99.98251478193642,15.74235679337518 +transit,99.97966663545931,15.750864987422695 +transit,99.97681825187742,15.75937313761426 +transit,99.97396963103729,15.767881243922508 +transit,99.9711207727855,15.77638930632006 +transit,99.96827167696848,15.78489732477954 +transit,99.96542234343272,15.793405299273555 +transit,99.96257277202459,15.80191322977471 +transit,99.95972296259045,15.810421116255604 +transit,99.95687291497663,15.818928958688828 +transit,99.95402262902938,15.827436757046963 +transit,99.95117210459492,15.835944511302595 +transit,99.94832134151945,15.844452221428298 +transit,99.94547033964908,15.852959887396633 +transit,99.94261909882992,15.861467509180162 +transit,99.93976761890802,15.869975086751435 +transit,99.93691589972937,15.878482620083002 +transit,99.93406394113994,15.886990109147405 +transit,99.93121174298564,15.895497553917169 +transit,99.92835930511232,15.904004954364835 +transit,99.92550662736586,15.912512310462906 +transit,99.922653709592,15.921019622183918 +transit,99.91980055163648,15.929526889500362 +transit,99.916947153345,15.938034112384738 +transit,99.91409351456323,15.946541290809549 +transit,99.91123963513675,15.955048424747282 +transit,99.90838551491115,15.963555514170414 +transit,99.9055311537319,15.97206255905143 +transit,99.9026765514445,15.980569559362786 +transit,99.89982170789438,15.989076515076952 +transit,99.89696662292691,15.997583426166381 +transit,99.89411129638745,16.006090292603517 +transit,99.89125572812127,16.01459711436081 +transit,99.88839991797363,16.023103891410695 +transit,99.88554386578973,16.031610623725594 +transit,99.88268757141473,16.040117311277942 +transit,99.87983103469377,16.04862395404014 +transit,99.87697425547186,16.05713055198461 +transit,99.87411723359409,16.06563710508374 +transit,99.8712599689054,16.074143613309943 +transit,99.86840246125075,16.082650076635602 +transit,99.865544710475,16.09115649503309 +transit,99.86268671642303,16.099662868474805 +transit,99.85982847893962,16.10816919693309 +transit,99.85696999786954,16.116675480380334 +transit,99.85411127305748,16.125181718788873 +transit,99.85125230434812,16.133687912131073 +transit,99.84839309158608,16.14219406037926 +transit,99.84553363461592,16.15070016350579 +transit,99.8426739332822,16.159206221482975 +transit,99.83981398742937,16.167712234283144 +transit,99.8369537969019,16.176218201878623 +transit,99.83409336154416,16.18472412424171 +transit,99.83123268120052,16.193230001344716 +transit,99.82837175571527,16.20173583315993 +transit,99.82551058493267,16.21024161965965 +transit,99.82264916869694,16.218747360816156 +transit,99.81978750685224,16.227253056601718 +transit,99.8169255992427,16.235758706988612 +transit,99.81406344571238,16.244264311949102 +transit,99.81120104610532,16.252769871455445 +transit,99.80833840026553,16.261275385479884 +transit,99.8054755080369,16.269780853994675 +transit,99.80261236926336,16.27828627697203 +transit,99.79974898378875,16.286791654384206 +transit,99.79688535145687,16.295296986203407 +transit,99.79402147211148,16.303802272401857 +transit,99.79115734559629,16.312307512951765 +transit,99.78829297175496,16.320812707825333 +transit,99.78542835043112,16.329317856994752 +transit,99.78256348146833,16.337822960432216 +transit,99.77969836471013,16.346328018109904 +Ban_Nong_Phai,99.776833,16.35483303 +transit,99.77618023461284,16.36352772012392 +transit,99.77552741141027,16.372222401058075 +transit,99.77487453035477,16.380917072797786 +transit,99.77422159140875,16.389611735338356 +transit,99.77356859453462,16.398306388675113 +transit,99.77291553969484,16.407001032803365 +transit,99.77226242685175,16.41569566771843 +transit,99.77160925596779,16.42439029341563 +transit,99.7709560270053,16.433084909890265 +transit,99.77030273992665,16.441779517137665 +transit,99.7696493946942,16.45047411515314 +transit,99.76899599127029,16.459168703932004 +transit,99.76834252961723,16.467863283469587 +transit,99.76768900969735,16.476557853761186 +transit,99.76703543147296,16.485252414802133 +transit,99.76638179490634,16.493946966587743 +transit,99.76572809995977,16.50264150911333 +transit,99.76507434659551,16.511336042374218 +transit,99.76442053477584,16.520030566365715 +transit,99.76376666446298,16.528725081083156 +transit,99.76311273561917,16.537419586521843 +transit,99.76245874820663,16.5461140826771 +transit,99.76180470218756,16.554808569544257 +transit,99.76115059752416,16.563503047118626 +transit,99.76049643417862,16.572197515395523 +transit,99.7598422121131,16.58089197437027 +transit,99.75918793128977,16.589586424038195 +transit,99.75853359167077,16.598280864394617 +transit,99.75787919321822,16.606975295434843 +transit,99.75722473589427,16.615669717154212 +transit,99.75657021966101,16.624364129548038 +transit,99.75591564448055,16.633058532611642 +transit,99.75526101031497,16.64175292634035 +transit,99.75460631712635,16.65044731072948 +transit,99.75395156487673,16.659141685774355 +transit,99.75329675352819,16.667836051470307 +transit,99.75264188304276,16.67653040781264 +transit,99.75198695338244,16.685224754796693 +transit,99.75133196450928,16.693919092417794 +transit,99.75067691638525,16.702613420671252 +transit,99.75002180897236,16.7113077395524 +transit,99.74936664223257,16.72000204905656 +transit,99.74871141612785,16.72869634917906 +transit,99.74805613062016,16.73739063991522 +transit,99.74740078567142,16.746084921260373 +transit,99.74674538124357,16.754779193209835 +transit,99.74608991729853,16.763473455758938 +transit,99.74543439379819,16.772167708903005 +transit,99.74477881070446,16.780861952637366 +transit,99.7441231679792,16.789556186957345 +transit,99.74346746558427,16.798250411858273 +transit,99.74281170348154,16.806944627335472 +transit,99.74215588163284,16.815638833384273 +Khiri_Mat_District,99.7415,16.82433303 +transit,99.74429190475959,16.832429740308847 +transit,99.74708404678597,16.840526406302324 +transit,99.7498764262191,16.848623027955263 +transit,99.752669043199,16.856719605242482 +transit,99.75546189786576,16.8648161381388 +transit,99.75825499035943,16.872912626619026 +transit,99.7610483208202,16.88100907065797 +transit,99.7638418893882,16.889105470230426 +transit,99.76663569620369,16.897201825311186 +transit,99.76942974140691,16.905298135875043 +transit,99.77222402513819,16.913394401896774 +transit,99.77501854753783,16.921490623351154 +transit,99.77781330874623,16.929586800212952 +transit,99.78060830890382,16.93768293245693 +transit,99.78340354815106,16.945779020057852 +transit,99.78619902662844,16.95387506299046 +transit,99.78899474447651,16.961971061229494 +transit,99.79179070183586,16.970067014749702 +transit,99.79458689884711,16.978162923525804 +transit,99.79738333565093,16.986258787532545 +transit,99.80018001238801,16.994354606744626 +transit,99.8029769291991,17.002450381136764 +transit,99.80577408622501,17.01054611068368 +transit,99.80857148360654,17.01864179536006 +transit,99.81136912148457,17.026737435140607 +Sukhothai,99.814167,17.03483303 +transit,99.81434040327201,17.043284529361696 +transit,99.81451382213099,17.051736021555545 +transit,99.81468725658654,17.0601875065784 +transit,99.81486070664826,17.068638984427135 +transit,99.81503417232577,17.07709045509859 +transit,99.81520765362868,17.085541918589627 +transit,99.8153811505666,17.093993374897117 +transit,99.81555466314913,17.1024448240179 +transit,99.81572819138593,17.110896265948856 +transit,99.81590173528662,17.119347700686838 +transit,99.8160752948608,17.127799128228713 +transit,99.8162488701181,17.136250548571326 +transit,99.81642246106819,17.14470196171156 +transit,99.81659606772067,17.153153367646272 +transit,99.8167696900852,17.16160476637232 +transit,99.8169433281714,17.17005615788658 +transit,99.81711698198895,17.17850754218591 +transit,99.81729065154748,17.18695891926717 +transit,99.81746433685664,17.195410289127235 +transit,99.81763803792609,17.203861651762978 +transit,99.81781175476549,17.212313007171257 +transit,99.81798548738449,17.220764355348937 +transit,99.81815923579278,17.2292156962929 +Sukhothai,99.818333,17.23766703 +transit,99.8109274024524,17.242972216999036 +transit,99.80352138185381,17.248277128540224 +transit,99.79611493806348,17.253581764518536 +transit,99.78870807094071,17.258886124828933 +transit,99.78130078034481,17.26419020936634 +transit,99.77389306613506,17.26949401802568 +transit,99.76648492817073,17.274797550701866 +transit,99.75907636631113,17.280100807289784 +transit,99.75166738041557,17.285403787684306 +transit,99.74425797034333,17.290706491780302 +transit,99.7368481359537,17.296008919472605 +transit,99.72943787710594,17.301311070656055 +transit,99.72202719365941,17.306612945225467 +transit,99.71461608547338,17.31191454307563 +transit,99.70720455240713,17.31721586410134 +transit,99.69979259431997,17.32251690819735 +transit,99.69238021107121,17.327817675258427 +transit,99.68496740252013,17.333118165179304 +transit,99.67755416852603,17.3384183778547 +transit,99.67014050894824,17.343718313179327 +transit,99.66272642364599,17.34901797104788 +transit,99.65531191247867,17.354317351355018 +transit,99.64789697530551,17.359616453995418 +transit,99.64048161198585,17.36491527886372 +transit,99.63306582237897,17.370213825854556 +transit,99.6256496063442,17.37551209486254 +transit,99.61823296374082,17.380810085782265 +transit,99.61081589442814,17.386107798508327 +transit,99.60339839826548,17.391405232935284 +transit,99.59598047511213,17.396702388957692 +transit,99.5885621248274,17.401999266470092 +transit,99.58114334727061,17.407295865367 +transit,99.57372414230106,17.41259218554293 +transit,99.56630450977806,17.41788822689237 +transit,99.5588844495609,17.42318398930979 +transit,99.55146396150894,17.42847947268966 +transit,99.54404304548144,17.433774676926422 +transit,99.53662170133775,17.4390696019145 +transit,99.52919992893716,17.444364247548318 +transit,99.521777728139,17.44965861372227 +transit,99.51435509880257,17.454952700330733 +transit,99.50693204078718,17.46024650726809 +transit,99.49950855395217,17.465540034428674 +transit,99.49208463815684,17.47083328170683 +transit,99.4846602932605,17.476126248996888 +transit,99.4772355191225,17.481418936193148 +transit,99.46981031560213,17.4867113431899 +transit,99.46238468255873,17.49200346988141 +transit,99.45495861985162,17.497295316161956 +transit,99.44753212734011,17.502586881925765 +transit,99.44010520488354,17.507878167067073 +transit,99.43267785234121,17.513169171480097 +transit,99.42525006957246,17.51845989505902 +transit,99.41782185643662,17.52375033769804 +transit,99.410393212793,17.529040499291316 +transit,99.40296413850095,17.534330379733 +transit,99.39553463341977,17.53961997891723 +transit,99.38810469740883,17.54490929673812 +transit,99.38067433032744,17.55019833308977 +transit,99.37324353203492,17.555487087866283 +transit,99.36581230239061,17.560775560961726 +transit,99.35838064125383,17.566063752270153 +transit,99.35094854848396,17.571351661685608 +transit,99.34351602394028,17.576639289102125 +transit,99.33608306748218,17.5819266344137 +transit,99.32864967896894,17.58721369751434 +transit,99.32121585825995,17.592500478298025 +transit,99.31378160521452,17.597786976658714 +transit,99.30634691969199,17.603073192490353 +transit,99.29891180155172,17.60835912568688 +transit,99.29147625065305,17.613644776142216 +transit,99.2840402668553,17.618930143750262 +transit,99.27660385001784,17.624215228404896 +Ban_Saliam_Wan,99.269167,17.62950003 +transit,99.26635252996367,17.63792495855916 +transit,99.26353779835352,17.64634983976061 +transit,99.26072280501332,17.6547746735773 +transit,99.2579075497868,17.663199459982156 +transit,99.25509203251767,17.67162419894811 +transit,99.25227625304954,17.68004889044808 +transit,99.24946021122605,17.68847353445498 +transit,99.24664390689071,17.696898130941722 +transit,99.24382733988703,17.705322679881206 +transit,99.24101051005846,17.713747181246323 +transit,99.23819341724838,17.72217163500995 +transit,99.23537606130014,17.730596041144977 +transit,99.23255844205707,17.739020399624277 +transit,99.22974055936238,17.74744471042071 +transit,99.22692241305931,17.75586897350713 +transit,99.22410400299098,17.7642931888564 +transit,99.22128532900052,17.772717356441344 +transit,99.21846639093097,17.781141476234815 +transit,99.21564718862534,17.789565548209644 +transit,99.21282772192659,17.79798957233864 +transit,99.21000799067761,17.80641354859462 +transit,99.20718799472127,17.81483747695041 +transit,99.20436773390038,17.823261357378787 +transit,99.2015472080577,17.831685189852557 +transit,99.19872641703594,17.840108974344503 +transit,99.19590536067776,17.848532710827417 +transit,99.19308403882576,17.856956399274054 +transit,99.19026245132252,17.865380039657182 +transit,99.18744059801054,17.873803631949574 +transit,99.18461847873228,17.88222717612396 +transit,99.18179609333016,17.890650672153097 +transit,99.17897344164655,17.899074120009722 +transit,99.17615052352375,17.90749751966656 +transit,99.17332733880401,17.915920871096333 +transit,99.17050388732959,17.924344174271752 +transit,99.16768016894261,17.93276742916554 +transit,99.1648561834852,17.94119063575039 +transit,99.16203193079944,17.94961379399899 +transit,99.15920741072732,17.95803690388403 +transit,99.15638262311083,17.966459965378185 +transit,99.15355756779186,17.97488297845414 +transit,99.15073224461229,17.983305943084545 +transit,99.14790665341393,17.991728859242063 +transit,99.14508079403855,18.000151726899347 +transit,99.14225466632787,18.00857454602904 +transit,99.13942827012355,18.01699731660377 +transit,99.13660160526717,18.025420038596177 +transit,99.13377467160036,18.033842711978878 +transit,99.13094746896459,18.042265336724476 +transit,99.12811999720134,18.050687912805593 +transit,99.12529225615202,18.05911044019482 +transit,99.122464245658,18.067532918864757 +transit,99.11963596556058,18.075955348787982 +transit,99.11680741570102,18.084377729937074 +transit,99.11397859592054,18.092800062284606 +transit,99.11114950606033,18.101222345803134 +transit,99.10832014596146,18.109644580465226 +transit,99.10549051546501,18.118066766243413 +transit,99.10266061441197,18.126488903110253 +transit,99.09983044264334,18.13491099103827 +Lampang,99.097,18.14333303 +transit,99.10065204694395,18.15053863299162 +transit,99.10430439321041,18.157744161260723 +transit,99.10795703894814,18.164949614770485 +transit,99.11160998430594,18.172154993484096 +transit,99.11526322943266,18.179360297364724 +transit,99.11891677447714,18.186565526375535 +transit,99.12257061958833,18.19377068047968 +transit,99.12622476491516,18.200975759640304 +transit,99.12987921060665,18.20818076382054 +transit,99.13353395681177,18.215385692983517 +transit,99.13718900367964,18.22259054709235 +transit,99.14084435135933,18.22979532611015 +Mueang_Yao,99.1445,18.23700003 +transit,99.15146735747362,18.24206090597879 +transit,99.15843511817809,18.247121525852435 +transit,99.16540328223628,18.25218188953077 +transit,99.17237184977107,18.257241996923632 +transit,99.17934082090532,18.262301847940826 +transit,99.1863101957619,18.267361442492156 +transit,99.1932799744637,18.272420780487415 +transit,99.20025015713358,18.277479861836383 +transit,99.2072207438944,18.282538686448806 +transit,99.21419173486905,18.28759725423445 +transit,99.2211631301804,18.29265556510304 +transit,99.22813492995131,18.2977136189643 +transit,99.23510713430467,18.302771415727932 +transit,99.24207974336333,18.307828955303652 +transit,99.24905275725021,18.312886237601127 +transit,99.25602617608814,18.31794326253002 +Super_Highway,99.263,18.32300003 +transit,99.25557382490359,18.32744088559543 +transit,99.2481472707872,18.331881450058834 +transit,99.2407203375578,18.336321723300404 +transit,99.23329302512239,18.34076170523036 +transit,99.22586533338799,18.345201395758863 +transit,99.21843726226156,18.349640794796098 +transit,99.21100881165015,18.35407990225223 +transit,99.20357998146078,18.358518718037413 +transit,99.19615077160049,18.362957242061793 +transit,99.1887211819763,18.367395474235504 +transit,99.18129121249532,18.37183341446868 +transit,99.17386086306458,18.376271062671425 +transit,99.16643013359115,18.380708418753848 +transit,99.15899902398213,18.385145482626054 +transit,99.1515675341446,18.389582254198125 +transit,99.1441356639857,18.394018733380133 +transit,99.13670341341249,18.398454920082145 +transit,99.12927078233214,18.402890814214228 +transit,99.12183777065178,18.40732641568642 +transit,99.11440437827852,18.411761724408755 +transit,99.10697060511956,18.416196740291273 +transit,99.09953645108203,18.420631463243982 +transit,99.09210191607312,18.42506589317689 +Tha_Sop_Chai,99.084667,18.42950003 +transit,99.07590508762327,18.42952644374126 +transit,99.06714317259124,18.429552453173475 +transit,99.05838125494486,18.429578058295917 +transit,99.04961933472507,18.429603259107854 +transit,99.04085741197284,18.42962805560859 +transit,99.0320954867291,18.429652447797427 +transit,99.02333355903484,18.42967643567368 +transit,99.01457162893098,18.429700019236673 +transit,99.00580969645848,18.429723198485757 +transit,98.99704776165832,18.429745973420264 +transit,98.98828582457143,18.429768344039562 +transit,98.97952388523878,18.42979031034303 +transit,98.97076194370132,18.429811872330045 +Ban_Fang_Min,98.962,18.42983303 +transit,98.96202131799997,18.438512668615008 +transit,98.96204263814047,18.447192299299033 +transit,98.96206396042278,18.45587192204888 +transit,98.9620852848482,18.464551536861347 +transit,98.96210661141804,18.473231143733248 +transit,98.96212794013357,18.481910742661395 +transit,98.96214927099611,18.490590333642597 +transit,98.96217060400696,18.499269916673665 +transit,98.9621919391674,18.507949491751404 +transit,98.96221327647872,18.516629058872628 +transit,98.96223461594225,18.525308618034146 +transit,98.96225595755928,18.533988169232785 +transit,98.9622773013311,18.54266771246535 +transit,98.962298647259,18.551347247728643 +transit,98.96231999534432,18.5600267750195 +transit,98.96234134558831,18.568706294334728 +transit,98.96236269799232,18.577385805671142 +transit,98.96238405255762,18.58606530902557 +transit,98.96240540928552,18.594744804394814 +transit,98.96242676817734,18.60342429177571 +transit,98.96244812923435,18.612103771165064 +transit,98.96246949245788,18.620783242559707 +transit,98.96249085784923,18.62946270595645 +transit,98.9625122254097,18.638142161352125 +transit,98.96253359514058,18.64682160874355 +transit,98.96255496704322,18.655501048127554 +transit,98.96257634111889,18.664180479500953 +transit,98.9625977173689,18.672859902860576 +transit,98.96261909579457,18.68153931820326 +transit,98.96264047639718,18.690218725525803 +transit,98.96266185917808,18.69889812482506 +transit,98.96268324413855,18.70757751609785 +transit,98.9627046312799,18.716256899340998 +transit,98.96272602060345,18.72493627455134 +transit,98.96274741211052,18.733615641725706 +transit,98.96276880580238,18.74229500086092 +transit,98.96279020168038,18.750974351953822 +transit,98.96281159974582,18.759653695001234 +Chiang_Mai,98.962833,18.76833303 +transit,98.97102345626038,18.76608001026244 +transit,98.97921369496291,18.7638266311987 +transit,98.9874037161068,18.7615728928644 +transit,98.9955935196913,18.759318795315163 +transit,99.00378310571564,18.757064338606618 +transit,99.01197247417912,18.75480952279439 +transit,99.02016162508102,18.75255434793413 +transit,99.02835055842063,18.750298814081457 +transit,99.03653927419731,18.74804292129203 +transit,99.04472777241037,18.745786669621488 +transit,99.05291605305919,18.743530059125487 +transit,99.06110411614316,18.74127308985968 +transit,99.06929196166166,18.739015761879713 +transit,99.07747958961414,18.73675807524127 +Inizio,99.085667,18.73450003 +transit,99.0856442495099,18.726204652347565 +transit,99.08562150123944,18.717909267353512 +transit,99.08559875518738,18.70961387502061 +transit,99.0855760113524,18.701318475351638 +transit,99.08555326973327,18.693023068349355 +transit,99.08553053032868,18.684727654016523 +transit,99.0855077931374,18.676432232355932 +transit,99.08548505815813,18.66813680337033 +transit,99.08546232538961,18.65984136706251 +transit,99.08543959483058,18.651545923435226 +transit,99.08541686647975,18.64325047249126 +transit,99.08539414033586,18.63495501423338 +transit,99.08537141639765,18.626659548664367 +transit,99.08534869466384,18.618364075786985 +transit,99.08532597513317,18.61006859560402 +transit,99.08530325780438,18.60177310811824 +transit,99.08528054267619,18.593477613332425 +transit,99.08525782974733,18.58518211124935 +transit,99.08523511901656,18.57688660187179 +transit,99.08521241048258,18.568591085202527 +transit,99.08518970414416,18.560295561244335 +Ban_Sa_Laeng,99.085167,18.55200003 +transit,99.09421416772395,18.550220010116274 +transit,99.10326114792517,18.548439556428413 +transit,99.11230794058116,18.546658668989824 +transit,99.12135454566953,18.544877347853905 +transit,99.13040096316784,18.543095593074085 +transit,99.13944719305371,18.541313404703782 +transit,99.14849323530477,18.539530782796437 +transit,99.15753908989865,18.537747727405492 +transit,99.16658475681304,18.535964238584413 +transit,99.17563023602561,18.53418031638665 +transit,99.18467552751409,18.53239596086568 +transit,99.19372063125621,18.530611172074995 +transit,99.20276554722972,18.52882595006808 +transit,99.21181027541238,18.527040294898434 +transit,99.220854815782,18.525254206619564 +transit,99.2298991683164,18.523467685284995 +transit,99.2389433329934,18.521680730948255 +transit,99.24798730979086,18.519893343662883 +transit,99.25703109868668,18.51810552348242 +transit,99.26607469965876,18.51631727046042 +transit,99.27511811268498,18.514528584650456 +transit,99.28416133774331,18.512739466106098 +transit,99.29320437481171,18.51094991488093 +transit,99.30224722386818,18.50915993102853 +transit,99.31128988489068,18.507369514602523 +transit,99.32033235785728,18.505578665656515 +transit,99.329374642746,18.503787384244102 +transit,99.33841673953492,18.501995670418943 +transit,99.34745864820212,18.50020352423465 +transit,99.3565003687257,18.498410945744894 +transit,99.36554190108382,18.49661793500331 +transit,99.3745832452546,18.494824492063575 +transit,99.38362440121622,18.49303061697936 +transit,99.39266536894688,18.49123630980435 +transit,99.4017061484248,18.48944157059223 +transit,99.41074673962817,18.48764639939671 +transit,99.4197871425353,18.485850796271492 +transit,99.42882735712443,18.484054761270304 +transit,99.43786738337388,18.482258294446865 +transit,99.44690722126195,18.480461395854924 +transit,99.455946870767,18.47866406554822 +transit,99.46498633186737,18.47686630358051 +transit,99.47402560454144,18.47506811000555 +transit,99.48306468876761,18.473269484877136 +transit,99.49210358452433,18.471470428249035 +transit,99.50114229179,18.469670940175035 +transit,99.51018081054313,18.467871020708944 +transit,99.51921914076216,18.46607066990457 +transit,99.52825728242564,18.464269887815735 +transit,99.53729523551208,18.462468674496268 +Ton_Thong_Chai,99.546333,18.46066703 +transit,99.5545038256019,18.456384153671483 +transit,99.56267424596551,18.45210092339058 +transit,99.57084426117846,18.44781733926222 +transit,99.5790138713284,18.44353340139133 +transit,99.58718307650297,18.439249109882837 +transit,99.59535187678985,18.434964464841645 +transit,99.60352027227671,18.43067946637266 +transit,99.6116882630513,18.426394114580752 +transit,99.61985584920133,18.42210840957083 +transit,99.62802303081453,18.417822351447754 +transit,99.6361898079787,18.413535940316383 +transit,99.64435618078161,18.40924917628158 +transit,99.65252214931105,18.404962059448184 +transit,99.66068771365487,18.40067458992104 +transit,99.66885287390089,18.396386767804955 +transit,99.67701763013697,18.392098593204768 +transit,99.68518198245101,18.38781006622528 +transit,99.69334593093089,18.383521186971286 +transit,99.70150947566452,18.37923195554758 +transit,99.70967261673987,18.374942372058943 +transit,99.71783535424484,18.370652436610147 +transit,99.72599768826744,18.36636214930595 +transit,99.73415961889565,18.36207151025111 +transit,99.74232114621746,18.35778051955037 +transit,99.75048227032093,18.35348917730846 +transit,99.7586429912941,18.349197483630114 +transit,99.76680330922501,18.344905438620046 +transit,99.77496322420176,18.340613042382955 +transit,99.78312273631245,18.33632029502355 +transit,99.7912818456452,18.332027196646514 +transit,99.79944055228815,18.327733747356532 +transit,99.80759885632943,18.323439947258276 +transit,99.81575675785727,18.319145796456397 +transit,99.82391425695982,18.314851295055554 +transit,99.8320713537253,18.31055644316039 +transit,99.84022804824195,18.306261240875536 +transit,99.84838434059802,18.301965688305614 +transit,99.85654023088175,18.297669785555254 +transit,99.86469571918146,18.293373532729046 +transit,99.87285080558543,18.289076929931596 +transit,99.88100549018199,18.284779977267487 +transit,99.88915977305948,18.280482674841306 +transit,99.89731365430626,18.276185022757613 +transit,99.9054671340107,18.27188702112097 +transit,99.91362021226121,18.26758867003593 +transit,99.9217728891462,18.26328996960704 +transit,99.92992516475408,18.258990919938825 +transit,99.93807703917332,18.254691521135815 +transit,99.9462285124924,18.250391773302514 +transit,99.95437958479977,18.246091676543447 +transit,99.96253025618395,18.241791230963084 +transit,99.97068052673347,18.237490436665933 +transit,99.97883039653689,18.233189293756464 +transit,99.98697986568273,18.228887802339145 +transit,99.99512893425958,18.224585962518432 +transit,100.00327760235605,18.220283774398776 +transit,100.01142587006075,18.215981238084627 +transit,100.01957373746228,18.2116783536804 +transit,100.02772120464932,18.207375121290543 +transit,100.03586827171054,18.203071541019444 +transit,100.04401493873462,18.19876761297152 +transit,100.05216120581025,18.194463337251165 +transit,100.06030707302617,18.19015871396276 +transit,100.06845254047111,18.185853743210686 +transit,100.07659760823384,18.181548425099304 +transit,100.0847422764031,18.177242759732987 +transit,100.09288654506774,18.172936747216067 +transit,100.10103041431653,18.16863038765289 +transit,100.1091738842383,18.16432368114779 +transit,100.11731695492192,18.16001662780508 +transit,100.12545962645625,18.155709227729087 +transit,100.13360189893015,18.1514014810241 +transit,100.14174377243256,18.147093387794417 +transit,100.14988524705237,18.142784948144328 +transit,100.15802632287853,18.138476162178097 +Phrae_Airport,100.166167,18.13416703 +transit,100.16699050577331,18.12526380141945 +transit,100.16781392828184,18.1163605610984 +transit,100.16863726757772,18.107457309042537 +transit,100.16946052371303,18.098554045257508 +transit,100.17028369673984,18.089650769749 +transit,100.17110678671024,18.08074748252267 +transit,100.17192979367624,18.071844183584194 +transit,100.17275271768987,18.062940872939237 +transit,100.17357555880314,18.05403755059347 +transit,100.17439831706803,18.04513421655257 +transit,100.1752209925365,18.036230870822198 +transit,100.17604358526052,18.02732751340802 +transit,100.17686609529198,18.018424144315723 +transit,100.17768852268283,18.009520763550956 +transit,100.17851086748496,18.00061737111941 +transit,100.17933312975022,17.991713967026733 +transit,100.18015530953049,17.982810551278607 +transit,100.18097740687762,17.973907123880704 +transit,100.1817994218434,17.965003684838692 +transit,100.18262135447964,17.95610023415824 +transit,100.18344320483813,17.94719677184501 +transit,100.18426497297064,17.938293297904693 +transit,100.18508665892891,17.929389812342936 +transit,100.18590826276468,17.920486315165423 +transit,100.18672978452966,17.911582806377822 +transit,100.18755122427554,17.9026792859858 +transit,100.18837258205399,17.893775753995037 +transit,100.18919385791668,17.88487221041119 +transit,100.19001505191525,17.87596865523994 +transit,100.19083616410131,17.867065088486957 +transit,100.19165719452647,17.858161510157903 +transit,100.19247814324231,17.849257920258456 +transit,100.19329901030042,17.840354318794283 +transit,100.19411979575233,17.831450705771058 +transit,100.19494049964956,17.822547081194454 +transit,100.19576112204365,17.81364344507013 +transit,100.19658166298608,17.804739797403776 +transit,100.19740212252833,17.79583613820105 +transit,100.19822250072187,17.786932467467622 +transit,100.19904279761813,17.778028785209173 +transit,100.19986301326854,17.769125091431366 +transit,100.20068314772452,17.76022138613987 +transit,100.20150320103743,17.75131766934037 +transit,100.20232317325865,17.74241394103852 +transit,100.20314306443954,17.73351020124001 +transit,100.20396287463144,17.72460644995049 +transit,100.20478260388566,17.715702687175646 +transit,100.2056022522535,17.706798912921148 +transit,100.20642181978623,17.69789512719267 +transit,100.20724130653514,17.688991329995876 +transit,100.20806071255146,17.68008752133644 +transit,100.20888003788642,17.671183701220038 +transit,100.20969928259122,17.662279869652338 +transit,100.21051844671707,17.653376026639016 +transit,100.21133753031515,17.64447217218574 +transit,100.2121565334366,17.635568306298183 +transit,100.21297545613257,17.626664428982014 +transit,100.21379429845418,17.617760540242912 +transit,100.21461306045254,17.608856640086547 +transit,100.21543174217872,17.59995272851859 +transit,100.21625034368381,17.59104880554471 +transit,100.21706886501885,17.582144871170584 +transit,100.21788730623487,17.57324092540189 +transit,100.2187056673829,17.56433696824429 +transit,100.21952394851395,17.555432999703466 +transit,100.22034214967898,17.546529019785076 +transit,100.22116027092896,17.537625028494805 +transit,100.22197831231483,17.528721025838326 +transit,100.22279627388754,17.519817011821306 +transit,100.22361415569797,17.510912986449423 +transit,100.22443195779705,17.502008949728346 +transit,100.22524968023563,17.49310490166375 +transit,100.22606732306458,17.484200842261306 +transit,100.22688488633474,17.475296771526693 +transit,100.22770237009695,17.46639268946558 +transit,100.22851977440199,17.45748859608363 +transit,100.22933709930066,17.448584491386537 +transit,100.23015434484375,17.439680375379965 +transit,100.23097151108199,17.430776248069588 +transit,100.23178859806613,17.421872109461066 +transit,100.23260560584689,17.4129679595601 +transit,100.23342253447497,17.40406379837234 +transit,100.23423938400106,17.395159625903467 +transit,100.23505615447581,17.386255442159158 +transit,100.23587284594991,17.37735124714509 +transit,100.23668945847396,17.368447040866933 +transit,100.23750599209859,17.359542823330347 +transit,100.23832244687439,17.35063859454103 +transit,100.23913882285196,17.341734354504638 +transit,100.23995512008185,17.332830103226854 +transit,100.2407713386146,17.323925840713354 +transit,100.24158747850078,17.315021566969808 +transit,100.24240353979084,17.30611728200189 +transit,100.24321952253534,17.29721298581528 +transit,100.24403542678472,17.28830867841564 +transit,100.24485125258946,17.27940435980865 +Uttaradit,100.245667,17.27050003 +transit,100.24647026068472,17.261725471711873 +transit,100.24727344539025,17.25295090256133 +transit,100.24807655416477,17.244176322553795 +transit,100.24887958705645,17.2354017316947 +transit,100.24968254411345,17.22662712998947 +transit,100.25048542538393,17.217852517443536 +transit,100.25128823091599,17.209077894062318 +transit,100.25209096075777,17.200303259851253 +transit,100.25289361495734,17.191528614815773 +transit,100.25369619356279,17.182753958961296 +transit,100.25449869662219,17.173979292293247 +transit,100.25530112418357,17.165204614817068 +transit,100.25610347629498,17.156429926538177 +transit,100.25690575300443,17.14765522746201 +transit,100.2577079543599,17.13888051759399 +transit,100.2585100804094,17.13010579693954 +transit,100.25931213120087,17.12133106550411 +transit,100.2601141067823,17.1125563232931 +transit,100.26091600720159,17.10378157031196 +transit,100.26171783250666,17.0950068065661 +transit,100.26251958274544,17.086232032060977 +transit,100.26332125796579,17.07745724680199 +transit,100.2641228582156,17.06868245079459 +transit,100.26492438354272,17.059907644044195 +transit,100.265725833995,17.05113282655624 +transit,100.26652720962025,17.042357998336144 +transit,100.26732851046629,17.03358315938934 +transit,100.26812973658089,17.024808309721273 +transit,100.26893088801187,17.016033449337357 +transit,100.26973196480694,17.00725857824302 +transit,100.27053296701388,16.9984836964437 +transit,100.27133389468041,16.989708803944822 +transit,100.27213474785425,16.98093390075181 +transit,100.2729355265831,16.972158986870113 +transit,100.27373623091462,16.963384062305142 +transit,100.27453686089652,16.95460912706233 +transit,100.2753374165764,16.94583418114712 +transit,100.27613789800193,16.937059224564926 +transit,100.27693830522072,16.928284257321177 +transit,100.27773863828037,16.91950927942132 +transit,100.27853889722849,16.910734290870778 +transit,100.27933908211261,16.90195929167497 +transit,100.28013919298034,16.893184281839343 +transit,100.28093922987918,16.884409261369314 +transit,100.28173919285669,16.87563423027033 +transit,100.28253908196035,16.866859188547803 +transit,100.28333889723767,16.85808413620717 +transit,100.28413863873612,16.84930907325387 +transit,100.2849383065032,16.840533999693328 +transit,100.28573790058631,16.831758915530973 +transit,100.2865374210329,16.82298382077224 +transit,100.28733686789042,16.814208715422556 +transit,100.28813624120622,16.805433599487355 +transit,100.28893554102771,16.796658472972066 +transit,100.28973476740228,16.787883335882125 +transit,100.29053392037726,16.779108188222956 +Phitsanulok,100.291333,16.77033303 +transit,100.29136817727955,16.761526221146873 +transit,100.29140335132223,16.752719404776496 +transit,100.29143852213012,16.743912580892363 +transit,100.29147368970533,16.735105749497954 +transit,100.29150885404994,16.726298910596743 +transit,100.29154401516607,16.71749206419222 +transit,100.2915791730558,16.70868521028787 +transit,100.29161432772122,16.699878348887182 +transit,100.29164947916443,16.691071479993624 +transit,100.29168462738754,16.682264603610708 +transit,100.29171977239261,16.673457719741904 +transit,100.29175491418177,16.6646508283907 +transit,100.29179005275708,16.655843929560593 +transit,100.29182518812065,16.64703702325506 +transit,100.29186032027457,16.638230109477604 +transit,100.29189544922092,16.6294231882317 +transit,100.29193057496178,16.620616259520865 +transit,100.29196569749925,16.61180932334857 +transit,100.29200081683543,16.603002379718312 +transit,100.29203593297238,16.594195428633583 +transit,100.29207104591221,16.58538847009788 +transit,100.292106155657,16.5765815041147 +transit,100.29214126220882,16.567774530687533 +transit,100.29217636556977,16.55896754981988 +transit,100.29221146574193,16.550160561515234 +transit,100.29224656272737,16.541353565777104 +transit,100.29228165652819,16.532546562608974 +transit,100.29231674714646,16.52373955201435 +transit,100.29235183458427,16.51493253399673 +transit,100.29238691884368,16.506125508559624 +transit,100.29242199992679,16.49731847570652 +transit,100.29245707783568,16.488511435440927 +transit,100.29249215257241,16.479704387766347 +transit,100.29252722413908,16.470897332686278 +transit,100.29256229253774,16.462090270204232 +transit,100.29259735777049,16.45328320032371 +transit,100.29263241983939,16.444476123048226 +transit,100.29266747874652,16.435669038381274 +transit,100.29270253449396,16.426861946326365 +transit,100.29273758708376,16.418054846887017 +transit,100.29277263651802,16.40924774006672 +transit,100.29280768279881,16.400440625869 +transit,100.29284272592818,16.391633504297353 +transit,100.29287776590822,16.3828263753553 +transit,100.292912802741,16.374019239046344 +transit,100.29294783642857,16.365212095374012 +transit,100.29298286697302,16.3564049443418 +transit,100.2930178943764,16.34759778595323 +transit,100.2930529186408,16.338790620211814 +transit,100.29308793976826,16.329983447121073 +transit,100.29312295776086,16.32117626668451 +transit,100.29315797262066,16.312369078905654 +transit,100.29319298434974,16.30356188378801 +transit,100.29322799295015,16.294754681335107 +transit,100.29326299842396,16.285947471550458 +transit,100.29329800077322,16.277140254437583 +Ban_Pho_Prathap_Chang,100.293333,16.26833303 +transit,100.29337072366047,16.25939350035479 +transit,100.29340844390907,16.250453963169708 +transit,100.2934461607481,16.241514418448443 +transit,100.29348387417984,16.232574866194685 +transit,100.29352158420659,16.223635306412106 +transit,100.29355929083063,16.2146957391044 +transit,100.29359699405423,16.205756164275254 +transit,100.2936346938797,16.196816581928353 +transit,100.2936723903093,16.187876992067388 +transit,100.29371008334532,16.178937394696046 +transit,100.29374777299003,16.169997789818012 +transit,100.29378545924574,16.161058177436978 +transit,100.29382314211472,16.152118557556648 +transit,100.29386082159924,16.143178930180696 +transit,100.29389849770158,16.134239295312824 +transit,100.29393617042402,16.125299652956723 +transit,100.29397383976884,16.116360003116085 +transit,100.29401150573831,16.107420345794612 +transit,100.29404916833472,16.09848068099599 +transit,100.29408682756033,16.089541008723923 +transit,100.29412448341743,16.0806013289821 +transit,100.29416213590828,16.071661641774227 +transit,100.29419978503516,16.062721947103995 +transit,100.29423743080034,16.05378224497511 +transit,100.2942750732061,16.044842535391272 +transit,100.2943127122547,16.035902818356174 +transit,100.2943503479484,16.026963093873523 +transit,100.29438798028949,16.01802336194703 +transit,100.29442560928022,16.009083622580377 +transit,100.29446323492289,16.000143875777283 +transit,100.29450085721973,15.991204121541449 +transit,100.29453847617303,15.98226435987658 +transit,100.29457609178505,15.973324590786381 +transit,100.29461370405804,15.964384814274554 +transit,100.29465131299429,15.955445030344817 +transit,100.29468891859605,15.94650523900087 +transit,100.29472652086558,15.937565440246429 +transit,100.29476411980515,15.928625634085197 +transit,100.29480171541702,15.91968582052088 +transit,100.29483930770344,15.910745999557196 +transit,100.2948768966667,15.90180617119786 +transit,100.29491448230901,15.892866335446582 +transit,100.29495206463267,15.88392649230707 +transit,100.29498964363992,15.874986641783046 +transit,100.29502721933302,15.866046783878213 +transit,100.29506479171424,15.857106918596296 +transit,100.2951023607858,15.848167045941008 +transit,100.29513992655001,15.839227165916071 +transit,100.29517748900908,15.83028727852519 +transit,100.29521504816526,15.821347383772098 +transit,100.29525260402083,15.812407481660507 +transit,100.29529015657803,15.803467572194137 +transit,100.29532770583913,15.79452765537671 +transit,100.29536525180634,15.785587731211944 +transit,100.29540279448194,15.77664779970356 +transit,100.29544033386819,15.767707860855294 +transit,100.2954778699673,15.758767914670852 +transit,100.29551540278153,15.749827961153965 +transit,100.29555293231316,15.740888000308354 +transit,100.2955904585644,15.731948032137758 +transit,100.2956279815375,15.723008056645888 +transit,100.29566550123474,15.714068073836485 +transit,100.29570301765833,15.705128083713264 +transit,100.2957405308105,15.696188086279957 +transit,100.29577804069353,15.687248081540293 +transit,100.29581554730964,15.67830806949801 +transit,100.29585305066108,15.669368050156828 +transit,100.2958905507501,15.66042802352049 +transit,100.29592804757891,15.651487989592715 +transit,100.29596554114978,15.642547948377242 +transit,100.29600303146493,15.633607899877804 +transit,100.29604051852661,15.624667844098143 +transit,100.29607800233705,15.61572778104198 +transit,100.29611548289849,15.606787710713057 +transit,100.29615296021316,15.597847633115112 +transit,100.2961904342833,15.588907548251884 +transit,100.29622790511115,15.57996745612711 +transit,100.29626537269893,15.571027356744525 +transit,100.29630283704888,15.562087250107867 +transit,100.29634029816324,15.553147136220877 +transit,100.29637775604424,15.544207015087304 +transit,100.2964152106941,15.535266886710884 +transit,100.29645266211504,15.52632675109536 +transit,100.29649011030932,15.51738660824447 +transit,100.29652755527916,15.508446458161966 +transit,100.29656499702678,15.499506300851582 +transit,100.2966024355544,15.490566136317074 +transit,100.29663987086427,15.481625964562182 +transit,100.2966773029586,15.472685785590649 +transit,100.29671473183961,15.463745599406233 +transit,100.29675215750954,15.454805406012671 +transit,100.29678957997062,15.445865205413721 +transit,100.29682699922505,15.436924997613124 +transit,100.29686441527505,15.427984782614642 +transit,100.29690182812287,15.419044560422003 +transit,100.29693923777072,15.410104331038985 +transit,100.29697664422082,15.401164094469324 +transit,100.29701404747537,15.392223850716775 +transit,100.29705144753662,15.3832835997851 +transit,100.29708884440677,15.374343341678044 +transit,100.29712623808804,15.365403076399367 +transit,100.29716362858267,15.356462803952828 +transit,100.29720101589284,15.347522524342171 +transit,100.29723840002077,15.338582237571163 +transit,100.2972757809687,15.329641943643564 +transit,100.29731315873885,15.32070164256313 +transit,100.29735053333339,15.311761334333612 +transit,100.29738790475457,15.302821018958783 +transit,100.29742527300459,15.293880696442397 +transit,100.29746263808566,15.284940366788215 +Takhli_Royal_Thai_AFB,100.2975,15.27600003 +transit,100.30069924279596,15.26770949073969 +transit,100.30389823445499,15.259418899695044 +transit,100.30709697513836,15.251128256898525 +transit,100.31029546500737,15.24283756238261 +transit,100.31349370422318,15.234546816179758 +transit,100.31669169294699,15.226256018322408 +transit,100.31988943133992,15.217965168843028 +transit,100.32308691956304,15.209674267774032 +transit,100.32628415777738,15.20138331514786 +transit,100.32948114614398,15.193092310996935 +transit,100.33267788482374,15.184801255353674 +transit,100.3358743739776,15.176510148250474 +transit,100.33907061376644,15.168218989719747 +transit,100.34226660435107,15.15992777979387 +transit,100.34546234589229,15.15163651850525 +transit,100.3486578385508,15.143345205886236 +transit,100.35185308248737,15.135053841969224 +transit,100.35504807786259,15.126762426786561 +transit,100.35824282483712,15.118470960370601 +transit,100.36143732357152,15.110179442753697 +transit,100.36463157422632,15.101887873968192 +transit,100.367825576962,15.093596254046412 +transit,100.37101933193902,15.085304583020678 +transit,100.37421283931778,15.077012860923318 +transit,100.37740609925865,15.06872108778664 +transit,100.38059911192194,15.060429263642948 +transit,100.38379187746793,15.052137388524525 +transit,100.38698439605686,15.043845462463674 +transit,100.39017666784893,15.035553485492663 +transit,100.39336869300428,15.027261457643776 +transit,100.39656047168305,15.018969378949272 +transit,100.39975200404527,15.01067724944141 +transit,100.40294329025099,15.00238506915245 +transit,100.40613433046019,14.99409283811462 +transit,100.40932512483282,14.985800556360166 +transit,100.41251567352877,14.977508223921316 +transit,100.41570597670791,14.969215840830294 +transit,100.41889603453006,14.96092340711931 +transit,100.42208584715502,14.95263092282057 +transit,100.42527541474247,14.944338387966276 +transit,100.42846473745215,14.936045802588618 +transit,100.4316538154437,14.927753166719786 +transit,100.43484264887672,14.91946048039195 +transit,100.43803123791079,14.911167743637288 +transit,100.44121958270544,14.90287495648796 +transit,100.44440768342017,14.894582118976123 +transit,100.4475955402144,14.886289231133915 +transit,100.45078315324754,14.87799629299349 +transit,100.45397052267896,14.869703304586976 +transit,100.45715764866797,14.861410265946501 +transit,100.46034453137388,14.853117177104183 +transit,100.46353117095589,14.844824038092138 +transit,100.46671756757323,14.836530848942466 +transit,100.46990372138504,14.828237609687264 +transit,100.47308963255043,14.819944320358626 +transit,100.47627530122848,14.811650980988631 +transit,100.47946072757824,14.803357591609359 +transit,100.4826459117587,14.795064152252879 +transit,100.48583085392879,14.78677066295124 +transit,100.48901555424742,14.778477123736515 +transit,100.49220001287348,14.770183534640735 +transit,100.4953842299658,14.761889895695951 +transit,100.49856820568314,14.753596206934187 +transit,100.50175194018428,14.74530246838747 +transit,100.5049354336279,14.73700868008782 +transit,100.50811868617268,14.72871484206725 +transit,100.51130169797725,14.720420954357756 +transit,100.51448446920017,14.712127016991342 +Pho_Talat_Kaeo,100.517667,14.70383303 +transit,100.52002398109886,14.69557974768047 +transit,100.52238078523528,14.687326435559017 +transit,100.52473741252587,14.67907309365443 +transit,100.52709386308716,14.670819721985474 +transit,100.52945013703572,14.662566320570951 +transit,100.53180623448806,14.65431288942962 +transit,100.53416215556064,14.646059428580251 +transit,100.53651790036989,14.637805938041621 +transit,100.53887346903225,14.629552417832473 +transit,100.5412288616641,14.621298867971596 +transit,100.54358407838177,14.613045288477721 +transit,100.54593911930161,14.604791679369601 +transit,100.5482939845399,14.596538040666001 +transit,100.5506486742129,14.58828437238565 +transit,100.55300318843683,14.580030674547297 +transit,100.55535752732793,14.571776947169676 +transit,100.55771169100232,14.563523190271521 +transit,100.56006567957617,14.55526940387156 +transit,100.56241949316559,14.547015587988525 +transit,100.56477313188665,14.538761742641132 +transit,100.5671265958554,14.530507867848103 +transit,100.56947988518785,14.52225396362816 +Ban_Khok,100.571833,14.51400003 +transit,100.57420813650732,14.505680080989574 +transit,100.57658309567651,14.497360102068562 +transit,100.57895787762642,14.489040093256166 +transit,100.58133248247591,14.480720054571576 +transit,100.58370691034378,14.47239998603399 +transit,100.58608116134877,14.464079887662594 +transit,100.58845523560967,14.45575975947656 +transit,100.59082913324517,14.447439601495084 +transit,100.59320285437393,14.439119413737332 +transit,100.59557639911462,14.430799196222486 +transit,100.59794976758587,14.422478948969708 +transit,100.60032295990625,14.414158671998159 +transit,100.60269597619431,14.405838365327005 +transit,100.60506881656859,14.397518028975405 +transit,100.60744148114759,14.389197662962516 +transit,100.60981397004974,14.380877267307483 +transit,100.61218628339351,14.372556842029446 +transit,100.61455842129728,14.364236387147564 +transit,100.61693038387942,14.355915902680964 +transit,100.61930217125828,14.34759538864878 +transit,100.62167378355217,14.339274845070147 +transit,100.62404522087937,14.3309542719642 +transit,100.6264164833581,14.322633669350049 +transit,100.62878757110661,14.314313037246832 +transit,100.63115848424307,14.30599237567365 +transit,100.63352922288564,14.297671684649622 +transit,100.63589978715244,14.289350964193856 +transit,100.63827017716157,14.281030214325462 +transit,100.64064039303109,14.272709435063536 +transit,100.64301043487905,14.264388626427179 +transit,100.64538030282341,14.25606778843549 +transit,100.64774999698218,14.24774692110755 +transit,100.6501195174733,14.239426024462457 +transit,100.65248886441466,14.231105098519285 +transit,100.65485803792416,14.222784143297124 +transit,100.65722703811964,14.21446315881504 +transit,100.65959586511892,14.206142145092118 +transit,100.66196451903978,14.197821102147415 +Ban_Khlong_Sam,100.664333,14.18950003 +transit,100.66664363112469,14.181428781010574 +transit,100.66895409878745,14.173357504322949 +transit,100.67126440309633,14.165286199954679 +transit,100.6735745441593,14.15721486792332 +transit,100.6758845220843,14.149143508246421 +transit,100.67819433697926,14.141072120941542 +transit,100.68050398895208,14.133000706026225 +transit,100.68281347811065,14.124929263518016 +transit,100.6851228045628,14.11685779343445 +transit,100.68743196841635,14.108786295793069 +transit,100.68974096977908,14.100714770611404 +transit,100.6920498087588,14.092643217906986 +transit,100.6943584854632,14.084571637697344 +Khlong_Si,100.696667,14.07650003 +transit,100.69257331716587,14.069046258352722 +transit,100.68847989956993,14.061592412710672 +transit,100.68438674705119,14.054138493118721 +transit,100.68029385944872,14.046684499621724 +transit,100.67620123660159,14.03923043226454 +transit,100.67210887834894,14.031776291092006 +transit,100.66801678452988,14.02432207614896 +transit,100.66392495498363,14.016867787480221 +transit,100.65983338954939,14.009413425130608 +transit,100.65574208806642,14.001958989144919 +transit,100.65165105037399,13.994504479567963 +transit,100.64756027631141,13.98704989644452 +transit,100.64346976571804,13.97959523981937 +transit,100.63937951843324,13.972140509737278 +transit,100.63528953429643,13.964685706243007 +transit,100.63119981314708,13.95723082938131 +transit,100.62711035482462,13.949775879196922 +transit,100.62302115916859,13.942320855734582 +transit,100.61893222601852,13.93486575903901 +transit,100.614843555214,13.92741058915492 +transit,100.6107551465946,13.919955346127017 +Don_Mueang,100.606667,13.91250003 +transit,100.599341342713,13.908266503833755 +transit,100.59201595181146,13.90403275628471 +transit,100.58469082721518,13.899798787430663 +transit,100.57736596884396,13.895564597349402 +transit,100.57004137661762,13.891330186118715 +transit,100.56271705045594,13.887095553816376 +transit,100.55539299027873,13.882860700520158 +transit,100.54806919600576,13.878625626307828 +transit,100.54074566755678,13.87439033125714 +transit,100.53342240485159,13.870154815445852 +transit,100.52609940780994,13.865919078951713 +transit,100.51877667635156,13.861683121852458 +transit,100.51145421039624,13.857446944225824 +transit,100.5041320098637,13.853210546149542 +transit,100.49681007467366,13.848973927701334 +transit,100.48948840474586,13.844737088958915 +Bang_Si_Mueang,100.482167,13.84050003 +transit,100.47628681767374,13.835061382455812 +transit,100.47040690852803,13.829622591498682 +transit,100.46452727244568,13.82418365719346 +transit,100.4586479093094,13.818744579604992 +transit,100.45276881900202,13.81330535879812 +transit,100.44689000140625,13.807865994837666 +transit,100.44101145640494,13.802426487788445 +transit,100.43513318388084,13.796986837715274 +transit,100.42925518371678,13.791547044682954 +transit,100.42337745579556,13.786107108756267 +Atsawaphichet,100.4175,13.78066703 +transit,100.41831485710395,13.77205175376932 +transit,100.41912965452572,13.76343646882459 +transit,100.41994439230844,13.754821175171218 +transit,100.42075907049527,13.746205872814615 +transit,100.42157368912932,13.737590561760186 +transit,100.4223882482537,13.728975242013346 +transit,100.4232027479115,13.720359913579498 +transit,100.42401718814584,13.711744576464056 +transit,100.42483156899976,13.703129230672427 +transit,100.42564589051635,13.694513876210022 +transit,100.42646015273864,13.685898513082249 +transit,100.4272743557097,13.677283141294513 +transit,100.42808849947255,13.668667760852232 +transit,100.4289025840702,13.660052371760813 +transit,100.42971660954566,13.65143697402566 +transit,100.43053057594193,13.642821567652192 +transit,100.43134448330198,13.634206152645808 +transit,100.43215833166882,13.625590729011927 +transit,100.43297212108537,13.61697529675595 +transit,100.4337858515946,13.608359855883293 +transit,100.43459952323946,13.599744406399367 +transit,100.43541313606285,13.591128948309574 +transit,100.4362266901077,13.582513481619333 +transit,100.43704018541692,13.573898006334051 +transit,100.43785362203339,13.565282522459135 +Bang_Pheniang,100.438667,13.55666703 +transit,100.44645578706078,13.55271367800042 +transit,100.45424431666602,13.5487600820121 +transit,100.46203258888636,13.544806242116662 +transit,100.46982060379246,13.540852158395728 +transit,100.47760836145501,13.536897830930911 +transit,100.48539586194471,13.532943259803822 +transit,100.49318310533226,13.528988445096063 +transit,100.50097009168837,13.525033386889243 +transit,100.50875682108376,13.521078085264945 +transit,100.51654329358917,13.517122540304765 +transit,100.52432950927535,13.513166752090296 +transit,100.53211546821304,13.50921072070311 +transit,100.539901170473,13.505254446224786 +transit,100.54768661612604,13.5012979287369 +transit,100.55547180524292,13.497341168321014 +transit,100.56325673789445,13.4933841650587 +transit,100.57104141415144,13.489426919031505 +transit,100.5788258340847,13.485469430320986 +transit,100.58660999776507,13.481511699008696 +transit,100.59439390526337,13.477553725176172 +transit,100.60217755665047,13.473595508904957 +transit,100.60996095199724,13.469637050276585 +transit,100.61774409137453,13.465678349372583 +transit,100.62552697485323,13.461719406274481 +transit,100.63330960250424,13.457760221063795 +transit,100.64109197439845,13.453800793822044 +transit,100.64887409060678,13.449841124630735 +transit,100.65665595120016,13.44588121357138 +transit,100.66443755624954,13.441921060725473 +transit,100.67221890582583,13.437960666174517 +Samut_Prakan,100.68,13.43400003 +transit,100.68409653236691,13.426354643687546 +transit,100.68819280541176,13.418709186178692 +transit,100.69228881930184,13.411063657519275 +transit,100.69638457420444,13.403418057755124 +transit,100.70048007028679,13.395772386932059 +transit,100.70457530771608,13.388126645095898 +transit,100.7086702866595,13.380480832292449 +transit,100.71276500728416,13.372834948567501 +transit,100.71685946975718,13.36518899396684 +transit,100.72095367424564,13.35754296853624 +transit,100.72504762091653,13.34989687232148 +transit,100.72914130993689,13.342250705368308 +transit,100.73323474147368,13.334604467722475 +transit,100.73732791569383,13.326958159429722 +transit,100.74142083276422,13.31931178053578 +transit,100.74551349285174,13.311665331086372 +transit,100.74960589612323,13.304018811127207 +transit,100.75369804274547,13.29637222070399 +transit,100.75778993288523,13.288725559862412 +transit,100.76188156670925,13.281078828648166 +transit,100.76597294438422,13.273432027106924 +transit,100.77006406607681,13.265785155284348 +transit,100.77415493195365,13.258138213226102 +transit,100.77824554218135,13.25049120097783 +transit,100.78233589692645,13.242844118585177 +transit,100.78642599635553,13.235196966093769 +transit,100.79051584063504,13.227549743549227 +transit,100.79460542993148,13.219902450997166 +transit,100.79869476441125,13.212255088483184 +transit,100.80278384424079,13.204607656052886 +transit,100.80687266958644,13.196960153751846 +transit,100.81096124061453,13.189312581625643 +transit,100.81504955749138,13.18166493971985 +transit,100.81913762038324,13.174017228080022 +transit,100.82322542945636,13.166369446751698 +transit,100.82731298487693,13.158721595780428 +transit,100.83140028681113,13.151073675211741 +transit,100.83548733542507,13.143425685091158 +transit,100.83957413088488,13.135777625464195 +transit,100.84366067335662,13.128129496376353 +transit,100.84774696300633,13.120481297873123 +Ko_Si_Chang,100.851833,13.11283303 +transit,100.85449471198127,13.104854234186503 +transit,100.85715625248721,13.096875405965013 +transit,100.85981762163634,13.08889654535735 +transit,100.86247881954719,13.080917652385333 +transit,100.86513984633824,13.072938727070786 +transit,100.86780070212794,13.064959769435514 +transit,100.87046138703474,13.056980779501329 +transit,100.87312190117704,13.049001757290037 +transit,100.87578224467323,13.041022702823437 +transit,100.87844241764166,13.033043616123326 +transit,100.88110242020066,13.025064497211499 +transit,100.88376225246853,13.017085346109743 +transit,100.88642191456354,13.009106162839842 +transit,100.88908140660395,13.001126947423584 +transit,100.89174072870796,12.993147699882734 +transit,100.89439988099377,12.985168420239072 +transit,100.89705886357957,12.97718910851437 +transit,100.89971767658348,12.969209764730383 +transit,100.90237632012364,12.961230388908888 +transit,100.9050347943181,12.953250981071628 +transit,100.90769309928494,12.945271541240357 +transit,100.9103512351422,12.937292069436838 +transit,100.9130092020079,12.929312565682803 +Chokchai_Village,100.915667,12.92133303 +transit,100.92314465033589,12.917429712328273 +transit,100.93062206848363,12.913526179498232 +transit,100.93809925451029,12.909622431583552 +transit,100.94557620848295,12.905718468657884 +transit,100.95305293046867,12.901814290794897 +transit,100.96052942053456,12.89790989806824 +transit,100.96800567874767,12.894005290551569 +transit,100.97548170517514,12.890100468318519 +transit,100.98295749988408,12.886195431442736 +transit,100.99043306294158,12.882290179997861 +transit,100.99790839441478,12.878384714057525 +transit,101.00538349437082,12.87447903369535 +transit,101.01285836287684,12.870573138984971 +Huai_Yai,101.020333,12.86666703 +transit,101.01963555555335,12.858174652191412 +transit,101.01893815799811,12.849682267042814 +transit,101.0182408072991,12.841189874558976 +transit,101.01754350342117,12.832697474744649 +transit,101.01684624632918,12.824205067604593 +transit,101.01614903598798,12.815712653143565 +transit,101.01545187236246,12.807220231366331 +transit,101.0147547554175,12.798727802277648 +transit,101.01405768511798,12.79023536588228 +transit,101.0133606614288,12.781742922184982 +transit,101.01266368431487,12.773250471190517 +transit,101.01196675374109,12.764758012903643 +transit,101.01126986967242,12.756265547329125 +transit,101.01057303207375,12.747773074471723 +transit,101.00987624091005,12.739280594336194 +transit,101.00917949614626,12.730788106927307 +transit,101.00848279774735,12.722295612249814 +transit,101.00778614567827,12.713803110308486 +transit,101.007089539904,12.705310601108073 +transit,101.00639298038953,12.69681808465335 +transit,101.00569646709987,12.68832556094907 +U_Tapao,101.005,12.67983303 diff --git a/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/bangkok/bangkok_waypoints.csv.orig b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/bangkok/bangkok_waypoints.csv.orig new file mode 100644 index 0000000..4a2fac1 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/bangkok/bangkok_waypoints.csv.orig @@ -0,0 +1,3562 @@ +city,utc_adjust +bangkok,7 +waypoint,lon,lat +U_Tapao,101.005,12.67983303 +transit,100.99748524729382,12.68476491304953 +transit,100.98997020525702,12.689696581764105 +transit,100.98245487377469,12.694628036049753 +transit,100.97493925273196,12.69955927581249 +transit,100.96742334201394,12.704490300958334 +transit,100.95990714150577,12.70942111139328 +transit,100.95239065109256,12.714351707023324 +transit,100.94487387065945,12.719282087754447 +transit,100.93735680009158,12.724212253492627 +transit,100.92983943927409,12.729142204143825 +transit,100.92232178809209,12.734071939614005 +transit,100.91480384643079,12.739001459809106 +transit,100.90728561417528,12.74393076463507 +transit,100.89976709121075,12.74885985399783 +transit,100.89224827742235,12.7537887278033 +transit,100.88472917269523,12.758717385957395 +transit,100.87720977691457,12.763645828366014 +transit,100.86969008996553,12.768574054935053 +transit,100.86217011173328,12.773502065570394 +transit,100.854649842103,12.778429860177916 +transit,100.84712928095988,12.783357438663474 +transit,100.83960842818908,12.78828480093294 +transit,100.83208728367582,12.793211946892148 +transit,100.82456584730528,12.798138876446945 +transit,100.81704411896264,12.803065589503156 +transit,100.80952209853311,12.8079920859666 +transit,100.8019997859019,12.812918365743093 +transit,100.7944771809542,12.817844428738434 +transit,100.78695428357524,12.822770274858414 +transit,100.77943109365023,12.827695904008822 +transit,100.77190761106438,12.832621316095427 +transit,100.76438383570292,12.837546511023998 +transit,100.75685976745106,12.842471488700294 +transit,100.74933540619405,12.847396249030055 +transit,100.74181075181711,12.852320791919025 +transit,100.7342858042055,12.857245117272932 +transit,100.72676056324444,12.862169224997492 +transit,100.71923502881916,12.867093114998422 +transit,100.71170920081495,12.872016787181416 +transit,100.70418307911703,12.876940241452175 +transit,100.69665666361068,12.881863477716378 +transit,100.68912995418114,12.886786495879695 +transit,100.6816029507137,12.891709295847798 +transit,100.67407565309361,12.89663187752634 +transit,100.66654806120613,12.90155424082097 +transit,100.65902017493657,12.906476385637317 +transit,100.65149199417019,12.91139831188102 +transit,100.64396351879226,12.91632001945769 +transit,100.63643474868809,12.921241508272947 +transit,100.62890568374299,12.926162778232381 +transit,100.62137632384221,12.931083829241587 +transit,100.61384666887108,12.936004661206152 +transit,100.6063167187149,12.940925274031644 +transit,100.59878647325895,12.945845667623628 +transit,100.59125593238859,12.950765841887659 +transit,100.58372509598912,12.955685796729286 +transit,100.57619396394584,12.960605532054041 +transit,100.56866253614409,12.965525047767454 +transit,100.56113081246917,12.970444343775045 +transit,100.55359879280647,12.975363419982312 +transit,100.54606647704126,12.98028227629477 +transit,100.53853386505892,12.985200912617898 +transit,100.5310009567448,12.990119328857183 +transit,100.52346775198421,12.995037524918098 +transit,100.51593425066253,12.9999555007061 +transit,100.50840045266511,13.004873256126647 +transit,100.50086635787731,13.009790791085182 +transit,100.49333196618448,13.01470810548714 +transit,100.48579727747202,13.019625199237947 +transit,100.47826229162526,13.02454207224302 +transit,100.47072700852961,13.029458724407766 +transit,100.46319142807043,13.034375155637582 +transit,100.4556555501331,13.039291365837858 +transit,100.44811937460304,13.044207354913977 +transit,100.4405829013656,13.049123122771306 +transit,100.43304613030621,13.054038669315206 +transit,100.42550906131025,13.05895399445103 +transit,100.41797169426313,13.063869098084117 +transit,100.41043402905026,13.068783980119807 +transit,100.40289606555706,13.073698640463418 +transit,100.39535780366893,13.078613079020267 +transit,100.3878192432713,13.08352729569566 +transit,100.38028038424959,13.088441290394893 +transit,100.37274122648923,13.093355063023258 +transit,100.36520176987565,13.09826861348602 +transit,100.3576620142943,13.103181941688465 +transit,100.35012195963061,13.108095047535835 +transit,100.34258160577004,13.11300793093339 +transit,100.33504095259802,13.117920591786367 +WP2,100.3275,13.12283303 +transit,100.32754165237236,13.130527555342772 +transit,100.32758330733789,13.1382220760861 +transit,100.32762496489835,13.145916592227486 +transit,100.32766662505544,13.153611103764428 +transit,100.32770828781092,13.161305610694422 +transit,100.32774995316653,13.169000113014974 +transit,100.32779162112399,13.176694610723583 +transit,100.32783329168505,13.184389103817743 +transit,100.32787496485145,13.192083592294967 +transit,100.3279166406249,13.199778076152752 +transit,100.32795831900718,13.207472555388593 +WP3,100.328,13.21516703 +transit,100.32804932534562,13.22372880860958 +transit,100.3280986541334,13.232290581485813 +transit,100.32814798636589,13.24085234862526 +transit,100.32819732204565,13.24941411002448 +transit,100.32824666117523,13.25797586568004 +transit,100.32829600375716,13.26653761558849 +transit,100.328345349794,13.275099359746399 +transit,100.32839469928834,13.28366109815033 +transit,100.32844405224269,13.292222830796844 +transit,100.32849340865961,13.300784557682498 +transit,100.32854276854167,13.309346278803861 +transit,100.32859213189141,13.3179079941575 +transit,100.3286414987114,13.326469703739976 +transit,100.32869086900419,13.335031407547852 +transit,100.32874024277234,13.343593105577696 +transit,100.32878962001841,13.352154797826074 +transit,100.32883900074496,13.360716484289556 +transit,100.32888838495454,13.369278164964706 +transit,100.32893777264971,13.377839839848091 +transit,100.32898716383305,13.386401508936281 +transit,100.3290365585071,13.394963172225848 +transit,100.32908595667442,13.403524829713355 +transit,100.3291353583376,13.412086481395372 +transit,100.32918476349919,13.420648127268477 +transit,100.32923417216173,13.429209767329235 +transit,100.32928358432781,13.437771401574219 +WP4,100.329333,13.44633303 +transit,100.32738963826714,13.454203588841562 +transit,100.3254461496106,13.462074127756567 +transit,100.32350253394532,13.469944646732305 +transit,100.32155879118619,13.477815145756043 +transit,100.31961492124809,13.485685624815059 +transit,100.31767092404587,13.493556083896632 +transit,100.31572679949439,13.501426522988032 +transit,100.31378254750845,13.509296942076535 +transit,100.31183816800285,13.517167341149399 +transit,100.30989366089239,13.525037720193898 +transit,100.3079490260918,13.532908079197295 +transit,100.30600426351585,13.540778418146852 +transit,100.30405937307923,13.54864873702983 +transit,100.30211435469664,13.556519035833485 +transit,100.30016920828278,13.564389314545078 +transit,100.2982239337523,13.572259573151857 +transit,100.29627853101984,13.580129811641081 +WP5,100.294333,13.58800003 +transit,100.29231766177654,13.59613358602131 +transit,100.29030218603909,13.604267120441008 +transit,100.2882865726931,13.612400633244965 +transit,100.28627082164402,13.62053412441904 +transit,100.28425493279732,13.62866759394911 +transit,100.28223890605837,13.636801041821029 +transit,100.28022274133257,13.644934468020663 +transit,100.27820643852526,13.653067872533864 +transit,100.2761899975418,13.661201255346494 +transit,100.27417341828749,13.669334616444402 +transit,100.27215670066762,13.67746795581344 +transit,100.27013984458746,13.685601273439463 +transit,100.26812284995226,13.693734569308306 +transit,100.26610571666723,13.701867843405827 +transit,100.26408844463755,13.710001095717853 +transit,100.26207103376844,13.718134326230237 +transit,100.260053483965,13.72626753492881 +transit,100.25803579513239,13.734400721799405 +transit,100.2560179671757,13.742533886827859 +WP6,100.254,13.75066703 +transit,100.2586740780304,13.758123399579667 +transit,100.26334845205756,13.765579676009509 +transit,100.26802312226344,13.773035859231898 +transit,100.27269808883001,13.780491949189194 +transit,100.27737335193929,13.78794794582375 +transit,100.28204891177329,13.795403849077895 +transit,100.28672476851409,13.80285965889396 +transit,100.29140092234381,13.810315375214255 +transit,100.2960773734446,13.81777099798109 +transit,100.30075412199864,13.825226527136744 +transit,100.30543116818812,13.832681962623504 +transit,100.31010851219531,13.840137304383626 +transit,100.31478615420248,13.847592552359382 +transit,100.31946409439196,13.855047706493 +transit,100.3241423329461,13.862502766726717 +transit,100.32882087004727,13.869957733002755 +transit,100.33349970587791,13.877412605263316 +transit,100.33817884062047,13.884867383450601 +transit,100.34285827445746,13.892322067506793 +transit,100.34753800757137,13.89977665737406 +transit,100.35221804014478,13.907231152994562 +transit,100.35689837236029,13.914685554310452 +transit,100.36157900440053,13.92213986126387 +transit,100.36625993644816,13.929594073796933 +transit,100.37094116868589,13.93704819185176 +transit,100.37562270129644,13.944502215370443 +transit,100.3803045344626,13.951956144295085 +transit,100.38498666836715,13.959409978567747 +transit,100.38966910319296,13.966863718130504 +transit,100.39435183912289,13.974317362925413 +transit,100.39903487633985,13.981770912894506 +transit,100.4037182150268,13.989224367979812 +transit,100.4084018553667,13.996677728123364 +transit,100.41308579754259,14.004130993267152 +transit,100.4177700417375,14.011584163353172 +transit,100.42245458813453,14.01903723832341 +transit,100.42713943691679,14.026490218119836 +transit,100.43182458826746,14.033943102684404 +transit,100.4365100423697,14.04139589195906 +transit,100.44119579940677,14.04884858588574 +transit,100.44588185956191,14.056301184406367 +transit,100.45056822301844,14.063753687462848 +transit,100.45525488995966,14.071206094997075 +transit,100.45994186056897,14.078658406950948 +transit,100.46462913502977,14.086110623266327 +transit,100.46931671352549,14.09356274388508 +transit,100.4740045962396,14.101014768749055 +transit,100.47869278335563,14.10846669780009 +transit,100.48338127505711,14.11591853098001 +transit,100.48807007152764,14.123370268230632 +transit,100.49275917295083,14.13082190949375 +transit,100.4974485795103,14.138273454711156 +transit,100.5021382913898,14.145724903824627 +transit,100.50682830877301,14.15317625677593 +transit,100.5115186318437,14.16062751350682 +transit,100.51620926078567,14.168078673959027 +transit,100.52090019578274,14.175529738074289 +transit,100.52559143701879,14.182980705794318 +transit,100.53028298467773,14.190431577060822 +transit,100.53497483894346,14.197882351815487 +WP7,100.539667,14.20533303 +transit,100.54797860533483,14.204279516957863 +transit,100.55629013377941,14.203225715194685 +transit,100.56460158531932,14.202171624735378 +transit,100.57291295994017,14.201117245604847 +transit,100.58122425762754,14.20006257782802 +transit,100.58953547836708,14.199007621429818 +transit,100.5978466221444,14.197952376435179 +transit,100.60615768894513,14.196896842869032 +transit,100.61446867875489,14.195841020756331 +transit,100.62277959155935,14.19478491012202 +transit,100.63109042734415,14.193728510991058 +transit,100.63940118609494,14.192671823388402 +transit,100.6477118677974,14.19161484733902 +transit,100.65602247243719,14.190557582867896 +WP8,100.664333,14.18950003 +transit,100.66664363112469,14.181428781010574 +transit,100.66895409878745,14.173357504322949 +transit,100.67126440309633,14.165286199954679 +transit,100.6735745441593,14.15721486792332 +transit,100.6758845220843,14.149143508246421 +transit,100.67819433697926,14.141072120941542 +transit,100.68050398895208,14.133000706026225 +transit,100.68281347811065,14.124929263518016 +transit,100.6851228045628,14.11685779343445 +transit,100.68743196841635,14.108786295793069 +transit,100.68974096977908,14.100714770611404 +transit,100.6920498087588,14.092643217906986 +transit,100.6943584854632,14.084571637697344 +WP9,100.696667,14.07650003 +transit,100.69257331716587,14.069046258352722 +transit,100.68847989956993,14.061592412710672 +transit,100.68438674705119,14.054138493118721 +transit,100.68029385944872,14.046684499621724 +transit,100.67620123660159,14.03923043226454 +transit,100.67210887834894,14.031776291092006 +transit,100.66801678452988,14.02432207614896 +transit,100.66392495498363,14.016867787480221 +transit,100.65983338954939,14.009413425130608 +transit,100.65574208806642,14.001958989144919 +transit,100.65165105037399,13.994504479567963 +transit,100.64756027631141,13.98704989644452 +transit,100.64346976571804,13.97959523981937 +transit,100.63937951843324,13.972140509737278 +transit,100.63528953429643,13.964685706243007 +transit,100.63119981314708,13.95723082938131 +transit,100.62711035482462,13.949775879196922 +transit,100.62302115916859,13.942320855734582 +transit,100.61893222601852,13.93486575903901 +transit,100.614843555214,13.92741058915492 +transit,100.6107551465946,13.919955346127017 +Don_Mueang,100.606667,13.91250003 +transit,100.6049446025679,13.90816671035839 +transit,100.60322226924221,13.903833377023446 +WP11,100.6015,13.89950003 +transit,100.59301296559651,13.901765024837376 +transit,100.5845257661695,13.904029724192878 +transit,100.5760384017093,13.906294128010886 +transit,100.56755087220628,13.908558236235775 +transit,100.55906317765078,13.910822048811921 +transit,100.55057531803321,13.913085565683714 +transit,100.54208729334393,13.915348786795532 +transit,100.53359910357337,13.91761171209177 +transit,100.52511074871194,13.919874341516824 +transit,100.51662222875008,13.922136675015082 +transit,100.50813354367824,13.924398712530953 +transit,100.4996446934869,13.926660454008832 +transit,100.49115567816652,13.928921899393133 +transit,100.48266649770757,13.931183048628265 +transit,100.47417715210061,13.933443901658633 +transit,100.4656876413361,13.935704458428669 +transit,100.45719796540463,13.937964718882776 +transit,100.4487081242967,13.940224682965392 +transit,100.4402181180029,13.942484350620933 +transit,100.4317279465138,13.944743721793836 +transit,100.42323760981999,13.947002796428533 +transit,100.41474710791208,13.94926157446946 +transit,100.40625644078068,13.951520055861057 +transit,100.3977656084164,13.953778240547772 +transit,100.38927461080993,13.956036128474047 +transit,100.38078344795191,13.958293719584336 +transit,100.37229211983302,13.960551013823093 +transit,100.36380062644393,13.962808011134772 +transit,100.35530896777537,13.965064711463835 +transit,100.34681714381804,13.967321114754752 +transit,100.33832515456265,13.969577220951981 +WP12,100.329833,13.97183303 +transit,100.32881180554787,13.980590646029246 +transit,100.3277905338607,13.989348251459255 +transit,100.32676918488234,13.998105846283291 +transit,100.32574775855662,14.00686343049461 +transit,100.32472625482737,14.01562100408648 +transit,100.32370467363837,14.024378567052155 +transit,100.32268301493345,14.033136119384896 +transit,100.32166127865634,14.04189366107797 +transit,100.32063946475083,14.050651192124619 +transit,100.31961757316064,14.05940871251812 +transit,100.31859560382952,14.068166222251723 +transit,100.31757355670116,14.076923721318687 +transit,100.31655143171928,14.085681209712273 +transit,100.31552922882751,14.094438687425734 +transit,100.31450694796958,14.103196154452334 +transit,100.31348458908909,14.11195361078533 +transit,100.3124621521297,14.12071105641797 +transit,100.31143963703501,14.129468491343523 +transit,100.31041704374863,14.13822591555524 +transit,100.30939437221413,14.146983329046378 +transit,100.3083716223751,14.155740731810196 +transit,100.3073487941751,14.164498123839945 +transit,100.30632588755765,14.173255505128882 +transit,100.30530290246627,14.182012875670265 +transit,100.30427983884448,14.190770235457352 +transit,100.30325669663576,14.199527584483393 +transit,100.3022334757836,14.208284922741642 +transit,100.30121017623144,14.217042250225358 +transit,100.30018679792275,14.22579956692779 +transit,100.29916334080092,14.234556872842198 +transit,100.2981398048094,14.243314167961831 +transit,100.29711618989155,14.252071452279944 +transit,100.29609249599079,14.260828725789787 +transit,100.29506872305045,14.269585988484623 +transit,100.2940448710139,14.278343240357696 +transit,100.29302093982444,14.287100481402256 +transit,100.29199692942542,14.295857711611566 +transit,100.29097283976014,14.304614930978866 +transit,100.28994867077186,14.313372139497416 +transit,100.28892442240387,14.322129337160467 +transit,100.28790009459941,14.330886523961267 +transit,100.28687568730172,14.339643699893067 +transit,100.285851200454,14.348400864949117 +transit,100.2848266339995,14.357158019122675 +transit,100.28380198788138,14.36591516240698 +transit,100.2827772620428,14.374672294795284 +transit,100.28175245642693,14.383429416280846 +transit,100.28072757097691,14.392186526856905 +transit,100.27970260563586,14.40094362651672 +transit,100.2786775603469,14.409700715253525 +transit,100.2776524350531,14.418457793060584 +transit,100.27662722969755,14.427214859931134 +transit,100.27560194422331,14.435971915858435 +transit,100.27457657857342,14.444728960835716 +transit,100.2735511326909,14.453485994856248 +transit,100.27252560651876,14.462243017913258 +WP13,100.2715,14.47100003 +transit,100.27028576553123,14.47940988010593 +transit,100.26907143958948,14.487819717938384 +transit,100.26785702211254,14.496229543489912 +transit,100.26664251303806,14.504639356753085 +transit,100.26542791230379,14.513049157720461 +transit,100.26421321984739,14.5214589463846 +transit,100.2629984356065,14.529868722738058 +transit,100.26178355951882,14.5382784867734 +transit,100.26056859152192,14.546688238483181 +transit,100.25935353155344,14.555097977859953 +transit,100.25813837955097,14.563507704896278 +transit,100.25692313545208,14.571917419584713 +transit,100.25570779919435,14.580327121917808 +transit,100.25449237071531,14.588736811888127 +transit,100.25327684995248,14.597146489488223 +transit,100.25206123684337,14.605556154710639 +transit,100.2508455313255,14.61396580754794 +transit,100.24962973333629,14.62237544799267 +transit,100.24841384281325,14.63078507603739 +transit,100.24719785969378,14.639194691674637 +transit,100.24598178391534,14.647604294896974 +transit,100.2447656154153,14.656013885696952 +transit,100.24354935413106,14.66442346406711 +WP14,100.242333,14.67283303 +transit,100.24311000160544,14.681240550739027 +transit,100.24388706258217,14.689648062801169 +transit,100.24466418297027,14.698055566181523 +transit,100.24544136280976,14.706463060875166 +transit,100.2462186021407,14.714870546877188 +transit,100.2469959010032,14.72327802418268 +transit,100.24777325943734,14.731685492786731 +transit,100.24855067748321,14.740092952684423 +transit,100.24932815518093,14.74850040387085 +transit,100.25010569257061,14.756907846341091 +transit,100.25088328969241,14.765315280090242 +transit,100.25166094658644,14.773722705113395 +transit,100.25243866329289,14.782130121405624 +transit,100.25321643985191,14.790537528962025 +transit,100.25399427630369,14.798944927777688 +transit,100.25477217268839,14.8073523178477 +transit,100.25555012904624,14.815759699167144 +transit,100.25632814541746,14.82416707173111 +transit,100.25710622184225,14.832574435534687 +transit,100.25788435836085,14.840981790572968 +transit,100.25866255501352,14.849389136841044 +transit,100.2594408118405,14.857796474333993 +transit,100.26021912888207,14.866203803046906 +transit,100.26099750617851,14.874611122974876 +transit,100.2617759437701,14.883018434112985 +transit,100.26255444169716,14.89142573645633 +WP15,100.263333,14.89983303 +transit,100.2605075745843,14.908345431356354 +transit,100.25768192704201,14.916857791535385 +transit,100.25485605722392,14.925370110510332 +transit,100.2520299649807,14.933882388254435 +transit,100.24920365016303,14.94239462474092 +transit,100.2463771126215,14.950906819943018 +transit,100.24355035220671,14.95941897383393 +transit,100.2407233687692,14.96793108638689 +transit,100.23789616215946,14.976443157575085 +transit,100.23506873222796,14.984955187371733 +transit,100.23224107882508,14.993467175750014 +transit,100.22941320180125,15.00197912268312 +transit,100.22658510100676,15.010491028144228 +transit,100.22375677629192,15.019002892106526 +transit,100.22092822750699,15.027514714543175 +transit,100.21809945450217,15.036026495427338 +transit,100.21527045712762,15.044538234732185 +transit,100.2124412352335,15.05304993243085 +transit,100.20961178866987,15.06156158849649 +transit,100.20678211728679,15.070073202902252 +transit,100.20395222093428,15.078584775621255 +transit,100.2011220994623,15.087096306626636 +transit,100.19829175272075,15.095607795891516 +transit,100.19546118055953,15.10411924338901 +transit,100.19263038282848,15.112630649092225 +transit,100.18979935937742,15.121142012974268 +transit,100.18696811005609,15.129653335008243 +transit,100.18413663471419,15.138164615167227 +transit,100.18130493320145,15.14667585342432 +transit,100.17847300536745,15.155187049752593 +transit,100.17564085106181,15.163698204125124 +transit,100.1728084701341,15.17220931651498 +transit,100.1699758624338,15.180720386895214 +transit,100.1671430278104,15.189231415238897 +transit,100.16430996611331,15.19774240151907 +transit,100.16147667719193,15.206253345708776 +transit,100.1586431608956,15.214764247781055 +transit,100.15580941707363,15.223275107708933 +transit,100.15297544557528,15.231785925465438 +transit,100.15014124624976,15.240296701023588 +transit,100.14730681894626,15.248807434356399 +transit,100.14447216351392,15.257318125436877 +transit,100.14163727980183,15.265828774238017 +transit,100.13880216765904,15.274339380732819 +transit,100.13596682693456,15.28284994489427 +transit,100.13313125747737,15.29136046669535 +transit,100.13029545913639,15.299870946109039 +transit,100.1274594317605,15.3083813831083 +transit,100.12462317519855,15.316891777666104 +transit,100.12178668929936,15.325402129755407 +transit,100.11894997391165,15.333912439349154 +transit,100.11611302888417,15.342422706420294 +transit,100.11327585406559,15.350932930941775 +transit,100.11043844930454,15.359443112886515 +transit,100.1076008144496,15.367953252227453 +transit,100.10476294934934,15.376463348937506 +transit,100.10192485385225,15.384973402989578 +transit,100.0990865278068,15.393483414356592 +transit,100.09624797106142,15.401993383011444 +transit,100.09340918346449,15.410503308927018 +transit,100.09057016486433,15.419013192076227 +transit,100.08773091510925,15.427523032431937 +transit,100.0848914340475,15.436032829967035 +transit,100.0820517215273,15.444542584654382 +transit,100.07921177739681,15.453052296466845 +transit,100.07637160150414,15.461561965377287 +transit,100.07353119369739,15.470071591358556 +transit,100.0706905538246,15.478581174383507 +transit,100.06784968173378,15.487090714424962 +transit,100.06500857727286,15.495600211455773 +transit,100.06216724028977,15.504109665448754 +transit,100.05932567063238,15.512619076376728 +transit,100.05648386814849,15.521128444212515 +transit,100.05364183268593,15.529637768928922 +transit,100.0507995640924,15.538147050498749 +transit,100.04795706221563,15.54665628889479 +transit,100.04511432690325,15.555165484089837 +transit,100.04227135800289,15.563674636056673 +transit,100.03942815536212,15.572183744768074 +transit,100.03658471882846,15.580692810196817 +transit,100.0337410482494,15.589201832315656 +transit,100.03089714347237,15.597710811097349 +transit,100.02805300434478,15.60621974651465 +transit,100.02520863071399,15.614728638540315 +transit,100.02236402242731,15.623237487147067 +transit,100.019519179332,15.631746292307646 +transit,100.01667410127527,15.640255053994785 +transit,100.01382878810433,15.64876377218119 +transit,100.01098323966632,15.657272446839583 +transit,100.00813745580832,15.665781077942668 +transit,100.00529143637739,15.674289665463148 +transit,100.00244518122054,15.682798209373718 +transit,99.99959869018473,15.691306709647064 +transit,99.99675196311688,15.699815166255869 +transit,99.99390499986389,15.708323579172806 +transit,99.99105780027257,15.71683194837055 +transit,99.98821036418973,15.725340273821754 +transit,99.9853626914621,15.733848555499081 +transit,99.98251478193642,15.74235679337518 +transit,99.97966663545931,15.750864987422695 +transit,99.97681825187742,15.75937313761426 +transit,99.97396963103729,15.767881243922508 +transit,99.9711207727855,15.77638930632006 +transit,99.96827167696848,15.78489732477954 +transit,99.96542234343272,15.793405299273555 +transit,99.96257277202459,15.80191322977471 +transit,99.95972296259045,15.810421116255604 +transit,99.95687291497663,15.818928958688828 +transit,99.95402262902938,15.827436757046963 +transit,99.95117210459492,15.835944511302595 +transit,99.94832134151945,15.844452221428298 +transit,99.94547033964908,15.852959887396633 +transit,99.94261909882992,15.861467509180162 +transit,99.93976761890802,15.869975086751435 +transit,99.93691589972937,15.878482620083002 +transit,99.93406394113994,15.886990109147405 +transit,99.93121174298564,15.895497553917169 +transit,99.92835930511232,15.904004954364835 +transit,99.92550662736586,15.912512310462906 +transit,99.922653709592,15.921019622183918 +transit,99.91980055163648,15.929526889500362 +transit,99.916947153345,15.938034112384738 +transit,99.91409351456323,15.946541290809549 +transit,99.91123963513675,15.955048424747282 +transit,99.90838551491115,15.963555514170414 +transit,99.9055311537319,15.97206255905143 +transit,99.9026765514445,15.980569559362786 +transit,99.89982170789438,15.989076515076952 +transit,99.89696662292691,15.997583426166381 +transit,99.89411129638745,16.006090292603517 +transit,99.89125572812127,16.01459711436081 +transit,99.88839991797363,16.023103891410695 +transit,99.88554386578973,16.031610623725594 +transit,99.88268757141473,16.040117311277942 +transit,99.87983103469377,16.04862395404014 +transit,99.87697425547186,16.05713055198461 +transit,99.87411723359409,16.06563710508374 +transit,99.8712599689054,16.074143613309943 +transit,99.86840246125075,16.082650076635602 +transit,99.865544710475,16.09115649503309 +transit,99.86268671642303,16.099662868474805 +transit,99.85982847893962,16.10816919693309 +transit,99.85696999786954,16.116675480380334 +transit,99.85411127305748,16.125181718788873 +transit,99.85125230434812,16.133687912131073 +transit,99.84839309158608,16.14219406037926 +transit,99.84553363461592,16.15070016350579 +transit,99.8426739332822,16.159206221482975 +transit,99.83981398742937,16.167712234283144 +transit,99.8369537969019,16.176218201878623 +transit,99.83409336154416,16.18472412424171 +transit,99.83123268120052,16.193230001344716 +transit,99.82837175571527,16.20173583315993 +transit,99.82551058493267,16.21024161965965 +transit,99.82264916869694,16.218747360816156 +transit,99.81978750685224,16.227253056601718 +transit,99.8169255992427,16.235758706988612 +transit,99.81406344571238,16.244264311949102 +transit,99.81120104610532,16.252769871455445 +transit,99.80833840026553,16.261275385479884 +transit,99.8054755080369,16.269780853994675 +transit,99.80261236926336,16.27828627697203 +transit,99.79974898378875,16.286791654384206 +transit,99.79688535145687,16.295296986203407 +transit,99.79402147211148,16.303802272401857 +transit,99.79115734559629,16.312307512951765 +transit,99.78829297175496,16.320812707825333 +transit,99.78542835043112,16.329317856994752 +transit,99.78256348146833,16.337822960432216 +transit,99.77969836471013,16.346328018109904 +WP16,99.776833,16.35483303 +transit,99.77618023461284,16.36352772012392 +transit,99.77552741141027,16.372222401058075 +transit,99.77487453035477,16.380917072797786 +transit,99.77422159140875,16.389611735338356 +transit,99.77356859453462,16.398306388675113 +transit,99.77291553969484,16.407001032803365 +transit,99.77226242685175,16.41569566771843 +transit,99.77160925596779,16.42439029341563 +transit,99.7709560270053,16.433084909890265 +transit,99.77030273992665,16.441779517137665 +transit,99.7696493946942,16.45047411515314 +transit,99.76899599127029,16.459168703932004 +transit,99.76834252961723,16.467863283469587 +transit,99.76768900969735,16.476557853761186 +transit,99.76703543147296,16.485252414802133 +transit,99.76638179490634,16.493946966587743 +transit,99.76572809995977,16.50264150911333 +transit,99.76507434659551,16.511336042374218 +transit,99.76442053477584,16.520030566365715 +transit,99.76376666446298,16.528725081083156 +transit,99.76311273561917,16.537419586521843 +transit,99.76245874820663,16.5461140826771 +transit,99.76180470218756,16.554808569544257 +transit,99.76115059752416,16.563503047118626 +transit,99.76049643417862,16.572197515395523 +transit,99.7598422121131,16.58089197437027 +transit,99.75918793128977,16.589586424038195 +transit,99.75853359167077,16.598280864394617 +transit,99.75787919321822,16.606975295434843 +transit,99.75722473589427,16.615669717154212 +transit,99.75657021966101,16.624364129548038 +transit,99.75591564448055,16.633058532611642 +transit,99.75526101031497,16.64175292634035 +transit,99.75460631712635,16.65044731072948 +transit,99.75395156487673,16.659141685774355 +transit,99.75329675352819,16.667836051470307 +transit,99.75264188304276,16.67653040781264 +transit,99.75198695338244,16.685224754796693 +transit,99.75133196450928,16.693919092417794 +transit,99.75067691638525,16.702613420671252 +transit,99.75002180897236,16.7113077395524 +transit,99.74936664223257,16.72000204905656 +transit,99.74871141612785,16.72869634917906 +transit,99.74805613062016,16.73739063991522 +transit,99.74740078567142,16.746084921260373 +transit,99.74674538124357,16.754779193209835 +transit,99.74608991729853,16.763473455758938 +transit,99.74543439379819,16.772167708903005 +transit,99.74477881070446,16.780861952637366 +transit,99.7441231679792,16.789556186957345 +transit,99.74346746558427,16.798250411858273 +transit,99.74281170348154,16.806944627335472 +transit,99.74215588163284,16.815638833384273 +WP17,99.7415,16.82433303 +transit,99.74429190475959,16.832429740308847 +transit,99.74708404678597,16.840526406302324 +transit,99.7498764262191,16.848623027955263 +transit,99.752669043199,16.856719605242482 +transit,99.75546189786576,16.8648161381388 +transit,99.75825499035943,16.872912626619026 +transit,99.7610483208202,16.88100907065797 +transit,99.7638418893882,16.889105470230426 +transit,99.76663569620369,16.897201825311186 +transit,99.76942974140691,16.905298135875043 +transit,99.77222402513819,16.913394401896774 +transit,99.77501854753783,16.921490623351154 +transit,99.77781330874623,16.929586800212952 +transit,99.78060830890382,16.93768293245693 +transit,99.78340354815106,16.945779020057852 +transit,99.78619902662844,16.95387506299046 +transit,99.78899474447651,16.961971061229494 +transit,99.79179070183586,16.970067014749702 +transit,99.79458689884711,16.978162923525804 +transit,99.79738333565093,16.986258787532545 +transit,99.80018001238801,16.994354606744626 +transit,99.8029769291991,17.002450381136764 +transit,99.80577408622501,17.01054611068368 +transit,99.80857148360654,17.01864179536006 +transit,99.81136912148457,17.026737435140607 +WP18,99.814167,17.03483303 +transit,99.81434040327201,17.043284529361696 +transit,99.81451382213099,17.051736021555545 +transit,99.81468725658654,17.0601875065784 +transit,99.81486070664826,17.068638984427135 +transit,99.81503417232577,17.07709045509859 +transit,99.81520765362868,17.085541918589627 +transit,99.8153811505666,17.093993374897117 +transit,99.81555466314913,17.1024448240179 +transit,99.81572819138593,17.110896265948856 +transit,99.81590173528662,17.119347700686838 +transit,99.8160752948608,17.127799128228713 +transit,99.8162488701181,17.136250548571326 +transit,99.81642246106819,17.14470196171156 +transit,99.81659606772067,17.153153367646272 +transit,99.8167696900852,17.16160476637232 +transit,99.8169433281714,17.17005615788658 +transit,99.81711698198895,17.17850754218591 +transit,99.81729065154748,17.18695891926717 +transit,99.81746433685664,17.195410289127235 +transit,99.81763803792609,17.203861651762978 +transit,99.81781175476549,17.212313007171257 +transit,99.81798548738449,17.220764355348937 +transit,99.81815923579278,17.2292156962929 +Sukhothai,99.818333,17.23766703 +transit,99.8109274024524,17.242972216999036 +transit,99.80352138185381,17.248277128540224 +transit,99.79611493806348,17.253581764518536 +transit,99.78870807094071,17.258886124828933 +transit,99.78130078034481,17.26419020936634 +transit,99.77389306613506,17.26949401802568 +transit,99.76648492817073,17.274797550701866 +transit,99.75907636631113,17.280100807289784 +transit,99.75166738041557,17.285403787684306 +transit,99.74425797034333,17.290706491780302 +transit,99.7368481359537,17.296008919472605 +transit,99.72943787710594,17.301311070656055 +transit,99.72202719365941,17.306612945225467 +transit,99.71461608547338,17.31191454307563 +transit,99.70720455240713,17.31721586410134 +transit,99.69979259431997,17.32251690819735 +transit,99.69238021107121,17.327817675258427 +transit,99.68496740252013,17.333118165179304 +transit,99.67755416852603,17.3384183778547 +transit,99.67014050894824,17.343718313179327 +transit,99.66272642364599,17.34901797104788 +transit,99.65531191247867,17.354317351355018 +transit,99.64789697530551,17.359616453995418 +transit,99.64048161198585,17.36491527886372 +transit,99.63306582237897,17.370213825854556 +transit,99.6256496063442,17.37551209486254 +transit,99.61823296374082,17.380810085782265 +transit,99.61081589442814,17.386107798508327 +transit,99.60339839826548,17.391405232935284 +transit,99.59598047511213,17.396702388957692 +transit,99.5885621248274,17.401999266470092 +transit,99.58114334727061,17.407295865367 +transit,99.57372414230106,17.41259218554293 +transit,99.56630450977806,17.41788822689237 +transit,99.5588844495609,17.42318398930979 +transit,99.55146396150894,17.42847947268966 +transit,99.54404304548144,17.433774676926422 +transit,99.53662170133775,17.4390696019145 +transit,99.52919992893716,17.444364247548318 +transit,99.521777728139,17.44965861372227 +transit,99.51435509880257,17.454952700330733 +transit,99.50693204078718,17.46024650726809 +transit,99.49950855395217,17.465540034428674 +transit,99.49208463815684,17.47083328170683 +transit,99.4846602932605,17.476126248996888 +transit,99.4772355191225,17.481418936193148 +transit,99.46981031560213,17.4867113431899 +transit,99.46238468255873,17.49200346988141 +transit,99.45495861985162,17.497295316161956 +transit,99.44753212734011,17.502586881925765 +transit,99.44010520488354,17.507878167067073 +transit,99.43267785234121,17.513169171480097 +transit,99.42525006957246,17.51845989505902 +transit,99.41782185643662,17.52375033769804 +transit,99.410393212793,17.529040499291316 +transit,99.40296413850095,17.534330379733 +transit,99.39553463341977,17.53961997891723 +transit,99.38810469740883,17.54490929673812 +transit,99.38067433032744,17.55019833308977 +transit,99.37324353203492,17.555487087866283 +transit,99.36581230239061,17.560775560961726 +transit,99.35838064125383,17.566063752270153 +transit,99.35094854848396,17.571351661685608 +transit,99.34351602394028,17.576639289102125 +transit,99.33608306748218,17.5819266344137 +transit,99.32864967896894,17.58721369751434 +transit,99.32121585825995,17.592500478298025 +transit,99.31378160521452,17.597786976658714 +transit,99.30634691969199,17.603073192490353 +transit,99.29891180155172,17.60835912568688 +transit,99.29147625065305,17.613644776142216 +transit,99.2840402668553,17.618930143750262 +transit,99.27660385001784,17.624215228404896 +WP20,99.269167,17.62950003 +transit,99.26635252996367,17.63792495855916 +transit,99.26353779835352,17.64634983976061 +transit,99.26072280501332,17.6547746735773 +transit,99.2579075497868,17.663199459982156 +transit,99.25509203251767,17.67162419894811 +transit,99.25227625304954,17.68004889044808 +transit,99.24946021122605,17.68847353445498 +transit,99.24664390689071,17.696898130941722 +transit,99.24382733988703,17.705322679881206 +transit,99.24101051005846,17.713747181246323 +transit,99.23819341724838,17.72217163500995 +transit,99.23537606130014,17.730596041144977 +transit,99.23255844205707,17.739020399624277 +transit,99.22974055936238,17.74744471042071 +transit,99.22692241305931,17.75586897350713 +transit,99.22410400299098,17.7642931888564 +transit,99.22128532900052,17.772717356441344 +transit,99.21846639093097,17.781141476234815 +transit,99.21564718862534,17.789565548209644 +transit,99.21282772192659,17.79798957233864 +transit,99.21000799067761,17.80641354859462 +transit,99.20718799472127,17.81483747695041 +transit,99.20436773390038,17.823261357378787 +transit,99.2015472080577,17.831685189852557 +transit,99.19872641703594,17.840108974344503 +transit,99.19590536067776,17.848532710827417 +transit,99.19308403882576,17.856956399274054 +transit,99.19026245132252,17.865380039657182 +transit,99.18744059801054,17.873803631949574 +transit,99.18461847873228,17.88222717612396 +transit,99.18179609333016,17.890650672153097 +transit,99.17897344164655,17.899074120009722 +transit,99.17615052352375,17.90749751966656 +transit,99.17332733880401,17.915920871096333 +transit,99.17050388732959,17.924344174271752 +transit,99.16768016894261,17.93276742916554 +transit,99.1648561834852,17.94119063575039 +transit,99.16203193079944,17.94961379399899 +transit,99.15920741072732,17.95803690388403 +transit,99.15638262311083,17.966459965378185 +transit,99.15355756779186,17.97488297845414 +transit,99.15073224461229,17.983305943084545 +transit,99.14790665341393,17.991728859242063 +transit,99.14508079403855,18.000151726899347 +transit,99.14225466632787,18.00857454602904 +transit,99.13942827012355,18.01699731660377 +transit,99.13660160526717,18.025420038596177 +transit,99.13377467160036,18.033842711978878 +transit,99.13094746896459,18.042265336724476 +transit,99.12811999720134,18.050687912805593 +transit,99.12529225615202,18.05911044019482 +transit,99.122464245658,18.067532918864757 +transit,99.11963596556058,18.075955348787982 +transit,99.11680741570102,18.084377729937074 +transit,99.11397859592054,18.092800062284606 +transit,99.11114950606033,18.101222345803134 +transit,99.10832014596146,18.109644580465226 +transit,99.10549051546501,18.118066766243413 +transit,99.10266061441197,18.126488903110253 +transit,99.09983044264334,18.13491099103827 +WP21,99.097,18.14333303 +transit,99.10065204694395,18.15053863299162 +transit,99.10430439321041,18.157744161260723 +transit,99.10795703894814,18.164949614770485 +transit,99.11160998430594,18.172154993484096 +transit,99.11526322943266,18.179360297364724 +transit,99.11891677447714,18.186565526375535 +transit,99.12257061958833,18.19377068047968 +transit,99.12622476491516,18.200975759640304 +transit,99.12987921060665,18.20818076382054 +transit,99.13353395681177,18.215385692983517 +transit,99.13718900367964,18.22259054709235 +transit,99.14084435135933,18.22979532611015 +WP22,99.1445,18.23700003 +transit,99.15146735747362,18.24206090597879 +transit,99.15843511817809,18.247121525852435 +transit,99.16540328223628,18.25218188953077 +transit,99.17237184977107,18.257241996923632 +transit,99.17934082090532,18.262301847940826 +transit,99.1863101957619,18.267361442492156 +transit,99.1932799744637,18.272420780487415 +transit,99.20025015713358,18.277479861836383 +transit,99.2072207438944,18.282538686448806 +transit,99.21419173486905,18.28759725423445 +transit,99.2211631301804,18.29265556510304 +transit,99.22813492995131,18.2977136189643 +transit,99.23510713430467,18.302771415727932 +transit,99.24207974336333,18.307828955303652 +transit,99.24905275725021,18.312886237601127 +transit,99.25602617608814,18.31794326253002 +WP23,99.263,18.32300003 +transit,99.25557382490359,18.32744088559543 +transit,99.2481472707872,18.331881450058834 +transit,99.2407203375578,18.336321723300404 +transit,99.23329302512239,18.34076170523036 +transit,99.22586533338799,18.345201395758863 +transit,99.21843726226156,18.349640794796098 +transit,99.21100881165015,18.35407990225223 +transit,99.20357998146078,18.358518718037413 +transit,99.19615077160049,18.362957242061793 +transit,99.1887211819763,18.367395474235504 +transit,99.18129121249532,18.37183341446868 +transit,99.17386086306458,18.376271062671425 +transit,99.16643013359115,18.380708418753848 +transit,99.15899902398213,18.385145482626054 +transit,99.1515675341446,18.389582254198125 +transit,99.1441356639857,18.394018733380133 +transit,99.13670341341249,18.398454920082145 +transit,99.12927078233214,18.402890814214228 +transit,99.12183777065178,18.40732641568642 +transit,99.11440437827852,18.411761724408755 +transit,99.10697060511956,18.416196740291273 +transit,99.09953645108203,18.420631463243982 +transit,99.09210191607312,18.42506589317689 +WP24,99.084667,18.42950003 +transit,99.07590508762327,18.42952644374126 +transit,99.06714317259124,18.429552453173475 +transit,99.05838125494486,18.429578058295917 +transit,99.04961933472507,18.429603259107854 +transit,99.04085741197284,18.42962805560859 +transit,99.0320954867291,18.429652447797427 +transit,99.02333355903484,18.42967643567368 +transit,99.01457162893098,18.429700019236673 +transit,99.00580969645848,18.429723198485757 +transit,98.99704776165832,18.429745973420264 +transit,98.98828582457143,18.429768344039562 +transit,98.97952388523878,18.42979031034303 +transit,98.97076194370132,18.429811872330045 +WP25,98.962,18.42983303 +transit,98.96202131799997,18.438512668615008 +transit,98.96204263814047,18.447192299299033 +transit,98.96206396042278,18.45587192204888 +transit,98.9620852848482,18.464551536861347 +transit,98.96210661141804,18.473231143733248 +transit,98.96212794013357,18.481910742661395 +transit,98.96214927099611,18.490590333642597 +transit,98.96217060400696,18.499269916673665 +transit,98.9621919391674,18.507949491751404 +transit,98.96221327647872,18.516629058872628 +transit,98.96223461594225,18.525308618034146 +transit,98.96225595755928,18.533988169232785 +transit,98.9622773013311,18.54266771246535 +transit,98.962298647259,18.551347247728643 +transit,98.96231999534432,18.5600267750195 +transit,98.96234134558831,18.568706294334728 +transit,98.96236269799232,18.577385805671142 +transit,98.96238405255762,18.58606530902557 +transit,98.96240540928552,18.594744804394814 +transit,98.96242676817734,18.60342429177571 +transit,98.96244812923435,18.612103771165064 +transit,98.96246949245788,18.620783242559707 +transit,98.96249085784923,18.62946270595645 +transit,98.9625122254097,18.638142161352125 +transit,98.96253359514058,18.64682160874355 +transit,98.96255496704322,18.655501048127554 +transit,98.96257634111889,18.664180479500953 +transit,98.9625977173689,18.672859902860576 +transit,98.96261909579457,18.68153931820326 +transit,98.96264047639718,18.690218725525803 +transit,98.96266185917808,18.69889812482506 +transit,98.96268324413855,18.70757751609785 +transit,98.9627046312799,18.716256899340998 +transit,98.96272602060345,18.72493627455134 +transit,98.96274741211052,18.733615641725706 +transit,98.96276880580238,18.74229500086092 +transit,98.96279020168038,18.750974351953822 +transit,98.96281159974582,18.759653695001234 +Chiang_Mai,98.962833,18.76833303 +transit,98.97102345626038,18.76608001026244 +transit,98.97921369496291,18.7638266311987 +transit,98.9874037161068,18.7615728928644 +transit,98.9955935196913,18.759318795315163 +transit,99.00378310571564,18.757064338606618 +transit,99.01197247417912,18.75480952279439 +transit,99.02016162508102,18.75255434793413 +transit,99.02835055842063,18.750298814081457 +transit,99.03653927419731,18.74804292129203 +transit,99.04472777241037,18.745786669621488 +transit,99.05291605305919,18.743530059125487 +transit,99.06110411614316,18.74127308985968 +transit,99.06929196166166,18.739015761879713 +transit,99.07747958961414,18.73675807524127 +WP27,99.085667,18.73450003 +transit,99.0856442495099,18.726204652347565 +transit,99.08562150123944,18.717909267353512 +transit,99.08559875518738,18.70961387502061 +transit,99.0855760113524,18.701318475351638 +transit,99.08555326973327,18.693023068349355 +transit,99.08553053032868,18.684727654016523 +transit,99.0855077931374,18.676432232355932 +transit,99.08548505815813,18.66813680337033 +transit,99.08546232538961,18.65984136706251 +transit,99.08543959483058,18.651545923435226 +transit,99.08541686647975,18.64325047249126 +transit,99.08539414033586,18.63495501423338 +transit,99.08537141639765,18.626659548664367 +transit,99.08534869466384,18.618364075786985 +transit,99.08532597513317,18.61006859560402 +transit,99.08530325780438,18.60177310811824 +transit,99.08528054267619,18.593477613332425 +transit,99.08525782974733,18.58518211124935 +transit,99.08523511901656,18.57688660187179 +transit,99.08521241048258,18.568591085202527 +transit,99.08518970414416,18.560295561244335 +WP28,99.085167,18.55200003 +transit,99.09421416772395,18.550220010116274 +transit,99.10326114792517,18.548439556428413 +transit,99.11230794058116,18.546658668989824 +transit,99.12135454566953,18.544877347853905 +transit,99.13040096316784,18.543095593074085 +transit,99.13944719305371,18.541313404703782 +transit,99.14849323530477,18.539530782796437 +transit,99.15753908989865,18.537747727405492 +transit,99.16658475681304,18.535964238584413 +transit,99.17563023602561,18.53418031638665 +transit,99.18467552751409,18.53239596086568 +transit,99.19372063125621,18.530611172074995 +transit,99.20276554722972,18.52882595006808 +transit,99.21181027541238,18.527040294898434 +transit,99.220854815782,18.525254206619564 +transit,99.2298991683164,18.523467685284995 +transit,99.2389433329934,18.521680730948255 +transit,99.24798730979086,18.519893343662883 +transit,99.25703109868668,18.51810552348242 +transit,99.26607469965876,18.51631727046042 +transit,99.27511811268498,18.514528584650456 +transit,99.28416133774331,18.512739466106098 +transit,99.29320437481171,18.51094991488093 +transit,99.30224722386818,18.50915993102853 +transit,99.31128988489068,18.507369514602523 +transit,99.32033235785728,18.505578665656515 +transit,99.329374642746,18.503787384244102 +transit,99.33841673953492,18.501995670418943 +transit,99.34745864820212,18.50020352423465 +transit,99.3565003687257,18.498410945744894 +transit,99.36554190108382,18.49661793500331 +transit,99.3745832452546,18.494824492063575 +transit,99.38362440121622,18.49303061697936 +transit,99.39266536894688,18.49123630980435 +transit,99.4017061484248,18.48944157059223 +transit,99.41074673962817,18.48764639939671 +transit,99.4197871425353,18.485850796271492 +transit,99.42882735712443,18.484054761270304 +transit,99.43786738337388,18.482258294446865 +transit,99.44690722126195,18.480461395854924 +transit,99.455946870767,18.47866406554822 +transit,99.46498633186737,18.47686630358051 +transit,99.47402560454144,18.47506811000555 +transit,99.48306468876761,18.473269484877136 +transit,99.49210358452433,18.471470428249035 +transit,99.50114229179,18.469670940175035 +transit,99.51018081054313,18.467871020708944 +transit,99.51921914076216,18.46607066990457 +transit,99.52825728242564,18.464269887815735 +transit,99.53729523551208,18.462468674496268 +WP29,99.546333,18.46066703 +transit,99.5545038256019,18.456384153671483 +transit,99.56267424596551,18.45210092339058 +transit,99.57084426117846,18.44781733926222 +transit,99.5790138713284,18.44353340139133 +transit,99.58718307650297,18.439249109882837 +transit,99.59535187678985,18.434964464841645 +transit,99.60352027227671,18.43067946637266 +transit,99.6116882630513,18.426394114580752 +transit,99.61985584920133,18.42210840957083 +transit,99.62802303081453,18.417822351447754 +transit,99.6361898079787,18.413535940316383 +transit,99.64435618078161,18.40924917628158 +transit,99.65252214931105,18.404962059448184 +transit,99.66068771365487,18.40067458992104 +transit,99.66885287390089,18.396386767804955 +transit,99.67701763013697,18.392098593204768 +transit,99.68518198245101,18.38781006622528 +transit,99.69334593093089,18.383521186971286 +transit,99.70150947566452,18.37923195554758 +transit,99.70967261673987,18.374942372058943 +transit,99.71783535424484,18.370652436610147 +transit,99.72599768826744,18.36636214930595 +transit,99.73415961889565,18.36207151025111 +transit,99.74232114621746,18.35778051955037 +transit,99.75048227032093,18.35348917730846 +transit,99.7586429912941,18.349197483630114 +transit,99.76680330922501,18.344905438620046 +transit,99.77496322420176,18.340613042382955 +transit,99.78312273631245,18.33632029502355 +transit,99.7912818456452,18.332027196646514 +transit,99.79944055228815,18.327733747356532 +transit,99.80759885632943,18.323439947258276 +transit,99.81575675785727,18.319145796456397 +transit,99.82391425695982,18.314851295055554 +transit,99.8320713537253,18.31055644316039 +transit,99.84022804824195,18.306261240875536 +transit,99.84838434059802,18.301965688305614 +transit,99.85654023088175,18.297669785555254 +transit,99.86469571918146,18.293373532729046 +transit,99.87285080558543,18.289076929931596 +transit,99.88100549018199,18.284779977267487 +transit,99.88915977305948,18.280482674841306 +transit,99.89731365430626,18.276185022757613 +transit,99.9054671340107,18.27188702112097 +transit,99.91362021226121,18.26758867003593 +transit,99.9217728891462,18.26328996960704 +transit,99.92992516475408,18.258990919938825 +transit,99.93807703917332,18.254691521135815 +transit,99.9462285124924,18.250391773302514 +transit,99.95437958479977,18.246091676543447 +transit,99.96253025618395,18.241791230963084 +transit,99.97068052673347,18.237490436665933 +transit,99.97883039653689,18.233189293756464 +transit,99.98697986568273,18.228887802339145 +transit,99.99512893425958,18.224585962518432 +transit,100.00327760235605,18.220283774398776 +transit,100.01142587006075,18.215981238084627 +transit,100.01957373746228,18.2116783536804 +transit,100.02772120464932,18.207375121290543 +transit,100.03586827171054,18.203071541019444 +transit,100.04401493873462,18.19876761297152 +transit,100.05216120581025,18.194463337251165 +transit,100.06030707302617,18.19015871396276 +transit,100.06845254047111,18.185853743210686 +transit,100.07659760823384,18.181548425099304 +transit,100.0847422764031,18.177242759732987 +transit,100.09288654506774,18.172936747216067 +transit,100.10103041431653,18.16863038765289 +transit,100.1091738842383,18.16432368114779 +transit,100.11731695492192,18.16001662780508 +transit,100.12545962645625,18.155709227729087 +transit,100.13360189893015,18.1514014810241 +transit,100.14174377243256,18.147093387794417 +transit,100.14988524705237,18.142784948144328 +transit,100.15802632287853,18.138476162178097 +WP30,100.166167,18.13416703 +transit,100.16699050577331,18.12526380141945 +transit,100.16781392828184,18.1163605610984 +transit,100.16863726757772,18.107457309042537 +transit,100.16946052371303,18.098554045257508 +transit,100.17028369673984,18.089650769749 +transit,100.17110678671024,18.08074748252267 +transit,100.17192979367624,18.071844183584194 +transit,100.17275271768987,18.062940872939237 +transit,100.17357555880314,18.05403755059347 +transit,100.17439831706803,18.04513421655257 +transit,100.1752209925365,18.036230870822198 +transit,100.17604358526052,18.02732751340802 +transit,100.17686609529198,18.018424144315723 +transit,100.17768852268283,18.009520763550956 +transit,100.17851086748496,18.00061737111941 +transit,100.17933312975022,17.991713967026733 +transit,100.18015530953049,17.982810551278607 +transit,100.18097740687762,17.973907123880704 +transit,100.1817994218434,17.965003684838692 +transit,100.18262135447964,17.95610023415824 +transit,100.18344320483813,17.94719677184501 +transit,100.18426497297064,17.938293297904693 +transit,100.18508665892891,17.929389812342936 +transit,100.18590826276468,17.920486315165423 +transit,100.18672978452966,17.911582806377822 +transit,100.18755122427554,17.9026792859858 +transit,100.18837258205399,17.893775753995037 +transit,100.18919385791668,17.88487221041119 +transit,100.19001505191525,17.87596865523994 +transit,100.19083616410131,17.867065088486957 +transit,100.19165719452647,17.858161510157903 +transit,100.19247814324231,17.849257920258456 +transit,100.19329901030042,17.840354318794283 +transit,100.19411979575233,17.831450705771058 +transit,100.19494049964956,17.822547081194454 +transit,100.19576112204365,17.81364344507013 +transit,100.19658166298608,17.804739797403776 +transit,100.19740212252833,17.79583613820105 +transit,100.19822250072187,17.786932467467622 +transit,100.19904279761813,17.778028785209173 +transit,100.19986301326854,17.769125091431366 +transit,100.20068314772452,17.76022138613987 +transit,100.20150320103743,17.75131766934037 +transit,100.20232317325865,17.74241394103852 +transit,100.20314306443954,17.73351020124001 +transit,100.20396287463144,17.72460644995049 +transit,100.20478260388566,17.715702687175646 +transit,100.2056022522535,17.706798912921148 +transit,100.20642181978623,17.69789512719267 +transit,100.20724130653514,17.688991329995876 +transit,100.20806071255146,17.68008752133644 +transit,100.20888003788642,17.671183701220038 +transit,100.20969928259122,17.662279869652338 +transit,100.21051844671707,17.653376026639016 +transit,100.21133753031515,17.64447217218574 +transit,100.2121565334366,17.635568306298183 +transit,100.21297545613257,17.626664428982014 +transit,100.21379429845418,17.617760540242912 +transit,100.21461306045254,17.608856640086547 +transit,100.21543174217872,17.59995272851859 +transit,100.21625034368381,17.59104880554471 +transit,100.21706886501885,17.582144871170584 +transit,100.21788730623487,17.57324092540189 +transit,100.2187056673829,17.56433696824429 +transit,100.21952394851395,17.555432999703466 +transit,100.22034214967898,17.546529019785076 +transit,100.22116027092896,17.537625028494805 +transit,100.22197831231483,17.528721025838326 +transit,100.22279627388754,17.519817011821306 +transit,100.22361415569797,17.510912986449423 +transit,100.22443195779705,17.502008949728346 +transit,100.22524968023563,17.49310490166375 +transit,100.22606732306458,17.484200842261306 +transit,100.22688488633474,17.475296771526693 +transit,100.22770237009695,17.46639268946558 +transit,100.22851977440199,17.45748859608363 +transit,100.22933709930066,17.448584491386537 +transit,100.23015434484375,17.439680375379965 +transit,100.23097151108199,17.430776248069588 +transit,100.23178859806613,17.421872109461066 +transit,100.23260560584689,17.4129679595601 +transit,100.23342253447497,17.40406379837234 +transit,100.23423938400106,17.395159625903467 +transit,100.23505615447581,17.386255442159158 +transit,100.23587284594991,17.37735124714509 +transit,100.23668945847396,17.368447040866933 +transit,100.23750599209859,17.359542823330347 +transit,100.23832244687439,17.35063859454103 +transit,100.23913882285196,17.341734354504638 +transit,100.23995512008185,17.332830103226854 +transit,100.2407713386146,17.323925840713354 +transit,100.24158747850078,17.315021566969808 +transit,100.24240353979084,17.30611728200189 +transit,100.24321952253534,17.29721298581528 +transit,100.24403542678472,17.28830867841564 +transit,100.24485125258946,17.27940435980865 +WP31,100.245667,17.27050003 +transit,100.24647026068472,17.261725471711873 +transit,100.24727344539025,17.25295090256133 +transit,100.24807655416477,17.244176322553795 +transit,100.24887958705645,17.2354017316947 +transit,100.24968254411345,17.22662712998947 +transit,100.25048542538393,17.217852517443536 +transit,100.25128823091599,17.209077894062318 +transit,100.25209096075777,17.200303259851253 +transit,100.25289361495734,17.191528614815773 +transit,100.25369619356279,17.182753958961296 +transit,100.25449869662219,17.173979292293247 +transit,100.25530112418357,17.165204614817068 +transit,100.25610347629498,17.156429926538177 +transit,100.25690575300443,17.14765522746201 +transit,100.2577079543599,17.13888051759399 +transit,100.2585100804094,17.13010579693954 +transit,100.25931213120087,17.12133106550411 +transit,100.2601141067823,17.1125563232931 +transit,100.26091600720159,17.10378157031196 +transit,100.26171783250666,17.0950068065661 +transit,100.26251958274544,17.086232032060977 +transit,100.26332125796579,17.07745724680199 +transit,100.2641228582156,17.06868245079459 +transit,100.26492438354272,17.059907644044195 +transit,100.265725833995,17.05113282655624 +transit,100.26652720962025,17.042357998336144 +transit,100.26732851046629,17.03358315938934 +transit,100.26812973658089,17.024808309721273 +transit,100.26893088801187,17.016033449337357 +transit,100.26973196480694,17.00725857824302 +transit,100.27053296701388,16.9984836964437 +transit,100.27133389468041,16.989708803944822 +transit,100.27213474785425,16.98093390075181 +transit,100.2729355265831,16.972158986870113 +transit,100.27373623091462,16.963384062305142 +transit,100.27453686089652,16.95460912706233 +transit,100.2753374165764,16.94583418114712 +transit,100.27613789800193,16.937059224564926 +transit,100.27693830522072,16.928284257321177 +transit,100.27773863828037,16.91950927942132 +transit,100.27853889722849,16.910734290870778 +transit,100.27933908211261,16.90195929167497 +transit,100.28013919298034,16.893184281839343 +transit,100.28093922987918,16.884409261369314 +transit,100.28173919285669,16.87563423027033 +transit,100.28253908196035,16.866859188547803 +transit,100.28333889723767,16.85808413620717 +transit,100.28413863873612,16.84930907325387 +transit,100.2849383065032,16.840533999693328 +transit,100.28573790058631,16.831758915530973 +transit,100.2865374210329,16.82298382077224 +transit,100.28733686789042,16.814208715422556 +transit,100.28813624120622,16.805433599487355 +transit,100.28893554102771,16.796658472972066 +transit,100.28973476740228,16.787883335882125 +transit,100.29053392037726,16.779108188222956 +Phitsanulok,100.291333,16.77033303 +transit,100.29136817727955,16.761526221146873 +transit,100.29140335132223,16.752719404776496 +transit,100.29143852213012,16.743912580892363 +transit,100.29147368970533,16.735105749497954 +transit,100.29150885404994,16.726298910596743 +transit,100.29154401516607,16.71749206419222 +transit,100.2915791730558,16.70868521028787 +transit,100.29161432772122,16.699878348887182 +transit,100.29164947916443,16.691071479993624 +transit,100.29168462738754,16.682264603610708 +transit,100.29171977239261,16.673457719741904 +transit,100.29175491418177,16.6646508283907 +transit,100.29179005275708,16.655843929560593 +transit,100.29182518812065,16.64703702325506 +transit,100.29186032027457,16.638230109477604 +transit,100.29189544922092,16.6294231882317 +transit,100.29193057496178,16.620616259520865 +transit,100.29196569749925,16.61180932334857 +transit,100.29200081683543,16.603002379718312 +transit,100.29203593297238,16.594195428633583 +transit,100.29207104591221,16.58538847009788 +transit,100.292106155657,16.5765815041147 +transit,100.29214126220882,16.567774530687533 +transit,100.29217636556977,16.55896754981988 +transit,100.29221146574193,16.550160561515234 +transit,100.29224656272737,16.541353565777104 +transit,100.29228165652819,16.532546562608974 +transit,100.29231674714646,16.52373955201435 +transit,100.29235183458427,16.51493253399673 +transit,100.29238691884368,16.506125508559624 +transit,100.29242199992679,16.49731847570652 +transit,100.29245707783568,16.488511435440927 +transit,100.29249215257241,16.479704387766347 +transit,100.29252722413908,16.470897332686278 +transit,100.29256229253774,16.462090270204232 +transit,100.29259735777049,16.45328320032371 +transit,100.29263241983939,16.444476123048226 +transit,100.29266747874652,16.435669038381274 +transit,100.29270253449396,16.426861946326365 +transit,100.29273758708376,16.418054846887017 +transit,100.29277263651802,16.40924774006672 +transit,100.29280768279881,16.400440625869 +transit,100.29284272592818,16.391633504297353 +transit,100.29287776590822,16.3828263753553 +transit,100.292912802741,16.374019239046344 +transit,100.29294783642857,16.365212095374012 +transit,100.29298286697302,16.3564049443418 +transit,100.2930178943764,16.34759778595323 +transit,100.2930529186408,16.338790620211814 +transit,100.29308793976826,16.329983447121073 +transit,100.29312295776086,16.32117626668451 +transit,100.29315797262066,16.312369078905654 +transit,100.29319298434974,16.30356188378801 +transit,100.29322799295015,16.294754681335107 +transit,100.29326299842396,16.285947471550458 +transit,100.29329800077322,16.277140254437583 +WP33,100.293333,16.26833303 +transit,100.29337072366047,16.25939350035479 +transit,100.29340844390907,16.250453963169708 +transit,100.2934461607481,16.241514418448443 +transit,100.29348387417984,16.232574866194685 +transit,100.29352158420659,16.223635306412106 +transit,100.29355929083063,16.2146957391044 +transit,100.29359699405423,16.205756164275254 +transit,100.2936346938797,16.196816581928353 +transit,100.2936723903093,16.187876992067388 +transit,100.29371008334532,16.178937394696046 +transit,100.29374777299003,16.169997789818012 +transit,100.29378545924574,16.161058177436978 +transit,100.29382314211472,16.152118557556648 +transit,100.29386082159924,16.143178930180696 +transit,100.29389849770158,16.134239295312824 +transit,100.29393617042402,16.125299652956723 +transit,100.29397383976884,16.116360003116085 +transit,100.29401150573831,16.107420345794612 +transit,100.29404916833472,16.09848068099599 +transit,100.29408682756033,16.089541008723923 +transit,100.29412448341743,16.0806013289821 +transit,100.29416213590828,16.071661641774227 +transit,100.29419978503516,16.062721947103995 +transit,100.29423743080034,16.05378224497511 +transit,100.2942750732061,16.044842535391272 +transit,100.2943127122547,16.035902818356174 +transit,100.2943503479484,16.026963093873523 +transit,100.29438798028949,16.01802336194703 +transit,100.29442560928022,16.009083622580377 +transit,100.29446323492289,16.000143875777283 +transit,100.29450085721973,15.991204121541449 +transit,100.29453847617303,15.98226435987658 +transit,100.29457609178505,15.973324590786381 +transit,100.29461370405804,15.964384814274554 +transit,100.29465131299429,15.955445030344817 +transit,100.29468891859605,15.94650523900087 +transit,100.29472652086558,15.937565440246429 +transit,100.29476411980515,15.928625634085197 +transit,100.29480171541702,15.91968582052088 +transit,100.29483930770344,15.910745999557196 +transit,100.2948768966667,15.90180617119786 +transit,100.29491448230901,15.892866335446582 +transit,100.29495206463267,15.88392649230707 +transit,100.29498964363992,15.874986641783046 +transit,100.29502721933302,15.866046783878213 +transit,100.29506479171424,15.857106918596296 +transit,100.2951023607858,15.848167045941008 +transit,100.29513992655001,15.839227165916071 +transit,100.29517748900908,15.83028727852519 +transit,100.29521504816526,15.821347383772098 +transit,100.29525260402083,15.812407481660507 +transit,100.29529015657803,15.803467572194137 +transit,100.29532770583913,15.79452765537671 +transit,100.29536525180634,15.785587731211944 +transit,100.29540279448194,15.77664779970356 +transit,100.29544033386819,15.767707860855294 +transit,100.2954778699673,15.758767914670852 +transit,100.29551540278153,15.749827961153965 +transit,100.29555293231316,15.740888000308354 +transit,100.2955904585644,15.731948032137758 +transit,100.2956279815375,15.723008056645888 +transit,100.29566550123474,15.714068073836485 +transit,100.29570301765833,15.705128083713264 +transit,100.2957405308105,15.696188086279957 +transit,100.29577804069353,15.687248081540293 +transit,100.29581554730964,15.67830806949801 +transit,100.29585305066108,15.669368050156828 +transit,100.2958905507501,15.66042802352049 +transit,100.29592804757891,15.651487989592715 +transit,100.29596554114978,15.642547948377242 +transit,100.29600303146493,15.633607899877804 +transit,100.29604051852661,15.624667844098143 +transit,100.29607800233705,15.61572778104198 +transit,100.29611548289849,15.606787710713057 +transit,100.29615296021316,15.597847633115112 +transit,100.2961904342833,15.588907548251884 +transit,100.29622790511115,15.57996745612711 +transit,100.29626537269893,15.571027356744525 +transit,100.29630283704888,15.562087250107867 +transit,100.29634029816324,15.553147136220877 +transit,100.29637775604424,15.544207015087304 +transit,100.2964152106941,15.535266886710884 +transit,100.29645266211504,15.52632675109536 +transit,100.29649011030932,15.51738660824447 +transit,100.29652755527916,15.508446458161966 +transit,100.29656499702678,15.499506300851582 +transit,100.2966024355544,15.490566136317074 +transit,100.29663987086427,15.481625964562182 +transit,100.2966773029586,15.472685785590649 +transit,100.29671473183961,15.463745599406233 +transit,100.29675215750954,15.454805406012671 +transit,100.29678957997062,15.445865205413721 +transit,100.29682699922505,15.436924997613124 +transit,100.29686441527505,15.427984782614642 +transit,100.29690182812287,15.419044560422003 +transit,100.29693923777072,15.410104331038985 +transit,100.29697664422082,15.401164094469324 +transit,100.29701404747537,15.392223850716775 +transit,100.29705144753662,15.3832835997851 +transit,100.29708884440677,15.374343341678044 +transit,100.29712623808804,15.365403076399367 +transit,100.29716362858267,15.356462803952828 +transit,100.29720101589284,15.347522524342171 +transit,100.29723840002077,15.338582237571163 +transit,100.2972757809687,15.329641943643564 +transit,100.29731315873885,15.32070164256313 +transit,100.29735053333339,15.311761334333612 +transit,100.29738790475457,15.302821018958783 +transit,100.29742527300459,15.293880696442397 +transit,100.29746263808566,15.284940366788215 +WP34,100.2975,15.27600003 +transit,100.30069924279596,15.26770949073969 +transit,100.30389823445499,15.259418899695044 +transit,100.30709697513836,15.251128256898525 +transit,100.31029546500737,15.24283756238261 +transit,100.31349370422318,15.234546816179758 +transit,100.31669169294699,15.226256018322408 +transit,100.31988943133992,15.217965168843028 +transit,100.32308691956304,15.209674267774032 +transit,100.32628415777738,15.20138331514786 +transit,100.32948114614398,15.193092310996935 +transit,100.33267788482374,15.184801255353674 +transit,100.3358743739776,15.176510148250474 +transit,100.33907061376644,15.168218989719747 +transit,100.34226660435107,15.15992777979387 +transit,100.34546234589229,15.15163651850525 +transit,100.3486578385508,15.143345205886236 +transit,100.35185308248737,15.135053841969224 +transit,100.35504807786259,15.126762426786561 +transit,100.35824282483712,15.118470960370601 +transit,100.36143732357152,15.110179442753697 +transit,100.36463157422632,15.101887873968192 +transit,100.367825576962,15.093596254046412 +transit,100.37101933193902,15.085304583020678 +transit,100.37421283931778,15.077012860923318 +transit,100.37740609925865,15.06872108778664 +transit,100.38059911192194,15.060429263642948 +transit,100.38379187746793,15.052137388524525 +transit,100.38698439605686,15.043845462463674 +transit,100.39017666784893,15.035553485492663 +transit,100.39336869300428,15.027261457643776 +transit,100.39656047168305,15.018969378949272 +transit,100.39975200404527,15.01067724944141 +transit,100.40294329025099,15.00238506915245 +transit,100.40613433046019,14.99409283811462 +transit,100.40932512483282,14.985800556360166 +transit,100.41251567352877,14.977508223921316 +transit,100.41570597670791,14.969215840830294 +transit,100.41889603453006,14.96092340711931 +transit,100.42208584715502,14.95263092282057 +transit,100.42527541474247,14.944338387966276 +transit,100.42846473745215,14.936045802588618 +transit,100.4316538154437,14.927753166719786 +transit,100.43484264887672,14.91946048039195 +transit,100.43803123791079,14.911167743637288 +transit,100.44121958270544,14.90287495648796 +transit,100.44440768342017,14.894582118976123 +transit,100.4475955402144,14.886289231133915 +transit,100.45078315324754,14.87799629299349 +transit,100.45397052267896,14.869703304586976 +transit,100.45715764866797,14.861410265946501 +transit,100.46034453137388,14.853117177104183 +transit,100.46353117095589,14.844824038092138 +transit,100.46671756757323,14.836530848942466 +transit,100.46990372138504,14.828237609687264 +transit,100.47308963255043,14.819944320358626 +transit,100.47627530122848,14.811650980988631 +transit,100.47946072757824,14.803357591609359 +transit,100.4826459117587,14.795064152252879 +transit,100.48583085392879,14.78677066295124 +transit,100.48901555424742,14.778477123736515 +transit,100.49220001287348,14.770183534640735 +transit,100.4953842299658,14.761889895695951 +transit,100.49856820568314,14.753596206934187 +transit,100.50175194018428,14.74530246838747 +transit,100.5049354336279,14.73700868008782 +transit,100.50811868617268,14.72871484206725 +transit,100.51130169797725,14.720420954357756 +transit,100.51448446920017,14.712127016991342 +WP35,100.517667,14.70383303 +transit,100.52002398109886,14.69557974768047 +transit,100.52238078523528,14.687326435559017 +transit,100.52473741252587,14.67907309365443 +transit,100.52709386308716,14.670819721985474 +transit,100.52945013703572,14.662566320570951 +transit,100.53180623448806,14.65431288942962 +transit,100.53416215556064,14.646059428580251 +transit,100.53651790036989,14.637805938041621 +transit,100.53887346903225,14.629552417832473 +transit,100.5412288616641,14.621298867971596 +transit,100.54358407838177,14.613045288477721 +transit,100.54593911930161,14.604791679369601 +transit,100.5482939845399,14.596538040666001 +transit,100.5506486742129,14.58828437238565 +transit,100.55300318843683,14.580030674547297 +transit,100.55535752732793,14.571776947169676 +transit,100.55771169100232,14.563523190271521 +transit,100.56006567957617,14.55526940387156 +transit,100.56241949316559,14.547015587988525 +transit,100.56477313188665,14.538761742641132 +transit,100.5671265958554,14.530507867848103 +transit,100.56947988518785,14.52225396362816 +WP36,100.571833,14.51400003 +transit,100.57420813650732,14.505680080989574 +transit,100.57658309567651,14.497360102068562 +transit,100.57895787762642,14.489040093256166 +transit,100.58133248247591,14.480720054571576 +transit,100.58370691034378,14.47239998603399 +transit,100.58608116134877,14.464079887662594 +transit,100.58845523560967,14.45575975947656 +transit,100.59082913324517,14.447439601495084 +transit,100.59320285437393,14.439119413737332 +transit,100.59557639911462,14.430799196222486 +transit,100.59794976758587,14.422478948969708 +transit,100.60032295990625,14.414158671998159 +transit,100.60269597619431,14.405838365327005 +transit,100.60506881656859,14.397518028975405 +transit,100.60744148114759,14.389197662962516 +transit,100.60981397004974,14.380877267307483 +transit,100.61218628339351,14.372556842029446 +transit,100.61455842129728,14.364236387147564 +transit,100.61693038387942,14.355915902680964 +transit,100.61930217125828,14.34759538864878 +transit,100.62167378355217,14.339274845070147 +transit,100.62404522087937,14.3309542719642 +transit,100.6264164833581,14.322633669350049 +transit,100.62878757110661,14.314313037246832 +transit,100.63115848424307,14.30599237567365 +transit,100.63352922288564,14.297671684649622 +transit,100.63589978715244,14.289350964193856 +transit,100.63827017716157,14.281030214325462 +transit,100.64064039303109,14.272709435063536 +transit,100.64301043487905,14.264388626427179 +transit,100.64538030282341,14.25606778843549 +transit,100.64774999698218,14.24774692110755 +transit,100.6501195174733,14.239426024462457 +transit,100.65248886441466,14.231105098519285 +transit,100.65485803792416,14.222784143297124 +transit,100.65722703811964,14.21446315881504 +transit,100.65959586511892,14.206142145092118 +transit,100.66196451903978,14.197821102147415 +WP37,100.664333,14.18950003 +transit,100.66664363112469,14.181428781010574 +transit,100.66895409878745,14.173357504322949 +transit,100.67126440309633,14.165286199954679 +transit,100.6735745441593,14.15721486792332 +transit,100.6758845220843,14.149143508246421 +transit,100.67819433697926,14.141072120941542 +transit,100.68050398895208,14.133000706026225 +transit,100.68281347811065,14.124929263518016 +transit,100.6851228045628,14.11685779343445 +transit,100.68743196841635,14.108786295793069 +transit,100.68974096977908,14.100714770611404 +transit,100.6920498087588,14.092643217906986 +transit,100.6943584854632,14.084571637697344 +WP38,100.696667,14.07650003 +transit,100.69257331716587,14.069046258352722 +transit,100.68847989956993,14.061592412710672 +transit,100.68438674705119,14.054138493118721 +transit,100.68029385944872,14.046684499621724 +transit,100.67620123660159,14.03923043226454 +transit,100.67210887834894,14.031776291092006 +transit,100.66801678452988,14.02432207614896 +transit,100.66392495498363,14.016867787480221 +transit,100.65983338954939,14.009413425130608 +transit,100.65574208806642,14.001958989144919 +transit,100.65165105037399,13.994504479567963 +transit,100.64756027631141,13.98704989644452 +transit,100.64346976571804,13.97959523981937 +transit,100.63937951843324,13.972140509737278 +transit,100.63528953429643,13.964685706243007 +transit,100.63119981314708,13.95723082938131 +transit,100.62711035482462,13.949775879196922 +transit,100.62302115916859,13.942320855734582 +transit,100.61893222601852,13.93486575903901 +transit,100.614843555214,13.92741058915492 +transit,100.6107551465946,13.919955346127017 +Don_Mueang,100.606667,13.91250003 +transit,100.599341342713,13.908266503833755 +transit,100.59201595181146,13.90403275628471 +transit,100.58469082721518,13.899798787430663 +transit,100.57736596884396,13.895564597349402 +transit,100.57004137661762,13.891330186118715 +transit,100.56271705045594,13.887095553816376 +transit,100.55539299027873,13.882860700520158 +transit,100.54806919600576,13.878625626307828 +transit,100.54074566755678,13.87439033125714 +transit,100.53342240485159,13.870154815445852 +transit,100.52609940780994,13.865919078951713 +transit,100.51877667635156,13.861683121852458 +transit,100.51145421039624,13.857446944225824 +transit,100.5041320098637,13.853210546149542 +transit,100.49681007467366,13.848973927701334 +transit,100.48948840474586,13.844737088958915 +WP40,100.482167,13.84050003 +transit,100.47628681767374,13.835061382455812 +transit,100.47040690852803,13.829622591498682 +transit,100.46452727244568,13.82418365719346 +transit,100.4586479093094,13.818744579604992 +transit,100.45276881900202,13.81330535879812 +transit,100.44689000140625,13.807865994837666 +transit,100.44101145640494,13.802426487788445 +transit,100.43513318388084,13.796986837715274 +transit,100.42925518371678,13.791547044682954 +transit,100.42337745579556,13.786107108756267 +WP41,100.4175,13.78066703 +transit,100.41831485710395,13.77205175376932 +transit,100.41912965452572,13.76343646882459 +transit,100.41994439230844,13.754821175171218 +transit,100.42075907049527,13.746205872814615 +transit,100.42157368912932,13.737590561760186 +transit,100.4223882482537,13.728975242013346 +transit,100.4232027479115,13.720359913579498 +transit,100.42401718814584,13.711744576464056 +transit,100.42483156899976,13.703129230672427 +transit,100.42564589051635,13.694513876210022 +transit,100.42646015273864,13.685898513082249 +transit,100.4272743557097,13.677283141294513 +transit,100.42808849947255,13.668667760852232 +transit,100.4289025840702,13.660052371760813 +transit,100.42971660954566,13.65143697402566 +transit,100.43053057594193,13.642821567652192 +transit,100.43134448330198,13.634206152645808 +transit,100.43215833166882,13.625590729011927 +transit,100.43297212108537,13.61697529675595 +transit,100.4337858515946,13.608359855883293 +transit,100.43459952323946,13.599744406399367 +transit,100.43541313606285,13.591128948309574 +transit,100.4362266901077,13.582513481619333 +transit,100.43704018541692,13.573898006334051 +transit,100.43785362203339,13.565282522459135 +WP42,100.438667,13.55666703 +transit,100.44645578706078,13.55271367800042 +transit,100.45424431666602,13.5487600820121 +transit,100.46203258888636,13.544806242116662 +transit,100.46982060379246,13.540852158395728 +transit,100.47760836145501,13.536897830930911 +transit,100.48539586194471,13.532943259803822 +transit,100.49318310533226,13.528988445096063 +transit,100.50097009168837,13.525033386889243 +transit,100.50875682108376,13.521078085264945 +transit,100.51654329358917,13.517122540304765 +transit,100.52432950927535,13.513166752090296 +transit,100.53211546821304,13.50921072070311 +transit,100.539901170473,13.505254446224786 +transit,100.54768661612604,13.5012979287369 +transit,100.55547180524292,13.497341168321014 +transit,100.56325673789445,13.4933841650587 +transit,100.57104141415144,13.489426919031505 +transit,100.5788258340847,13.485469430320986 +transit,100.58660999776507,13.481511699008696 +transit,100.59439390526337,13.477553725176172 +transit,100.60217755665047,13.473595508904957 +transit,100.60996095199724,13.469637050276585 +transit,100.61774409137453,13.465678349372583 +transit,100.62552697485323,13.461719406274481 +transit,100.63330960250424,13.457760221063795 +transit,100.64109197439845,13.453800793822044 +transit,100.64887409060678,13.449841124630735 +transit,100.65665595120016,13.44588121357138 +transit,100.66443755624954,13.441921060725473 +transit,100.67221890582583,13.437960666174517 +WP43,100.68,13.43400003 +transit,100.68409653236691,13.426354643687546 +transit,100.68819280541176,13.418709186178692 +transit,100.69228881930184,13.411063657519275 +transit,100.69638457420444,13.403418057755124 +transit,100.70048007028679,13.395772386932059 +transit,100.70457530771608,13.388126645095898 +transit,100.7086702866595,13.380480832292449 +transit,100.71276500728416,13.372834948567501 +transit,100.71685946975718,13.36518899396684 +transit,100.72095367424564,13.35754296853624 +transit,100.72504762091653,13.34989687232148 +transit,100.72914130993689,13.342250705368308 +transit,100.73323474147368,13.334604467722475 +transit,100.73732791569383,13.326958159429722 +transit,100.74142083276422,13.31931178053578 +transit,100.74551349285174,13.311665331086372 +transit,100.74960589612323,13.304018811127207 +transit,100.75369804274547,13.29637222070399 +transit,100.75778993288523,13.288725559862412 +transit,100.76188156670925,13.281078828648166 +transit,100.76597294438422,13.273432027106924 +transit,100.77006406607681,13.265785155284348 +transit,100.77415493195365,13.258138213226102 +transit,100.77824554218135,13.25049120097783 +transit,100.78233589692645,13.242844118585177 +transit,100.78642599635553,13.235196966093769 +transit,100.79051584063504,13.227549743549227 +transit,100.79460542993148,13.219902450997166 +transit,100.79869476441125,13.212255088483184 +transit,100.80278384424079,13.204607656052886 +transit,100.80687266958644,13.196960153751846 +transit,100.81096124061453,13.189312581625643 +transit,100.81504955749138,13.18166493971985 +transit,100.81913762038324,13.174017228080022 +transit,100.82322542945636,13.166369446751698 +transit,100.82731298487693,13.158721595780428 +transit,100.83140028681113,13.151073675211741 +transit,100.83548733542507,13.143425685091158 +transit,100.83957413088488,13.135777625464195 +transit,100.84366067335662,13.128129496376353 +transit,100.84774696300633,13.120481297873123 +WP44,100.851833,13.11283303 +transit,100.85449471198127,13.104854234186503 +transit,100.85715625248721,13.096875405965013 +transit,100.85981762163634,13.08889654535735 +transit,100.86247881954719,13.080917652385333 +transit,100.86513984633824,13.072938727070786 +transit,100.86780070212794,13.064959769435514 +transit,100.87046138703474,13.056980779501329 +transit,100.87312190117704,13.049001757290037 +transit,100.87578224467323,13.041022702823437 +transit,100.87844241764166,13.033043616123326 +transit,100.88110242020066,13.025064497211499 +transit,100.88376225246853,13.017085346109743 +transit,100.88642191456354,13.009106162839842 +transit,100.88908140660395,13.001126947423584 +transit,100.89174072870796,12.993147699882734 +transit,100.89439988099377,12.985168420239072 +transit,100.89705886357957,12.97718910851437 +transit,100.89971767658348,12.969209764730383 +transit,100.90237632012364,12.961230388908888 +transit,100.9050347943181,12.953250981071628 +transit,100.90769309928494,12.945271541240357 +transit,100.9103512351422,12.937292069436838 +transit,100.9130092020079,12.929312565682803 +WP45,100.915667,12.92133303 +transit,100.92314465033589,12.917429712328273 +transit,100.93062206848363,12.913526179498232 +transit,100.93809925451029,12.909622431583552 +transit,100.94557620848295,12.905718468657884 +transit,100.95305293046867,12.901814290794897 +transit,100.96052942053456,12.89790989806824 +transit,100.96800567874767,12.894005290551569 +transit,100.97548170517514,12.890100468318519 +transit,100.98295749988408,12.886195431442736 +transit,100.99043306294158,12.882290179997861 +transit,100.99790839441478,12.878384714057525 +transit,101.00538349437082,12.87447903369535 +transit,101.01285836287684,12.870573138984971 +WP46,101.020333,12.86666703 +transit,101.01963555555335,12.858174652191412 +transit,101.01893815799811,12.849682267042814 +transit,101.0182408072991,12.841189874558976 +transit,101.01754350342117,12.832697474744649 +transit,101.01684624632918,12.824205067604593 +transit,101.01614903598798,12.815712653143565 +transit,101.01545187236246,12.807220231366331 +transit,101.0147547554175,12.798727802277648 +transit,101.01405768511798,12.79023536588228 +transit,101.0133606614288,12.781742922184982 +transit,101.01266368431487,12.773250471190517 +transit,101.01196675374109,12.764758012903643 +transit,101.01126986967242,12.756265547329125 +transit,101.01057303207375,12.747773074471723 +transit,101.00987624091005,12.739280594336194 +transit,101.00917949614626,12.730788106927307 +transit,101.00848279774735,12.722295612249814 +transit,101.00778614567827,12.713803110308486 +transit,101.007089539904,12.705310601108073 +transit,101.00639298038953,12.69681808465335 +transit,101.00569646709987,12.68832556094907 +U_Tapao,101.005,12.67983303 +transit,100.99748524729382,12.68476491304953 +transit,100.98997020525702,12.689696581764105 +transit,100.98245487377469,12.694628036049753 +transit,100.97493925273196,12.69955927581249 +transit,100.96742334201394,12.704490300958334 +transit,100.95990714150577,12.70942111139328 +transit,100.95239065109256,12.714351707023324 +transit,100.94487387065945,12.719282087754447 +transit,100.93735680009158,12.724212253492627 +transit,100.92983943927409,12.729142204143825 +transit,100.92232178809209,12.734071939614005 +transit,100.91480384643079,12.739001459809106 +transit,100.90728561417528,12.74393076463507 +transit,100.89976709121075,12.74885985399783 +transit,100.89224827742235,12.7537887278033 +transit,100.88472917269523,12.758717385957395 +transit,100.87720977691457,12.763645828366014 +transit,100.86969008996553,12.768574054935053 +transit,100.86217011173328,12.773502065570394 +transit,100.854649842103,12.778429860177916 +transit,100.84712928095988,12.783357438663474 +transit,100.83960842818908,12.78828480093294 +transit,100.83208728367582,12.793211946892148 +transit,100.82456584730528,12.798138876446945 +transit,100.81704411896264,12.803065589503156 +transit,100.80952209853311,12.8079920859666 +transit,100.8019997859019,12.812918365743093 +transit,100.7944771809542,12.817844428738434 +transit,100.78695428357524,12.822770274858414 +transit,100.77943109365023,12.827695904008822 +transit,100.77190761106438,12.832621316095427 +transit,100.76438383570292,12.837546511023998 +transit,100.75685976745106,12.842471488700294 +transit,100.74933540619405,12.847396249030055 +transit,100.74181075181711,12.852320791919025 +transit,100.7342858042055,12.857245117272932 +transit,100.72676056324444,12.862169224997492 +transit,100.71923502881916,12.867093114998422 +transit,100.71170920081495,12.872016787181416 +transit,100.70418307911703,12.876940241452175 +transit,100.69665666361068,12.881863477716378 +transit,100.68912995418114,12.886786495879695 +transit,100.6816029507137,12.891709295847798 +transit,100.67407565309361,12.89663187752634 +transit,100.66654806120613,12.90155424082097 +transit,100.65902017493657,12.906476385637317 +transit,100.65149199417019,12.91139831188102 +transit,100.64396351879226,12.91632001945769 +transit,100.63643474868809,12.921241508272947 +transit,100.62890568374299,12.926162778232381 +transit,100.62137632384221,12.931083829241587 +transit,100.61384666887108,12.936004661206152 +transit,100.6063167187149,12.940925274031644 +transit,100.59878647325895,12.945845667623628 +transit,100.59125593238859,12.950765841887659 +transit,100.58372509598912,12.955685796729286 +transit,100.57619396394584,12.960605532054041 +transit,100.56866253614409,12.965525047767454 +transit,100.56113081246917,12.970444343775045 +transit,100.55359879280647,12.975363419982312 +transit,100.54606647704126,12.98028227629477 +transit,100.53853386505892,12.985200912617898 +transit,100.5310009567448,12.990119328857183 +transit,100.52346775198421,12.995037524918098 +transit,100.51593425066253,12.9999555007061 +transit,100.50840045266511,13.004873256126647 +transit,100.50086635787731,13.009790791085182 +transit,100.49333196618448,13.01470810548714 +transit,100.48579727747202,13.019625199237947 +transit,100.47826229162526,13.02454207224302 +transit,100.47072700852961,13.029458724407766 +transit,100.46319142807043,13.034375155637582 +transit,100.4556555501331,13.039291365837858 +transit,100.44811937460304,13.044207354913977 +transit,100.4405829013656,13.049123122771306 +transit,100.43304613030621,13.054038669315206 +transit,100.42550906131025,13.05895399445103 +transit,100.41797169426313,13.063869098084117 +transit,100.41043402905026,13.068783980119807 +transit,100.40289606555706,13.073698640463418 +transit,100.39535780366893,13.078613079020267 +transit,100.3878192432713,13.08352729569566 +transit,100.38028038424959,13.088441290394893 +transit,100.37274122648923,13.093355063023258 +transit,100.36520176987565,13.09826861348602 +transit,100.3576620142943,13.103181941688465 +transit,100.35012195963061,13.108095047535835 +transit,100.34258160577004,13.11300793093339 +transit,100.33504095259802,13.117920591786367 +WP2,100.3275,13.12283303 +transit,100.32754165237236,13.130527555342772 +transit,100.32758330733789,13.1382220760861 +transit,100.32762496489835,13.145916592227486 +transit,100.32766662505544,13.153611103764428 +transit,100.32770828781092,13.161305610694422 +transit,100.32774995316653,13.169000113014974 +transit,100.32779162112399,13.176694610723583 +transit,100.32783329168505,13.184389103817743 +transit,100.32787496485145,13.192083592294967 +transit,100.3279166406249,13.199778076152752 +transit,100.32795831900718,13.207472555388593 +WP3,100.328,13.21516703 +transit,100.32804932534562,13.22372880860958 +transit,100.3280986541334,13.232290581485813 +transit,100.32814798636589,13.24085234862526 +transit,100.32819732204565,13.24941411002448 +transit,100.32824666117523,13.25797586568004 +transit,100.32829600375716,13.26653761558849 +transit,100.328345349794,13.275099359746399 +transit,100.32839469928834,13.28366109815033 +transit,100.32844405224269,13.292222830796844 +transit,100.32849340865961,13.300784557682498 +transit,100.32854276854167,13.309346278803861 +transit,100.32859213189141,13.3179079941575 +transit,100.3286414987114,13.326469703739976 +transit,100.32869086900419,13.335031407547852 +transit,100.32874024277234,13.343593105577696 +transit,100.32878962001841,13.352154797826074 +transit,100.32883900074496,13.360716484289556 +transit,100.32888838495454,13.369278164964706 +transit,100.32893777264971,13.377839839848091 +transit,100.32898716383305,13.386401508936281 +transit,100.3290365585071,13.394963172225848 +transit,100.32908595667442,13.403524829713355 +transit,100.3291353583376,13.412086481395372 +transit,100.32918476349919,13.420648127268477 +transit,100.32923417216173,13.429209767329235 +transit,100.32928358432781,13.437771401574219 +WP4,100.329333,13.44633303 +transit,100.32738963826714,13.454203588841562 +transit,100.3254461496106,13.462074127756567 +transit,100.32350253394532,13.469944646732305 +transit,100.32155879118619,13.477815145756043 +transit,100.31961492124809,13.485685624815059 +transit,100.31767092404587,13.493556083896632 +transit,100.31572679949439,13.501426522988032 +transit,100.31378254750845,13.509296942076535 +transit,100.31183816800285,13.517167341149399 +transit,100.30989366089239,13.525037720193898 +transit,100.3079490260918,13.532908079197295 +transit,100.30600426351585,13.540778418146852 +transit,100.30405937307923,13.54864873702983 +transit,100.30211435469664,13.556519035833485 +transit,100.30016920828278,13.564389314545078 +transit,100.2982239337523,13.572259573151857 +transit,100.29627853101984,13.580129811641081 +WP5,100.294333,13.58800003 +transit,100.29231766177654,13.59613358602131 +transit,100.29030218603909,13.604267120441008 +transit,100.2882865726931,13.612400633244965 +transit,100.28627082164402,13.62053412441904 +transit,100.28425493279732,13.62866759394911 +transit,100.28223890605837,13.636801041821029 +transit,100.28022274133257,13.644934468020663 +transit,100.27820643852526,13.653067872533864 +transit,100.2761899975418,13.661201255346494 +transit,100.27417341828749,13.669334616444402 +transit,100.27215670066762,13.67746795581344 +transit,100.27013984458746,13.685601273439463 +transit,100.26812284995226,13.693734569308306 +transit,100.26610571666723,13.701867843405827 +transit,100.26408844463755,13.710001095717853 +transit,100.26207103376844,13.718134326230237 +transit,100.260053483965,13.72626753492881 +transit,100.25803579513239,13.734400721799405 +transit,100.2560179671757,13.742533886827859 +WP6,100.254,13.75066703 +transit,100.2586740780304,13.758123399579667 +transit,100.26334845205756,13.765579676009509 +transit,100.26802312226344,13.773035859231898 +transit,100.27269808883001,13.780491949189194 +transit,100.27737335193929,13.78794794582375 +transit,100.28204891177329,13.795403849077895 +transit,100.28672476851409,13.80285965889396 +transit,100.29140092234381,13.810315375214255 +transit,100.2960773734446,13.81777099798109 +transit,100.30075412199864,13.825226527136744 +transit,100.30543116818812,13.832681962623504 +transit,100.31010851219531,13.840137304383626 +transit,100.31478615420248,13.847592552359382 +transit,100.31946409439196,13.855047706493 +transit,100.3241423329461,13.862502766726717 +transit,100.32882087004727,13.869957733002755 +transit,100.33349970587791,13.877412605263316 +transit,100.33817884062047,13.884867383450601 +transit,100.34285827445746,13.892322067506793 +transit,100.34753800757137,13.89977665737406 +transit,100.35221804014478,13.907231152994562 +transit,100.35689837236029,13.914685554310452 +transit,100.36157900440053,13.92213986126387 +transit,100.36625993644816,13.929594073796933 +transit,100.37094116868589,13.93704819185176 +transit,100.37562270129644,13.944502215370443 +transit,100.3803045344626,13.951956144295085 +transit,100.38498666836715,13.959409978567747 +transit,100.38966910319296,13.966863718130504 +transit,100.39435183912289,13.974317362925413 +transit,100.39903487633985,13.981770912894506 +transit,100.4037182150268,13.989224367979812 +transit,100.4084018553667,13.996677728123364 +transit,100.41308579754259,14.004130993267152 +transit,100.4177700417375,14.011584163353172 +transit,100.42245458813453,14.01903723832341 +transit,100.42713943691679,14.026490218119836 +transit,100.43182458826746,14.033943102684404 +transit,100.4365100423697,14.04139589195906 +transit,100.44119579940677,14.04884858588574 +transit,100.44588185956191,14.056301184406367 +transit,100.45056822301844,14.063753687462848 +transit,100.45525488995966,14.071206094997075 +transit,100.45994186056897,14.078658406950948 +transit,100.46462913502977,14.086110623266327 +transit,100.46931671352549,14.09356274388508 +transit,100.4740045962396,14.101014768749055 +transit,100.47869278335563,14.10846669780009 +transit,100.48338127505711,14.11591853098001 +transit,100.48807007152764,14.123370268230632 +transit,100.49275917295083,14.13082190949375 +transit,100.4974485795103,14.138273454711156 +transit,100.5021382913898,14.145724903824627 +transit,100.50682830877301,14.15317625677593 +transit,100.5115186318437,14.16062751350682 +transit,100.51620926078567,14.168078673959027 +transit,100.52090019578274,14.175529738074289 +transit,100.52559143701879,14.182980705794318 +transit,100.53028298467773,14.190431577060822 +transit,100.53497483894346,14.197882351815487 +WP7,100.539667,14.20533303 +transit,100.54797860533483,14.204279516957863 +transit,100.55629013377941,14.203225715194685 +transit,100.56460158531932,14.202171624735378 +transit,100.57291295994017,14.201117245604847 +transit,100.58122425762754,14.20006257782802 +transit,100.58953547836708,14.199007621429818 +transit,100.5978466221444,14.197952376435179 +transit,100.60615768894513,14.196896842869032 +transit,100.61446867875489,14.195841020756331 +transit,100.62277959155935,14.19478491012202 +transit,100.63109042734415,14.193728510991058 +transit,100.63940118609494,14.192671823388402 +transit,100.6477118677974,14.19161484733902 +transit,100.65602247243719,14.190557582867896 +WP8,100.664333,14.18950003 +transit,100.66664363112469,14.181428781010574 +transit,100.66895409878745,14.173357504322949 +transit,100.67126440309633,14.165286199954679 +transit,100.6735745441593,14.15721486792332 +transit,100.6758845220843,14.149143508246421 +transit,100.67819433697926,14.141072120941542 +transit,100.68050398895208,14.133000706026225 +transit,100.68281347811065,14.124929263518016 +transit,100.6851228045628,14.11685779343445 +transit,100.68743196841635,14.108786295793069 +transit,100.68974096977908,14.100714770611404 +transit,100.6920498087588,14.092643217906986 +transit,100.6943584854632,14.084571637697344 +WP9,100.696667,14.07650003 +transit,100.69257331716587,14.069046258352722 +transit,100.68847989956993,14.061592412710672 +transit,100.68438674705119,14.054138493118721 +transit,100.68029385944872,14.046684499621724 +transit,100.67620123660159,14.03923043226454 +transit,100.67210887834894,14.031776291092006 +transit,100.66801678452988,14.02432207614896 +transit,100.66392495498363,14.016867787480221 +transit,100.65983338954939,14.009413425130608 +transit,100.65574208806642,14.001958989144919 +transit,100.65165105037399,13.994504479567963 +transit,100.64756027631141,13.98704989644452 +transit,100.64346976571804,13.97959523981937 +transit,100.63937951843324,13.972140509737278 +transit,100.63528953429643,13.964685706243007 +transit,100.63119981314708,13.95723082938131 +transit,100.62711035482462,13.949775879196922 +transit,100.62302115916859,13.942320855734582 +transit,100.61893222601852,13.93486575903901 +transit,100.614843555214,13.92741058915492 +transit,100.6107551465946,13.919955346127017 +Don_Mueang,100.606667,13.91250003 +transit,100.6049446025679,13.90816671035839 +transit,100.60322226924221,13.903833377023446 +WP11,100.6015,13.89950003 +transit,100.59301296559651,13.901765024837376 +transit,100.5845257661695,13.904029724192878 +transit,100.5760384017093,13.906294128010886 +transit,100.56755087220628,13.908558236235775 +transit,100.55906317765078,13.910822048811921 +transit,100.55057531803321,13.913085565683714 +transit,100.54208729334393,13.915348786795532 +transit,100.53359910357337,13.91761171209177 +transit,100.52511074871194,13.919874341516824 +transit,100.51662222875008,13.922136675015082 +transit,100.50813354367824,13.924398712530953 +transit,100.4996446934869,13.926660454008832 +transit,100.49115567816652,13.928921899393133 +transit,100.48266649770757,13.931183048628265 +transit,100.47417715210061,13.933443901658633 +transit,100.4656876413361,13.935704458428669 +transit,100.45719796540463,13.937964718882776 +transit,100.4487081242967,13.940224682965392 +transit,100.4402181180029,13.942484350620933 +transit,100.4317279465138,13.944743721793836 +transit,100.42323760981999,13.947002796428533 +transit,100.41474710791208,13.94926157446946 +transit,100.40625644078068,13.951520055861057 +transit,100.3977656084164,13.953778240547772 +transit,100.38927461080993,13.956036128474047 +transit,100.38078344795191,13.958293719584336 +transit,100.37229211983302,13.960551013823093 +transit,100.36380062644393,13.962808011134772 +transit,100.35530896777537,13.965064711463835 +transit,100.34681714381804,13.967321114754752 +transit,100.33832515456265,13.969577220951981 +WP12,100.329833,13.97183303 +transit,100.32881180554787,13.980590646029246 +transit,100.3277905338607,13.989348251459255 +transit,100.32676918488234,13.998105846283291 +transit,100.32574775855662,14.00686343049461 +transit,100.32472625482737,14.01562100408648 +transit,100.32370467363837,14.024378567052155 +transit,100.32268301493345,14.033136119384896 +transit,100.32166127865634,14.04189366107797 +transit,100.32063946475083,14.050651192124619 +transit,100.31961757316064,14.05940871251812 +transit,100.31859560382952,14.068166222251723 +transit,100.31757355670116,14.076923721318687 +transit,100.31655143171928,14.085681209712273 +transit,100.31552922882751,14.094438687425734 +transit,100.31450694796958,14.103196154452334 +transit,100.31348458908909,14.11195361078533 +transit,100.3124621521297,14.12071105641797 +transit,100.31143963703501,14.129468491343523 +transit,100.31041704374863,14.13822591555524 +transit,100.30939437221413,14.146983329046378 +transit,100.3083716223751,14.155740731810196 +transit,100.3073487941751,14.164498123839945 +transit,100.30632588755765,14.173255505128882 +transit,100.30530290246627,14.182012875670265 +transit,100.30427983884448,14.190770235457352 +transit,100.30325669663576,14.199527584483393 +transit,100.3022334757836,14.208284922741642 +transit,100.30121017623144,14.217042250225358 +transit,100.30018679792275,14.22579956692779 +transit,100.29916334080092,14.234556872842198 +transit,100.2981398048094,14.243314167961831 +transit,100.29711618989155,14.252071452279944 +transit,100.29609249599079,14.260828725789787 +transit,100.29506872305045,14.269585988484623 +transit,100.2940448710139,14.278343240357696 +transit,100.29302093982444,14.287100481402256 +transit,100.29199692942542,14.295857711611566 +transit,100.29097283976014,14.304614930978866 +transit,100.28994867077186,14.313372139497416 +transit,100.28892442240387,14.322129337160467 +transit,100.28790009459941,14.330886523961267 +transit,100.28687568730172,14.339643699893067 +transit,100.285851200454,14.348400864949117 +transit,100.2848266339995,14.357158019122675 +transit,100.28380198788138,14.36591516240698 +transit,100.2827772620428,14.374672294795284 +transit,100.28175245642693,14.383429416280846 +transit,100.28072757097691,14.392186526856905 +transit,100.27970260563586,14.40094362651672 +transit,100.2786775603469,14.409700715253525 +transit,100.2776524350531,14.418457793060584 +transit,100.27662722969755,14.427214859931134 +transit,100.27560194422331,14.435971915858435 +transit,100.27457657857342,14.444728960835716 +transit,100.2735511326909,14.453485994856248 +transit,100.27252560651876,14.462243017913258 +WP13,100.2715,14.47100003 +transit,100.27028576553123,14.47940988010593 +transit,100.26907143958948,14.487819717938384 +transit,100.26785702211254,14.496229543489912 +transit,100.26664251303806,14.504639356753085 +transit,100.26542791230379,14.513049157720461 +transit,100.26421321984739,14.5214589463846 +transit,100.2629984356065,14.529868722738058 +transit,100.26178355951882,14.5382784867734 +transit,100.26056859152192,14.546688238483181 +transit,100.25935353155344,14.555097977859953 +transit,100.25813837955097,14.563507704896278 +transit,100.25692313545208,14.571917419584713 +transit,100.25570779919435,14.580327121917808 +transit,100.25449237071531,14.588736811888127 +transit,100.25327684995248,14.597146489488223 +transit,100.25206123684337,14.605556154710639 +transit,100.2508455313255,14.61396580754794 +transit,100.24962973333629,14.62237544799267 +transit,100.24841384281325,14.63078507603739 +transit,100.24719785969378,14.639194691674637 +transit,100.24598178391534,14.647604294896974 +transit,100.2447656154153,14.656013885696952 +transit,100.24354935413106,14.66442346406711 +WP14,100.242333,14.67283303 +transit,100.24311000160544,14.681240550739027 +transit,100.24388706258217,14.689648062801169 +transit,100.24466418297027,14.698055566181523 +transit,100.24544136280976,14.706463060875166 +transit,100.2462186021407,14.714870546877188 +transit,100.2469959010032,14.72327802418268 +transit,100.24777325943734,14.731685492786731 +transit,100.24855067748321,14.740092952684423 +transit,100.24932815518093,14.74850040387085 +transit,100.25010569257061,14.756907846341091 +transit,100.25088328969241,14.765315280090242 +transit,100.25166094658644,14.773722705113395 +transit,100.25243866329289,14.782130121405624 +transit,100.25321643985191,14.790537528962025 +transit,100.25399427630369,14.798944927777688 +transit,100.25477217268839,14.8073523178477 +transit,100.25555012904624,14.815759699167144 +transit,100.25632814541746,14.82416707173111 +transit,100.25710622184225,14.832574435534687 +transit,100.25788435836085,14.840981790572968 +transit,100.25866255501352,14.849389136841044 +transit,100.2594408118405,14.857796474333993 +transit,100.26021912888207,14.866203803046906 +transit,100.26099750617851,14.874611122974876 +transit,100.2617759437701,14.883018434112985 +transit,100.26255444169716,14.89142573645633 +WP15,100.263333,14.89983303 +transit,100.2605075745843,14.908345431356354 +transit,100.25768192704201,14.916857791535385 +transit,100.25485605722392,14.925370110510332 +transit,100.2520299649807,14.933882388254435 +transit,100.24920365016303,14.94239462474092 +transit,100.2463771126215,14.950906819943018 +transit,100.24355035220671,14.95941897383393 +transit,100.2407233687692,14.96793108638689 +transit,100.23789616215946,14.976443157575085 +transit,100.23506873222796,14.984955187371733 +transit,100.23224107882508,14.993467175750014 +transit,100.22941320180125,15.00197912268312 +transit,100.22658510100676,15.010491028144228 +transit,100.22375677629192,15.019002892106526 +transit,100.22092822750699,15.027514714543175 +transit,100.21809945450217,15.036026495427338 +transit,100.21527045712762,15.044538234732185 +transit,100.2124412352335,15.05304993243085 +transit,100.20961178866987,15.06156158849649 +transit,100.20678211728679,15.070073202902252 +transit,100.20395222093428,15.078584775621255 +transit,100.2011220994623,15.087096306626636 +transit,100.19829175272075,15.095607795891516 +transit,100.19546118055953,15.10411924338901 +transit,100.19263038282848,15.112630649092225 +transit,100.18979935937742,15.121142012974268 +transit,100.18696811005609,15.129653335008243 +transit,100.18413663471419,15.138164615167227 +transit,100.18130493320145,15.14667585342432 +transit,100.17847300536745,15.155187049752593 +transit,100.17564085106181,15.163698204125124 +transit,100.1728084701341,15.17220931651498 +transit,100.1699758624338,15.180720386895214 +transit,100.1671430278104,15.189231415238897 +transit,100.16430996611331,15.19774240151907 +transit,100.16147667719193,15.206253345708776 +transit,100.1586431608956,15.214764247781055 +transit,100.15580941707363,15.223275107708933 +transit,100.15297544557528,15.231785925465438 +transit,100.15014124624976,15.240296701023588 +transit,100.14730681894626,15.248807434356399 +transit,100.14447216351392,15.257318125436877 +transit,100.14163727980183,15.265828774238017 +transit,100.13880216765904,15.274339380732819 +transit,100.13596682693456,15.28284994489427 +transit,100.13313125747737,15.29136046669535 +transit,100.13029545913639,15.299870946109039 +transit,100.1274594317605,15.3083813831083 +transit,100.12462317519855,15.316891777666104 +transit,100.12178668929936,15.325402129755407 +transit,100.11894997391165,15.333912439349154 +transit,100.11611302888417,15.342422706420294 +transit,100.11327585406559,15.350932930941775 +transit,100.11043844930454,15.359443112886515 +transit,100.1076008144496,15.367953252227453 +transit,100.10476294934934,15.376463348937506 +transit,100.10192485385225,15.384973402989578 +transit,100.0990865278068,15.393483414356592 +transit,100.09624797106142,15.401993383011444 +transit,100.09340918346449,15.410503308927018 +transit,100.09057016486433,15.419013192076227 +transit,100.08773091510925,15.427523032431937 +transit,100.0848914340475,15.436032829967035 +transit,100.0820517215273,15.444542584654382 +transit,100.07921177739681,15.453052296466845 +transit,100.07637160150414,15.461561965377287 +transit,100.07353119369739,15.470071591358556 +transit,100.0706905538246,15.478581174383507 +transit,100.06784968173378,15.487090714424962 +transit,100.06500857727286,15.495600211455773 +transit,100.06216724028977,15.504109665448754 +transit,100.05932567063238,15.512619076376728 +transit,100.05648386814849,15.521128444212515 +transit,100.05364183268593,15.529637768928922 +transit,100.0507995640924,15.538147050498749 +transit,100.04795706221563,15.54665628889479 +transit,100.04511432690325,15.555165484089837 +transit,100.04227135800289,15.563674636056673 +transit,100.03942815536212,15.572183744768074 +transit,100.03658471882846,15.580692810196817 +transit,100.0337410482494,15.589201832315656 +transit,100.03089714347237,15.597710811097349 +transit,100.02805300434478,15.60621974651465 +transit,100.02520863071399,15.614728638540315 +transit,100.02236402242731,15.623237487147067 +transit,100.019519179332,15.631746292307646 +transit,100.01667410127527,15.640255053994785 +transit,100.01382878810433,15.64876377218119 +transit,100.01098323966632,15.657272446839583 +transit,100.00813745580832,15.665781077942668 +transit,100.00529143637739,15.674289665463148 +transit,100.00244518122054,15.682798209373718 +transit,99.99959869018473,15.691306709647064 +transit,99.99675196311688,15.699815166255869 +transit,99.99390499986389,15.708323579172806 +transit,99.99105780027257,15.71683194837055 +transit,99.98821036418973,15.725340273821754 +transit,99.9853626914621,15.733848555499081 +transit,99.98251478193642,15.74235679337518 +transit,99.97966663545931,15.750864987422695 +transit,99.97681825187742,15.75937313761426 +transit,99.97396963103729,15.767881243922508 +transit,99.9711207727855,15.77638930632006 +transit,99.96827167696848,15.78489732477954 +transit,99.96542234343272,15.793405299273555 +transit,99.96257277202459,15.80191322977471 +transit,99.95972296259045,15.810421116255604 +transit,99.95687291497663,15.818928958688828 +transit,99.95402262902938,15.827436757046963 +transit,99.95117210459492,15.835944511302595 +transit,99.94832134151945,15.844452221428298 +transit,99.94547033964908,15.852959887396633 +transit,99.94261909882992,15.861467509180162 +transit,99.93976761890802,15.869975086751435 +transit,99.93691589972937,15.878482620083002 +transit,99.93406394113994,15.886990109147405 +transit,99.93121174298564,15.895497553917169 +transit,99.92835930511232,15.904004954364835 +transit,99.92550662736586,15.912512310462906 +transit,99.922653709592,15.921019622183918 +transit,99.91980055163648,15.929526889500362 +transit,99.916947153345,15.938034112384738 +transit,99.91409351456323,15.946541290809549 +transit,99.91123963513675,15.955048424747282 +transit,99.90838551491115,15.963555514170414 +transit,99.9055311537319,15.97206255905143 +transit,99.9026765514445,15.980569559362786 +transit,99.89982170789438,15.989076515076952 +transit,99.89696662292691,15.997583426166381 +transit,99.89411129638745,16.006090292603517 +transit,99.89125572812127,16.01459711436081 +transit,99.88839991797363,16.023103891410695 +transit,99.88554386578973,16.031610623725594 +transit,99.88268757141473,16.040117311277942 +transit,99.87983103469377,16.04862395404014 +transit,99.87697425547186,16.05713055198461 +transit,99.87411723359409,16.06563710508374 +transit,99.8712599689054,16.074143613309943 +transit,99.86840246125075,16.082650076635602 +transit,99.865544710475,16.09115649503309 +transit,99.86268671642303,16.099662868474805 +transit,99.85982847893962,16.10816919693309 +transit,99.85696999786954,16.116675480380334 +transit,99.85411127305748,16.125181718788873 +transit,99.85125230434812,16.133687912131073 +transit,99.84839309158608,16.14219406037926 +transit,99.84553363461592,16.15070016350579 +transit,99.8426739332822,16.159206221482975 +transit,99.83981398742937,16.167712234283144 +transit,99.8369537969019,16.176218201878623 +transit,99.83409336154416,16.18472412424171 +transit,99.83123268120052,16.193230001344716 +transit,99.82837175571527,16.20173583315993 +transit,99.82551058493267,16.21024161965965 +transit,99.82264916869694,16.218747360816156 +transit,99.81978750685224,16.227253056601718 +transit,99.8169255992427,16.235758706988612 +transit,99.81406344571238,16.244264311949102 +transit,99.81120104610532,16.252769871455445 +transit,99.80833840026553,16.261275385479884 +transit,99.8054755080369,16.269780853994675 +transit,99.80261236926336,16.27828627697203 +transit,99.79974898378875,16.286791654384206 +transit,99.79688535145687,16.295296986203407 +transit,99.79402147211148,16.303802272401857 +transit,99.79115734559629,16.312307512951765 +transit,99.78829297175496,16.320812707825333 +transit,99.78542835043112,16.329317856994752 +transit,99.78256348146833,16.337822960432216 +transit,99.77969836471013,16.346328018109904 +WP16,99.776833,16.35483303 +transit,99.77618023461284,16.36352772012392 +transit,99.77552741141027,16.372222401058075 +transit,99.77487453035477,16.380917072797786 +transit,99.77422159140875,16.389611735338356 +transit,99.77356859453462,16.398306388675113 +transit,99.77291553969484,16.407001032803365 +transit,99.77226242685175,16.41569566771843 +transit,99.77160925596779,16.42439029341563 +transit,99.7709560270053,16.433084909890265 +transit,99.77030273992665,16.441779517137665 +transit,99.7696493946942,16.45047411515314 +transit,99.76899599127029,16.459168703932004 +transit,99.76834252961723,16.467863283469587 +transit,99.76768900969735,16.476557853761186 +transit,99.76703543147296,16.485252414802133 +transit,99.76638179490634,16.493946966587743 +transit,99.76572809995977,16.50264150911333 +transit,99.76507434659551,16.511336042374218 +transit,99.76442053477584,16.520030566365715 +transit,99.76376666446298,16.528725081083156 +transit,99.76311273561917,16.537419586521843 +transit,99.76245874820663,16.5461140826771 +transit,99.76180470218756,16.554808569544257 +transit,99.76115059752416,16.563503047118626 +transit,99.76049643417862,16.572197515395523 +transit,99.7598422121131,16.58089197437027 +transit,99.75918793128977,16.589586424038195 +transit,99.75853359167077,16.598280864394617 +transit,99.75787919321822,16.606975295434843 +transit,99.75722473589427,16.615669717154212 +transit,99.75657021966101,16.624364129548038 +transit,99.75591564448055,16.633058532611642 +transit,99.75526101031497,16.64175292634035 +transit,99.75460631712635,16.65044731072948 +transit,99.75395156487673,16.659141685774355 +transit,99.75329675352819,16.667836051470307 +transit,99.75264188304276,16.67653040781264 +transit,99.75198695338244,16.685224754796693 +transit,99.75133196450928,16.693919092417794 +transit,99.75067691638525,16.702613420671252 +transit,99.75002180897236,16.7113077395524 +transit,99.74936664223257,16.72000204905656 +transit,99.74871141612785,16.72869634917906 +transit,99.74805613062016,16.73739063991522 +transit,99.74740078567142,16.746084921260373 +transit,99.74674538124357,16.754779193209835 +transit,99.74608991729853,16.763473455758938 +transit,99.74543439379819,16.772167708903005 +transit,99.74477881070446,16.780861952637366 +transit,99.7441231679792,16.789556186957345 +transit,99.74346746558427,16.798250411858273 +transit,99.74281170348154,16.806944627335472 +transit,99.74215588163284,16.815638833384273 +WP17,99.7415,16.82433303 +transit,99.74429190475959,16.832429740308847 +transit,99.74708404678597,16.840526406302324 +transit,99.7498764262191,16.848623027955263 +transit,99.752669043199,16.856719605242482 +transit,99.75546189786576,16.8648161381388 +transit,99.75825499035943,16.872912626619026 +transit,99.7610483208202,16.88100907065797 +transit,99.7638418893882,16.889105470230426 +transit,99.76663569620369,16.897201825311186 +transit,99.76942974140691,16.905298135875043 +transit,99.77222402513819,16.913394401896774 +transit,99.77501854753783,16.921490623351154 +transit,99.77781330874623,16.929586800212952 +transit,99.78060830890382,16.93768293245693 +transit,99.78340354815106,16.945779020057852 +transit,99.78619902662844,16.95387506299046 +transit,99.78899474447651,16.961971061229494 +transit,99.79179070183586,16.970067014749702 +transit,99.79458689884711,16.978162923525804 +transit,99.79738333565093,16.986258787532545 +transit,99.80018001238801,16.994354606744626 +transit,99.8029769291991,17.002450381136764 +transit,99.80577408622501,17.01054611068368 +transit,99.80857148360654,17.01864179536006 +transit,99.81136912148457,17.026737435140607 +WP18,99.814167,17.03483303 +transit,99.81434040327201,17.043284529361696 +transit,99.81451382213099,17.051736021555545 +transit,99.81468725658654,17.0601875065784 +transit,99.81486070664826,17.068638984427135 +transit,99.81503417232577,17.07709045509859 +transit,99.81520765362868,17.085541918589627 +transit,99.8153811505666,17.093993374897117 +transit,99.81555466314913,17.1024448240179 +transit,99.81572819138593,17.110896265948856 +transit,99.81590173528662,17.119347700686838 +transit,99.8160752948608,17.127799128228713 +transit,99.8162488701181,17.136250548571326 +transit,99.81642246106819,17.14470196171156 +transit,99.81659606772067,17.153153367646272 +transit,99.8167696900852,17.16160476637232 +transit,99.8169433281714,17.17005615788658 +transit,99.81711698198895,17.17850754218591 +transit,99.81729065154748,17.18695891926717 +transit,99.81746433685664,17.195410289127235 +transit,99.81763803792609,17.203861651762978 +transit,99.81781175476549,17.212313007171257 +transit,99.81798548738449,17.220764355348937 +transit,99.81815923579278,17.2292156962929 +Sukhothai,99.818333,17.23766703 +transit,99.8109274024524,17.242972216999036 +transit,99.80352138185381,17.248277128540224 +transit,99.79611493806348,17.253581764518536 +transit,99.78870807094071,17.258886124828933 +transit,99.78130078034481,17.26419020936634 +transit,99.77389306613506,17.26949401802568 +transit,99.76648492817073,17.274797550701866 +transit,99.75907636631113,17.280100807289784 +transit,99.75166738041557,17.285403787684306 +transit,99.74425797034333,17.290706491780302 +transit,99.7368481359537,17.296008919472605 +transit,99.72943787710594,17.301311070656055 +transit,99.72202719365941,17.306612945225467 +transit,99.71461608547338,17.31191454307563 +transit,99.70720455240713,17.31721586410134 +transit,99.69979259431997,17.32251690819735 +transit,99.69238021107121,17.327817675258427 +transit,99.68496740252013,17.333118165179304 +transit,99.67755416852603,17.3384183778547 +transit,99.67014050894824,17.343718313179327 +transit,99.66272642364599,17.34901797104788 +transit,99.65531191247867,17.354317351355018 +transit,99.64789697530551,17.359616453995418 +transit,99.64048161198585,17.36491527886372 +transit,99.63306582237897,17.370213825854556 +transit,99.6256496063442,17.37551209486254 +transit,99.61823296374082,17.380810085782265 +transit,99.61081589442814,17.386107798508327 +transit,99.60339839826548,17.391405232935284 +transit,99.59598047511213,17.396702388957692 +transit,99.5885621248274,17.401999266470092 +transit,99.58114334727061,17.407295865367 +transit,99.57372414230106,17.41259218554293 +transit,99.56630450977806,17.41788822689237 +transit,99.5588844495609,17.42318398930979 +transit,99.55146396150894,17.42847947268966 +transit,99.54404304548144,17.433774676926422 +transit,99.53662170133775,17.4390696019145 +transit,99.52919992893716,17.444364247548318 +transit,99.521777728139,17.44965861372227 +transit,99.51435509880257,17.454952700330733 +transit,99.50693204078718,17.46024650726809 +transit,99.49950855395217,17.465540034428674 +transit,99.49208463815684,17.47083328170683 +transit,99.4846602932605,17.476126248996888 +transit,99.4772355191225,17.481418936193148 +transit,99.46981031560213,17.4867113431899 +transit,99.46238468255873,17.49200346988141 +transit,99.45495861985162,17.497295316161956 +transit,99.44753212734011,17.502586881925765 +transit,99.44010520488354,17.507878167067073 +transit,99.43267785234121,17.513169171480097 +transit,99.42525006957246,17.51845989505902 +transit,99.41782185643662,17.52375033769804 +transit,99.410393212793,17.529040499291316 +transit,99.40296413850095,17.534330379733 +transit,99.39553463341977,17.53961997891723 +transit,99.38810469740883,17.54490929673812 +transit,99.38067433032744,17.55019833308977 +transit,99.37324353203492,17.555487087866283 +transit,99.36581230239061,17.560775560961726 +transit,99.35838064125383,17.566063752270153 +transit,99.35094854848396,17.571351661685608 +transit,99.34351602394028,17.576639289102125 +transit,99.33608306748218,17.5819266344137 +transit,99.32864967896894,17.58721369751434 +transit,99.32121585825995,17.592500478298025 +transit,99.31378160521452,17.597786976658714 +transit,99.30634691969199,17.603073192490353 +transit,99.29891180155172,17.60835912568688 +transit,99.29147625065305,17.613644776142216 +transit,99.2840402668553,17.618930143750262 +transit,99.27660385001784,17.624215228404896 +WP20,99.269167,17.62950003 +transit,99.26635252996367,17.63792495855916 +transit,99.26353779835352,17.64634983976061 +transit,99.26072280501332,17.6547746735773 +transit,99.2579075497868,17.663199459982156 +transit,99.25509203251767,17.67162419894811 +transit,99.25227625304954,17.68004889044808 +transit,99.24946021122605,17.68847353445498 +transit,99.24664390689071,17.696898130941722 +transit,99.24382733988703,17.705322679881206 +transit,99.24101051005846,17.713747181246323 +transit,99.23819341724838,17.72217163500995 +transit,99.23537606130014,17.730596041144977 +transit,99.23255844205707,17.739020399624277 +transit,99.22974055936238,17.74744471042071 +transit,99.22692241305931,17.75586897350713 +transit,99.22410400299098,17.7642931888564 +transit,99.22128532900052,17.772717356441344 +transit,99.21846639093097,17.781141476234815 +transit,99.21564718862534,17.789565548209644 +transit,99.21282772192659,17.79798957233864 +transit,99.21000799067761,17.80641354859462 +transit,99.20718799472127,17.81483747695041 +transit,99.20436773390038,17.823261357378787 +transit,99.2015472080577,17.831685189852557 +transit,99.19872641703594,17.840108974344503 +transit,99.19590536067776,17.848532710827417 +transit,99.19308403882576,17.856956399274054 +transit,99.19026245132252,17.865380039657182 +transit,99.18744059801054,17.873803631949574 +transit,99.18461847873228,17.88222717612396 +transit,99.18179609333016,17.890650672153097 +transit,99.17897344164655,17.899074120009722 +transit,99.17615052352375,17.90749751966656 +transit,99.17332733880401,17.915920871096333 +transit,99.17050388732959,17.924344174271752 +transit,99.16768016894261,17.93276742916554 +transit,99.1648561834852,17.94119063575039 +transit,99.16203193079944,17.94961379399899 +transit,99.15920741072732,17.95803690388403 +transit,99.15638262311083,17.966459965378185 +transit,99.15355756779186,17.97488297845414 +transit,99.15073224461229,17.983305943084545 +transit,99.14790665341393,17.991728859242063 +transit,99.14508079403855,18.000151726899347 +transit,99.14225466632787,18.00857454602904 +transit,99.13942827012355,18.01699731660377 +transit,99.13660160526717,18.025420038596177 +transit,99.13377467160036,18.033842711978878 +transit,99.13094746896459,18.042265336724476 +transit,99.12811999720134,18.050687912805593 +transit,99.12529225615202,18.05911044019482 +transit,99.122464245658,18.067532918864757 +transit,99.11963596556058,18.075955348787982 +transit,99.11680741570102,18.084377729937074 +transit,99.11397859592054,18.092800062284606 +transit,99.11114950606033,18.101222345803134 +transit,99.10832014596146,18.109644580465226 +transit,99.10549051546501,18.118066766243413 +transit,99.10266061441197,18.126488903110253 +transit,99.09983044264334,18.13491099103827 +WP21,99.097,18.14333303 +transit,99.10065204694395,18.15053863299162 +transit,99.10430439321041,18.157744161260723 +transit,99.10795703894814,18.164949614770485 +transit,99.11160998430594,18.172154993484096 +transit,99.11526322943266,18.179360297364724 +transit,99.11891677447714,18.186565526375535 +transit,99.12257061958833,18.19377068047968 +transit,99.12622476491516,18.200975759640304 +transit,99.12987921060665,18.20818076382054 +transit,99.13353395681177,18.215385692983517 +transit,99.13718900367964,18.22259054709235 +transit,99.14084435135933,18.22979532611015 +WP22,99.1445,18.23700003 +transit,99.15146735747362,18.24206090597879 +transit,99.15843511817809,18.247121525852435 +transit,99.16540328223628,18.25218188953077 +transit,99.17237184977107,18.257241996923632 +transit,99.17934082090532,18.262301847940826 +transit,99.1863101957619,18.267361442492156 +transit,99.1932799744637,18.272420780487415 +transit,99.20025015713358,18.277479861836383 +transit,99.2072207438944,18.282538686448806 +transit,99.21419173486905,18.28759725423445 +transit,99.2211631301804,18.29265556510304 +transit,99.22813492995131,18.2977136189643 +transit,99.23510713430467,18.302771415727932 +transit,99.24207974336333,18.307828955303652 +transit,99.24905275725021,18.312886237601127 +transit,99.25602617608814,18.31794326253002 +WP23,99.263,18.32300003 +transit,99.25557382490359,18.32744088559543 +transit,99.2481472707872,18.331881450058834 +transit,99.2407203375578,18.336321723300404 +transit,99.23329302512239,18.34076170523036 +transit,99.22586533338799,18.345201395758863 +transit,99.21843726226156,18.349640794796098 +transit,99.21100881165015,18.35407990225223 +transit,99.20357998146078,18.358518718037413 +transit,99.19615077160049,18.362957242061793 +transit,99.1887211819763,18.367395474235504 +transit,99.18129121249532,18.37183341446868 +transit,99.17386086306458,18.376271062671425 +transit,99.16643013359115,18.380708418753848 +transit,99.15899902398213,18.385145482626054 +transit,99.1515675341446,18.389582254198125 +transit,99.1441356639857,18.394018733380133 +transit,99.13670341341249,18.398454920082145 +transit,99.12927078233214,18.402890814214228 +transit,99.12183777065178,18.40732641568642 +transit,99.11440437827852,18.411761724408755 +transit,99.10697060511956,18.416196740291273 +transit,99.09953645108203,18.420631463243982 +transit,99.09210191607312,18.42506589317689 +WP24,99.084667,18.42950003 +transit,99.07590508762327,18.42952644374126 +transit,99.06714317259124,18.429552453173475 +transit,99.05838125494486,18.429578058295917 +transit,99.04961933472507,18.429603259107854 +transit,99.04085741197284,18.42962805560859 +transit,99.0320954867291,18.429652447797427 +transit,99.02333355903484,18.42967643567368 +transit,99.01457162893098,18.429700019236673 +transit,99.00580969645848,18.429723198485757 +transit,98.99704776165832,18.429745973420264 +transit,98.98828582457143,18.429768344039562 +transit,98.97952388523878,18.42979031034303 +transit,98.97076194370132,18.429811872330045 +WP25,98.962,18.42983303 +transit,98.96202131799997,18.438512668615008 +transit,98.96204263814047,18.447192299299033 +transit,98.96206396042278,18.45587192204888 +transit,98.9620852848482,18.464551536861347 +transit,98.96210661141804,18.473231143733248 +transit,98.96212794013357,18.481910742661395 +transit,98.96214927099611,18.490590333642597 +transit,98.96217060400696,18.499269916673665 +transit,98.9621919391674,18.507949491751404 +transit,98.96221327647872,18.516629058872628 +transit,98.96223461594225,18.525308618034146 +transit,98.96225595755928,18.533988169232785 +transit,98.9622773013311,18.54266771246535 +transit,98.962298647259,18.551347247728643 +transit,98.96231999534432,18.5600267750195 +transit,98.96234134558831,18.568706294334728 +transit,98.96236269799232,18.577385805671142 +transit,98.96238405255762,18.58606530902557 +transit,98.96240540928552,18.594744804394814 +transit,98.96242676817734,18.60342429177571 +transit,98.96244812923435,18.612103771165064 +transit,98.96246949245788,18.620783242559707 +transit,98.96249085784923,18.62946270595645 +transit,98.9625122254097,18.638142161352125 +transit,98.96253359514058,18.64682160874355 +transit,98.96255496704322,18.655501048127554 +transit,98.96257634111889,18.664180479500953 +transit,98.9625977173689,18.672859902860576 +transit,98.96261909579457,18.68153931820326 +transit,98.96264047639718,18.690218725525803 +transit,98.96266185917808,18.69889812482506 +transit,98.96268324413855,18.70757751609785 +transit,98.9627046312799,18.716256899340998 +transit,98.96272602060345,18.72493627455134 +transit,98.96274741211052,18.733615641725706 +transit,98.96276880580238,18.74229500086092 +transit,98.96279020168038,18.750974351953822 +transit,98.96281159974582,18.759653695001234 +Chiang_Mai,98.962833,18.76833303 +transit,98.97102345626038,18.76608001026244 +transit,98.97921369496291,18.7638266311987 +transit,98.9874037161068,18.7615728928644 +transit,98.9955935196913,18.759318795315163 +transit,99.00378310571564,18.757064338606618 +transit,99.01197247417912,18.75480952279439 +transit,99.02016162508102,18.75255434793413 +transit,99.02835055842063,18.750298814081457 +transit,99.03653927419731,18.74804292129203 +transit,99.04472777241037,18.745786669621488 +transit,99.05291605305919,18.743530059125487 +transit,99.06110411614316,18.74127308985968 +transit,99.06929196166166,18.739015761879713 +transit,99.07747958961414,18.73675807524127 +WP27,99.085667,18.73450003 +transit,99.0856442495099,18.726204652347565 +transit,99.08562150123944,18.717909267353512 +transit,99.08559875518738,18.70961387502061 +transit,99.0855760113524,18.701318475351638 +transit,99.08555326973327,18.693023068349355 +transit,99.08553053032868,18.684727654016523 +transit,99.0855077931374,18.676432232355932 +transit,99.08548505815813,18.66813680337033 +transit,99.08546232538961,18.65984136706251 +transit,99.08543959483058,18.651545923435226 +transit,99.08541686647975,18.64325047249126 +transit,99.08539414033586,18.63495501423338 +transit,99.08537141639765,18.626659548664367 +transit,99.08534869466384,18.618364075786985 +transit,99.08532597513317,18.61006859560402 +transit,99.08530325780438,18.60177310811824 +transit,99.08528054267619,18.593477613332425 +transit,99.08525782974733,18.58518211124935 +transit,99.08523511901656,18.57688660187179 +transit,99.08521241048258,18.568591085202527 +transit,99.08518970414416,18.560295561244335 +WP28,99.085167,18.55200003 +transit,99.09421416772395,18.550220010116274 +transit,99.10326114792517,18.548439556428413 +transit,99.11230794058116,18.546658668989824 +transit,99.12135454566953,18.544877347853905 +transit,99.13040096316784,18.543095593074085 +transit,99.13944719305371,18.541313404703782 +transit,99.14849323530477,18.539530782796437 +transit,99.15753908989865,18.537747727405492 +transit,99.16658475681304,18.535964238584413 +transit,99.17563023602561,18.53418031638665 +transit,99.18467552751409,18.53239596086568 +transit,99.19372063125621,18.530611172074995 +transit,99.20276554722972,18.52882595006808 +transit,99.21181027541238,18.527040294898434 +transit,99.220854815782,18.525254206619564 +transit,99.2298991683164,18.523467685284995 +transit,99.2389433329934,18.521680730948255 +transit,99.24798730979086,18.519893343662883 +transit,99.25703109868668,18.51810552348242 +transit,99.26607469965876,18.51631727046042 +transit,99.27511811268498,18.514528584650456 +transit,99.28416133774331,18.512739466106098 +transit,99.29320437481171,18.51094991488093 +transit,99.30224722386818,18.50915993102853 +transit,99.31128988489068,18.507369514602523 +transit,99.32033235785728,18.505578665656515 +transit,99.329374642746,18.503787384244102 +transit,99.33841673953492,18.501995670418943 +transit,99.34745864820212,18.50020352423465 +transit,99.3565003687257,18.498410945744894 +transit,99.36554190108382,18.49661793500331 +transit,99.3745832452546,18.494824492063575 +transit,99.38362440121622,18.49303061697936 +transit,99.39266536894688,18.49123630980435 +transit,99.4017061484248,18.48944157059223 +transit,99.41074673962817,18.48764639939671 +transit,99.4197871425353,18.485850796271492 +transit,99.42882735712443,18.484054761270304 +transit,99.43786738337388,18.482258294446865 +transit,99.44690722126195,18.480461395854924 +transit,99.455946870767,18.47866406554822 +transit,99.46498633186737,18.47686630358051 +transit,99.47402560454144,18.47506811000555 +transit,99.48306468876761,18.473269484877136 +transit,99.49210358452433,18.471470428249035 +transit,99.50114229179,18.469670940175035 +transit,99.51018081054313,18.467871020708944 +transit,99.51921914076216,18.46607066990457 +transit,99.52825728242564,18.464269887815735 +transit,99.53729523551208,18.462468674496268 +WP29,99.546333,18.46066703 +transit,99.5545038256019,18.456384153671483 +transit,99.56267424596551,18.45210092339058 +transit,99.57084426117846,18.44781733926222 +transit,99.5790138713284,18.44353340139133 +transit,99.58718307650297,18.439249109882837 +transit,99.59535187678985,18.434964464841645 +transit,99.60352027227671,18.43067946637266 +transit,99.6116882630513,18.426394114580752 +transit,99.61985584920133,18.42210840957083 +transit,99.62802303081453,18.417822351447754 +transit,99.6361898079787,18.413535940316383 +transit,99.64435618078161,18.40924917628158 +transit,99.65252214931105,18.404962059448184 +transit,99.66068771365487,18.40067458992104 +transit,99.66885287390089,18.396386767804955 +transit,99.67701763013697,18.392098593204768 +transit,99.68518198245101,18.38781006622528 +transit,99.69334593093089,18.383521186971286 +transit,99.70150947566452,18.37923195554758 +transit,99.70967261673987,18.374942372058943 +transit,99.71783535424484,18.370652436610147 +transit,99.72599768826744,18.36636214930595 +transit,99.73415961889565,18.36207151025111 +transit,99.74232114621746,18.35778051955037 +transit,99.75048227032093,18.35348917730846 +transit,99.7586429912941,18.349197483630114 +transit,99.76680330922501,18.344905438620046 +transit,99.77496322420176,18.340613042382955 +transit,99.78312273631245,18.33632029502355 +transit,99.7912818456452,18.332027196646514 +transit,99.79944055228815,18.327733747356532 +transit,99.80759885632943,18.323439947258276 +transit,99.81575675785727,18.319145796456397 +transit,99.82391425695982,18.314851295055554 +transit,99.8320713537253,18.31055644316039 +transit,99.84022804824195,18.306261240875536 +transit,99.84838434059802,18.301965688305614 +transit,99.85654023088175,18.297669785555254 +transit,99.86469571918146,18.293373532729046 +transit,99.87285080558543,18.289076929931596 +transit,99.88100549018199,18.284779977267487 +transit,99.88915977305948,18.280482674841306 +transit,99.89731365430626,18.276185022757613 +transit,99.9054671340107,18.27188702112097 +transit,99.91362021226121,18.26758867003593 +transit,99.9217728891462,18.26328996960704 +transit,99.92992516475408,18.258990919938825 +transit,99.93807703917332,18.254691521135815 +transit,99.9462285124924,18.250391773302514 +transit,99.95437958479977,18.246091676543447 +transit,99.96253025618395,18.241791230963084 +transit,99.97068052673347,18.237490436665933 +transit,99.97883039653689,18.233189293756464 +transit,99.98697986568273,18.228887802339145 +transit,99.99512893425958,18.224585962518432 +transit,100.00327760235605,18.220283774398776 +transit,100.01142587006075,18.215981238084627 +transit,100.01957373746228,18.2116783536804 +transit,100.02772120464932,18.207375121290543 +transit,100.03586827171054,18.203071541019444 +transit,100.04401493873462,18.19876761297152 +transit,100.05216120581025,18.194463337251165 +transit,100.06030707302617,18.19015871396276 +transit,100.06845254047111,18.185853743210686 +transit,100.07659760823384,18.181548425099304 +transit,100.0847422764031,18.177242759732987 +transit,100.09288654506774,18.172936747216067 +transit,100.10103041431653,18.16863038765289 +transit,100.1091738842383,18.16432368114779 +transit,100.11731695492192,18.16001662780508 +transit,100.12545962645625,18.155709227729087 +transit,100.13360189893015,18.1514014810241 +transit,100.14174377243256,18.147093387794417 +transit,100.14988524705237,18.142784948144328 +transit,100.15802632287853,18.138476162178097 +WP30,100.166167,18.13416703 +transit,100.16699050577331,18.12526380141945 +transit,100.16781392828184,18.1163605610984 +transit,100.16863726757772,18.107457309042537 +transit,100.16946052371303,18.098554045257508 +transit,100.17028369673984,18.089650769749 +transit,100.17110678671024,18.08074748252267 +transit,100.17192979367624,18.071844183584194 +transit,100.17275271768987,18.062940872939237 +transit,100.17357555880314,18.05403755059347 +transit,100.17439831706803,18.04513421655257 +transit,100.1752209925365,18.036230870822198 +transit,100.17604358526052,18.02732751340802 +transit,100.17686609529198,18.018424144315723 +transit,100.17768852268283,18.009520763550956 +transit,100.17851086748496,18.00061737111941 +transit,100.17933312975022,17.991713967026733 +transit,100.18015530953049,17.982810551278607 +transit,100.18097740687762,17.973907123880704 +transit,100.1817994218434,17.965003684838692 +transit,100.18262135447964,17.95610023415824 +transit,100.18344320483813,17.94719677184501 +transit,100.18426497297064,17.938293297904693 +transit,100.18508665892891,17.929389812342936 +transit,100.18590826276468,17.920486315165423 +transit,100.18672978452966,17.911582806377822 +transit,100.18755122427554,17.9026792859858 +transit,100.18837258205399,17.893775753995037 +transit,100.18919385791668,17.88487221041119 +transit,100.19001505191525,17.87596865523994 +transit,100.19083616410131,17.867065088486957 +transit,100.19165719452647,17.858161510157903 +transit,100.19247814324231,17.849257920258456 +transit,100.19329901030042,17.840354318794283 +transit,100.19411979575233,17.831450705771058 +transit,100.19494049964956,17.822547081194454 +transit,100.19576112204365,17.81364344507013 +transit,100.19658166298608,17.804739797403776 +transit,100.19740212252833,17.79583613820105 +transit,100.19822250072187,17.786932467467622 +transit,100.19904279761813,17.778028785209173 +transit,100.19986301326854,17.769125091431366 +transit,100.20068314772452,17.76022138613987 +transit,100.20150320103743,17.75131766934037 +transit,100.20232317325865,17.74241394103852 +transit,100.20314306443954,17.73351020124001 +transit,100.20396287463144,17.72460644995049 +transit,100.20478260388566,17.715702687175646 +transit,100.2056022522535,17.706798912921148 +transit,100.20642181978623,17.69789512719267 +transit,100.20724130653514,17.688991329995876 +transit,100.20806071255146,17.68008752133644 +transit,100.20888003788642,17.671183701220038 +transit,100.20969928259122,17.662279869652338 +transit,100.21051844671707,17.653376026639016 +transit,100.21133753031515,17.64447217218574 +transit,100.2121565334366,17.635568306298183 +transit,100.21297545613257,17.626664428982014 +transit,100.21379429845418,17.617760540242912 +transit,100.21461306045254,17.608856640086547 +transit,100.21543174217872,17.59995272851859 +transit,100.21625034368381,17.59104880554471 +transit,100.21706886501885,17.582144871170584 +transit,100.21788730623487,17.57324092540189 +transit,100.2187056673829,17.56433696824429 +transit,100.21952394851395,17.555432999703466 +transit,100.22034214967898,17.546529019785076 +transit,100.22116027092896,17.537625028494805 +transit,100.22197831231483,17.528721025838326 +transit,100.22279627388754,17.519817011821306 +transit,100.22361415569797,17.510912986449423 +transit,100.22443195779705,17.502008949728346 +transit,100.22524968023563,17.49310490166375 +transit,100.22606732306458,17.484200842261306 +transit,100.22688488633474,17.475296771526693 +transit,100.22770237009695,17.46639268946558 +transit,100.22851977440199,17.45748859608363 +transit,100.22933709930066,17.448584491386537 +transit,100.23015434484375,17.439680375379965 +transit,100.23097151108199,17.430776248069588 +transit,100.23178859806613,17.421872109461066 +transit,100.23260560584689,17.4129679595601 +transit,100.23342253447497,17.40406379837234 +transit,100.23423938400106,17.395159625903467 +transit,100.23505615447581,17.386255442159158 +transit,100.23587284594991,17.37735124714509 +transit,100.23668945847396,17.368447040866933 +transit,100.23750599209859,17.359542823330347 +transit,100.23832244687439,17.35063859454103 +transit,100.23913882285196,17.341734354504638 +transit,100.23995512008185,17.332830103226854 +transit,100.2407713386146,17.323925840713354 +transit,100.24158747850078,17.315021566969808 +transit,100.24240353979084,17.30611728200189 +transit,100.24321952253534,17.29721298581528 +transit,100.24403542678472,17.28830867841564 +transit,100.24485125258946,17.27940435980865 +WP31,100.245667,17.27050003 +transit,100.24647026068472,17.261725471711873 +transit,100.24727344539025,17.25295090256133 +transit,100.24807655416477,17.244176322553795 +transit,100.24887958705645,17.2354017316947 +transit,100.24968254411345,17.22662712998947 +transit,100.25048542538393,17.217852517443536 +transit,100.25128823091599,17.209077894062318 +transit,100.25209096075777,17.200303259851253 +transit,100.25289361495734,17.191528614815773 +transit,100.25369619356279,17.182753958961296 +transit,100.25449869662219,17.173979292293247 +transit,100.25530112418357,17.165204614817068 +transit,100.25610347629498,17.156429926538177 +transit,100.25690575300443,17.14765522746201 +transit,100.2577079543599,17.13888051759399 +transit,100.2585100804094,17.13010579693954 +transit,100.25931213120087,17.12133106550411 +transit,100.2601141067823,17.1125563232931 +transit,100.26091600720159,17.10378157031196 +transit,100.26171783250666,17.0950068065661 +transit,100.26251958274544,17.086232032060977 +transit,100.26332125796579,17.07745724680199 +transit,100.2641228582156,17.06868245079459 +transit,100.26492438354272,17.059907644044195 +transit,100.265725833995,17.05113282655624 +transit,100.26652720962025,17.042357998336144 +transit,100.26732851046629,17.03358315938934 +transit,100.26812973658089,17.024808309721273 +transit,100.26893088801187,17.016033449337357 +transit,100.26973196480694,17.00725857824302 +transit,100.27053296701388,16.9984836964437 +transit,100.27133389468041,16.989708803944822 +transit,100.27213474785425,16.98093390075181 +transit,100.2729355265831,16.972158986870113 +transit,100.27373623091462,16.963384062305142 +transit,100.27453686089652,16.95460912706233 +transit,100.2753374165764,16.94583418114712 +transit,100.27613789800193,16.937059224564926 +transit,100.27693830522072,16.928284257321177 +transit,100.27773863828037,16.91950927942132 +transit,100.27853889722849,16.910734290870778 +transit,100.27933908211261,16.90195929167497 +transit,100.28013919298034,16.893184281839343 +transit,100.28093922987918,16.884409261369314 +transit,100.28173919285669,16.87563423027033 +transit,100.28253908196035,16.866859188547803 +transit,100.28333889723767,16.85808413620717 +transit,100.28413863873612,16.84930907325387 +transit,100.2849383065032,16.840533999693328 +transit,100.28573790058631,16.831758915530973 +transit,100.2865374210329,16.82298382077224 +transit,100.28733686789042,16.814208715422556 +transit,100.28813624120622,16.805433599487355 +transit,100.28893554102771,16.796658472972066 +transit,100.28973476740228,16.787883335882125 +transit,100.29053392037726,16.779108188222956 +Phitsanulok,100.291333,16.77033303 +transit,100.29136817727955,16.761526221146873 +transit,100.29140335132223,16.752719404776496 +transit,100.29143852213012,16.743912580892363 +transit,100.29147368970533,16.735105749497954 +transit,100.29150885404994,16.726298910596743 +transit,100.29154401516607,16.71749206419222 +transit,100.2915791730558,16.70868521028787 +transit,100.29161432772122,16.699878348887182 +transit,100.29164947916443,16.691071479993624 +transit,100.29168462738754,16.682264603610708 +transit,100.29171977239261,16.673457719741904 +transit,100.29175491418177,16.6646508283907 +transit,100.29179005275708,16.655843929560593 +transit,100.29182518812065,16.64703702325506 +transit,100.29186032027457,16.638230109477604 +transit,100.29189544922092,16.6294231882317 +transit,100.29193057496178,16.620616259520865 +transit,100.29196569749925,16.61180932334857 +transit,100.29200081683543,16.603002379718312 +transit,100.29203593297238,16.594195428633583 +transit,100.29207104591221,16.58538847009788 +transit,100.292106155657,16.5765815041147 +transit,100.29214126220882,16.567774530687533 +transit,100.29217636556977,16.55896754981988 +transit,100.29221146574193,16.550160561515234 +transit,100.29224656272737,16.541353565777104 +transit,100.29228165652819,16.532546562608974 +transit,100.29231674714646,16.52373955201435 +transit,100.29235183458427,16.51493253399673 +transit,100.29238691884368,16.506125508559624 +transit,100.29242199992679,16.49731847570652 +transit,100.29245707783568,16.488511435440927 +transit,100.29249215257241,16.479704387766347 +transit,100.29252722413908,16.470897332686278 +transit,100.29256229253774,16.462090270204232 +transit,100.29259735777049,16.45328320032371 +transit,100.29263241983939,16.444476123048226 +transit,100.29266747874652,16.435669038381274 +transit,100.29270253449396,16.426861946326365 +transit,100.29273758708376,16.418054846887017 +transit,100.29277263651802,16.40924774006672 +transit,100.29280768279881,16.400440625869 +transit,100.29284272592818,16.391633504297353 +transit,100.29287776590822,16.3828263753553 +transit,100.292912802741,16.374019239046344 +transit,100.29294783642857,16.365212095374012 +transit,100.29298286697302,16.3564049443418 +transit,100.2930178943764,16.34759778595323 +transit,100.2930529186408,16.338790620211814 +transit,100.29308793976826,16.329983447121073 +transit,100.29312295776086,16.32117626668451 +transit,100.29315797262066,16.312369078905654 +transit,100.29319298434974,16.30356188378801 +transit,100.29322799295015,16.294754681335107 +transit,100.29326299842396,16.285947471550458 +transit,100.29329800077322,16.277140254437583 +WP33,100.293333,16.26833303 +transit,100.29337072366047,16.25939350035479 +transit,100.29340844390907,16.250453963169708 +transit,100.2934461607481,16.241514418448443 +transit,100.29348387417984,16.232574866194685 +transit,100.29352158420659,16.223635306412106 +transit,100.29355929083063,16.2146957391044 +transit,100.29359699405423,16.205756164275254 +transit,100.2936346938797,16.196816581928353 +transit,100.2936723903093,16.187876992067388 +transit,100.29371008334532,16.178937394696046 +transit,100.29374777299003,16.169997789818012 +transit,100.29378545924574,16.161058177436978 +transit,100.29382314211472,16.152118557556648 +transit,100.29386082159924,16.143178930180696 +transit,100.29389849770158,16.134239295312824 +transit,100.29393617042402,16.125299652956723 +transit,100.29397383976884,16.116360003116085 +transit,100.29401150573831,16.107420345794612 +transit,100.29404916833472,16.09848068099599 +transit,100.29408682756033,16.089541008723923 +transit,100.29412448341743,16.0806013289821 +transit,100.29416213590828,16.071661641774227 +transit,100.29419978503516,16.062721947103995 +transit,100.29423743080034,16.05378224497511 +transit,100.2942750732061,16.044842535391272 +transit,100.2943127122547,16.035902818356174 +transit,100.2943503479484,16.026963093873523 +transit,100.29438798028949,16.01802336194703 +transit,100.29442560928022,16.009083622580377 +transit,100.29446323492289,16.000143875777283 +transit,100.29450085721973,15.991204121541449 +transit,100.29453847617303,15.98226435987658 +transit,100.29457609178505,15.973324590786381 +transit,100.29461370405804,15.964384814274554 +transit,100.29465131299429,15.955445030344817 +transit,100.29468891859605,15.94650523900087 +transit,100.29472652086558,15.937565440246429 +transit,100.29476411980515,15.928625634085197 +transit,100.29480171541702,15.91968582052088 +transit,100.29483930770344,15.910745999557196 +transit,100.2948768966667,15.90180617119786 +transit,100.29491448230901,15.892866335446582 +transit,100.29495206463267,15.88392649230707 +transit,100.29498964363992,15.874986641783046 +transit,100.29502721933302,15.866046783878213 +transit,100.29506479171424,15.857106918596296 +transit,100.2951023607858,15.848167045941008 +transit,100.29513992655001,15.839227165916071 +transit,100.29517748900908,15.83028727852519 +transit,100.29521504816526,15.821347383772098 +transit,100.29525260402083,15.812407481660507 +transit,100.29529015657803,15.803467572194137 +transit,100.29532770583913,15.79452765537671 +transit,100.29536525180634,15.785587731211944 +transit,100.29540279448194,15.77664779970356 +transit,100.29544033386819,15.767707860855294 +transit,100.2954778699673,15.758767914670852 +transit,100.29551540278153,15.749827961153965 +transit,100.29555293231316,15.740888000308354 +transit,100.2955904585644,15.731948032137758 +transit,100.2956279815375,15.723008056645888 +transit,100.29566550123474,15.714068073836485 +transit,100.29570301765833,15.705128083713264 +transit,100.2957405308105,15.696188086279957 +transit,100.29577804069353,15.687248081540293 +transit,100.29581554730964,15.67830806949801 +transit,100.29585305066108,15.669368050156828 +transit,100.2958905507501,15.66042802352049 +transit,100.29592804757891,15.651487989592715 +transit,100.29596554114978,15.642547948377242 +transit,100.29600303146493,15.633607899877804 +transit,100.29604051852661,15.624667844098143 +transit,100.29607800233705,15.61572778104198 +transit,100.29611548289849,15.606787710713057 +transit,100.29615296021316,15.597847633115112 +transit,100.2961904342833,15.588907548251884 +transit,100.29622790511115,15.57996745612711 +transit,100.29626537269893,15.571027356744525 +transit,100.29630283704888,15.562087250107867 +transit,100.29634029816324,15.553147136220877 +transit,100.29637775604424,15.544207015087304 +transit,100.2964152106941,15.535266886710884 +transit,100.29645266211504,15.52632675109536 +transit,100.29649011030932,15.51738660824447 +transit,100.29652755527916,15.508446458161966 +transit,100.29656499702678,15.499506300851582 +transit,100.2966024355544,15.490566136317074 +transit,100.29663987086427,15.481625964562182 +transit,100.2966773029586,15.472685785590649 +transit,100.29671473183961,15.463745599406233 +transit,100.29675215750954,15.454805406012671 +transit,100.29678957997062,15.445865205413721 +transit,100.29682699922505,15.436924997613124 +transit,100.29686441527505,15.427984782614642 +transit,100.29690182812287,15.419044560422003 +transit,100.29693923777072,15.410104331038985 +transit,100.29697664422082,15.401164094469324 +transit,100.29701404747537,15.392223850716775 +transit,100.29705144753662,15.3832835997851 +transit,100.29708884440677,15.374343341678044 +transit,100.29712623808804,15.365403076399367 +transit,100.29716362858267,15.356462803952828 +transit,100.29720101589284,15.347522524342171 +transit,100.29723840002077,15.338582237571163 +transit,100.2972757809687,15.329641943643564 +transit,100.29731315873885,15.32070164256313 +transit,100.29735053333339,15.311761334333612 +transit,100.29738790475457,15.302821018958783 +transit,100.29742527300459,15.293880696442397 +transit,100.29746263808566,15.284940366788215 +WP34,100.2975,15.27600003 +transit,100.30069924279596,15.26770949073969 +transit,100.30389823445499,15.259418899695044 +transit,100.30709697513836,15.251128256898525 +transit,100.31029546500737,15.24283756238261 +transit,100.31349370422318,15.234546816179758 +transit,100.31669169294699,15.226256018322408 +transit,100.31988943133992,15.217965168843028 +transit,100.32308691956304,15.209674267774032 +transit,100.32628415777738,15.20138331514786 +transit,100.32948114614398,15.193092310996935 +transit,100.33267788482374,15.184801255353674 +transit,100.3358743739776,15.176510148250474 +transit,100.33907061376644,15.168218989719747 +transit,100.34226660435107,15.15992777979387 +transit,100.34546234589229,15.15163651850525 +transit,100.3486578385508,15.143345205886236 +transit,100.35185308248737,15.135053841969224 +transit,100.35504807786259,15.126762426786561 +transit,100.35824282483712,15.118470960370601 +transit,100.36143732357152,15.110179442753697 +transit,100.36463157422632,15.101887873968192 +transit,100.367825576962,15.093596254046412 +transit,100.37101933193902,15.085304583020678 +transit,100.37421283931778,15.077012860923318 +transit,100.37740609925865,15.06872108778664 +transit,100.38059911192194,15.060429263642948 +transit,100.38379187746793,15.052137388524525 +transit,100.38698439605686,15.043845462463674 +transit,100.39017666784893,15.035553485492663 +transit,100.39336869300428,15.027261457643776 +transit,100.39656047168305,15.018969378949272 +transit,100.39975200404527,15.01067724944141 +transit,100.40294329025099,15.00238506915245 +transit,100.40613433046019,14.99409283811462 +transit,100.40932512483282,14.985800556360166 +transit,100.41251567352877,14.977508223921316 +transit,100.41570597670791,14.969215840830294 +transit,100.41889603453006,14.96092340711931 +transit,100.42208584715502,14.95263092282057 +transit,100.42527541474247,14.944338387966276 +transit,100.42846473745215,14.936045802588618 +transit,100.4316538154437,14.927753166719786 +transit,100.43484264887672,14.91946048039195 +transit,100.43803123791079,14.911167743637288 +transit,100.44121958270544,14.90287495648796 +transit,100.44440768342017,14.894582118976123 +transit,100.4475955402144,14.886289231133915 +transit,100.45078315324754,14.87799629299349 +transit,100.45397052267896,14.869703304586976 +transit,100.45715764866797,14.861410265946501 +transit,100.46034453137388,14.853117177104183 +transit,100.46353117095589,14.844824038092138 +transit,100.46671756757323,14.836530848942466 +transit,100.46990372138504,14.828237609687264 +transit,100.47308963255043,14.819944320358626 +transit,100.47627530122848,14.811650980988631 +transit,100.47946072757824,14.803357591609359 +transit,100.4826459117587,14.795064152252879 +transit,100.48583085392879,14.78677066295124 +transit,100.48901555424742,14.778477123736515 +transit,100.49220001287348,14.770183534640735 +transit,100.4953842299658,14.761889895695951 +transit,100.49856820568314,14.753596206934187 +transit,100.50175194018428,14.74530246838747 +transit,100.5049354336279,14.73700868008782 +transit,100.50811868617268,14.72871484206725 +transit,100.51130169797725,14.720420954357756 +transit,100.51448446920017,14.712127016991342 +WP35,100.517667,14.70383303 +transit,100.52002398109886,14.69557974768047 +transit,100.52238078523528,14.687326435559017 +transit,100.52473741252587,14.67907309365443 +transit,100.52709386308716,14.670819721985474 +transit,100.52945013703572,14.662566320570951 +transit,100.53180623448806,14.65431288942962 +transit,100.53416215556064,14.646059428580251 +transit,100.53651790036989,14.637805938041621 +transit,100.53887346903225,14.629552417832473 +transit,100.5412288616641,14.621298867971596 +transit,100.54358407838177,14.613045288477721 +transit,100.54593911930161,14.604791679369601 +transit,100.5482939845399,14.596538040666001 +transit,100.5506486742129,14.58828437238565 +transit,100.55300318843683,14.580030674547297 +transit,100.55535752732793,14.571776947169676 +transit,100.55771169100232,14.563523190271521 +transit,100.56006567957617,14.55526940387156 +transit,100.56241949316559,14.547015587988525 +transit,100.56477313188665,14.538761742641132 +transit,100.5671265958554,14.530507867848103 +transit,100.56947988518785,14.52225396362816 +WP36,100.571833,14.51400003 +transit,100.57420813650732,14.505680080989574 +transit,100.57658309567651,14.497360102068562 +transit,100.57895787762642,14.489040093256166 +transit,100.58133248247591,14.480720054571576 +transit,100.58370691034378,14.47239998603399 +transit,100.58608116134877,14.464079887662594 +transit,100.58845523560967,14.45575975947656 +transit,100.59082913324517,14.447439601495084 +transit,100.59320285437393,14.439119413737332 +transit,100.59557639911462,14.430799196222486 +transit,100.59794976758587,14.422478948969708 +transit,100.60032295990625,14.414158671998159 +transit,100.60269597619431,14.405838365327005 +transit,100.60506881656859,14.397518028975405 +transit,100.60744148114759,14.389197662962516 +transit,100.60981397004974,14.380877267307483 +transit,100.61218628339351,14.372556842029446 +transit,100.61455842129728,14.364236387147564 +transit,100.61693038387942,14.355915902680964 +transit,100.61930217125828,14.34759538864878 +transit,100.62167378355217,14.339274845070147 +transit,100.62404522087937,14.3309542719642 +transit,100.6264164833581,14.322633669350049 +transit,100.62878757110661,14.314313037246832 +transit,100.63115848424307,14.30599237567365 +transit,100.63352922288564,14.297671684649622 +transit,100.63589978715244,14.289350964193856 +transit,100.63827017716157,14.281030214325462 +transit,100.64064039303109,14.272709435063536 +transit,100.64301043487905,14.264388626427179 +transit,100.64538030282341,14.25606778843549 +transit,100.64774999698218,14.24774692110755 +transit,100.6501195174733,14.239426024462457 +transit,100.65248886441466,14.231105098519285 +transit,100.65485803792416,14.222784143297124 +transit,100.65722703811964,14.21446315881504 +transit,100.65959586511892,14.206142145092118 +transit,100.66196451903978,14.197821102147415 +WP37,100.664333,14.18950003 +transit,100.66664363112469,14.181428781010574 +transit,100.66895409878745,14.173357504322949 +transit,100.67126440309633,14.165286199954679 +transit,100.6735745441593,14.15721486792332 +transit,100.6758845220843,14.149143508246421 +transit,100.67819433697926,14.141072120941542 +transit,100.68050398895208,14.133000706026225 +transit,100.68281347811065,14.124929263518016 +transit,100.6851228045628,14.11685779343445 +transit,100.68743196841635,14.108786295793069 +transit,100.68974096977908,14.100714770611404 +transit,100.6920498087588,14.092643217906986 +transit,100.6943584854632,14.084571637697344 +WP38,100.696667,14.07650003 +transit,100.69257331716587,14.069046258352722 +transit,100.68847989956993,14.061592412710672 +transit,100.68438674705119,14.054138493118721 +transit,100.68029385944872,14.046684499621724 +transit,100.67620123660159,14.03923043226454 +transit,100.67210887834894,14.031776291092006 +transit,100.66801678452988,14.02432207614896 +transit,100.66392495498363,14.016867787480221 +transit,100.65983338954939,14.009413425130608 +transit,100.65574208806642,14.001958989144919 +transit,100.65165105037399,13.994504479567963 +transit,100.64756027631141,13.98704989644452 +transit,100.64346976571804,13.97959523981937 +transit,100.63937951843324,13.972140509737278 +transit,100.63528953429643,13.964685706243007 +transit,100.63119981314708,13.95723082938131 +transit,100.62711035482462,13.949775879196922 +transit,100.62302115916859,13.942320855734582 +transit,100.61893222601852,13.93486575903901 +transit,100.614843555214,13.92741058915492 +transit,100.6107551465946,13.919955346127017 +Don_Mueang,100.606667,13.91250003 +transit,100.599341342713,13.908266503833755 +transit,100.59201595181146,13.90403275628471 +transit,100.58469082721518,13.899798787430663 +transit,100.57736596884396,13.895564597349402 +transit,100.57004137661762,13.891330186118715 +transit,100.56271705045594,13.887095553816376 +transit,100.55539299027873,13.882860700520158 +transit,100.54806919600576,13.878625626307828 +transit,100.54074566755678,13.87439033125714 +transit,100.53342240485159,13.870154815445852 +transit,100.52609940780994,13.865919078951713 +transit,100.51877667635156,13.861683121852458 +transit,100.51145421039624,13.857446944225824 +transit,100.5041320098637,13.853210546149542 +transit,100.49681007467366,13.848973927701334 +transit,100.48948840474586,13.844737088958915 +WP40,100.482167,13.84050003 +transit,100.47628681767374,13.835061382455812 +transit,100.47040690852803,13.829622591498682 +transit,100.46452727244568,13.82418365719346 +transit,100.4586479093094,13.818744579604992 +transit,100.45276881900202,13.81330535879812 +transit,100.44689000140625,13.807865994837666 +transit,100.44101145640494,13.802426487788445 +transit,100.43513318388084,13.796986837715274 +transit,100.42925518371678,13.791547044682954 +transit,100.42337745579556,13.786107108756267 +WP41,100.4175,13.78066703 +transit,100.41831485710395,13.77205175376932 +transit,100.41912965452572,13.76343646882459 +transit,100.41994439230844,13.754821175171218 +transit,100.42075907049527,13.746205872814615 +transit,100.42157368912932,13.737590561760186 +transit,100.4223882482537,13.728975242013346 +transit,100.4232027479115,13.720359913579498 +transit,100.42401718814584,13.711744576464056 +transit,100.42483156899976,13.703129230672427 +transit,100.42564589051635,13.694513876210022 +transit,100.42646015273864,13.685898513082249 +transit,100.4272743557097,13.677283141294513 +transit,100.42808849947255,13.668667760852232 +transit,100.4289025840702,13.660052371760813 +transit,100.42971660954566,13.65143697402566 +transit,100.43053057594193,13.642821567652192 +transit,100.43134448330198,13.634206152645808 +transit,100.43215833166882,13.625590729011927 +transit,100.43297212108537,13.61697529675595 +transit,100.4337858515946,13.608359855883293 +transit,100.43459952323946,13.599744406399367 +transit,100.43541313606285,13.591128948309574 +transit,100.4362266901077,13.582513481619333 +transit,100.43704018541692,13.573898006334051 +transit,100.43785362203339,13.565282522459135 +WP42,100.438667,13.55666703 +transit,100.44645578706078,13.55271367800042 +transit,100.45424431666602,13.5487600820121 +transit,100.46203258888636,13.544806242116662 +transit,100.46982060379246,13.540852158395728 +transit,100.47760836145501,13.536897830930911 +transit,100.48539586194471,13.532943259803822 +transit,100.49318310533226,13.528988445096063 +transit,100.50097009168837,13.525033386889243 +transit,100.50875682108376,13.521078085264945 +transit,100.51654329358917,13.517122540304765 +transit,100.52432950927535,13.513166752090296 +transit,100.53211546821304,13.50921072070311 +transit,100.539901170473,13.505254446224786 +transit,100.54768661612604,13.5012979287369 +transit,100.55547180524292,13.497341168321014 +transit,100.56325673789445,13.4933841650587 +transit,100.57104141415144,13.489426919031505 +transit,100.5788258340847,13.485469430320986 +transit,100.58660999776507,13.481511699008696 +transit,100.59439390526337,13.477553725176172 +transit,100.60217755665047,13.473595508904957 +transit,100.60996095199724,13.469637050276585 +transit,100.61774409137453,13.465678349372583 +transit,100.62552697485323,13.461719406274481 +transit,100.63330960250424,13.457760221063795 +transit,100.64109197439845,13.453800793822044 +transit,100.64887409060678,13.449841124630735 +transit,100.65665595120016,13.44588121357138 +transit,100.66443755624954,13.441921060725473 +transit,100.67221890582583,13.437960666174517 +WP43,100.68,13.43400003 +transit,100.68409653236691,13.426354643687546 +transit,100.68819280541176,13.418709186178692 +transit,100.69228881930184,13.411063657519275 +transit,100.69638457420444,13.403418057755124 +transit,100.70048007028679,13.395772386932059 +transit,100.70457530771608,13.388126645095898 +transit,100.7086702866595,13.380480832292449 +transit,100.71276500728416,13.372834948567501 +transit,100.71685946975718,13.36518899396684 +transit,100.72095367424564,13.35754296853624 +transit,100.72504762091653,13.34989687232148 +transit,100.72914130993689,13.342250705368308 +transit,100.73323474147368,13.334604467722475 +transit,100.73732791569383,13.326958159429722 +transit,100.74142083276422,13.31931178053578 +transit,100.74551349285174,13.311665331086372 +transit,100.74960589612323,13.304018811127207 +transit,100.75369804274547,13.29637222070399 +transit,100.75778993288523,13.288725559862412 +transit,100.76188156670925,13.281078828648166 +transit,100.76597294438422,13.273432027106924 +transit,100.77006406607681,13.265785155284348 +transit,100.77415493195365,13.258138213226102 +transit,100.77824554218135,13.25049120097783 +transit,100.78233589692645,13.242844118585177 +transit,100.78642599635553,13.235196966093769 +transit,100.79051584063504,13.227549743549227 +transit,100.79460542993148,13.219902450997166 +transit,100.79869476441125,13.212255088483184 +transit,100.80278384424079,13.204607656052886 +transit,100.80687266958644,13.196960153751846 +transit,100.81096124061453,13.189312581625643 +transit,100.81504955749138,13.18166493971985 +transit,100.81913762038324,13.174017228080022 +transit,100.82322542945636,13.166369446751698 +transit,100.82731298487693,13.158721595780428 +transit,100.83140028681113,13.151073675211741 +transit,100.83548733542507,13.143425685091158 +transit,100.83957413088488,13.135777625464195 +transit,100.84366067335662,13.128129496376353 +transit,100.84774696300633,13.120481297873123 +WP44,100.851833,13.11283303 +transit,100.85449471198127,13.104854234186503 +transit,100.85715625248721,13.096875405965013 +transit,100.85981762163634,13.08889654535735 +transit,100.86247881954719,13.080917652385333 +transit,100.86513984633824,13.072938727070786 +transit,100.86780070212794,13.064959769435514 +transit,100.87046138703474,13.056980779501329 +transit,100.87312190117704,13.049001757290037 +transit,100.87578224467323,13.041022702823437 +transit,100.87844241764166,13.033043616123326 +transit,100.88110242020066,13.025064497211499 +transit,100.88376225246853,13.017085346109743 +transit,100.88642191456354,13.009106162839842 +transit,100.88908140660395,13.001126947423584 +transit,100.89174072870796,12.993147699882734 +transit,100.89439988099377,12.985168420239072 +transit,100.89705886357957,12.97718910851437 +transit,100.89971767658348,12.969209764730383 +transit,100.90237632012364,12.961230388908888 +transit,100.9050347943181,12.953250981071628 +transit,100.90769309928494,12.945271541240357 +transit,100.9103512351422,12.937292069436838 +transit,100.9130092020079,12.929312565682803 +WP45,100.915667,12.92133303 +transit,100.92314465033589,12.917429712328273 +transit,100.93062206848363,12.913526179498232 +transit,100.93809925451029,12.909622431583552 +transit,100.94557620848295,12.905718468657884 +transit,100.95305293046867,12.901814290794897 +transit,100.96052942053456,12.89790989806824 +transit,100.96800567874767,12.894005290551569 +transit,100.97548170517514,12.890100468318519 +transit,100.98295749988408,12.886195431442736 +transit,100.99043306294158,12.882290179997861 +transit,100.99790839441478,12.878384714057525 +transit,101.00538349437082,12.87447903369535 +transit,101.01285836287684,12.870573138984971 +WP46,101.020333,12.86666703 +transit,101.01963555555335,12.858174652191412 +transit,101.01893815799811,12.849682267042814 +transit,101.0182408072991,12.841189874558976 +transit,101.01754350342117,12.832697474744649 +transit,101.01684624632918,12.824205067604593 +transit,101.01614903598798,12.815712653143565 +transit,101.01545187236246,12.807220231366331 +transit,101.0147547554175,12.798727802277648 +transit,101.01405768511798,12.79023536588228 +transit,101.0133606614288,12.781742922184982 +transit,101.01266368431487,12.773250471190517 +transit,101.01196675374109,12.764758012903643 +transit,101.01126986967242,12.756265547329125 +transit,101.01057303207375,12.747773074471723 +transit,101.00987624091005,12.739280594336194 +transit,101.00917949614626,12.730788106927307 +transit,101.00848279774735,12.722295612249814 +transit,101.00778614567827,12.713803110308486 +transit,101.007089539904,12.705310601108073 +transit,101.00639298038953,12.69681808465335 +transit,101.00569646709987,12.68832556094907 +U_Tapao,101.005,12.67983303 diff --git a/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/default/Manila_waypoints.csv b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/default/Manila_waypoints.csv new file mode 100644 index 0000000..4fdba11 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/default/Manila_waypoints.csv @@ -0,0 +1,3571 @@ +city,utc_adjust +Manila,8 +waypoint,lon,lat +RPLC,120.556,15.18200003 +transit,120.56232759211345,15.175791398462003 +transit,120.568654814593,15.169582585856645 +transit,120.5749816676081,15.16337359227141 +transit,120.58130815132822,15.157164417793794 +transit,120.5876342659228,15.150955062511267 +transit,120.59396001156126,15.14474552651128 +transit,120.60028538841301,15.138535809881272 +transit,120.60661039664744,15.132325912708675 +transit,120.61293503643391,15.126115835080892 +transit,120.6192593079418,15.11990557708532 +transit,120.62558321134041,15.113695138809339 +transit,120.63190674679909,15.107484520340309 +transit,120.63822991448711,15.10127372176558 +transit,120.64455271457378,15.095062743172493 +transit,120.65087514722836,15.088851584648351 +transit,120.65719721262009,15.082640246280466 +transit,120.6635189109182,15.076428728156124 +transit,120.66984024229191,15.070217030362606 +transit,120.67616120691042,15.064005152987152 +transit,120.6824818049429,15.057793096117013 +transit,120.68880203655851,15.051580859839419 +transit,120.6951219019264,15.045368444241577 +transit,120.70144140121567,15.03915584941069 +transit,120.70776053459548,15.03294307543393 +transit,120.71407930223488,15.026730122398469 +transit,120.72039770430295,15.020516990391458 +transit,120.72671574096876,15.014303679500028 +transit,120.73303341240134,15.008090189811307 +transit,120.7393507187697,15.001876521412399 +transit,120.74566766024286,14.99566267439039 +transit,120.75198423698978,14.989448648832358 +transit,120.75830044917947,14.983234444825364 +transit,120.76461629698086,14.977020062456457 +transit,120.77093178056288,14.970805501812661 +transit,120.77724690009445,14.964590762980993 +transit,120.78356165574446,14.958375846048451 +transit,120.78987604768182,14.95216075110203 +transit,120.79619007607536,14.94594547822869 +transit,120.80250374109394,14.939730027515386 +transit,120.8088170429064,14.933514399049061 +transit,120.81512998168154,14.927298592916644 +transit,120.82144255758816,14.921082609205031 +transit,120.82775477079502,14.914866448001135 +transit,120.83406662147091,14.908650109391827 +transit,120.84037810978455,14.90243359346397 +transit,120.84668923590468,14.896216900304411 +RPUX,120.853,14.89000003 +transit,120.85979782446294,14.884600564854255 +transit,120.86659531051718,14.879200895697487 +transit,120.87339245829533,14.873801022616716 +transit,120.88018926793,14.868400945698953 +transit,120.88698573955382,14.863000665031208 +transit,120.89378187329942,14.857600180700459 +transit,120.90057766929938,14.852199492793686 +transit,120.90737312768633,14.846798601397856 +transit,120.91416824859287,14.841397506599918 +transit,120.92096303215158,14.835996208486819 +transit,120.92775747849507,14.830594707145481 +transit,120.9345515877559,14.825193002662823 +transit,120.94134536006668,14.819791095125751 +transit,120.94813879555998,14.814388984621152 +transit,120.95493189436837,14.808986671235916 +transit,120.96172465662443,14.803584155056903 +transit,120.96851708246069,14.798181436170978 +transit,120.97530917200974,14.792778514664978 +transit,120.98210092540413,14.78737539062574 +transit,120.9888923427764,14.781972064140092 +transit,120.9956834242591,14.776568535294828 +transit,121.00247416998477,14.771164804176754 +transit,121.00926458008594,14.765760870872654 +transit,121.01605465469515,14.760356735469305 +transit,121.02284439394494,14.754952398053465 +transit,121.02963379796779,14.749547858711882 +transit,121.03642286689625,14.744143117531296 +transit,121.0432116008628,14.738738174598431 +TP1,121.05,14.73333303 +transit,121.051095723919,14.72546409823825 +transit,121.05219136923515,14.717595155954921 +transit,121.05328693599787,14.709726203155862 +transit,121.05438242425664,14.701857239846916 +transit,121.05547783406094,14.693988266033939 +transit,121.05657316546016,14.686119281722771 +transit,121.05766841850375,14.678250286919257 +transit,121.05876359324112,14.670381281629242 +transit,121.05985868972166,14.662512265858577 +transit,121.06095370799477,14.654643239613106 +transit,121.0620486481098,14.646774202898664 +transit,121.0631435101161,14.63890515572111 +transit,121.06423829406307,14.631036098086266 +MAO1,121.065333,14.62316703 +transit,121.06905300826244,14.614962521959232 +transit,121.07277274046876,14.606757948816796 +transit,121.07649219679926,14.598553310614683 +transit,121.08021137743422,14.590348607394908 +transit,121.08393028255385,14.582143839199444 +transit,121.08764891233832,14.573939006070276 +transit,121.09136726696777,14.56573410804936 +transit,121.09508534662227,14.557529145178671 +transit,121.09880315148189,14.549324117500145 +transit,121.1025206817266,14.54111902505572 +transit,121.10623793753639,14.532913867887324 +transit,121.10995491909114,14.524708646036885 +transit,121.11367162657073,14.516503359546299 +transit,121.117388060155,14.50829800845748 +transit,121.1211042200237,14.500092592812312 +transit,121.12482010635657,14.491887112652678 +transit,121.12853571933333,14.483681568020451 +transit,121.13225105913361,14.47547595895749 +transit,121.13596612593702,14.467270285505647 +transit,121.13968091992312,14.459064547706769 +transit,121.14339544127142,14.45085874560269 +transit,121.14710969016143,14.442652879235222 +transit,121.15082366677254,14.434446948646196 +transit,121.15453737128415,14.42624095387741 +transit,121.1582508038756,14.418034894970662 +transit,121.16196396472623,14.40982877196773 +transit,121.16567685401523,14.401622584910404 +transit,121.16938947192187,14.393416333840443 +transit,121.1731018186253,14.385210018799611 +transit,121.17681389430464,14.377003639829647 +transit,121.18052569913901,14.368797196972299 +transit,121.1842372333074,14.360590690269289 +transit,121.18794849698884,14.352384119762348 +transit,121.19165949036228,14.344177485493182 +transit,121.19537021360664,14.335970787503486 +transit,121.19908066690076,14.327764025834961 +transit,121.2027908504235,14.319557200529285 +transit,121.2065007643536,14.311350311628132 +transit,121.21021040886986,14.30314335917317 +transit,121.21391978415093,14.294936343206047 +transit,121.21762889037547,14.286729263768416 +transit,121.2213377277221,14.278522120901911 +transit,121.22504629636938,14.270314914648154 +transit,121.22875459649586,14.262107645048763 +transit,121.23246262827999,14.253900312145355 +transit,121.23617039190022,14.245692915979518 +transit,121.23987788753494,14.237485456592848 +transit,121.24358511536252,14.229277934026925 +transit,121.24729207556128,14.221070348323318 +transit,121.25099876830944,14.212862699523585 +transit,121.25470519378528,14.204654987669288 +transit,121.25841135216696,14.196447212801964 +transit,121.26211724363262,14.18823937496314 +transit,121.26582286836036,14.180031474194358 +transit,121.26952822652824,14.171823510537116 +transit,121.27323331831425,14.163615484032935 +transit,121.2769381438964,14.155407394723298 +transit,121.2806427034526,14.147199242649702 +transit,121.28434699716074,14.138991027853624 +transit,121.28805102519864,14.130782750376532 +transit,121.29175478774414,14.122574410259885 +transit,121.29545828497497,14.114366007545135 +transit,121.29916151706885,14.106157542273722 +transit,121.30286448420348,14.097949014487085 +transit,121.30656718655646,14.08974042422664 +transit,121.3102696243054,14.081531771533802 +transit,121.31397179762784,14.073323056449986 +transit,121.3176737067013,14.065114279016573 +transit,121.32137535170321,14.05690543927496 +transit,121.32507673281104,14.048696537266515 +transit,121.32877785020213,14.04048757303262 +transit,121.33247870405384,14.032278546614624 +transit,121.33617929454346,14.02406945805388 +transit,121.33987962184824,14.015860307391733 +transit,121.34357968614539,14.00765109466951 +transit,121.3472794876121,13.999441819928538 +transit,121.35097902642548,13.991232483210126 +transit,121.35467830276262,13.983023084555578 +transit,121.35837731680057,13.9748136240062 +transit,121.36207606871633,13.966604101603268 +transit,121.36577455868688,13.958394517388063 +transit,121.3694727868891,13.950184871401857 +transit,121.3731707534999,13.941975163685907 +transit,121.37686845869612,13.93376539428146 +transit,121.38056590265454,13.92555556322976 +transit,121.38426308555191,13.917345670572047 +transit,121.38796000756496,13.909135716349532 +transit,121.39165666887034,13.900925700603437 +transit,121.3953530696447,13.892715623374963 +transit,121.39904921006462,13.884505484705315 +transit,121.40274509030664,13.876295284635663 +transit,121.40644071054727,13.868085023207206 +transit,121.41013607096298,13.859874700461098 +transit,121.41383117173018,13.851664316438512 +transit,121.41752601302527,13.84345387118059 +transit,121.42122059502456,13.835243364728482 +transit,121.42491491790439,13.827032797123316 +transit,121.428608981841,13.818822168406216 +transit,121.43230278701058,13.810611478618304 +transit,121.43599633358934,13.802400727800679 +transit,121.43968962175342,13.794189915994446 +transit,121.44338265167887,13.78597904324069 +transit,121.44707542354179,13.777768109580496 +transit,121.45076793751815,13.769557115054928 +transit,121.45446019378396,13.76134605970505 +transit,121.45815219251513,13.753134943571922 +transit,121.46184393388755,13.744923766696585 +transit,121.46553541807705,13.736712529120073 +transit,121.46922664525948,13.728501230883413 +transit,121.47291761561057,13.720289872027625 +transit,121.47660832930606,13.712078452593715 +transit,121.48029878652163,13.703866972622688 +transit,121.48398898743292,13.695655432155535 +transit,121.48767893221556,13.687443831233237 +transit,121.49136862104507,13.679232169896766 +transit,121.495058054097,13.67102044818709 +transit,121.49874723154684,13.662808666145162 +transit,121.50243615357,13.654596823811936 +transit,121.50612482034191,13.646384921228343 +transit,121.50981323203793,13.638172958435316 +transit,121.51350138883335,13.629960935473784 +transit,121.51718929090346,13.621748852384647 +transit,121.52087693842353,13.613536709208814 +transit,121.52456433156871,13.60532450598718 +transit,121.5282514705142,13.597112242760629 +transit,121.5319383554351,13.588899919570041 +transit,121.53562498650648,13.580687536456287 +transit,121.5393113639034,13.572475093460218 +transit,121.54299748780082,13.564262590622697 +transit,121.54668335837373,13.55605002798456 +transit,121.55036897579704,13.547837405586638 +transit,121.55405434024563,13.539624723469759 +transit,121.5577394518943,13.531411981674745 +transit,121.56142431091791,13.523199180242393 +transit,121.56510891749117,13.514986319213511 +transit,121.5687932717888,13.506773398628885 +transit,121.5724773739855,13.498560418529294 +transit,121.57616122425588,13.490347378955521 +transit,121.57984482277456,13.482134279948319 +transit,121.58352816971609,13.47392112154845 +transit,121.58721126525498,13.46570790379666 +transit,121.5908941095657,13.457494626733688 +transit,121.59457670282269,13.449281290400265 +transit,121.59825904520038,13.44106789483711 +transit,121.60194113687308,13.432854440084938 +transit,121.60562297801513,13.424640926184447 +transit,121.60930456880082,13.416427353176337 +transit,121.61298590940439,13.408213721101292 +TP2,121.616667,13.40000003 +transit,121.60885689895416,13.404682816452143 +transit,121.60104649558956,13.409365359547875 +transit,121.59323578980056,13.414047659190004 +transit,121.58542478148156,13.418729715281337 +transit,121.57761347052694,13.423411527724678 +transit,121.56980185683109,13.42809309642281 +transit,121.56198994028843,13.43277442127851 +transit,121.55417772079338,13.437455502194558 +transit,121.54636519824032,13.442136339073716 +transit,121.53855237252374,13.446816931818734 +transit,121.53073924353802,13.451497280332362 +transit,121.52292581117764,13.456177384517337 +transit,121.51511207533704,13.460857244276388 +transit,121.50729803591068,13.465536859512236 +transit,121.49948369279302,13.470216230127596 +transit,121.49166904587854,13.474895356025165 +transit,121.48385409506173,13.479574237107645 +transit,121.47603884023708,13.484252873277716 +transit,121.46822328129907,13.488931264438063 +transit,121.46040741814224,13.493609410491347 +transit,121.45259125066107,13.498287311340237 +transit,121.4447747787501,13.502964966887383 +transit,121.43695800230387,13.507642377035422 +transit,121.42914092121687,13.512319541687 +transit,121.4213235353837,13.516996460744734 +transit,121.41350584469889,13.52167313411125 +transit,121.40568784905699,13.526349561689152 +transit,121.39786954835259,13.531025743381038 +transit,121.39005094248026,13.53570167908951 +transit,121.38223203133457,13.540377368717143 +transit,121.37441281481013,13.545052812166515 +transit,121.36659329280154,13.549728009340194 +transit,121.35877346520338,13.554402960140738 +transit,121.3509533319103,13.559077664470694 +transit,121.34313289281691,13.563752122232604 +transit,121.33531214781786,13.568426333328995 +transit,121.32749109680775,13.573100297662402 +transit,121.31966973968126,13.577774015135331 +transit,121.31184807633304,13.582447485650288 +transit,121.30402610665773,13.587120709109774 +transit,121.29620383055004,13.59179368541628 +transit,121.28838124790461,13.59646641447228 +transit,121.28055835861616,13.601138896180252 +transit,121.27273516257937,13.605811130442659 +transit,121.26491165968893,13.610483117161953 +transit,121.25708784983958,13.61515485624058 +transit,121.24926373292602,13.619826347580977 +transit,121.24143930884298,13.624497591085575 +transit,121.2336145774852,13.629168586656796 +transit,121.22578953874742,13.633839334197045 +transit,121.21796419252439,13.638509833608733 +transit,121.21013853871086,13.643180084794247 +transit,121.20231257720162,13.647850087655979 +transit,121.19448630789142,13.6525198420963 +transit,121.18665973067506,13.657189348017583 +transit,121.17883284544733,13.661858605322186 +transit,121.17100565210302,13.666527613912464 +transit,121.16317815053694,13.671196373690751 +transit,121.1553503406439,13.675864884559388 +transit,121.14752222231874,13.680533146420702 +transit,121.13969379545628,13.685201159177 +transit,121.13186505995137,13.6898689227306 +transit,121.12403601569883,13.694536436983796 +transit,121.11620666259356,13.69920370183888 +transit,121.10837700053037,13.703870717198136 +transit,121.10054702940418,13.70853748296383 +transit,121.09271674910985,13.713203999038237 +transit,121.08488615954226,13.717870265323603 +transit,121.07705526059632,13.722536281722183 +transit,121.06922405216693,13.727202048136217 +transit,121.06139253414901,13.731867564467928 +transit,121.05356070643747,13.736532830619538 +transit,121.04572856892723,13.741197846493264 +transit,121.03789612151326,13.745862611991306 +transit,121.03006336409047,13.750527127015868 +transit,121.02223029655383,13.755191391469129 +transit,121.0143969187983,13.759855405253267 +transit,121.00656323071884,13.764519168270452 +transit,120.99872923221045,13.769182680422844 +transit,120.9908949231681,13.7738459416126 +transit,120.9830603034868,13.778508951741857 +transit,120.97522537306153,13.783171710712756 +transit,120.96739013178733,13.787834218427415 +transit,120.95955457955918,13.792496474787962 +transit,120.95171871627214,13.79715847969649 +transit,120.94388254182124,13.801820233055116 +transit,120.93604605610152,13.806481734765917 +transit,120.92820925900803,13.811142984730987 +transit,120.92037215043582,13.815803982852387 +transit,120.91253473027999,13.820464729032192 +transit,120.9046969984356,13.82512522317246 +transit,120.89685895479772,13.829785465175233 +transit,120.88902059926147,13.83444545494255 +transit,120.88118193172193,13.839105192376438 +transit,120.87334295207422,13.843764677378928 +transit,120.86550366021348,13.848423909852029 +transit,120.8576640560348,13.85308288969774 +transit,120.84982413943335,13.85774161681806 +transit,120.84198391030425,13.862400091114976 +transit,120.83414336854266,13.867058312490467 +transit,120.82630251404373,13.871716280846499 +transit,120.81846134670265,13.876373996085038 +transit,120.81061986641458,13.88103145810803 +transit,120.80277807307472,13.885688666817417 +transit,120.79493596657825,13.89034562211514 +transit,120.78709354682039,13.895002323903118 +transit,120.77925081369634,13.89965877208327 +transit,120.77140776710131,13.904314966557509 +transit,120.76356440693054,13.908970907227724 +transit,120.75572073307927,13.913626593995817 +transit,120.74787674544274,13.918282026763661 +transit,120.7400324439162,13.922937205433131 +transit,120.73218782839493,13.927592129906097 +transit,120.72434289877417,13.932246800084409 +transit,120.71649765494922,13.936901215869911 +transit,120.70865209681536,13.941555377164446 +transit,120.7008062242679,13.946209283869846 +transit,120.69296003720211,13.95086293588793 +transit,120.68511353551334,13.955516333120501 +transit,120.67726671909688,13.960169475469373 +transit,120.6694195878481,13.964822362836333 +transit,120.66157214166229,13.969474995123171 +transit,120.65372438043484,13.974127372231665 +transit,120.64587630406108,13.978779494063577 +transit,120.63802791243637,13.98343136052067 +transit,120.6301792054561,13.988082971504696 +transit,120.62233018301566,13.992734326917393 +transit,120.6144808450104,13.997385426660493 +transit,120.60663119133577,14.002036270635728 +transit,120.59878122188714,14.006686858744802 +transit,120.59093093655993,14.01133719088943 +transit,120.58308033524956,14.015987266971308 +transit,120.57522941785149,14.02063708689212 +transit,120.56737818426113,14.025286650553555 +transit,120.55952663437395,14.029935957857278 +transit,120.5516747680854,14.034585008704955 +transit,120.54382258529097,14.039233802998234 +transit,120.5359700858861,14.043882340638765 +transit,120.52811726976628,14.048530621528187 +transit,120.52026413682704,14.053178645568119 +transit,120.51241068696383,14.057826412660184 +transit,120.50455692007222,14.062473922705996 +transit,120.49670283604766,14.067121175607145 +transit,120.48884843478574,14.071768171265235 +transit,120.48099371618197,14.076414909581842 +transit,120.47313868013188,14.081061390458546 +transit,120.46528332653106,14.085707613796908 +transit,120.45742765527504,14.090353579498489 +transit,120.44957166625943,14.09499928746483 +transit,120.44171535937977,14.099644737597474 +transit,120.43385873453167,14.10428992979796 +transit,120.42600179161073,14.108934863967795 +transit,120.41814453051254,14.113579540008503 +transit,120.41028695113273,14.11822395782158 +transit,120.40242905336693,14.12286811730853 +transit,120.39457083711076,14.127512018370826 +transit,120.38671230225987,14.132155660909964 +transit,120.3788534487099,14.136799044827397 +transit,120.37099427635653,14.141442170024593 +transit,120.36313478509541,14.146085036402994 +transit,120.35527497482222,14.150727643864053 +transit,120.34741484543267,14.155369992309202 +transit,120.33955439682241,14.160012081639858 +transit,120.33169362888718,14.164653911757439 +transit,120.32383254152268,14.169295482563356 +transit,120.31597113462463,14.173936793959003 +transit,120.30810940808878,14.178577845845775 +transit,120.30024736181085,14.183218638125043 +transit,120.29238499568658,14.187859170698184 +transit,120.28452230961175,14.19249944346656 +transit,120.2766593034821,14.197139456331524 +transit,120.26879597719343,14.20177920919442 +transit,120.26093233064152,14.206418701956586 +transit,120.25306836372216,14.21105793451935 +transit,120.24520407633115,14.215696906784025 +transit,120.2373394683643,14.220335618651925 +transit,120.22947453971743,14.224974070024347 +transit,120.22160929028637,14.229612260802586 +transit,120.21374371996696,14.234250190887922 +transit,120.20587782865503,14.23888786018163 +transit,120.19801161624646,14.243525268584978 +transit,120.19014508263712,14.248162415999214 +transit,120.18227822772285,14.252799302325593 +transit,120.17441105139956,14.25743592746535 +transit,120.16654355356313,14.262072291319715 +transit,120.15867573410947,14.26670839378991 +transit,120.15080759293448,14.271344234777144 +transit,120.14293912993409,14.275979814182621 +transit,120.13507034500422,14.280615131907531 +transit,120.12720123804081,14.28525018785307 +transit,120.1193318089398,14.2898849819204 +transit,120.11146205759717,14.294519514010698 +transit,120.10359198390884,14.299153784025119 +transit,120.09572158777083,14.303787791864814 +transit,120.08785086907909,14.308421537430918 +transit,120.07997982772963,14.313055020624567 +transit,120.07210846361845,14.317688241346882 +transit,120.06423677664154,14.322321199498983 +transit,120.05636476669494,14.326953894981964 +transit,120.04849243367467,14.331586327696932 +transit,120.04061977747678,14.336218497544966 +transit,120.0327467979973,14.34085040442715 +transit,120.02487349513228,14.345482048244548 +transit,120.01699986877782,14.350113428898224 +transit,120.00912591882997,14.354744546289226 +transit,120.0012516451848,14.359375400318594 +transit,119.99337704773842,14.364005990887367 +transit,119.98550212638693,14.368636317896572 +transit,119.97762688102645,14.373266381247218 +transit,119.96975131155308,14.377896180840319 +transit,119.96187541786297,14.382525716576863 +transit,119.95399919985225,14.387154988357846 +transit,119.94612265741705,14.391783996084245 +transit,119.93824579045356,14.396412739657029 +transit,119.93036859885792,14.401041218977165 +transit,119.92249108252634,14.405669433945606 +transit,119.91461324135496,14.410297384463295 +transit,119.90673507524,14.414925070431163 +transit,119.89885658407766,14.419552491750142 +transit,119.89097776776416,14.424179648321147 +transit,119.88309862619572,14.428806540045086 +transit,119.87521915926855,14.433433166822855 +transit,119.86733936687892,14.438059528555351 +transit,119.85945924892306,14.442685625143456 +transit,119.85157880529725,14.447311456488034 +transit,119.84369803589775,14.451937022489954 +transit,119.83581694062082,14.456562323050072 +transit,119.82793551936278,14.461187358069234 +transit,119.8200537720199,14.465812127448268 +transit,119.8121716984885,14.470436631088013 +transit,119.8042892986649,14.475060868889285 +transit,119.79640657244542,14.479684840752888 +transit,119.78852351972638,14.484308546579626 +transit,119.78064014040415,14.488931986270298 +transit,119.77275643437507,14.493555159725679 +transit,119.76487240153551,14.498178066846538 +transit,119.75698804178184,14.502800707533652 +transit,119.74910335501042,14.507423081687769 +transit,119.74121834111769,14.512045189209637 +TP3,119.733333,14.51666703 +transit,119.74245511347887,14.516859138136162 +transit,119.75157724268301,14.517050891614721 +transit,119.76069938758363,14.517242290430186 +transit,119.7698215481519,14.517433334577088 +transit,119.778943724359,14.517624024049958 +transit,119.78806591617612,14.517814358843355 +transit,119.79718812357443,14.518004338951831 +transit,119.80631034652511,14.518193964369956 +transit,119.81543258499933,14.518383235092298 +transit,119.82455483896827,14.518572151113457 +transit,119.8336771084031,14.518760712428026 +transit,119.84279939327499,14.51894891903061 +transit,119.8519216935551,14.519136770915836 +transit,119.8610440092146,14.519324268078323 +transit,119.87016634022466,14.519511410512713 +transit,119.87928868655644,14.519698198213655 +transit,119.8884110481811,14.519884631175808 +transit,119.8975334250698,14.520070709393838 +transit,119.90665581719368,14.52025643286243 +transit,119.91577822452392,14.520441801576267 +transit,119.92490064703168,14.52062681553005 +transit,119.93402308468808,14.520811474718489 +transit,119.94314553746429,14.520995779136301 +transit,119.95226800533146,14.521179728778218 +transit,119.96139048826073,14.521363323638978 +transit,119.97051298622326,14.521546563713331 +transit,119.97963549919015,14.52172944899604 +transit,119.9887580271326,14.52191197948187 +transit,119.99788057002172,14.522094155165606 +transit,120.00700312782864,14.522275976042032 +transit,120.01612570052451,14.522457442105951 +transit,120.02524828808046,14.522638553352174 +transit,120.03437089046764,14.52281930977552 +transit,120.04349350765715,14.522999711370826 +transit,120.05261613962014,14.523179758132923 +transit,120.06173878632774,14.52335945005667 +transit,120.07086144775107,14.523538787136921 +transit,120.07998412386125,14.523717769368552 +transit,120.0891068146294,14.523896396746444 +transit,120.09822952002666,14.524074669265486 +transit,120.10735224002414,14.524252586920579 +transit,120.11647497459296,14.524430149706639 +transit,120.12559772370423,14.524607357618583 +transit,120.13472048732906,14.524784210651344 +transit,120.14384326543858,14.524960708799867 +transit,120.15296605800388,14.525136852059099 +transit,120.1620888649961,14.525312640424003 +transit,120.17121168638631,14.525488073889557 +transit,120.18033452214566,14.525663152450734 +transit,120.1894573722452,14.525837876102537 +transit,120.19858023665608,14.526012244839965 +transit,120.20770311534939,14.526186258658022 +transit,120.21682600829621,14.526359917551739 +transit,120.22594891546765,14.526533221516154 +transit,120.23507183683482,14.5267061705463 +transit,120.2441947723688,14.526878764637232 +transit,120.25331772204069,14.527051003784026 +transit,120.26244068582157,14.52722288798174 +transit,120.27156366368254,14.527394417225459 +transit,120.28068665559469,14.527565591510283 +transit,120.2898096615291,14.527736410831311 +transit,120.29893268145686,14.527906875183666 +transit,120.30805571534906,14.528076984562459 +transit,120.31717876317676,14.528246738962837 +transit,120.32630182491106,14.528416138379937 +transit,120.33542490052302,14.528585182808916 +transit,120.34454798998375,14.528753872244932 +transit,120.3536710932643,14.52892220668317 +transit,120.36279421033575,14.529090186118813 +transit,120.37191734116917,14.529257810547046 +transit,120.38104048573562,14.529425079963088 +transit,120.3901636440062,14.529591994362148 +transit,120.39928681595194,14.529758553739445 +transit,120.40841000154394,14.529924758090225 +transit,120.41753320075324,14.530090607409731 +transit,120.42665641355092,14.530256101693213 +transit,120.43577963990803,14.530421240935938 +transit,120.44490287979563,14.530586025133196 +transit,120.4540261331848,14.530750454280257 +transit,120.46314940004656,14.53091452837242 +transit,120.47227268035199,14.531078247404999 +transit,120.48139597407214,14.531241611373302 +transit,120.49051928117807,14.531404620272665 +transit,120.4996426016408,14.531567274098414 +transit,120.50876593543141,14.531729572845906 +transit,120.51788928252093,14.53189151651049 +transit,120.52701264288042,14.532053105087536 +transit,120.53613601648091,14.532214338572425 +transit,120.54525940329346,14.532375216960544 +transit,120.5543828032891,14.532535740247281 +transit,120.56350621643887,14.532695908428057 +transit,120.5726296427138,14.532855721498283 +transit,120.58175308208494,14.53301517945339 +transit,120.59087653452333,14.53317428228881 +TP4,120.6,14.53333303 +transit,120.60891325177454,14.532211177408374 +transit,120.61782641362562,14.531088985787047 +transit,120.62673948553424,14.529966455166676 +transit,120.6356524674814,14.528843585577919 +transit,120.64456535944814,14.527720377051432 +transit,120.65347816141545,14.526596829617894 +transit,120.66239087336437,14.525472943307976 +transit,120.67130349527596,14.524348718152378 +transit,120.68021602713127,14.52322415418179 +transit,120.68912846891136,14.522099251426917 +transit,120.6980408205973,14.520974009918476 +transit,120.70695308217019,14.519848429687181 +transit,120.71586525361108,14.51872251076377 +transit,120.72477733490112,14.517596253178972 +transit,120.73368932602139,14.51646965696354 +transit,120.74260122695303,14.515342722148226 +transit,120.75151303767716,14.514215448763785 +transit,120.7604247581749,14.513087836840993 +transit,120.76933638842745,14.511959886410628 +transit,120.77824792841592,14.510831597503469 +transit,120.7871593781215,14.509702970150322 +transit,120.79607073752537,14.508574004381979 +transit,120.80498200660871,14.507444700229257 +transit,120.81389318535273,14.506315057722974 +transit,120.82280427373861,14.50518507689395 +transit,120.8317152717476,14.504054757773021 +transit,120.84062617936091,14.502924100391041 +transit,120.84953699655976,14.501793104778846 +transit,120.85844772332543,14.500661770967307 +transit,120.86735835963914,14.499530098987284 +transit,120.87626890548218,14.498398088869656 +transit,120.8851793608358,14.497265740645302 +transit,120.89408972568133,14.49613305434512 +RPLS,120.903,14.49500003 +transit,120.91103367798593,14.493834566218396 +transit,120.91906727200656,14.492668827652633 +transit,120.92710078205005,14.491502814328562 +transit,120.93513420810456,14.490336526272037 +transit,120.94316755015822,14.489169963508923 +transit,120.95120080819922,14.488003126065085 +transit,120.95923398221572,14.486836013966391 +transit,120.96726707219588,14.485668627238729 +transit,120.97530007812792,14.484500965907973 +TP5,120.983333,14.48333303 +transit,120.98888832080638,14.486111193273727 +transit,120.9944437799241,14.488889224610709 +transit,120.99999937737775,14.49166712398139 +transit,121.00555511319187,14.494444891356213 +transit,121.0111109873911,14.497222526705604 +TP6,121.016667,14.50000003 +transit,121.02291618161927,14.504167242662048 +transit,121.02916559692267,14.508334287533266 +transit,121.03541524597964,14.512501164557353 +transit,121.04166512885968,14.516667873678005 +transit,121.04791524563227,14.520834414838916 +transit,121.05416559636687,14.525000787983764 +transit,121.06041618113295,14.529166993056233 +TP7,121.066667,14.53333303 +transit,121.07583018072394,14.533882414209392 +transit,121.08499340670342,14.534431440154327 +transit,121.09415667791092,14.534980107818962 +transit,121.10331999431891,14.535528417187455 +transit,121.11248335589988,14.536076368243979 +transit,121.1216467626263,14.536623960972735 +transit,121.13081021447063,14.537171195357901 +transit,121.13997371140532,14.537718071383694 +transit,121.14913725340284,14.53826458903432 +transit,121.15830084043564,14.538810748294011 +transit,121.16746447247617,14.539356549147001 +transit,121.17662814949685,14.539901991577533 +transit,121.18579187147013,14.540447075569869 +transit,121.19495563836843,14.540991801108271 +transit,121.20411945016417,14.54153616817701 +transit,121.2132833068298,14.542080176760381 +transit,121.2224472083377,14.542623826842673 +transit,121.23161115466029,14.543167118408192 +transit,121.24077514576997,14.543710051441261 +transit,121.24993918163916,14.544252625926195 +transit,121.25910326224022,14.54479484184734 +transit,121.26826738754556,14.545336699189036 +transit,121.27743155752755,14.545878197935643 +transit,121.28659577215859,14.546419338071534 +transit,121.29576003141102,14.54696011958107 +transit,121.30492433525723,14.547500542448649 +transit,121.31408868366958,14.548040606658665 +transit,121.32325307662043,14.548580312195526 +transit,121.33241751408211,14.549119659043642 +transit,121.341581996027,14.549658647187448 +transit,121.35074652242741,14.550197276611378 +transit,121.3599110932557,14.55073554729988 +transit,121.3690757084842,14.551273459237406 +transit,121.37824036808523,14.55181101240843 +transit,121.3874050720311,14.552348206797427 +transit,121.39656982029415,14.552885042388887 +transit,121.40573461284667,14.553421519167301 +transit,121.414899449661,14.553957637117183 +transit,121.42406433070938,14.554493396223052 +transit,121.43322925596416,14.555028796469427 +transit,121.44239422539762,14.555563837840852 +transit,121.45155923898204,14.556098520321877 +transit,121.46072429668969,14.556632843897054 +transit,121.46988939849287,14.557166808550955 +transit,121.47905454436382,14.557700414268163 +transit,121.48821973427482,14.558233661033256 +transit,121.49738496819815,14.558766548830839 +transit,121.50655024610603,14.559299077645516 +transit,121.51571556797074,14.559831247461915 +transit,121.5248809337645,14.560363058264652 +transit,121.53404634345958,14.56089451003838 +transit,121.54321179702818,14.561425602767736 +transit,121.55237729444256,14.561956336437385 +transit,121.56154283567493,14.562486711032001 +transit,121.57070842069751,14.563016726536254 +transit,121.57987404948253,14.563546382934835 +transit,121.58903972200218,14.564075680212447 +transit,121.59820543822867,14.5646046183538 +transit,121.6073711981342,14.565133197343611 +transit,121.61653700169097,14.565661417166611 +transit,121.62570284887119,14.56618927780754 +transit,121.63486873964699,14.566716779251148 +transit,121.64403467399059,14.567243921482198 +transit,121.65320065187416,14.567770704485456 +transit,121.66236667326987,14.568297128245705 +transit,121.67153273814988,14.568823192747736 +transit,121.68069884648634,14.569348897976344 +transit,121.68986499825142,14.569874243916354 +transit,121.69903119341727,14.57039923055257 +transit,121.70819743195602,14.570923857869833 +transit,121.71736371383982,14.571448125852982 +transit,121.72653003904081,14.571972034486867 +transit,121.73569640753111,14.572495583756353 +transit,121.74486281928284,14.57301877364631 +transit,121.75402927426813,14.573541604141617 +transit,121.7631957724591,14.574064075227167 +transit,121.77236231382784,14.574586186887863 +transit,121.78152889834648,14.575107939108621 +transit,121.7906955259871,14.575629331874358 +transit,121.7998621967218,14.57615036517001 +transit,121.80902891052267,14.57667103898051 +transit,121.8181956673618,14.577191353290825 +transit,121.82736246721126,14.577711308085908 +transit,121.83652931004313,14.57823090335073 +transit,121.84569619582949,14.578750139070287 +transit,121.85486312454239,14.579269015229562 +transit,121.8640300961539,14.579787531813555 +transit,121.87319711063607,14.580305688807288 +transit,121.88236416796094,14.580823486195785 +transit,121.89153126810058,14.581340923964072 +transit,121.90069841102701,14.5818580020972 +transit,121.90986559671227,14.582374720580212 +transit,121.9190328251284,14.58289107939819 +transit,121.92820009624741,14.583407078536194 +transit,121.93736741004133,14.583922717979313 +transit,121.94653476648217,14.584437997712644 +transit,121.95570216554196,14.584952917721287 +transit,121.96486960719268,14.585467477990361 +transit,121.97403709140634,14.58598167850499 +transit,121.98320461815494,14.586495519250304 +transit,121.99237218741048,14.58700900021146 +transit,122.00153979914494,14.587522121373604 +transit,122.01070745333028,14.5880348827219 +transit,122.0198751499385,14.588547284241535 +transit,122.02904288894156,14.589059325917686 +transit,122.03821067031143,14.589571007735548 +transit,122.04737849402008,14.590082329680333 +transit,122.05654636003946,14.590593291737255 +transit,122.06571426834152,14.59110389389154 +transit,122.07488221889822,14.591614136128431 +transit,122.08405021168149,14.592124018433163 +transit,122.09321824666326,14.592633540791 +transit,122.10238632381547,14.593142703187215 +transit,122.11155444311005,14.593651505607074 +transit,122.12072260451893,14.594159948035873 +transit,122.12989080801403,14.594668030458902 +transit,122.13905905356724,14.595175752861477 +transit,122.14822734115047,14.595683115228915 +transit,122.15739567073565,14.59619011754654 +transit,122.16656404229467,14.596696759799693 +transit,122.1757324557994,14.59720304197372 +transit,122.18490091122176,14.597708964053986 +transit,122.19406940853362,14.598214526025854 +transit,122.20323794770685,14.598719727874704 +transit,122.21240652871334,14.599224569585928 +transit,122.22157515152496,14.599729051144925 +transit,122.23074381611356,14.600233172537102 +transit,122.23991252245101,14.600736933747877 +transit,122.24908127050917,14.60124033476269 +transit,122.25825006025988,14.60174337556697 +transit,122.26741889167498,14.602246056146171 +transit,122.27658776472633,14.602748376485765 +transit,122.28575667938576,14.6032503365712 +transit,122.29492563562509,14.603751936387978 +transit,122.30409463341616,14.604253175921576 +transit,122.31326367273077,14.604754055157505 +transit,122.32243275354075,14.605254574081268 +transit,122.33160187581792,14.605754732678392 +transit,122.34077103953409,14.60625453093441 +transit,122.34994024466104,14.60675396883486 +transit,122.3591094911706,14.6072530463653 +transit,122.36827877903453,14.607751763511283 +transit,122.37744810822463,14.60825012025839 +transit,122.38661747871268,14.6087481165922 +transit,122.39578689047046,14.609245752498305 +transit,122.40495634346976,14.609743027962317 +transit,122.41412583768232,14.610239942969839 +transit,122.42329537307994,14.610736497506496 +transit,122.43246494963434,14.611232691557927 +transit,122.44163456731731,14.61172852510977 +transit,122.45080422610057,14.61222399814768 +transit,122.45997392595588,14.612719110657332 +transit,122.46914366685498,14.613213862624384 +transit,122.47831344876961,14.613708254034531 +transit,122.4874832716715,14.61420228487347 +transit,122.49665313553236,14.614695955126896 +transit,122.50582304032393,14.615189264780534 +transit,122.51499298601792,14.615682213820106 +transit,122.52416297258604,14.616174802231347 +TP8,122.533333,14.61666703 +transit,122.52556561919452,14.621547870102633 +transit,122.51779789531567,14.626428449327847 +transit,122.51002982824683,14.631308767573683 +transit,122.50226141787151,14.636188824738152 +transit,122.49449266407314,14.641068620719285 +transit,122.48672356673521,14.64594815541507 +transit,122.47895412574117,14.650827428723506 +transit,122.47118434097452,14.65570644054257 +transit,122.46341421231872,14.66058519077024 +transit,122.4556437396573,14.665463679304477 +transit,122.44787292287376,14.670341906043225 +transit,122.44010176185158,14.675219870884417 +transit,122.43233025647429,14.680097573725998 +transit,122.42455840662541,14.684975014465873 +transit,122.41678621218847,14.689852193001954 +transit,122.40901367304701,14.694729109232135 +transit,122.40124078908458,14.699605763054308 +transit,122.39346756018472,14.704482154366342 +transit,122.38569398623098,14.709358283066104 +transit,122.37792006710694,14.714234149051446 +transit,122.37014580269616,14.719109752220218 +transit,122.36237119288224,14.723985092470246 +transit,122.35459623754872,14.728860169699349 +transit,122.34682093657923,14.733734983805347 +transit,122.33904528985737,14.738609534686038 +transit,122.33126929726672,14.743483822239215 +transit,122.32349295869092,14.748357846362651 +transit,122.31571627401357,14.753231606954119 +transit,122.3079392431183,14.758105103911376 +transit,122.30016186588877,14.762978337132163 +transit,122.29238414220859,14.767851306514233 +transit,122.28460607196142,14.772724011955296 +transit,122.27682765503093,14.777596453353075 +transit,122.26904889130076,14.782468630605276 +transit,122.26126978065459,14.787340543609588 +transit,122.25349032297609,14.7922121922637 +transit,122.24571051814895,14.797083576465276 +transit,122.23793036605687,14.801954696111991 +transit,122.23014986658353,14.806825551101488 +transit,122.22236901961266,14.811696141331407 +transit,122.21458782502795,14.816566466699378 +transit,122.20680628271313,14.821436527103023 +transit,122.19902439255192,14.826306322439951 +transit,122.19124215442805,14.831175852607759 +transit,122.18345956822529,14.836045117504034 +transit,122.17567663382735,14.84091411702635 +transit,122.16789335111802,14.845782851072276 +transit,122.16010971998104,14.850651319539361 +transit,122.15232574030018,14.855519522325157 +transit,122.14454141195925,14.860387459327194 +transit,122.136756734842,14.865255130442998 +transit,122.12897170883222,14.870122535570081 +transit,122.12118633381372,14.874989674605935 +transit,122.11340060967032,14.87985654744806 +transit,122.10561453628581,14.884723153993935 +transit,122.09782811354404,14.889589494141026 +transit,122.0900413413288,14.894455567786792 +transit,122.08225421952395,14.899321374828682 +transit,122.07446674801334,14.904186915164132 +transit,122.0666789266808,14.909052188690572 +transit,122.05889075541019,14.91391719530541 +transit,122.05110223408538,14.918781934906056 +transit,122.04331336259025,14.923646407389905 +transit,122.03552414080868,14.928510612654335 +transit,122.02773456862452,14.933374550596724 +transit,122.01994464592171,14.93823822111443 +transit,122.01215437258413,14.943101624104806 +transit,122.0043637484957,14.947964759465188 +transit,121.99657277354034,14.95282762709291 +transit,121.98878144760195,14.95769022688529 +transit,121.98098977056446,14.962552558739631 +transit,121.97319774231184,14.967414622553237 +transit,121.96540536272802,14.97227641822339 +transit,121.95761263169695,14.977137945647371 +transit,121.94981954910257,14.981999204722436 +transit,121.94202611482889,14.986860195345843 +transit,121.93423232875986,14.991720917414838 +transit,121.92643819077946,14.99658137082665 +transit,121.91864370077171,15.001441555478497 +transit,121.91084885862058,15.006301471267596 +transit,121.90305366421008,15.011161118091142 +transit,121.89525811742422,15.016020495846332 +transit,121.88746221814702,15.020879604430334 +transit,121.87966596626254,15.025738443740327 +transit,121.87186936165476,15.030597013673455 +transit,121.86407240420777,15.035455314126871 +transit,121.85627509380559,15.040313344997712 +transit,121.8484774303323,15.0451711061831 +transit,121.84067941367195,15.050028597580143 +transit,121.83288104370862,15.054885819085952 +transit,121.8250823203264,15.05974277059761 +transit,121.81728324340935,15.064599452012208 +transit,121.80948381284159,15.06945586322681 +transit,121.80168402850722,15.074312004138477 +transit,121.79388389029036,15.079167874644254 +transit,121.7860833980751,15.084023474641183 +transit,121.77828255174559,15.088878804026292 +transit,121.77048135118595,15.093733862696592 +transit,121.76267979628034,15.09858865054909 +transit,121.7548778869129,15.10344316748078 +transit,121.74707562296777,15.108297413388643 +transit,121.73927300432914,15.113151388169657 +transit,121.73147003088116,15.118005091720779 +transit,121.72366670250803,15.122858523938962 +transit,121.71586301909392,15.127711684721149 +transit,121.70805898052303,15.132564573964261 +transit,121.70025458667959,15.137417191565222 +transit,121.69244983744775,15.142269537420944 +transit,121.6846447327118,15.147121611428311 +transit,121.67683927235592,15.151973413484216 +transit,121.66903345626434,15.15682494348553 +transit,121.66122728432133,15.161676201329124 +transit,121.65342075641112,15.166527186911841 +transit,121.64561387241798,15.171377900130533 +transit,121.63780663222616,15.176228340882028 +transit,121.62999903571995,15.181078509063143 +transit,121.6221910827836,15.185928404570689 +transit,121.61438277330143,15.190778027301468 +transit,121.60657410715773,15.195627377152261 +transit,121.59876508423677,15.200476454019848 +transit,121.59095570442291,15.205325257800993 +transit,121.58314596760046,15.210173788392458 +transit,121.57533587365371,15.215022045690983 +transit,121.56752542246704,15.219870029593292 +transit,121.55971461392477,15.22471773999612 +transit,121.55190344791124,15.229565176796171 +transit,121.54409192431083,15.23441233989015 +transit,121.5362800430079,15.239259229174742 +transit,121.52846780388683,15.24410584454663 +transit,121.52065520683199,15.248952185902473 +transit,121.51284225172778,15.253798253138939 +transit,121.50502893845858,15.258644046152666 +transit,121.49721526690882,15.263489564840294 +transit,121.4894012369629,15.268334809098441 +transit,121.48158684850526,15.273179778823721 +transit,121.47377210142031,15.278024473912744 +transit,121.46595699559248,15.28286889426209 +transit,121.45814153090625,15.287713039768345 +transit,121.45032570724604,15.292556910328077 +transit,121.44250952449632,15.29740050583784 +transit,121.43469298254158,15.30224382619419 +transit,121.42687608126626,15.307086871293658 +transit,121.41905882055488,15.311929641032771 +transit,121.41124120029193,15.316772135308046 +transit,121.40342322036187,15.321614354015976 +transit,121.39560488064927,15.326456297053063 +transit,121.38778618103862,15.331297964315786 +transit,121.37996712141444,15.336139355700615 +transit,121.37214770166128,15.340980471104006 +transit,121.36432792166367,15.345821310422412 +transit,121.35650778130615,15.350661873552276 +transit,121.3486872804733,15.355502160390012 +transit,121.34086641904968,15.360342170832043 +transit,121.33304519691985,15.365181904774774 +transit,121.32522361396842,15.3700213621146 +transit,121.31740167007995,15.374860542747898 +transit,121.30957936513906,15.379699446571044 +transit,121.30175669903035,15.384538073480398 +transit,121.29393367163843,15.389376423372305 +transit,121.28611028284793,15.39421449614311 +transit,121.27828653254349,15.399052291689138 +transit,121.27046242060972,15.403889809906707 +transit,121.2626379469313,15.408727050692123 +transit,121.25481311139286,15.413564013941675 +transit,121.2469879138791,15.418400699551658 +transit,121.23916235427465,15.423237107418332 +transit,121.2313364324642,15.428073237437966 +transit,121.22351014833248,15.432909089506806 +transit,121.21568350176413,15.437744663521098 +transit,121.20785649264388,15.442579959377069 +transit,121.20002912085647,15.447414976970931 +transit,121.19220138628657,15.452249716198892 +transit,121.18437328881895,15.457084176957158 +transit,121.17654482833832,15.4619183591419 +transit,121.16871600472946,15.466752262649294 +transit,121.16088681787708,15.471585887375513 +transit,121.153057267666,15.476419233216696 +transit,121.14522735398094,15.481252300068983 +transit,121.1373970767067,15.486085087828513 +transit,121.12956643572808,15.490917596391396 +transit,121.12173543092986,15.495749825653744 +transit,121.11390406219684,15.500581775511655 +transit,121.10607232941386,15.505413445861208 +transit,121.09824023246571,15.51024483659848 +transit,121.09040777123724,15.51507594761953 +transit,121.08257494561329,15.51990677882042 +transit,121.0747417554787,15.52473733009718 +transit,121.06690820071832,15.529567601345844 +transit,121.05907428121701,15.534397592462433 +transit,121.05123999685966,15.539227303342948 +transit,121.04340534753115,15.544056733883396 +transit,121.03557033311634,15.548885883979748 +transit,121.02773495350016,15.553714753527995 +transit,121.01989920856751,15.558543342424088 +transit,121.0120630982033,15.563371650563985 +transit,121.00422662229244,15.568199677843625 +transit,120.99638978071987,15.573027424158942 +transit,120.98855257337054,15.577854889405847 +transit,120.9807150001294,15.582682073480255 +transit,120.97287706088137,15.587508976278063 +transit,120.96503875551146,15.592335597695147 +transit,120.95720008390462,15.59716193762739 +transit,120.94936104594584,15.601987995970662 +transit,120.94152164152011,15.606813772620804 +transit,120.93368187051243,15.611639267473658 +transit,120.92584173280781,15.616464480425057 +transit,120.91800122829126,15.621289411370824 +transit,120.91016035684781,15.626114060206762 +transit,120.9023191183625,15.630938426828667 +transit,120.89447751272036,15.635762511132329 +transit,120.88663553980643,15.640586313013518 +transit,120.87879319950581,15.645409832368003 +transit,120.87095049170354,15.650233069091534 +transit,120.8631074162847,15.65505602307985 +transit,120.85526397313437,15.659878694228684 +transit,120.84742016213767,15.664701082433753 +transit,120.83957598317967,15.669523187590764 +transit,120.83173143614549,15.674345009595418 +transit,120.82388652092027,15.679166548343394 +transit,120.81604123738913,15.683987803730375 +transit,120.80819558543719,15.688808775652017 +transit,120.80034956494961,15.69362946400397 +transit,120.79250317581156,15.698449868681891 +transit,120.78465641790818,15.703269989581393 +transit,120.77680929112465,15.708089826598103 +transit,120.76896179534616,15.712909379627623 +transit,120.76111393045788,15.717728648565553 +transit,120.75326569634504,15.72254763330748 +transit,120.74541709289281,15.727366333748977 +transit,120.73756811998645,15.732184749785599 +transit,120.72971877751114,15.737002881312911 +transit,120.72186906535215,15.741820728226447 +transit,120.71401898339471,15.746638290421732 +transit,120.70616853152407,15.75145556779429 +transit,120.69831770962548,15.756272560239628 +transit,120.69046651758426,15.761089267653242 +transit,120.68261495528562,15.765905689930612 +transit,120.67476302261487,15.770721826967218 +transit,120.66691071945732,15.775537678658523 +transit,120.65905804569827,15.780353244899969 +transit,120.65120500122303,15.785168525587002 +transit,120.64335158591693,15.789983520615053 +transit,120.6354977996653,15.794798229879532 +transit,120.62764364235348,15.799612653275858 +transit,120.6197891138668,15.804426790699411 +transit,120.61193421409065,15.809240642045587 +transit,120.60407894291038,15.814054207209752 +transit,120.59622330021138,15.818867486087273 +transit,120.588367285879,15.823680478573497 +transit,120.58051089979868,15.828493184563765 +transit,120.57265414185579,15.8333056039534 +transit,120.56479701193577,15.838117736637717 +transit,120.556939509924,15.842929582512037 +transit,120.54908163570596,15.84774114147164 +transit,120.54122338916706,15.852552413411813 +transit,120.53336477019276,15.857363398227829 +transit,120.5255057786685,15.862174095814947 +transit,120.51764641447977,15.866984506068418 +transit,120.50978667751204,15.871794628883478 +transit,120.50192656765077,15.876604464155356 +transit,120.49406608478148,15.88141401177927 +transit,120.48620522878967,15.886223271650417 +transit,120.47834399956085,15.891032243664 +transit,120.47048239698053,15.895840927715195 +transit,120.46262042093426,15.90064932369917 +transit,120.45475807130757,15.905457431511095 +transit,120.44689534798599,15.910265251046106 +transit,120.43903225085509,15.915072782199351 +transit,120.43116877980046,15.91988002486595 +transit,120.42330493470766,15.924686978941011 +transit,120.41544071546227,15.929493644319649 +transit,120.40757612194987,15.93430002089695 +transit,120.39971115405609,15.939106108567994 +transit,120.39184581166654,15.943911907227859 +transit,120.38398009466682,15.94871741677159 +transit,120.37611400294259,15.953522637094247 +transit,120.36824753637947,15.958327568090855 +transit,120.36038069486312,15.96313220965645 +transit,120.35251347827919,15.96793656168603 +transit,120.34464588651336,15.972740624074607 +transit,120.33677791945131,15.97754439671717 +transit,120.3289095769787,15.982347879508701 +transit,120.32104085898125,15.987151072344163 +transit,120.31317176534466,15.991953975118513 +transit,120.30530229595463,15.9967565877267 +transit,120.29743245069693,16.001558910063654 +transit,120.28956222945723,16.006360942024305 +transit,120.28169163212132,16.01116268350356 +transit,120.27382065857493,16.015964134396313 +transit,120.26594930870382,16.020765294597464 +transit,120.25807758239378,16.025566164001887 +transit,120.25020547953058,16.03036674250444 +RPUG,120.242333,16.03516703 +transit,120.24623823181024,16.027308305816007 +transit,120.25014315779546,16.019449504816514 +transit,120.25404777813486,16.011590627046164 +transit,120.25795209300753,16.003731672549574 +transit,120.26185610259255,15.995872641371351 +transit,120.26575980706895,15.98801353355609 +transit,120.26966320661572,15.980154349148401 +transit,120.2735663014118,15.972295088192846 +transit,120.27746909163608,15.964435750733996 +transit,120.28137157746741,15.956576336816413 +transit,120.28527375908462,15.948716846484638 +transit,120.28917563666643,15.940857279783213 +transit,120.29307721039159,15.93299763675666 +transit,120.29697848043877,15.925137917449488 +transit,120.30087944698658,15.917278121906211 +transit,120.30478011021364,15.909418250171314 +transit,120.30868047029847,15.90155830228928 +transit,120.31258052741956,15.893698278304585 +transit,120.31648028175536,15.885838178261688 +transit,120.3203797334843,15.877978002205033 +transit,120.32427888278474,15.870117750179068 +transit,120.32817772983499,15.862257422228218 +transit,120.33207627481332,15.854397018396904 +transit,120.33597451789798,15.846536538729532 +transit,120.33987245926716,15.83867598327049 +transit,120.34377009909898,15.83081535206418 +transit,120.34766743757156,15.822954645154963 +transit,120.35156447486294,15.815093862587212 +transit,120.35546121115117,15.807233004405274 +transit,120.35935764661417,15.7993720706535 +transit,120.36325378142989,15.791511061376225 +transit,120.36714961577621,15.783649976617763 +transit,120.37104514983096,15.775788816422434 +transit,120.37494038377194,15.767927580834526 +transit,120.3788353177769,15.760066269898346 +transit,120.38272995202355,15.752204883658163 +transit,120.38662428668954,15.744343422158245 +transit,120.39051832195248,15.736481885442863 +transit,120.39441205798998,15.728620273556256 +transit,120.39830549497955,15.720758586542665 +transit,120.40219863309868,15.712896824446311 +transit,120.4060914725248,15.705034987311416 +transit,120.40998401343533,15.697173075182189 +transit,120.41387625600763,15.689311088102823 +transit,120.417768200419,15.681449026117498 +transit,120.42165984684671,15.6735868892704 +transit,120.425551195468,15.665724677605683 +transit,120.42944224646006,15.657862391167502 +TP9,120.433333,15.65000003 +transit,120.43556823903522,15.64149172352093 +transit,120.43780329336165,15.632983387670583 +transit,120.44003816309964,15.624475022467013 +transit,120.44227284836951,15.615966627928293 +transit,120.44450734929154,15.607458204072472 +transit,120.44674166598597,15.59894975091761 +transit,120.44897579857302,15.590441268481753 +transit,120.45120974717285,15.581932756782956 +transit,120.45344351190562,15.57342421583926 +transit,120.45567709289142,15.564915645668703 +transit,120.45791049025034,15.556407046289324 +transit,120.46014370410239,15.547898417719157 +transit,120.46237673456761,15.539389759976224 +transit,120.46460958176594,15.530881073078557 +transit,120.46684224581733,15.522372357044167 +transit,120.46907472684168,15.513863611891091 +transit,120.47130702495885,15.505354837637327 +transit,120.47353914028865,15.496846034300894 +transit,120.47577107295092,15.4883372018998 +transit,120.4780028230654,15.479828340452036 +transit,120.4802343907518,15.471319449975615 +transit,120.48246577612984,15.462810530488522 +transit,120.48469697931918,15.454301582008759 +transit,120.48692800043943,15.445792604554313 +transit,120.4891588396102,15.43728359814316 +transit,120.49138949695102,15.428774562793299 +transit,120.49361997258144,15.420265498522689 +transit,120.49585026662093,15.41175640534931 +transit,120.49808037918895,15.403247283291138 +transit,120.50031031040493,15.394738132366136 +transit,120.50254006038826,15.386228952592264 +transit,120.50476962925826,15.377719743987488 +transit,120.50699901713428,15.369210506569756 +transit,120.5092282241356,15.360701240357029 +transit,120.51145725038145,15.352191945367249 +transit,120.51368609599108,15.343682621618361 +transit,120.51591476108365,15.335173269128315 +transit,120.5181432457783,15.32666388791504 +transit,120.52037155019418,15.318154477996474 +transit,120.52259967445035,15.309645039390544 +transit,120.52482761866585,15.301135572115179 +transit,120.5270553829597,15.292626076188302 +transit,120.5292829674509,15.284116551627838 +transit,120.53151037225837,15.275606998451693 +transit,120.53373759750103,15.267097416677787 +transit,120.53596464329776,15.258587806324032 +transit,120.5381915097674,15.250078167408322 +transit,120.54041819702879,15.241568499948567 +transit,120.54264470520067,15.233058803962667 +transit,120.54487103440181,15.224549079468511 +transit,120.54709718475091,15.216039326483996 +transit,120.54932315636665,15.207529545027002 +transit,120.55154894936767,15.199019735115417 +transit,120.55377456387261,15.19050989676712 +RPLC,120.556,15.18200003 +transit,120.56232759211345,15.175791398462003 +transit,120.568654814593,15.169582585856645 +transit,120.5749816676081,15.16337359227141 +transit,120.58130815132822,15.157164417793794 +transit,120.5876342659228,15.150955062511267 +transit,120.59396001156126,15.14474552651128 +transit,120.60028538841301,15.138535809881272 +transit,120.60661039664744,15.132325912708675 +transit,120.61293503643391,15.126115835080892 +transit,120.6192593079418,15.11990557708532 +transit,120.62558321134041,15.113695138809339 +transit,120.63190674679909,15.107484520340309 +transit,120.63822991448711,15.10127372176558 +transit,120.64455271457378,15.095062743172493 +transit,120.65087514722836,15.088851584648351 +transit,120.65719721262009,15.082640246280466 +transit,120.6635189109182,15.076428728156124 +transit,120.66984024229191,15.070217030362606 +transit,120.67616120691042,15.064005152987152 +transit,120.6824818049429,15.057793096117013 +transit,120.68880203655851,15.051580859839419 +transit,120.6951219019264,15.045368444241577 +transit,120.70144140121567,15.03915584941069 +transit,120.70776053459548,15.03294307543393 +transit,120.71407930223488,15.026730122398469 +transit,120.72039770430295,15.020516990391458 +transit,120.72671574096876,15.014303679500028 +transit,120.73303341240134,15.008090189811307 +transit,120.7393507187697,15.001876521412399 +transit,120.74566766024286,14.99566267439039 +transit,120.75198423698978,14.989448648832358 +transit,120.75830044917947,14.983234444825364 +transit,120.76461629698086,14.977020062456457 +transit,120.77093178056288,14.970805501812661 +transit,120.77724690009445,14.964590762980993 +transit,120.78356165574446,14.958375846048451 +transit,120.78987604768182,14.95216075110203 +transit,120.79619007607536,14.94594547822869 +transit,120.80250374109394,14.939730027515386 +transit,120.8088170429064,14.933514399049061 +transit,120.81512998168154,14.927298592916644 +transit,120.82144255758816,14.921082609205031 +transit,120.82775477079502,14.914866448001135 +transit,120.83406662147091,14.908650109391827 +transit,120.84037810978455,14.90243359346397 +transit,120.84668923590468,14.896216900304411 +RPUX,120.853,14.89000003 +transit,120.85979782446294,14.884600564854255 +transit,120.86659531051718,14.879200895697487 +transit,120.87339245829533,14.873801022616716 +transit,120.88018926793,14.868400945698953 +transit,120.88698573955382,14.863000665031208 +transit,120.89378187329942,14.857600180700459 +transit,120.90057766929938,14.852199492793686 +transit,120.90737312768633,14.846798601397856 +transit,120.91416824859287,14.841397506599918 +transit,120.92096303215158,14.835996208486819 +transit,120.92775747849507,14.830594707145481 +transit,120.9345515877559,14.825193002662823 +transit,120.94134536006668,14.819791095125751 +transit,120.94813879555998,14.814388984621152 +transit,120.95493189436837,14.808986671235916 +transit,120.96172465662443,14.803584155056903 +transit,120.96851708246069,14.798181436170978 +transit,120.97530917200974,14.792778514664978 +transit,120.98210092540413,14.78737539062574 +transit,120.9888923427764,14.781972064140092 +transit,120.9956834242591,14.776568535294828 +transit,121.00247416998477,14.771164804176754 +transit,121.00926458008594,14.765760870872654 +transit,121.01605465469515,14.760356735469305 +transit,121.02284439394494,14.754952398053465 +transit,121.02963379796779,14.749547858711882 +transit,121.03642286689625,14.744143117531296 +transit,121.0432116008628,14.738738174598431 +TP1,121.05,14.73333303 +transit,121.051095723919,14.72546409823825 +transit,121.05219136923515,14.717595155954921 +transit,121.05328693599787,14.709726203155862 +transit,121.05438242425664,14.701857239846916 +transit,121.05547783406094,14.693988266033939 +transit,121.05657316546016,14.686119281722771 +transit,121.05766841850375,14.678250286919257 +transit,121.05876359324112,14.670381281629242 +transit,121.05985868972166,14.662512265858577 +transit,121.06095370799477,14.654643239613106 +transit,121.0620486481098,14.646774202898664 +transit,121.0631435101161,14.63890515572111 +transit,121.06423829406307,14.631036098086266 +MAO1,121.065333,14.62316703 +transit,121.06905300826244,14.614962521959232 +transit,121.07277274046876,14.606757948816796 +transit,121.07649219679926,14.598553310614683 +transit,121.08021137743422,14.590348607394908 +transit,121.08393028255385,14.582143839199444 +transit,121.08764891233832,14.573939006070276 +transit,121.09136726696777,14.56573410804936 +transit,121.09508534662227,14.557529145178671 +transit,121.09880315148189,14.549324117500145 +transit,121.1025206817266,14.54111902505572 +transit,121.10623793753639,14.532913867887324 +transit,121.10995491909114,14.524708646036885 +transit,121.11367162657073,14.516503359546299 +transit,121.117388060155,14.50829800845748 +transit,121.1211042200237,14.500092592812312 +transit,121.12482010635657,14.491887112652678 +transit,121.12853571933333,14.483681568020451 +transit,121.13225105913361,14.47547595895749 +transit,121.13596612593702,14.467270285505647 +transit,121.13968091992312,14.459064547706769 +transit,121.14339544127142,14.45085874560269 +transit,121.14710969016143,14.442652879235222 +transit,121.15082366677254,14.434446948646196 +transit,121.15453737128415,14.42624095387741 +transit,121.1582508038756,14.418034894970662 +transit,121.16196396472623,14.40982877196773 +transit,121.16567685401523,14.401622584910404 +transit,121.16938947192187,14.393416333840443 +transit,121.1731018186253,14.385210018799611 +transit,121.17681389430464,14.377003639829647 +transit,121.18052569913901,14.368797196972299 +transit,121.1842372333074,14.360590690269289 +transit,121.18794849698884,14.352384119762348 +transit,121.19165949036228,14.344177485493182 +transit,121.19537021360664,14.335970787503486 +transit,121.19908066690076,14.327764025834961 +transit,121.2027908504235,14.319557200529285 +transit,121.2065007643536,14.311350311628132 +transit,121.21021040886986,14.30314335917317 +transit,121.21391978415093,14.294936343206047 +transit,121.21762889037547,14.286729263768416 +transit,121.2213377277221,14.278522120901911 +transit,121.22504629636938,14.270314914648154 +transit,121.22875459649586,14.262107645048763 +transit,121.23246262827999,14.253900312145355 +transit,121.23617039190022,14.245692915979518 +transit,121.23987788753494,14.237485456592848 +transit,121.24358511536252,14.229277934026925 +transit,121.24729207556128,14.221070348323318 +transit,121.25099876830944,14.212862699523585 +transit,121.25470519378528,14.204654987669288 +transit,121.25841135216696,14.196447212801964 +transit,121.26211724363262,14.18823937496314 +transit,121.26582286836036,14.180031474194358 +transit,121.26952822652824,14.171823510537116 +transit,121.27323331831425,14.163615484032935 +transit,121.2769381438964,14.155407394723298 +transit,121.2806427034526,14.147199242649702 +transit,121.28434699716074,14.138991027853624 +transit,121.28805102519864,14.130782750376532 +transit,121.29175478774414,14.122574410259885 +transit,121.29545828497497,14.114366007545135 +transit,121.29916151706885,14.106157542273722 +transit,121.30286448420348,14.097949014487085 +transit,121.30656718655646,14.08974042422664 +transit,121.3102696243054,14.081531771533802 +transit,121.31397179762784,14.073323056449986 +transit,121.3176737067013,14.065114279016573 +transit,121.32137535170321,14.05690543927496 +transit,121.32507673281104,14.048696537266515 +transit,121.32877785020213,14.04048757303262 +transit,121.33247870405384,14.032278546614624 +transit,121.33617929454346,14.02406945805388 +transit,121.33987962184824,14.015860307391733 +transit,121.34357968614539,14.00765109466951 +transit,121.3472794876121,13.999441819928538 +transit,121.35097902642548,13.991232483210126 +transit,121.35467830276262,13.983023084555578 +transit,121.35837731680057,13.9748136240062 +transit,121.36207606871633,13.966604101603268 +transit,121.36577455868688,13.958394517388063 +transit,121.3694727868891,13.950184871401857 +transit,121.3731707534999,13.941975163685907 +transit,121.37686845869612,13.93376539428146 +transit,121.38056590265454,13.92555556322976 +transit,121.38426308555191,13.917345670572047 +transit,121.38796000756496,13.909135716349532 +transit,121.39165666887034,13.900925700603437 +transit,121.3953530696447,13.892715623374963 +transit,121.39904921006462,13.884505484705315 +transit,121.40274509030664,13.876295284635663 +transit,121.40644071054727,13.868085023207206 +transit,121.41013607096298,13.859874700461098 +transit,121.41383117173018,13.851664316438512 +transit,121.41752601302527,13.84345387118059 +transit,121.42122059502456,13.835243364728482 +transit,121.42491491790439,13.827032797123316 +transit,121.428608981841,13.818822168406216 +transit,121.43230278701058,13.810611478618304 +transit,121.43599633358934,13.802400727800679 +transit,121.43968962175342,13.794189915994446 +transit,121.44338265167887,13.78597904324069 +transit,121.44707542354179,13.777768109580496 +transit,121.45076793751815,13.769557115054928 +transit,121.45446019378396,13.76134605970505 +transit,121.45815219251513,13.753134943571922 +transit,121.46184393388755,13.744923766696585 +transit,121.46553541807705,13.736712529120073 +transit,121.46922664525948,13.728501230883413 +transit,121.47291761561057,13.720289872027625 +transit,121.47660832930606,13.712078452593715 +transit,121.48029878652163,13.703866972622688 +transit,121.48398898743292,13.695655432155535 +transit,121.48767893221556,13.687443831233237 +transit,121.49136862104507,13.679232169896766 +transit,121.495058054097,13.67102044818709 +transit,121.49874723154684,13.662808666145162 +transit,121.50243615357,13.654596823811936 +transit,121.50612482034191,13.646384921228343 +transit,121.50981323203793,13.638172958435316 +transit,121.51350138883335,13.629960935473784 +transit,121.51718929090346,13.621748852384647 +transit,121.52087693842353,13.613536709208814 +transit,121.52456433156871,13.60532450598718 +transit,121.5282514705142,13.597112242760629 +transit,121.5319383554351,13.588899919570041 +transit,121.53562498650648,13.580687536456287 +transit,121.5393113639034,13.572475093460218 +transit,121.54299748780082,13.564262590622697 +transit,121.54668335837373,13.55605002798456 +transit,121.55036897579704,13.547837405586638 +transit,121.55405434024563,13.539624723469759 +transit,121.5577394518943,13.531411981674745 +transit,121.56142431091791,13.523199180242393 +transit,121.56510891749117,13.514986319213511 +transit,121.5687932717888,13.506773398628885 +transit,121.5724773739855,13.498560418529294 +transit,121.57616122425588,13.490347378955521 +transit,121.57984482277456,13.482134279948319 +transit,121.58352816971609,13.47392112154845 +transit,121.58721126525498,13.46570790379666 +transit,121.5908941095657,13.457494626733688 +transit,121.59457670282269,13.449281290400265 +transit,121.59825904520038,13.44106789483711 +transit,121.60194113687308,13.432854440084938 +transit,121.60562297801513,13.424640926184447 +transit,121.60930456880082,13.416427353176337 +transit,121.61298590940439,13.408213721101292 +TP2,121.616667,13.40000003 +transit,121.60885689895416,13.404682816452143 +transit,121.60104649558956,13.409365359547875 +transit,121.59323578980056,13.414047659190004 +transit,121.58542478148156,13.418729715281337 +transit,121.57761347052694,13.423411527724678 +transit,121.56980185683109,13.42809309642281 +transit,121.56198994028843,13.43277442127851 +transit,121.55417772079338,13.437455502194558 +transit,121.54636519824032,13.442136339073716 +transit,121.53855237252374,13.446816931818734 +transit,121.53073924353802,13.451497280332362 +transit,121.52292581117764,13.456177384517337 +transit,121.51511207533704,13.460857244276388 +transit,121.50729803591068,13.465536859512236 +transit,121.49948369279302,13.470216230127596 +transit,121.49166904587854,13.474895356025165 +transit,121.48385409506173,13.479574237107645 +transit,121.47603884023708,13.484252873277716 +transit,121.46822328129907,13.488931264438063 +transit,121.46040741814224,13.493609410491347 +transit,121.45259125066107,13.498287311340237 +transit,121.4447747787501,13.502964966887383 +transit,121.43695800230387,13.507642377035422 +transit,121.42914092121687,13.512319541687 +transit,121.4213235353837,13.516996460744734 +transit,121.41350584469889,13.52167313411125 +transit,121.40568784905699,13.526349561689152 +transit,121.39786954835259,13.531025743381038 +transit,121.39005094248026,13.53570167908951 +transit,121.38223203133457,13.540377368717143 +transit,121.37441281481013,13.545052812166515 +transit,121.36659329280154,13.549728009340194 +transit,121.35877346520338,13.554402960140738 +transit,121.3509533319103,13.559077664470694 +transit,121.34313289281691,13.563752122232604 +transit,121.33531214781786,13.568426333328995 +transit,121.32749109680775,13.573100297662402 +transit,121.31966973968126,13.577774015135331 +transit,121.31184807633304,13.582447485650288 +transit,121.30402610665773,13.587120709109774 +transit,121.29620383055004,13.59179368541628 +transit,121.28838124790461,13.59646641447228 +transit,121.28055835861616,13.601138896180252 +transit,121.27273516257937,13.605811130442659 +transit,121.26491165968893,13.610483117161953 +transit,121.25708784983958,13.61515485624058 +transit,121.24926373292602,13.619826347580977 +transit,121.24143930884298,13.624497591085575 +transit,121.2336145774852,13.629168586656796 +transit,121.22578953874742,13.633839334197045 +transit,121.21796419252439,13.638509833608733 +transit,121.21013853871086,13.643180084794247 +transit,121.20231257720162,13.647850087655979 +transit,121.19448630789142,13.6525198420963 +transit,121.18665973067506,13.657189348017583 +transit,121.17883284544733,13.661858605322186 +transit,121.17100565210302,13.666527613912464 +transit,121.16317815053694,13.671196373690751 +transit,121.1553503406439,13.675864884559388 +transit,121.14752222231874,13.680533146420702 +transit,121.13969379545628,13.685201159177 +transit,121.13186505995137,13.6898689227306 +transit,121.12403601569883,13.694536436983796 +transit,121.11620666259356,13.69920370183888 +transit,121.10837700053037,13.703870717198136 +transit,121.10054702940418,13.70853748296383 +transit,121.09271674910985,13.713203999038237 +transit,121.08488615954226,13.717870265323603 +transit,121.07705526059632,13.722536281722183 +transit,121.06922405216693,13.727202048136217 +transit,121.06139253414901,13.731867564467928 +transit,121.05356070643747,13.736532830619538 +transit,121.04572856892723,13.741197846493264 +transit,121.03789612151326,13.745862611991306 +transit,121.03006336409047,13.750527127015868 +transit,121.02223029655383,13.755191391469129 +transit,121.0143969187983,13.759855405253267 +transit,121.00656323071884,13.764519168270452 +transit,120.99872923221045,13.769182680422844 +transit,120.9908949231681,13.7738459416126 +transit,120.9830603034868,13.778508951741857 +transit,120.97522537306153,13.783171710712756 +transit,120.96739013178733,13.787834218427415 +transit,120.95955457955918,13.792496474787962 +transit,120.95171871627214,13.79715847969649 +transit,120.94388254182124,13.801820233055116 +transit,120.93604605610152,13.806481734765917 +transit,120.92820925900803,13.811142984730987 +transit,120.92037215043582,13.815803982852387 +transit,120.91253473027999,13.820464729032192 +transit,120.9046969984356,13.82512522317246 +transit,120.89685895479772,13.829785465175233 +transit,120.88902059926147,13.83444545494255 +transit,120.88118193172193,13.839105192376438 +transit,120.87334295207422,13.843764677378928 +transit,120.86550366021348,13.848423909852029 +transit,120.8576640560348,13.85308288969774 +transit,120.84982413943335,13.85774161681806 +transit,120.84198391030425,13.862400091114976 +transit,120.83414336854266,13.867058312490467 +transit,120.82630251404373,13.871716280846499 +transit,120.81846134670265,13.876373996085038 +transit,120.81061986641458,13.88103145810803 +transit,120.80277807307472,13.885688666817417 +transit,120.79493596657825,13.89034562211514 +transit,120.78709354682039,13.895002323903118 +transit,120.77925081369634,13.89965877208327 +transit,120.77140776710131,13.904314966557509 +transit,120.76356440693054,13.908970907227724 +transit,120.75572073307927,13.913626593995817 +transit,120.74787674544274,13.918282026763661 +transit,120.7400324439162,13.922937205433131 +transit,120.73218782839493,13.927592129906097 +transit,120.72434289877417,13.932246800084409 +transit,120.71649765494922,13.936901215869911 +transit,120.70865209681536,13.941555377164446 +transit,120.7008062242679,13.946209283869846 +transit,120.69296003720211,13.95086293588793 +transit,120.68511353551334,13.955516333120501 +transit,120.67726671909688,13.960169475469373 +transit,120.6694195878481,13.964822362836333 +transit,120.66157214166229,13.969474995123171 +transit,120.65372438043484,13.974127372231665 +transit,120.64587630406108,13.978779494063577 +transit,120.63802791243637,13.98343136052067 +transit,120.6301792054561,13.988082971504696 +transit,120.62233018301566,13.992734326917393 +transit,120.6144808450104,13.997385426660493 +transit,120.60663119133577,14.002036270635728 +transit,120.59878122188714,14.006686858744802 +transit,120.59093093655993,14.01133719088943 +transit,120.58308033524956,14.015987266971308 +transit,120.57522941785149,14.02063708689212 +transit,120.56737818426113,14.025286650553555 +transit,120.55952663437395,14.029935957857278 +transit,120.5516747680854,14.034585008704955 +transit,120.54382258529097,14.039233802998234 +transit,120.5359700858861,14.043882340638765 +transit,120.52811726976628,14.048530621528187 +transit,120.52026413682704,14.053178645568119 +transit,120.51241068696383,14.057826412660184 +transit,120.50455692007222,14.062473922705996 +transit,120.49670283604766,14.067121175607145 +transit,120.48884843478574,14.071768171265235 +transit,120.48099371618197,14.076414909581842 +transit,120.47313868013188,14.081061390458546 +transit,120.46528332653106,14.085707613796908 +transit,120.45742765527504,14.090353579498489 +transit,120.44957166625943,14.09499928746483 +transit,120.44171535937977,14.099644737597474 +transit,120.43385873453167,14.10428992979796 +transit,120.42600179161073,14.108934863967795 +transit,120.41814453051254,14.113579540008503 +transit,120.41028695113273,14.11822395782158 +transit,120.40242905336693,14.12286811730853 +transit,120.39457083711076,14.127512018370826 +transit,120.38671230225987,14.132155660909964 +transit,120.3788534487099,14.136799044827397 +transit,120.37099427635653,14.141442170024593 +transit,120.36313478509541,14.146085036402994 +transit,120.35527497482222,14.150727643864053 +transit,120.34741484543267,14.155369992309202 +transit,120.33955439682241,14.160012081639858 +transit,120.33169362888718,14.164653911757439 +transit,120.32383254152268,14.169295482563356 +transit,120.31597113462463,14.173936793959003 +transit,120.30810940808878,14.178577845845775 +transit,120.30024736181085,14.183218638125043 +transit,120.29238499568658,14.187859170698184 +transit,120.28452230961175,14.19249944346656 +transit,120.2766593034821,14.197139456331524 +transit,120.26879597719343,14.20177920919442 +transit,120.26093233064152,14.206418701956586 +transit,120.25306836372216,14.21105793451935 +transit,120.24520407633115,14.215696906784025 +transit,120.2373394683643,14.220335618651925 +transit,120.22947453971743,14.224974070024347 +transit,120.22160929028637,14.229612260802586 +transit,120.21374371996696,14.234250190887922 +transit,120.20587782865503,14.23888786018163 +transit,120.19801161624646,14.243525268584978 +transit,120.19014508263712,14.248162415999214 +transit,120.18227822772285,14.252799302325593 +transit,120.17441105139956,14.25743592746535 +transit,120.16654355356313,14.262072291319715 +transit,120.15867573410947,14.26670839378991 +transit,120.15080759293448,14.271344234777144 +transit,120.14293912993409,14.275979814182621 +transit,120.13507034500422,14.280615131907531 +transit,120.12720123804081,14.28525018785307 +transit,120.1193318089398,14.2898849819204 +transit,120.11146205759717,14.294519514010698 +transit,120.10359198390884,14.299153784025119 +transit,120.09572158777083,14.303787791864814 +transit,120.08785086907909,14.308421537430918 +transit,120.07997982772963,14.313055020624567 +transit,120.07210846361845,14.317688241346882 +transit,120.06423677664154,14.322321199498983 +transit,120.05636476669494,14.326953894981964 +transit,120.04849243367467,14.331586327696932 +transit,120.04061977747678,14.336218497544966 +transit,120.0327467979973,14.34085040442715 +transit,120.02487349513228,14.345482048244548 +transit,120.01699986877782,14.350113428898224 +transit,120.00912591882997,14.354744546289226 +transit,120.0012516451848,14.359375400318594 +transit,119.99337704773842,14.364005990887367 +transit,119.98550212638693,14.368636317896572 +transit,119.97762688102645,14.373266381247218 +transit,119.96975131155308,14.377896180840319 +transit,119.96187541786297,14.382525716576863 +transit,119.95399919985225,14.387154988357846 +transit,119.94612265741705,14.391783996084245 +transit,119.93824579045356,14.396412739657029 +transit,119.93036859885792,14.401041218977165 +transit,119.92249108252634,14.405669433945606 +transit,119.91461324135496,14.410297384463295 +transit,119.90673507524,14.414925070431163 +transit,119.89885658407766,14.419552491750142 +transit,119.89097776776416,14.424179648321147 +transit,119.88309862619572,14.428806540045086 +transit,119.87521915926855,14.433433166822855 +transit,119.86733936687892,14.438059528555351 +transit,119.85945924892306,14.442685625143456 +transit,119.85157880529725,14.447311456488034 +transit,119.84369803589775,14.451937022489954 +transit,119.83581694062082,14.456562323050072 +transit,119.82793551936278,14.461187358069234 +transit,119.8200537720199,14.465812127448268 +transit,119.8121716984885,14.470436631088013 +transit,119.8042892986649,14.475060868889285 +transit,119.79640657244542,14.479684840752888 +transit,119.78852351972638,14.484308546579626 +transit,119.78064014040415,14.488931986270298 +transit,119.77275643437507,14.493555159725679 +transit,119.76487240153551,14.498178066846538 +transit,119.75698804178184,14.502800707533652 +transit,119.74910335501042,14.507423081687769 +transit,119.74121834111769,14.512045189209637 +TP3,119.733333,14.51666703 +transit,119.74245511347887,14.516859138136162 +transit,119.75157724268301,14.517050891614721 +transit,119.76069938758363,14.517242290430186 +transit,119.7698215481519,14.517433334577088 +transit,119.778943724359,14.517624024049958 +transit,119.78806591617612,14.517814358843355 +transit,119.79718812357443,14.518004338951831 +transit,119.80631034652511,14.518193964369956 +transit,119.81543258499933,14.518383235092298 +transit,119.82455483896827,14.518572151113457 +transit,119.8336771084031,14.518760712428026 +transit,119.84279939327499,14.51894891903061 +transit,119.8519216935551,14.519136770915836 +transit,119.8610440092146,14.519324268078323 +transit,119.87016634022466,14.519511410512713 +transit,119.87928868655644,14.519698198213655 +transit,119.8884110481811,14.519884631175808 +transit,119.8975334250698,14.520070709393838 +transit,119.90665581719368,14.52025643286243 +transit,119.91577822452392,14.520441801576267 +transit,119.92490064703168,14.52062681553005 +transit,119.93402308468808,14.520811474718489 +transit,119.94314553746429,14.520995779136301 +transit,119.95226800533146,14.521179728778218 +transit,119.96139048826073,14.521363323638978 +transit,119.97051298622326,14.521546563713331 +transit,119.97963549919015,14.52172944899604 +transit,119.9887580271326,14.52191197948187 +transit,119.99788057002172,14.522094155165606 +transit,120.00700312782864,14.522275976042032 +transit,120.01612570052451,14.522457442105951 +transit,120.02524828808046,14.522638553352174 +transit,120.03437089046764,14.52281930977552 +transit,120.04349350765715,14.522999711370826 +transit,120.05261613962014,14.523179758132923 +transit,120.06173878632774,14.52335945005667 +transit,120.07086144775107,14.523538787136921 +transit,120.07998412386125,14.523717769368552 +transit,120.0891068146294,14.523896396746444 +transit,120.09822952002666,14.524074669265486 +transit,120.10735224002414,14.524252586920579 +transit,120.11647497459296,14.524430149706639 +transit,120.12559772370423,14.524607357618583 +transit,120.13472048732906,14.524784210651344 +transit,120.14384326543858,14.524960708799867 +transit,120.15296605800388,14.525136852059099 +transit,120.1620888649961,14.525312640424003 +transit,120.17121168638631,14.525488073889557 +transit,120.18033452214566,14.525663152450734 +transit,120.1894573722452,14.525837876102537 +transit,120.19858023665608,14.526012244839965 +transit,120.20770311534939,14.526186258658022 +transit,120.21682600829621,14.526359917551739 +transit,120.22594891546765,14.526533221516154 +transit,120.23507183683482,14.5267061705463 +transit,120.2441947723688,14.526878764637232 +transit,120.25331772204069,14.527051003784026 +transit,120.26244068582157,14.52722288798174 +transit,120.27156366368254,14.527394417225459 +transit,120.28068665559469,14.527565591510283 +transit,120.2898096615291,14.527736410831311 +transit,120.29893268145686,14.527906875183666 +transit,120.30805571534906,14.528076984562459 +transit,120.31717876317676,14.528246738962837 +transit,120.32630182491106,14.528416138379937 +transit,120.33542490052302,14.528585182808916 +transit,120.34454798998375,14.528753872244932 +transit,120.3536710932643,14.52892220668317 +transit,120.36279421033575,14.529090186118813 +transit,120.37191734116917,14.529257810547046 +transit,120.38104048573562,14.529425079963088 +transit,120.3901636440062,14.529591994362148 +transit,120.39928681595194,14.529758553739445 +transit,120.40841000154394,14.529924758090225 +transit,120.41753320075324,14.530090607409731 +transit,120.42665641355092,14.530256101693213 +transit,120.43577963990803,14.530421240935938 +transit,120.44490287979563,14.530586025133196 +transit,120.4540261331848,14.530750454280257 +transit,120.46314940004656,14.53091452837242 +transit,120.47227268035199,14.531078247404999 +transit,120.48139597407214,14.531241611373302 +transit,120.49051928117807,14.531404620272665 +transit,120.4996426016408,14.531567274098414 +transit,120.50876593543141,14.531729572845906 +transit,120.51788928252093,14.53189151651049 +transit,120.52701264288042,14.532053105087536 +transit,120.53613601648091,14.532214338572425 +transit,120.54525940329346,14.532375216960544 +transit,120.5543828032891,14.532535740247281 +transit,120.56350621643887,14.532695908428057 +transit,120.5726296427138,14.532855721498283 +transit,120.58175308208494,14.53301517945339 +transit,120.59087653452333,14.53317428228881 +TP4,120.6,14.53333303 +transit,120.60891325177454,14.532211177408374 +transit,120.61782641362562,14.531088985787047 +transit,120.62673948553424,14.529966455166676 +transit,120.6356524674814,14.528843585577919 +transit,120.64456535944814,14.527720377051432 +transit,120.65347816141545,14.526596829617894 +transit,120.66239087336437,14.525472943307976 +transit,120.67130349527596,14.524348718152378 +transit,120.68021602713127,14.52322415418179 +transit,120.68912846891136,14.522099251426917 +transit,120.6980408205973,14.520974009918476 +transit,120.70695308217019,14.519848429687181 +transit,120.71586525361108,14.51872251076377 +transit,120.72477733490112,14.517596253178972 +transit,120.73368932602139,14.51646965696354 +transit,120.74260122695303,14.515342722148226 +transit,120.75151303767716,14.514215448763785 +transit,120.7604247581749,14.513087836840993 +transit,120.76933638842745,14.511959886410628 +transit,120.77824792841592,14.510831597503469 +transit,120.7871593781215,14.509702970150322 +transit,120.79607073752537,14.508574004381979 +transit,120.80498200660871,14.507444700229257 +transit,120.81389318535273,14.506315057722974 +transit,120.82280427373861,14.50518507689395 +transit,120.8317152717476,14.504054757773021 +transit,120.84062617936091,14.502924100391041 +transit,120.84953699655976,14.501793104778846 +transit,120.85844772332543,14.500661770967307 +transit,120.86735835963914,14.499530098987284 +transit,120.87626890548218,14.498398088869656 +transit,120.8851793608358,14.497265740645302 +transit,120.89408972568133,14.49613305434512 +RPLS,120.903,14.49500003 +transit,120.91103367798593,14.493834566218396 +transit,120.91906727200656,14.492668827652633 +transit,120.92710078205005,14.491502814328562 +transit,120.93513420810456,14.490336526272037 +transit,120.94316755015822,14.489169963508923 +transit,120.95120080819922,14.488003126065085 +transit,120.95923398221572,14.486836013966391 +transit,120.96726707219588,14.485668627238729 +transit,120.97530007812792,14.484500965907973 +TP5,120.983333,14.48333303 +transit,120.98888832080638,14.486111193273727 +transit,120.9944437799241,14.488889224610709 +transit,120.99999937737775,14.49166712398139 +transit,121.00555511319187,14.494444891356213 +transit,121.0111109873911,14.497222526705604 +TP6,121.016667,14.50000003 +transit,121.02291618161927,14.504167242662048 +transit,121.02916559692267,14.508334287533266 +transit,121.03541524597964,14.512501164557353 +transit,121.04166512885968,14.516667873678005 +transit,121.04791524563227,14.520834414838916 +transit,121.05416559636687,14.525000787983764 +transit,121.06041618113295,14.529166993056233 +TP7,121.066667,14.53333303 +transit,121.07583018072394,14.533882414209392 +transit,121.08499340670342,14.534431440154327 +transit,121.09415667791092,14.534980107818962 +transit,121.10331999431891,14.535528417187455 +transit,121.11248335589988,14.536076368243979 +transit,121.1216467626263,14.536623960972735 +transit,121.13081021447063,14.537171195357901 +transit,121.13997371140532,14.537718071383694 +transit,121.14913725340284,14.53826458903432 +transit,121.15830084043564,14.538810748294011 +transit,121.16746447247617,14.539356549147001 +transit,121.17662814949685,14.539901991577533 +transit,121.18579187147013,14.540447075569869 +transit,121.19495563836843,14.540991801108271 +transit,121.20411945016417,14.54153616817701 +transit,121.2132833068298,14.542080176760381 +transit,121.2224472083377,14.542623826842673 +transit,121.23161115466029,14.543167118408192 +transit,121.24077514576997,14.543710051441261 +transit,121.24993918163916,14.544252625926195 +transit,121.25910326224022,14.54479484184734 +transit,121.26826738754556,14.545336699189036 +transit,121.27743155752755,14.545878197935643 +transit,121.28659577215859,14.546419338071534 +transit,121.29576003141102,14.54696011958107 +transit,121.30492433525723,14.547500542448649 +transit,121.31408868366958,14.548040606658665 +transit,121.32325307662043,14.548580312195526 +transit,121.33241751408211,14.549119659043642 +transit,121.341581996027,14.549658647187448 +transit,121.35074652242741,14.550197276611378 +transit,121.3599110932557,14.55073554729988 +transit,121.3690757084842,14.551273459237406 +transit,121.37824036808523,14.55181101240843 +transit,121.3874050720311,14.552348206797427 +transit,121.39656982029415,14.552885042388887 +transit,121.40573461284667,14.553421519167301 +transit,121.414899449661,14.553957637117183 +transit,121.42406433070938,14.554493396223052 +transit,121.43322925596416,14.555028796469427 +transit,121.44239422539762,14.555563837840852 +transit,121.45155923898204,14.556098520321877 +transit,121.46072429668969,14.556632843897054 +transit,121.46988939849287,14.557166808550955 +transit,121.47905454436382,14.557700414268163 +transit,121.48821973427482,14.558233661033256 +transit,121.49738496819815,14.558766548830839 +transit,121.50655024610603,14.559299077645516 +transit,121.51571556797074,14.559831247461915 +transit,121.5248809337645,14.560363058264652 +transit,121.53404634345958,14.56089451003838 +transit,121.54321179702818,14.561425602767736 +transit,121.55237729444256,14.561956336437385 +transit,121.56154283567493,14.562486711032001 +transit,121.57070842069751,14.563016726536254 +transit,121.57987404948253,14.563546382934835 +transit,121.58903972200218,14.564075680212447 +transit,121.59820543822867,14.5646046183538 +transit,121.6073711981342,14.565133197343611 +transit,121.61653700169097,14.565661417166611 +transit,121.62570284887119,14.56618927780754 +transit,121.63486873964699,14.566716779251148 +transit,121.64403467399059,14.567243921482198 +transit,121.65320065187416,14.567770704485456 +transit,121.66236667326987,14.568297128245705 +transit,121.67153273814988,14.568823192747736 +transit,121.68069884648634,14.569348897976344 +transit,121.68986499825142,14.569874243916354 +transit,121.69903119341727,14.57039923055257 +transit,121.70819743195602,14.570923857869833 +transit,121.71736371383982,14.571448125852982 +transit,121.72653003904081,14.571972034486867 +transit,121.73569640753111,14.572495583756353 +transit,121.74486281928284,14.57301877364631 +transit,121.75402927426813,14.573541604141617 +transit,121.7631957724591,14.574064075227167 +transit,121.77236231382784,14.574586186887863 +transit,121.78152889834648,14.575107939108621 +transit,121.7906955259871,14.575629331874358 +transit,121.7998621967218,14.57615036517001 +transit,121.80902891052267,14.57667103898051 +transit,121.8181956673618,14.577191353290825 +transit,121.82736246721126,14.577711308085908 +transit,121.83652931004313,14.57823090335073 +transit,121.84569619582949,14.578750139070287 +transit,121.85486312454239,14.579269015229562 +transit,121.8640300961539,14.579787531813555 +transit,121.87319711063607,14.580305688807288 +transit,121.88236416796094,14.580823486195785 +transit,121.89153126810058,14.581340923964072 +transit,121.90069841102701,14.5818580020972 +transit,121.90986559671227,14.582374720580212 +transit,121.9190328251284,14.58289107939819 +transit,121.92820009624741,14.583407078536194 +transit,121.93736741004133,14.583922717979313 +transit,121.94653476648217,14.584437997712644 +transit,121.95570216554196,14.584952917721287 +transit,121.96486960719268,14.585467477990361 +transit,121.97403709140634,14.58598167850499 +transit,121.98320461815494,14.586495519250304 +transit,121.99237218741048,14.58700900021146 +transit,122.00153979914494,14.587522121373604 +transit,122.01070745333028,14.5880348827219 +transit,122.0198751499385,14.588547284241535 +transit,122.02904288894156,14.589059325917686 +transit,122.03821067031143,14.589571007735548 +transit,122.04737849402008,14.590082329680333 +transit,122.05654636003946,14.590593291737255 +transit,122.06571426834152,14.59110389389154 +transit,122.07488221889822,14.591614136128431 +transit,122.08405021168149,14.592124018433163 +transit,122.09321824666326,14.592633540791 +transit,122.10238632381547,14.593142703187215 +transit,122.11155444311005,14.593651505607074 +transit,122.12072260451893,14.594159948035873 +transit,122.12989080801403,14.594668030458902 +transit,122.13905905356724,14.595175752861477 +transit,122.14822734115047,14.595683115228915 +transit,122.15739567073565,14.59619011754654 +transit,122.16656404229467,14.596696759799693 +transit,122.1757324557994,14.59720304197372 +transit,122.18490091122176,14.597708964053986 +transit,122.19406940853362,14.598214526025854 +transit,122.20323794770685,14.598719727874704 +transit,122.21240652871334,14.599224569585928 +transit,122.22157515152496,14.599729051144925 +transit,122.23074381611356,14.600233172537102 +transit,122.23991252245101,14.600736933747877 +transit,122.24908127050917,14.60124033476269 +transit,122.25825006025988,14.60174337556697 +transit,122.26741889167498,14.602246056146171 +transit,122.27658776472633,14.602748376485765 +transit,122.28575667938576,14.6032503365712 +transit,122.29492563562509,14.603751936387978 +transit,122.30409463341616,14.604253175921576 +transit,122.31326367273077,14.604754055157505 +transit,122.32243275354075,14.605254574081268 +transit,122.33160187581792,14.605754732678392 +transit,122.34077103953409,14.60625453093441 +transit,122.34994024466104,14.60675396883486 +transit,122.3591094911706,14.6072530463653 +transit,122.36827877903453,14.607751763511283 +transit,122.37744810822463,14.60825012025839 +transit,122.38661747871268,14.6087481165922 +transit,122.39578689047046,14.609245752498305 +transit,122.40495634346976,14.609743027962317 +transit,122.41412583768232,14.610239942969839 +transit,122.42329537307994,14.610736497506496 +transit,122.43246494963434,14.611232691557927 +transit,122.44163456731731,14.61172852510977 +transit,122.45080422610057,14.61222399814768 +transit,122.45997392595588,14.612719110657332 +transit,122.46914366685498,14.613213862624384 +transit,122.47831344876961,14.613708254034531 +transit,122.4874832716715,14.61420228487347 +transit,122.49665313553236,14.614695955126896 +transit,122.50582304032393,14.615189264780534 +transit,122.51499298601792,14.615682213820106 +transit,122.52416297258604,14.616174802231347 +TP8,122.533333,14.61666703 +transit,122.52556561919452,14.621547870102633 +transit,122.51779789531567,14.626428449327847 +transit,122.51002982824683,14.631308767573683 +transit,122.50226141787151,14.636188824738152 +transit,122.49449266407314,14.641068620719285 +transit,122.48672356673521,14.64594815541507 +transit,122.47895412574117,14.650827428723506 +transit,122.47118434097452,14.65570644054257 +transit,122.46341421231872,14.66058519077024 +transit,122.4556437396573,14.665463679304477 +transit,122.44787292287376,14.670341906043225 +transit,122.44010176185158,14.675219870884417 +transit,122.43233025647429,14.680097573725998 +transit,122.42455840662541,14.684975014465873 +transit,122.41678621218847,14.689852193001954 +transit,122.40901367304701,14.694729109232135 +transit,122.40124078908458,14.699605763054308 +transit,122.39346756018472,14.704482154366342 +transit,122.38569398623098,14.709358283066104 +transit,122.37792006710694,14.714234149051446 +transit,122.37014580269616,14.719109752220218 +transit,122.36237119288224,14.723985092470246 +transit,122.35459623754872,14.728860169699349 +transit,122.34682093657923,14.733734983805347 +transit,122.33904528985737,14.738609534686038 +transit,122.33126929726672,14.743483822239215 +transit,122.32349295869092,14.748357846362651 +transit,122.31571627401357,14.753231606954119 +transit,122.3079392431183,14.758105103911376 +transit,122.30016186588877,14.762978337132163 +transit,122.29238414220859,14.767851306514233 +transit,122.28460607196142,14.772724011955296 +transit,122.27682765503093,14.777596453353075 +transit,122.26904889130076,14.782468630605276 +transit,122.26126978065459,14.787340543609588 +transit,122.25349032297609,14.7922121922637 +transit,122.24571051814895,14.797083576465276 +transit,122.23793036605687,14.801954696111991 +transit,122.23014986658353,14.806825551101488 +transit,122.22236901961266,14.811696141331407 +transit,122.21458782502795,14.816566466699378 +transit,122.20680628271313,14.821436527103023 +transit,122.19902439255192,14.826306322439951 +transit,122.19124215442805,14.831175852607759 +transit,122.18345956822529,14.836045117504034 +transit,122.17567663382735,14.84091411702635 +transit,122.16789335111802,14.845782851072276 +transit,122.16010971998104,14.850651319539361 +transit,122.15232574030018,14.855519522325157 +transit,122.14454141195925,14.860387459327194 +transit,122.136756734842,14.865255130442998 +transit,122.12897170883222,14.870122535570081 +transit,122.12118633381372,14.874989674605935 +transit,122.11340060967032,14.87985654744806 +transit,122.10561453628581,14.884723153993935 +transit,122.09782811354404,14.889589494141026 +transit,122.0900413413288,14.894455567786792 +transit,122.08225421952395,14.899321374828682 +transit,122.07446674801334,14.904186915164132 +transit,122.0666789266808,14.909052188690572 +transit,122.05889075541019,14.91391719530541 +transit,122.05110223408538,14.918781934906056 +transit,122.04331336259025,14.923646407389905 +transit,122.03552414080868,14.928510612654335 +transit,122.02773456862452,14.933374550596724 +transit,122.01994464592171,14.93823822111443 +transit,122.01215437258413,14.943101624104806 +transit,122.0043637484957,14.947964759465188 +transit,121.99657277354034,14.95282762709291 +transit,121.98878144760195,14.95769022688529 +transit,121.98098977056446,14.962552558739631 +transit,121.97319774231184,14.967414622553237 +transit,121.96540536272802,14.97227641822339 +transit,121.95761263169695,14.977137945647371 +transit,121.94981954910257,14.981999204722436 +transit,121.94202611482889,14.986860195345843 +transit,121.93423232875986,14.991720917414838 +transit,121.92643819077946,14.99658137082665 +transit,121.91864370077171,15.001441555478497 +transit,121.91084885862058,15.006301471267596 +transit,121.90305366421008,15.011161118091142 +transit,121.89525811742422,15.016020495846332 +transit,121.88746221814702,15.020879604430334 +transit,121.87966596626254,15.025738443740327 +transit,121.87186936165476,15.030597013673455 +transit,121.86407240420777,15.035455314126871 +transit,121.85627509380559,15.040313344997712 +transit,121.8484774303323,15.0451711061831 +transit,121.84067941367195,15.050028597580143 +transit,121.83288104370862,15.054885819085952 +transit,121.8250823203264,15.05974277059761 +transit,121.81728324340935,15.064599452012208 +transit,121.80948381284159,15.06945586322681 +transit,121.80168402850722,15.074312004138477 +transit,121.79388389029036,15.079167874644254 +transit,121.7860833980751,15.084023474641183 +transit,121.77828255174559,15.088878804026292 +transit,121.77048135118595,15.093733862696592 +transit,121.76267979628034,15.09858865054909 +transit,121.7548778869129,15.10344316748078 +transit,121.74707562296777,15.108297413388643 +transit,121.73927300432914,15.113151388169657 +transit,121.73147003088116,15.118005091720779 +transit,121.72366670250803,15.122858523938962 +transit,121.71586301909392,15.127711684721149 +transit,121.70805898052303,15.132564573964261 +transit,121.70025458667959,15.137417191565222 +transit,121.69244983744775,15.142269537420944 +transit,121.6846447327118,15.147121611428311 +transit,121.67683927235592,15.151973413484216 +transit,121.66903345626434,15.15682494348553 +transit,121.66122728432133,15.161676201329124 +transit,121.65342075641112,15.166527186911841 +transit,121.64561387241798,15.171377900130533 +transit,121.63780663222616,15.176228340882028 +transit,121.62999903571995,15.181078509063143 +transit,121.6221910827836,15.185928404570689 +transit,121.61438277330143,15.190778027301468 +transit,121.60657410715773,15.195627377152261 +transit,121.59876508423677,15.200476454019848 +transit,121.59095570442291,15.205325257800993 +transit,121.58314596760046,15.210173788392458 +transit,121.57533587365371,15.215022045690983 +transit,121.56752542246704,15.219870029593292 +transit,121.55971461392477,15.22471773999612 +transit,121.55190344791124,15.229565176796171 +transit,121.54409192431083,15.23441233989015 +transit,121.5362800430079,15.239259229174742 +transit,121.52846780388683,15.24410584454663 +transit,121.52065520683199,15.248952185902473 +transit,121.51284225172778,15.253798253138939 +transit,121.50502893845858,15.258644046152666 +transit,121.49721526690882,15.263489564840294 +transit,121.4894012369629,15.268334809098441 +transit,121.48158684850526,15.273179778823721 +transit,121.47377210142031,15.278024473912744 +transit,121.46595699559248,15.28286889426209 +transit,121.45814153090625,15.287713039768345 +transit,121.45032570724604,15.292556910328077 +transit,121.44250952449632,15.29740050583784 +transit,121.43469298254158,15.30224382619419 +transit,121.42687608126626,15.307086871293658 +transit,121.41905882055488,15.311929641032771 +transit,121.41124120029193,15.316772135308046 +transit,121.40342322036187,15.321614354015976 +transit,121.39560488064927,15.326456297053063 +transit,121.38778618103862,15.331297964315786 +transit,121.37996712141444,15.336139355700615 +transit,121.37214770166128,15.340980471104006 +transit,121.36432792166367,15.345821310422412 +transit,121.35650778130615,15.350661873552276 +transit,121.3486872804733,15.355502160390012 +transit,121.34086641904968,15.360342170832043 +transit,121.33304519691985,15.365181904774774 +transit,121.32522361396842,15.3700213621146 +transit,121.31740167007995,15.374860542747898 +transit,121.30957936513906,15.379699446571044 +transit,121.30175669903035,15.384538073480398 +transit,121.29393367163843,15.389376423372305 +transit,121.28611028284793,15.39421449614311 +transit,121.27828653254349,15.399052291689138 +transit,121.27046242060972,15.403889809906707 +transit,121.2626379469313,15.408727050692123 +transit,121.25481311139286,15.413564013941675 +transit,121.2469879138791,15.418400699551658 +transit,121.23916235427465,15.423237107418332 +transit,121.2313364324642,15.428073237437966 +transit,121.22351014833248,15.432909089506806 +transit,121.21568350176413,15.437744663521098 +transit,121.20785649264388,15.442579959377069 +transit,121.20002912085647,15.447414976970931 +transit,121.19220138628657,15.452249716198892 +transit,121.18437328881895,15.457084176957158 +transit,121.17654482833832,15.4619183591419 +transit,121.16871600472946,15.466752262649294 +transit,121.16088681787708,15.471585887375513 +transit,121.153057267666,15.476419233216696 +transit,121.14522735398094,15.481252300068983 +transit,121.1373970767067,15.486085087828513 +transit,121.12956643572808,15.490917596391396 +transit,121.12173543092986,15.495749825653744 +transit,121.11390406219684,15.500581775511655 +transit,121.10607232941386,15.505413445861208 +transit,121.09824023246571,15.51024483659848 +transit,121.09040777123724,15.51507594761953 +transit,121.08257494561329,15.51990677882042 +transit,121.0747417554787,15.52473733009718 +transit,121.06690820071832,15.529567601345844 +transit,121.05907428121701,15.534397592462433 +transit,121.05123999685966,15.539227303342948 +transit,121.04340534753115,15.544056733883396 +transit,121.03557033311634,15.548885883979748 +transit,121.02773495350016,15.553714753527995 +transit,121.01989920856751,15.558543342424088 +transit,121.0120630982033,15.563371650563985 +transit,121.00422662229244,15.568199677843625 +transit,120.99638978071987,15.573027424158942 +transit,120.98855257337054,15.577854889405847 +transit,120.9807150001294,15.582682073480255 +transit,120.97287706088137,15.587508976278063 +transit,120.96503875551146,15.592335597695147 +transit,120.95720008390462,15.59716193762739 +transit,120.94936104594584,15.601987995970662 +transit,120.94152164152011,15.606813772620804 +transit,120.93368187051243,15.611639267473658 +transit,120.92584173280781,15.616464480425057 +transit,120.91800122829126,15.621289411370824 +transit,120.91016035684781,15.626114060206762 +transit,120.9023191183625,15.630938426828667 +transit,120.89447751272036,15.635762511132329 +transit,120.88663553980643,15.640586313013518 +transit,120.87879319950581,15.645409832368003 +transit,120.87095049170354,15.650233069091534 +transit,120.8631074162847,15.65505602307985 +transit,120.85526397313437,15.659878694228684 +transit,120.84742016213767,15.664701082433753 +transit,120.83957598317967,15.669523187590764 +transit,120.83173143614549,15.674345009595418 +transit,120.82388652092027,15.679166548343394 +transit,120.81604123738913,15.683987803730375 +transit,120.80819558543719,15.688808775652017 +transit,120.80034956494961,15.69362946400397 +transit,120.79250317581156,15.698449868681891 +transit,120.78465641790818,15.703269989581393 +transit,120.77680929112465,15.708089826598103 +transit,120.76896179534616,15.712909379627623 +transit,120.76111393045788,15.717728648565553 +transit,120.75326569634504,15.72254763330748 +transit,120.74541709289281,15.727366333748977 +transit,120.73756811998645,15.732184749785599 +transit,120.72971877751114,15.737002881312911 +transit,120.72186906535215,15.741820728226447 +transit,120.71401898339471,15.746638290421732 +transit,120.70616853152407,15.75145556779429 +transit,120.69831770962548,15.756272560239628 +transit,120.69046651758426,15.761089267653242 +transit,120.68261495528562,15.765905689930612 +transit,120.67476302261487,15.770721826967218 +transit,120.66691071945732,15.775537678658523 +transit,120.65905804569827,15.780353244899969 +transit,120.65120500122303,15.785168525587002 +transit,120.64335158591693,15.789983520615053 +transit,120.6354977996653,15.794798229879532 +transit,120.62764364235348,15.799612653275858 +transit,120.6197891138668,15.804426790699411 +transit,120.61193421409065,15.809240642045587 +transit,120.60407894291038,15.814054207209752 +transit,120.59622330021138,15.818867486087273 +transit,120.588367285879,15.823680478573497 +transit,120.58051089979868,15.828493184563765 +transit,120.57265414185579,15.8333056039534 +transit,120.56479701193577,15.838117736637717 +transit,120.556939509924,15.842929582512037 +transit,120.54908163570596,15.84774114147164 +transit,120.54122338916706,15.852552413411813 +transit,120.53336477019276,15.857363398227829 +transit,120.5255057786685,15.862174095814947 +transit,120.51764641447977,15.866984506068418 +transit,120.50978667751204,15.871794628883478 +transit,120.50192656765077,15.876604464155356 +transit,120.49406608478148,15.88141401177927 +transit,120.48620522878967,15.886223271650417 +transit,120.47834399956085,15.891032243664 +transit,120.47048239698053,15.895840927715195 +transit,120.46262042093426,15.90064932369917 +transit,120.45475807130757,15.905457431511095 +transit,120.44689534798599,15.910265251046106 +transit,120.43903225085509,15.915072782199351 +transit,120.43116877980046,15.91988002486595 +transit,120.42330493470766,15.924686978941011 +transit,120.41544071546227,15.929493644319649 +transit,120.40757612194987,15.93430002089695 +transit,120.39971115405609,15.939106108567994 +transit,120.39184581166654,15.943911907227859 +transit,120.38398009466682,15.94871741677159 +transit,120.37611400294259,15.953522637094247 +transit,120.36824753637947,15.958327568090855 +transit,120.36038069486312,15.96313220965645 +transit,120.35251347827919,15.96793656168603 +transit,120.34464588651336,15.972740624074607 +transit,120.33677791945131,15.97754439671717 +transit,120.3289095769787,15.982347879508701 +transit,120.32104085898125,15.987151072344163 +transit,120.31317176534466,15.991953975118513 +transit,120.30530229595463,15.9967565877267 +transit,120.29743245069693,16.001558910063654 +transit,120.28956222945723,16.006360942024305 +transit,120.28169163212132,16.01116268350356 +transit,120.27382065857493,16.015964134396313 +transit,120.26594930870382,16.020765294597464 +transit,120.25807758239378,16.025566164001887 +transit,120.25020547953058,16.03036674250444 +RPUG,120.242333,16.03516703 +transit,120.24623823181024,16.027308305816007 +transit,120.25014315779546,16.019449504816514 +transit,120.25404777813486,16.011590627046164 +transit,120.25795209300753,16.003731672549574 +transit,120.26185610259255,15.995872641371351 +transit,120.26575980706895,15.98801353355609 +transit,120.26966320661572,15.980154349148401 +transit,120.2735663014118,15.972295088192846 +transit,120.27746909163608,15.964435750733996 +transit,120.28137157746741,15.956576336816413 +transit,120.28527375908462,15.948716846484638 +transit,120.28917563666643,15.940857279783213 +transit,120.29307721039159,15.93299763675666 +transit,120.29697848043877,15.925137917449488 +transit,120.30087944698658,15.917278121906211 +transit,120.30478011021364,15.909418250171314 +transit,120.30868047029847,15.90155830228928 +transit,120.31258052741956,15.893698278304585 +transit,120.31648028175536,15.885838178261688 +transit,120.3203797334843,15.877978002205033 +transit,120.32427888278474,15.870117750179068 +transit,120.32817772983499,15.862257422228218 +transit,120.33207627481332,15.854397018396904 +transit,120.33597451789798,15.846536538729532 +transit,120.33987245926716,15.83867598327049 +transit,120.34377009909898,15.83081535206418 +transit,120.34766743757156,15.822954645154963 +transit,120.35156447486294,15.815093862587212 +transit,120.35546121115117,15.807233004405274 +transit,120.35935764661417,15.7993720706535 +transit,120.36325378142989,15.791511061376225 +transit,120.36714961577621,15.783649976617763 +transit,120.37104514983096,15.775788816422434 +transit,120.37494038377194,15.767927580834526 +transit,120.3788353177769,15.760066269898346 +transit,120.38272995202355,15.752204883658163 +transit,120.38662428668954,15.744343422158245 +transit,120.39051832195248,15.736481885442863 +transit,120.39441205798998,15.728620273556256 +transit,120.39830549497955,15.720758586542665 +transit,120.40219863309868,15.712896824446311 +transit,120.4060914725248,15.705034987311416 +transit,120.40998401343533,15.697173075182189 +transit,120.41387625600763,15.689311088102823 +transit,120.417768200419,15.681449026117498 +transit,120.42165984684671,15.6735868892704 +transit,120.425551195468,15.665724677605683 +transit,120.42944224646006,15.657862391167502 +TP9,120.433333,15.65000003 +transit,120.43556823903522,15.64149172352093 +transit,120.43780329336165,15.632983387670583 +transit,120.44003816309964,15.624475022467013 +transit,120.44227284836951,15.615966627928293 +transit,120.44450734929154,15.607458204072472 +transit,120.44674166598597,15.59894975091761 +transit,120.44897579857302,15.590441268481753 +transit,120.45120974717285,15.581932756782956 +transit,120.45344351190562,15.57342421583926 +transit,120.45567709289142,15.564915645668703 +transit,120.45791049025034,15.556407046289324 +transit,120.46014370410239,15.547898417719157 +transit,120.46237673456761,15.539389759976224 +transit,120.46460958176594,15.530881073078557 +transit,120.46684224581733,15.522372357044167 +transit,120.46907472684168,15.513863611891091 +transit,120.47130702495885,15.505354837637327 +transit,120.47353914028865,15.496846034300894 +transit,120.47577107295092,15.4883372018998 +transit,120.4780028230654,15.479828340452036 +transit,120.4802343907518,15.471319449975615 +transit,120.48246577612984,15.462810530488522 +transit,120.48469697931918,15.454301582008759 +transit,120.48692800043943,15.445792604554313 +transit,120.4891588396102,15.43728359814316 +transit,120.49138949695102,15.428774562793299 +transit,120.49361997258144,15.420265498522689 +transit,120.49585026662093,15.41175640534931 +transit,120.49808037918895,15.403247283291138 +transit,120.50031031040493,15.394738132366136 +transit,120.50254006038826,15.386228952592264 +transit,120.50476962925826,15.377719743987488 +transit,120.50699901713428,15.369210506569756 +transit,120.5092282241356,15.360701240357029 +transit,120.51145725038145,15.352191945367249 +transit,120.51368609599108,15.343682621618361 +transit,120.51591476108365,15.335173269128315 +transit,120.5181432457783,15.32666388791504 +transit,120.52037155019418,15.318154477996474 +transit,120.52259967445035,15.309645039390544 +transit,120.52482761866585,15.301135572115179 +transit,120.5270553829597,15.292626076188302 +transit,120.5292829674509,15.284116551627838 +transit,120.53151037225837,15.275606998451693 +transit,120.53373759750103,15.267097416677787 +transit,120.53596464329776,15.258587806324032 +transit,120.5381915097674,15.250078167408322 +transit,120.54041819702879,15.241568499948567 +transit,120.54264470520067,15.233058803962667 +transit,120.54487103440181,15.224549079468511 +transit,120.54709718475091,15.216039326483996 +transit,120.54932315636665,15.207529545027002 +transit,120.55154894936767,15.199019735115417 +transit,120.55377456387261,15.19050989676712 +RPLC,120.556,15.18200003 +transit,120.56232759211345,15.175791398462003 +transit,120.568654814593,15.169582585856645 +transit,120.5749816676081,15.16337359227141 +transit,120.58130815132822,15.157164417793794 +transit,120.5876342659228,15.150955062511267 +transit,120.59396001156126,15.14474552651128 +transit,120.60028538841301,15.138535809881272 +transit,120.60661039664744,15.132325912708675 +transit,120.61293503643391,15.126115835080892 +transit,120.6192593079418,15.11990557708532 +transit,120.62558321134041,15.113695138809339 +transit,120.63190674679909,15.107484520340309 +transit,120.63822991448711,15.10127372176558 +transit,120.64455271457378,15.095062743172493 +transit,120.65087514722836,15.088851584648351 +transit,120.65719721262009,15.082640246280466 +transit,120.6635189109182,15.076428728156124 +transit,120.66984024229191,15.070217030362606 +transit,120.67616120691042,15.064005152987152 +transit,120.6824818049429,15.057793096117013 +transit,120.68880203655851,15.051580859839419 +transit,120.6951219019264,15.045368444241577 +transit,120.70144140121567,15.03915584941069 +transit,120.70776053459548,15.03294307543393 +transit,120.71407930223488,15.026730122398469 +transit,120.72039770430295,15.020516990391458 +transit,120.72671574096876,15.014303679500028 +transit,120.73303341240134,15.008090189811307 +transit,120.7393507187697,15.001876521412399 +transit,120.74566766024286,14.99566267439039 +transit,120.75198423698978,14.989448648832358 +transit,120.75830044917947,14.983234444825364 +transit,120.76461629698086,14.977020062456457 +transit,120.77093178056288,14.970805501812661 +transit,120.77724690009445,14.964590762980993 +transit,120.78356165574446,14.958375846048451 +transit,120.78987604768182,14.95216075110203 +transit,120.79619007607536,14.94594547822869 +transit,120.80250374109394,14.939730027515386 +transit,120.8088170429064,14.933514399049061 +transit,120.81512998168154,14.927298592916644 +transit,120.82144255758816,14.921082609205031 +transit,120.82775477079502,14.914866448001135 +transit,120.83406662147091,14.908650109391827 +transit,120.84037810978455,14.90243359346397 +transit,120.84668923590468,14.896216900304411 +RPUX,120.853,14.89000003 +transit,120.85979782446294,14.884600564854255 +transit,120.86659531051718,14.879200895697487 +transit,120.87339245829533,14.873801022616716 +transit,120.88018926793,14.868400945698953 +transit,120.88698573955382,14.863000665031208 +transit,120.89378187329942,14.857600180700459 +transit,120.90057766929938,14.852199492793686 +transit,120.90737312768633,14.846798601397856 +transit,120.91416824859287,14.841397506599918 +transit,120.92096303215158,14.835996208486819 +transit,120.92775747849507,14.830594707145481 +transit,120.9345515877559,14.825193002662823 +transit,120.94134536006668,14.819791095125751 +transit,120.94813879555998,14.814388984621152 +transit,120.95493189436837,14.808986671235916 +transit,120.96172465662443,14.803584155056903 +transit,120.96851708246069,14.798181436170978 +transit,120.97530917200974,14.792778514664978 +transit,120.98210092540413,14.78737539062574 +transit,120.9888923427764,14.781972064140092 +transit,120.9956834242591,14.776568535294828 +transit,121.00247416998477,14.771164804176754 +transit,121.00926458008594,14.765760870872654 +transit,121.01605465469515,14.760356735469305 +transit,121.02284439394494,14.754952398053465 +transit,121.02963379796779,14.749547858711882 +transit,121.03642286689625,14.744143117531296 +transit,121.0432116008628,14.738738174598431 +TP1,121.05,14.73333303 +transit,121.051095723919,14.72546409823825 +transit,121.05219136923515,14.717595155954921 +transit,121.05328693599787,14.709726203155862 +transit,121.05438242425664,14.701857239846916 +transit,121.05547783406094,14.693988266033939 +transit,121.05657316546016,14.686119281722771 +transit,121.05766841850375,14.678250286919257 +transit,121.05876359324112,14.670381281629242 +transit,121.05985868972166,14.662512265858577 +transit,121.06095370799477,14.654643239613106 +transit,121.0620486481098,14.646774202898664 +transit,121.0631435101161,14.63890515572111 +transit,121.06423829406307,14.631036098086266 +MAO1,121.065333,14.62316703 +transit,121.06905300826244,14.614962521959232 +transit,121.07277274046876,14.606757948816796 +transit,121.07649219679926,14.598553310614683 +transit,121.08021137743422,14.590348607394908 +transit,121.08393028255385,14.582143839199444 +transit,121.08764891233832,14.573939006070276 +transit,121.09136726696777,14.56573410804936 +transit,121.09508534662227,14.557529145178671 +transit,121.09880315148189,14.549324117500145 +transit,121.1025206817266,14.54111902505572 +transit,121.10623793753639,14.532913867887324 +transit,121.10995491909114,14.524708646036885 +transit,121.11367162657073,14.516503359546299 +transit,121.117388060155,14.50829800845748 +transit,121.1211042200237,14.500092592812312 +transit,121.12482010635657,14.491887112652678 +transit,121.12853571933333,14.483681568020451 +transit,121.13225105913361,14.47547595895749 +transit,121.13596612593702,14.467270285505647 +transit,121.13968091992312,14.459064547706769 +transit,121.14339544127142,14.45085874560269 +transit,121.14710969016143,14.442652879235222 +transit,121.15082366677254,14.434446948646196 +transit,121.15453737128415,14.42624095387741 +transit,121.1582508038756,14.418034894970662 +transit,121.16196396472623,14.40982877196773 +transit,121.16567685401523,14.401622584910404 +transit,121.16938947192187,14.393416333840443 +transit,121.1731018186253,14.385210018799611 +transit,121.17681389430464,14.377003639829647 +transit,121.18052569913901,14.368797196972299 +transit,121.1842372333074,14.360590690269289 +transit,121.18794849698884,14.352384119762348 +transit,121.19165949036228,14.344177485493182 +transit,121.19537021360664,14.335970787503486 +transit,121.19908066690076,14.327764025834961 +transit,121.2027908504235,14.319557200529285 +transit,121.2065007643536,14.311350311628132 +transit,121.21021040886986,14.30314335917317 +transit,121.21391978415093,14.294936343206047 +transit,121.21762889037547,14.286729263768416 +transit,121.2213377277221,14.278522120901911 +transit,121.22504629636938,14.270314914648154 +transit,121.22875459649586,14.262107645048763 +transit,121.23246262827999,14.253900312145355 +transit,121.23617039190022,14.245692915979518 +transit,121.23987788753494,14.237485456592848 +transit,121.24358511536252,14.229277934026925 +transit,121.24729207556128,14.221070348323318 +transit,121.25099876830944,14.212862699523585 +transit,121.25470519378528,14.204654987669288 +transit,121.25841135216696,14.196447212801964 +transit,121.26211724363262,14.18823937496314 +transit,121.26582286836036,14.180031474194358 +transit,121.26952822652824,14.171823510537116 +transit,121.27323331831425,14.163615484032935 +transit,121.2769381438964,14.155407394723298 +transit,121.2806427034526,14.147199242649702 +transit,121.28434699716074,14.138991027853624 +transit,121.28805102519864,14.130782750376532 +transit,121.29175478774414,14.122574410259885 +transit,121.29545828497497,14.114366007545135 +transit,121.29916151706885,14.106157542273722 +transit,121.30286448420348,14.097949014487085 +transit,121.30656718655646,14.08974042422664 +transit,121.3102696243054,14.081531771533802 +transit,121.31397179762784,14.073323056449986 +transit,121.3176737067013,14.065114279016573 +transit,121.32137535170321,14.05690543927496 +transit,121.32507673281104,14.048696537266515 +transit,121.32877785020213,14.04048757303262 +transit,121.33247870405384,14.032278546614624 +transit,121.33617929454346,14.02406945805388 +transit,121.33987962184824,14.015860307391733 +transit,121.34357968614539,14.00765109466951 +transit,121.3472794876121,13.999441819928538 +transit,121.35097902642548,13.991232483210126 +transit,121.35467830276262,13.983023084555578 +transit,121.35837731680057,13.9748136240062 +transit,121.36207606871633,13.966604101603268 +transit,121.36577455868688,13.958394517388063 +transit,121.3694727868891,13.950184871401857 +transit,121.3731707534999,13.941975163685907 +transit,121.37686845869612,13.93376539428146 +transit,121.38056590265454,13.92555556322976 +transit,121.38426308555191,13.917345670572047 +transit,121.38796000756496,13.909135716349532 +transit,121.39165666887034,13.900925700603437 +transit,121.3953530696447,13.892715623374963 +transit,121.39904921006462,13.884505484705315 +transit,121.40274509030664,13.876295284635663 +transit,121.40644071054727,13.868085023207206 +transit,121.41013607096298,13.859874700461098 +transit,121.41383117173018,13.851664316438512 +transit,121.41752601302527,13.84345387118059 +transit,121.42122059502456,13.835243364728482 +transit,121.42491491790439,13.827032797123316 +transit,121.428608981841,13.818822168406216 +transit,121.43230278701058,13.810611478618304 +transit,121.43599633358934,13.802400727800679 +transit,121.43968962175342,13.794189915994446 +transit,121.44338265167887,13.78597904324069 +transit,121.44707542354179,13.777768109580496 +transit,121.45076793751815,13.769557115054928 +transit,121.45446019378396,13.76134605970505 +transit,121.45815219251513,13.753134943571922 +transit,121.46184393388755,13.744923766696585 +transit,121.46553541807705,13.736712529120073 +transit,121.46922664525948,13.728501230883413 +transit,121.47291761561057,13.720289872027625 +transit,121.47660832930606,13.712078452593715 +transit,121.48029878652163,13.703866972622688 +transit,121.48398898743292,13.695655432155535 +transit,121.48767893221556,13.687443831233237 +transit,121.49136862104507,13.679232169896766 +transit,121.495058054097,13.67102044818709 +transit,121.49874723154684,13.662808666145162 +transit,121.50243615357,13.654596823811936 +transit,121.50612482034191,13.646384921228343 +transit,121.50981323203793,13.638172958435316 +transit,121.51350138883335,13.629960935473784 +transit,121.51718929090346,13.621748852384647 +transit,121.52087693842353,13.613536709208814 +transit,121.52456433156871,13.60532450598718 +transit,121.5282514705142,13.597112242760629 +transit,121.5319383554351,13.588899919570041 +transit,121.53562498650648,13.580687536456287 +transit,121.5393113639034,13.572475093460218 +transit,121.54299748780082,13.564262590622697 +transit,121.54668335837373,13.55605002798456 +transit,121.55036897579704,13.547837405586638 +transit,121.55405434024563,13.539624723469759 +transit,121.5577394518943,13.531411981674745 +transit,121.56142431091791,13.523199180242393 +transit,121.56510891749117,13.514986319213511 +transit,121.5687932717888,13.506773398628885 +transit,121.5724773739855,13.498560418529294 +transit,121.57616122425588,13.490347378955521 +transit,121.57984482277456,13.482134279948319 +transit,121.58352816971609,13.47392112154845 +transit,121.58721126525498,13.46570790379666 +transit,121.5908941095657,13.457494626733688 +transit,121.59457670282269,13.449281290400265 +transit,121.59825904520038,13.44106789483711 +transit,121.60194113687308,13.432854440084938 +transit,121.60562297801513,13.424640926184447 +transit,121.60930456880082,13.416427353176337 +transit,121.61298590940439,13.408213721101292 +TP2,121.616667,13.40000003 +transit,121.60885689895416,13.404682816452143 +transit,121.60104649558956,13.409365359547875 +transit,121.59323578980056,13.414047659190004 +transit,121.58542478148156,13.418729715281337 +transit,121.57761347052694,13.423411527724678 +transit,121.56980185683109,13.42809309642281 +transit,121.56198994028843,13.43277442127851 +transit,121.55417772079338,13.437455502194558 +transit,121.54636519824032,13.442136339073716 +transit,121.53855237252374,13.446816931818734 +transit,121.53073924353802,13.451497280332362 +transit,121.52292581117764,13.456177384517337 +transit,121.51511207533704,13.460857244276388 +transit,121.50729803591068,13.465536859512236 +transit,121.49948369279302,13.470216230127596 +transit,121.49166904587854,13.474895356025165 +transit,121.48385409506173,13.479574237107645 +transit,121.47603884023708,13.484252873277716 +transit,121.46822328129907,13.488931264438063 +transit,121.46040741814224,13.493609410491347 +transit,121.45259125066107,13.498287311340237 +transit,121.4447747787501,13.502964966887383 +transit,121.43695800230387,13.507642377035422 +transit,121.42914092121687,13.512319541687 +transit,121.4213235353837,13.516996460744734 +transit,121.41350584469889,13.52167313411125 +transit,121.40568784905699,13.526349561689152 +transit,121.39786954835259,13.531025743381038 +transit,121.39005094248026,13.53570167908951 +transit,121.38223203133457,13.540377368717143 +transit,121.37441281481013,13.545052812166515 +transit,121.36659329280154,13.549728009340194 +transit,121.35877346520338,13.554402960140738 +transit,121.3509533319103,13.559077664470694 +transit,121.34313289281691,13.563752122232604 +transit,121.33531214781786,13.568426333328995 +transit,121.32749109680775,13.573100297662402 +transit,121.31966973968126,13.577774015135331 +transit,121.31184807633304,13.582447485650288 +transit,121.30402610665773,13.587120709109774 +transit,121.29620383055004,13.59179368541628 +transit,121.28838124790461,13.59646641447228 +transit,121.28055835861616,13.601138896180252 +transit,121.27273516257937,13.605811130442659 +transit,121.26491165968893,13.610483117161953 +transit,121.25708784983958,13.61515485624058 +transit,121.24926373292602,13.619826347580977 +transit,121.24143930884298,13.624497591085575 +transit,121.2336145774852,13.629168586656796 +transit,121.22578953874742,13.633839334197045 +transit,121.21796419252439,13.638509833608733 +transit,121.21013853871086,13.643180084794247 +transit,121.20231257720162,13.647850087655979 +transit,121.19448630789142,13.6525198420963 +transit,121.18665973067506,13.657189348017583 +transit,121.17883284544733,13.661858605322186 +transit,121.17100565210302,13.666527613912464 +transit,121.16317815053694,13.671196373690751 +transit,121.1553503406439,13.675864884559388 +transit,121.14752222231874,13.680533146420702 +transit,121.13969379545628,13.685201159177 +transit,121.13186505995137,13.6898689227306 +transit,121.12403601569883,13.694536436983796 +transit,121.11620666259356,13.69920370183888 +transit,121.10837700053037,13.703870717198136 +transit,121.10054702940418,13.70853748296383 +transit,121.09271674910985,13.713203999038237 +transit,121.08488615954226,13.717870265323603 +transit,121.07705526059632,13.722536281722183 +transit,121.06922405216693,13.727202048136217 +transit,121.06139253414901,13.731867564467928 +transit,121.05356070643747,13.736532830619538 +transit,121.04572856892723,13.741197846493264 +transit,121.03789612151326,13.745862611991306 +transit,121.03006336409047,13.750527127015868 +transit,121.02223029655383,13.755191391469129 +transit,121.0143969187983,13.759855405253267 +transit,121.00656323071884,13.764519168270452 +transit,120.99872923221045,13.769182680422844 +transit,120.9908949231681,13.7738459416126 +transit,120.9830603034868,13.778508951741857 +transit,120.97522537306153,13.783171710712756 +transit,120.96739013178733,13.787834218427415 +transit,120.95955457955918,13.792496474787962 +transit,120.95171871627214,13.79715847969649 +transit,120.94388254182124,13.801820233055116 +transit,120.93604605610152,13.806481734765917 +transit,120.92820925900803,13.811142984730987 +transit,120.92037215043582,13.815803982852387 +transit,120.91253473027999,13.820464729032192 +transit,120.9046969984356,13.82512522317246 +transit,120.89685895479772,13.829785465175233 +transit,120.88902059926147,13.83444545494255 +transit,120.88118193172193,13.839105192376438 +transit,120.87334295207422,13.843764677378928 +transit,120.86550366021348,13.848423909852029 +transit,120.8576640560348,13.85308288969774 +transit,120.84982413943335,13.85774161681806 +transit,120.84198391030425,13.862400091114976 +transit,120.83414336854266,13.867058312490467 +transit,120.82630251404373,13.871716280846499 +transit,120.81846134670265,13.876373996085038 +transit,120.81061986641458,13.88103145810803 +transit,120.80277807307472,13.885688666817417 +transit,120.79493596657825,13.89034562211514 +transit,120.78709354682039,13.895002323903118 +transit,120.77925081369634,13.89965877208327 +transit,120.77140776710131,13.904314966557509 +transit,120.76356440693054,13.908970907227724 +transit,120.75572073307927,13.913626593995817 +transit,120.74787674544274,13.918282026763661 +transit,120.7400324439162,13.922937205433131 +transit,120.73218782839493,13.927592129906097 +transit,120.72434289877417,13.932246800084409 +transit,120.71649765494922,13.936901215869911 +transit,120.70865209681536,13.941555377164446 +transit,120.7008062242679,13.946209283869846 +transit,120.69296003720211,13.95086293588793 +transit,120.68511353551334,13.955516333120501 +transit,120.67726671909688,13.960169475469373 +transit,120.6694195878481,13.964822362836333 +transit,120.66157214166229,13.969474995123171 +transit,120.65372438043484,13.974127372231665 +transit,120.64587630406108,13.978779494063577 +transit,120.63802791243637,13.98343136052067 +transit,120.6301792054561,13.988082971504696 +transit,120.62233018301566,13.992734326917393 +transit,120.6144808450104,13.997385426660493 +transit,120.60663119133577,14.002036270635728 +transit,120.59878122188714,14.006686858744802 +transit,120.59093093655993,14.01133719088943 +transit,120.58308033524956,14.015987266971308 +transit,120.57522941785149,14.02063708689212 +transit,120.56737818426113,14.025286650553555 +transit,120.55952663437395,14.029935957857278 +transit,120.5516747680854,14.034585008704955 +transit,120.54382258529097,14.039233802998234 +transit,120.5359700858861,14.043882340638765 +transit,120.52811726976628,14.048530621528187 +transit,120.52026413682704,14.053178645568119 +transit,120.51241068696383,14.057826412660184 +transit,120.50455692007222,14.062473922705996 +transit,120.49670283604766,14.067121175607145 +transit,120.48884843478574,14.071768171265235 +transit,120.48099371618197,14.076414909581842 +transit,120.47313868013188,14.081061390458546 +transit,120.46528332653106,14.085707613796908 +transit,120.45742765527504,14.090353579498489 +transit,120.44957166625943,14.09499928746483 +transit,120.44171535937977,14.099644737597474 +transit,120.43385873453167,14.10428992979796 +transit,120.42600179161073,14.108934863967795 +transit,120.41814453051254,14.113579540008503 +transit,120.41028695113273,14.11822395782158 +transit,120.40242905336693,14.12286811730853 +transit,120.39457083711076,14.127512018370826 +transit,120.38671230225987,14.132155660909964 +transit,120.3788534487099,14.136799044827397 +transit,120.37099427635653,14.141442170024593 +transit,120.36313478509541,14.146085036402994 +transit,120.35527497482222,14.150727643864053 +transit,120.34741484543267,14.155369992309202 +transit,120.33955439682241,14.160012081639858 +transit,120.33169362888718,14.164653911757439 +transit,120.32383254152268,14.169295482563356 +transit,120.31597113462463,14.173936793959003 +transit,120.30810940808878,14.178577845845775 +transit,120.30024736181085,14.183218638125043 +transit,120.29238499568658,14.187859170698184 +transit,120.28452230961175,14.19249944346656 +transit,120.2766593034821,14.197139456331524 +transit,120.26879597719343,14.20177920919442 +transit,120.26093233064152,14.206418701956586 +transit,120.25306836372216,14.21105793451935 +transit,120.24520407633115,14.215696906784025 +transit,120.2373394683643,14.220335618651925 +transit,120.22947453971743,14.224974070024347 +transit,120.22160929028637,14.229612260802586 +transit,120.21374371996696,14.234250190887922 +transit,120.20587782865503,14.23888786018163 +transit,120.19801161624646,14.243525268584978 +transit,120.19014508263712,14.248162415999214 +transit,120.18227822772285,14.252799302325593 +transit,120.17441105139956,14.25743592746535 +transit,120.16654355356313,14.262072291319715 +transit,120.15867573410947,14.26670839378991 +transit,120.15080759293448,14.271344234777144 +transit,120.14293912993409,14.275979814182621 +transit,120.13507034500422,14.280615131907531 +transit,120.12720123804081,14.28525018785307 +transit,120.1193318089398,14.2898849819204 +transit,120.11146205759717,14.294519514010698 +transit,120.10359198390884,14.299153784025119 +transit,120.09572158777083,14.303787791864814 +transit,120.08785086907909,14.308421537430918 +transit,120.07997982772963,14.313055020624567 +transit,120.07210846361845,14.317688241346882 +transit,120.06423677664154,14.322321199498983 +transit,120.05636476669494,14.326953894981964 +transit,120.04849243367467,14.331586327696932 +transit,120.04061977747678,14.336218497544966 +transit,120.0327467979973,14.34085040442715 +transit,120.02487349513228,14.345482048244548 +transit,120.01699986877782,14.350113428898224 +transit,120.00912591882997,14.354744546289226 +transit,120.0012516451848,14.359375400318594 +transit,119.99337704773842,14.364005990887367 +transit,119.98550212638693,14.368636317896572 +transit,119.97762688102645,14.373266381247218 +transit,119.96975131155308,14.377896180840319 +transit,119.96187541786297,14.382525716576863 +transit,119.95399919985225,14.387154988357846 +transit,119.94612265741705,14.391783996084245 +transit,119.93824579045356,14.396412739657029 +transit,119.93036859885792,14.401041218977165 +transit,119.92249108252634,14.405669433945606 +transit,119.91461324135496,14.410297384463295 +transit,119.90673507524,14.414925070431163 +transit,119.89885658407766,14.419552491750142 +transit,119.89097776776416,14.424179648321147 +transit,119.88309862619572,14.428806540045086 +transit,119.87521915926855,14.433433166822855 +transit,119.86733936687892,14.438059528555351 +transit,119.85945924892306,14.442685625143456 +transit,119.85157880529725,14.447311456488034 +transit,119.84369803589775,14.451937022489954 +transit,119.83581694062082,14.456562323050072 +transit,119.82793551936278,14.461187358069234 +transit,119.8200537720199,14.465812127448268 +transit,119.8121716984885,14.470436631088013 +transit,119.8042892986649,14.475060868889285 +transit,119.79640657244542,14.479684840752888 +transit,119.78852351972638,14.484308546579626 +transit,119.78064014040415,14.488931986270298 +transit,119.77275643437507,14.493555159725679 +transit,119.76487240153551,14.498178066846538 +transit,119.75698804178184,14.502800707533652 +transit,119.74910335501042,14.507423081687769 +transit,119.74121834111769,14.512045189209637 +TP3,119.733333,14.51666703 +transit,119.74245511347887,14.516859138136162 +transit,119.75157724268301,14.517050891614721 +transit,119.76069938758363,14.517242290430186 +transit,119.7698215481519,14.517433334577088 +transit,119.778943724359,14.517624024049958 +transit,119.78806591617612,14.517814358843355 +transit,119.79718812357443,14.518004338951831 +transit,119.80631034652511,14.518193964369956 +transit,119.81543258499933,14.518383235092298 +transit,119.82455483896827,14.518572151113457 +transit,119.8336771084031,14.518760712428026 +transit,119.84279939327499,14.51894891903061 +transit,119.8519216935551,14.519136770915836 +transit,119.8610440092146,14.519324268078323 +transit,119.87016634022466,14.519511410512713 +transit,119.87928868655644,14.519698198213655 +transit,119.8884110481811,14.519884631175808 +transit,119.8975334250698,14.520070709393838 +transit,119.90665581719368,14.52025643286243 +transit,119.91577822452392,14.520441801576267 +transit,119.92490064703168,14.52062681553005 +transit,119.93402308468808,14.520811474718489 +transit,119.94314553746429,14.520995779136301 +transit,119.95226800533146,14.521179728778218 +transit,119.96139048826073,14.521363323638978 +transit,119.97051298622326,14.521546563713331 +transit,119.97963549919015,14.52172944899604 +transit,119.9887580271326,14.52191197948187 +transit,119.99788057002172,14.522094155165606 +transit,120.00700312782864,14.522275976042032 +transit,120.01612570052451,14.522457442105951 +transit,120.02524828808046,14.522638553352174 +transit,120.03437089046764,14.52281930977552 +transit,120.04349350765715,14.522999711370826 +transit,120.05261613962014,14.523179758132923 +transit,120.06173878632774,14.52335945005667 +transit,120.07086144775107,14.523538787136921 +transit,120.07998412386125,14.523717769368552 +transit,120.0891068146294,14.523896396746444 +transit,120.09822952002666,14.524074669265486 +transit,120.10735224002414,14.524252586920579 +transit,120.11647497459296,14.524430149706639 +transit,120.12559772370423,14.524607357618583 +transit,120.13472048732906,14.524784210651344 +transit,120.14384326543858,14.524960708799867 +transit,120.15296605800388,14.525136852059099 +transit,120.1620888649961,14.525312640424003 +transit,120.17121168638631,14.525488073889557 +transit,120.18033452214566,14.525663152450734 +transit,120.1894573722452,14.525837876102537 +transit,120.19858023665608,14.526012244839965 +transit,120.20770311534939,14.526186258658022 +transit,120.21682600829621,14.526359917551739 +transit,120.22594891546765,14.526533221516154 +transit,120.23507183683482,14.5267061705463 +transit,120.2441947723688,14.526878764637232 +transit,120.25331772204069,14.527051003784026 +transit,120.26244068582157,14.52722288798174 +transit,120.27156366368254,14.527394417225459 +transit,120.28068665559469,14.527565591510283 +transit,120.2898096615291,14.527736410831311 +transit,120.29893268145686,14.527906875183666 +transit,120.30805571534906,14.528076984562459 +transit,120.31717876317676,14.528246738962837 +transit,120.32630182491106,14.528416138379937 +transit,120.33542490052302,14.528585182808916 +transit,120.34454798998375,14.528753872244932 +transit,120.3536710932643,14.52892220668317 +transit,120.36279421033575,14.529090186118813 +transit,120.37191734116917,14.529257810547046 +transit,120.38104048573562,14.529425079963088 +transit,120.3901636440062,14.529591994362148 +transit,120.39928681595194,14.529758553739445 +transit,120.40841000154394,14.529924758090225 +transit,120.41753320075324,14.530090607409731 +transit,120.42665641355092,14.530256101693213 +transit,120.43577963990803,14.530421240935938 +transit,120.44490287979563,14.530586025133196 +transit,120.4540261331848,14.530750454280257 +transit,120.46314940004656,14.53091452837242 +transit,120.47227268035199,14.531078247404999 +transit,120.48139597407214,14.531241611373302 +transit,120.49051928117807,14.531404620272665 +transit,120.4996426016408,14.531567274098414 +transit,120.50876593543141,14.531729572845906 +transit,120.51788928252093,14.53189151651049 +transit,120.52701264288042,14.532053105087536 +transit,120.53613601648091,14.532214338572425 +transit,120.54525940329346,14.532375216960544 +transit,120.5543828032891,14.532535740247281 +transit,120.56350621643887,14.532695908428057 +transit,120.5726296427138,14.532855721498283 +transit,120.58175308208494,14.53301517945339 +transit,120.59087653452333,14.53317428228881 +TP4,120.6,14.53333303 +transit,120.60891325177454,14.532211177408374 +transit,120.61782641362562,14.531088985787047 +transit,120.62673948553424,14.529966455166676 +transit,120.6356524674814,14.528843585577919 +transit,120.64456535944814,14.527720377051432 +transit,120.65347816141545,14.526596829617894 +transit,120.66239087336437,14.525472943307976 +transit,120.67130349527596,14.524348718152378 +transit,120.68021602713127,14.52322415418179 +transit,120.68912846891136,14.522099251426917 +transit,120.6980408205973,14.520974009918476 +transit,120.70695308217019,14.519848429687181 +transit,120.71586525361108,14.51872251076377 +transit,120.72477733490112,14.517596253178972 +transit,120.73368932602139,14.51646965696354 +transit,120.74260122695303,14.515342722148226 +transit,120.75151303767716,14.514215448763785 +transit,120.7604247581749,14.513087836840993 +transit,120.76933638842745,14.511959886410628 +transit,120.77824792841592,14.510831597503469 +transit,120.7871593781215,14.509702970150322 +transit,120.79607073752537,14.508574004381979 +transit,120.80498200660871,14.507444700229257 +transit,120.81389318535273,14.506315057722974 +transit,120.82280427373861,14.50518507689395 +transit,120.8317152717476,14.504054757773021 +transit,120.84062617936091,14.502924100391041 +transit,120.84953699655976,14.501793104778846 +transit,120.85844772332543,14.500661770967307 +transit,120.86735835963914,14.499530098987284 +transit,120.87626890548218,14.498398088869656 +transit,120.8851793608358,14.497265740645302 +transit,120.89408972568133,14.49613305434512 +RPLS,120.903,14.49500003 +transit,120.91103367798593,14.493834566218396 +transit,120.91906727200656,14.492668827652633 +transit,120.92710078205005,14.491502814328562 +transit,120.93513420810456,14.490336526272037 +transit,120.94316755015822,14.489169963508923 +transit,120.95120080819922,14.488003126065085 +transit,120.95923398221572,14.486836013966391 +transit,120.96726707219588,14.485668627238729 +transit,120.97530007812792,14.484500965907973 +TP5,120.983333,14.48333303 +transit,120.98888832080638,14.486111193273727 +transit,120.9944437799241,14.488889224610709 +transit,120.99999937737775,14.49166712398139 +transit,121.00555511319187,14.494444891356213 +transit,121.0111109873911,14.497222526705604 +TP6,121.016667,14.50000003 +transit,121.02291618161927,14.504167242662048 +transit,121.02916559692267,14.508334287533266 +transit,121.03541524597964,14.512501164557353 +transit,121.04166512885968,14.516667873678005 +transit,121.04791524563227,14.520834414838916 +transit,121.05416559636687,14.525000787983764 +transit,121.06041618113295,14.529166993056233 +TP7,121.066667,14.53333303 +transit,121.07583018072394,14.533882414209392 +transit,121.08499340670342,14.534431440154327 +transit,121.09415667791092,14.534980107818962 +transit,121.10331999431891,14.535528417187455 +transit,121.11248335589988,14.536076368243979 +transit,121.1216467626263,14.536623960972735 +transit,121.13081021447063,14.537171195357901 +transit,121.13997371140532,14.537718071383694 +transit,121.14913725340284,14.53826458903432 +transit,121.15830084043564,14.538810748294011 +transit,121.16746447247617,14.539356549147001 +transit,121.17662814949685,14.539901991577533 +transit,121.18579187147013,14.540447075569869 +transit,121.19495563836843,14.540991801108271 +transit,121.20411945016417,14.54153616817701 +transit,121.2132833068298,14.542080176760381 +transit,121.2224472083377,14.542623826842673 +transit,121.23161115466029,14.543167118408192 +transit,121.24077514576997,14.543710051441261 +transit,121.24993918163916,14.544252625926195 +transit,121.25910326224022,14.54479484184734 +transit,121.26826738754556,14.545336699189036 +transit,121.27743155752755,14.545878197935643 +transit,121.28659577215859,14.546419338071534 +transit,121.29576003141102,14.54696011958107 +transit,121.30492433525723,14.547500542448649 +transit,121.31408868366958,14.548040606658665 +transit,121.32325307662043,14.548580312195526 +transit,121.33241751408211,14.549119659043642 +transit,121.341581996027,14.549658647187448 +transit,121.35074652242741,14.550197276611378 +transit,121.3599110932557,14.55073554729988 +transit,121.3690757084842,14.551273459237406 +transit,121.37824036808523,14.55181101240843 +transit,121.3874050720311,14.552348206797427 +transit,121.39656982029415,14.552885042388887 +transit,121.40573461284667,14.553421519167301 +transit,121.414899449661,14.553957637117183 +transit,121.42406433070938,14.554493396223052 +transit,121.43322925596416,14.555028796469427 +transit,121.44239422539762,14.555563837840852 +transit,121.45155923898204,14.556098520321877 +transit,121.46072429668969,14.556632843897054 +transit,121.46988939849287,14.557166808550955 +transit,121.47905454436382,14.557700414268163 +transit,121.48821973427482,14.558233661033256 +transit,121.49738496819815,14.558766548830839 +transit,121.50655024610603,14.559299077645516 +transit,121.51571556797074,14.559831247461915 +transit,121.5248809337645,14.560363058264652 +transit,121.53404634345958,14.56089451003838 +transit,121.54321179702818,14.561425602767736 +transit,121.55237729444256,14.561956336437385 +transit,121.56154283567493,14.562486711032001 +transit,121.57070842069751,14.563016726536254 +transit,121.57987404948253,14.563546382934835 +transit,121.58903972200218,14.564075680212447 +transit,121.59820543822867,14.5646046183538 +transit,121.6073711981342,14.565133197343611 +transit,121.61653700169097,14.565661417166611 +transit,121.62570284887119,14.56618927780754 +transit,121.63486873964699,14.566716779251148 +transit,121.64403467399059,14.567243921482198 +transit,121.65320065187416,14.567770704485456 +transit,121.66236667326987,14.568297128245705 +transit,121.67153273814988,14.568823192747736 +transit,121.68069884648634,14.569348897976344 +transit,121.68986499825142,14.569874243916354 +transit,121.69903119341727,14.57039923055257 +transit,121.70819743195602,14.570923857869833 +transit,121.71736371383982,14.571448125852982 +transit,121.72653003904081,14.571972034486867 +transit,121.73569640753111,14.572495583756353 +transit,121.74486281928284,14.57301877364631 +transit,121.75402927426813,14.573541604141617 +transit,121.7631957724591,14.574064075227167 +transit,121.77236231382784,14.574586186887863 +transit,121.78152889834648,14.575107939108621 +transit,121.7906955259871,14.575629331874358 +transit,121.7998621967218,14.57615036517001 +transit,121.80902891052267,14.57667103898051 +transit,121.8181956673618,14.577191353290825 +transit,121.82736246721126,14.577711308085908 +transit,121.83652931004313,14.57823090335073 +transit,121.84569619582949,14.578750139070287 +transit,121.85486312454239,14.579269015229562 +transit,121.8640300961539,14.579787531813555 +transit,121.87319711063607,14.580305688807288 +transit,121.88236416796094,14.580823486195785 +transit,121.89153126810058,14.581340923964072 +transit,121.90069841102701,14.5818580020972 +transit,121.90986559671227,14.582374720580212 +transit,121.9190328251284,14.58289107939819 +transit,121.92820009624741,14.583407078536194 +transit,121.93736741004133,14.583922717979313 +transit,121.94653476648217,14.584437997712644 +transit,121.95570216554196,14.584952917721287 +transit,121.96486960719268,14.585467477990361 +transit,121.97403709140634,14.58598167850499 +transit,121.98320461815494,14.586495519250304 +transit,121.99237218741048,14.58700900021146 +transit,122.00153979914494,14.587522121373604 +transit,122.01070745333028,14.5880348827219 +transit,122.0198751499385,14.588547284241535 +transit,122.02904288894156,14.589059325917686 +transit,122.03821067031143,14.589571007735548 +transit,122.04737849402008,14.590082329680333 +transit,122.05654636003946,14.590593291737255 +transit,122.06571426834152,14.59110389389154 +transit,122.07488221889822,14.591614136128431 +transit,122.08405021168149,14.592124018433163 +transit,122.09321824666326,14.592633540791 +transit,122.10238632381547,14.593142703187215 +transit,122.11155444311005,14.593651505607074 +transit,122.12072260451893,14.594159948035873 +transit,122.12989080801403,14.594668030458902 +transit,122.13905905356724,14.595175752861477 +transit,122.14822734115047,14.595683115228915 +transit,122.15739567073565,14.59619011754654 +transit,122.16656404229467,14.596696759799693 +transit,122.1757324557994,14.59720304197372 +transit,122.18490091122176,14.597708964053986 +transit,122.19406940853362,14.598214526025854 +transit,122.20323794770685,14.598719727874704 +transit,122.21240652871334,14.599224569585928 +transit,122.22157515152496,14.599729051144925 +transit,122.23074381611356,14.600233172537102 +transit,122.23991252245101,14.600736933747877 +transit,122.24908127050917,14.60124033476269 +transit,122.25825006025988,14.60174337556697 +transit,122.26741889167498,14.602246056146171 +transit,122.27658776472633,14.602748376485765 +transit,122.28575667938576,14.6032503365712 +transit,122.29492563562509,14.603751936387978 +transit,122.30409463341616,14.604253175921576 +transit,122.31326367273077,14.604754055157505 +transit,122.32243275354075,14.605254574081268 +transit,122.33160187581792,14.605754732678392 +transit,122.34077103953409,14.60625453093441 +transit,122.34994024466104,14.60675396883486 +transit,122.3591094911706,14.6072530463653 +transit,122.36827877903453,14.607751763511283 +transit,122.37744810822463,14.60825012025839 +transit,122.38661747871268,14.6087481165922 +transit,122.39578689047046,14.609245752498305 +transit,122.40495634346976,14.609743027962317 +transit,122.41412583768232,14.610239942969839 +transit,122.42329537307994,14.610736497506496 +transit,122.43246494963434,14.611232691557927 +transit,122.44163456731731,14.61172852510977 +transit,122.45080422610057,14.61222399814768 +transit,122.45997392595588,14.612719110657332 +transit,122.46914366685498,14.613213862624384 +transit,122.47831344876961,14.613708254034531 +transit,122.4874832716715,14.61420228487347 +transit,122.49665313553236,14.614695955126896 +transit,122.50582304032393,14.615189264780534 +transit,122.51499298601792,14.615682213820106 +transit,122.52416297258604,14.616174802231347 +TP8,122.533333,14.61666703 +transit,122.52556561919452,14.621547870102633 +transit,122.51779789531567,14.626428449327847 +transit,122.51002982824683,14.631308767573683 +transit,122.50226141787151,14.636188824738152 +transit,122.49449266407314,14.641068620719285 +transit,122.48672356673521,14.64594815541507 +transit,122.47895412574117,14.650827428723506 +transit,122.47118434097452,14.65570644054257 +transit,122.46341421231872,14.66058519077024 +transit,122.4556437396573,14.665463679304477 +transit,122.44787292287376,14.670341906043225 +transit,122.44010176185158,14.675219870884417 +transit,122.43233025647429,14.680097573725998 +transit,122.42455840662541,14.684975014465873 +transit,122.41678621218847,14.689852193001954 +transit,122.40901367304701,14.694729109232135 +transit,122.40124078908458,14.699605763054308 +transit,122.39346756018472,14.704482154366342 +transit,122.38569398623098,14.709358283066104 +transit,122.37792006710694,14.714234149051446 +transit,122.37014580269616,14.719109752220218 +transit,122.36237119288224,14.723985092470246 +transit,122.35459623754872,14.728860169699349 +transit,122.34682093657923,14.733734983805347 +transit,122.33904528985737,14.738609534686038 +transit,122.33126929726672,14.743483822239215 +transit,122.32349295869092,14.748357846362651 +transit,122.31571627401357,14.753231606954119 +transit,122.3079392431183,14.758105103911376 +transit,122.30016186588877,14.762978337132163 +transit,122.29238414220859,14.767851306514233 +transit,122.28460607196142,14.772724011955296 +transit,122.27682765503093,14.777596453353075 +transit,122.26904889130076,14.782468630605276 +transit,122.26126978065459,14.787340543609588 +transit,122.25349032297609,14.7922121922637 +transit,122.24571051814895,14.797083576465276 +transit,122.23793036605687,14.801954696111991 +transit,122.23014986658353,14.806825551101488 +transit,122.22236901961266,14.811696141331407 +transit,122.21458782502795,14.816566466699378 +transit,122.20680628271313,14.821436527103023 +transit,122.19902439255192,14.826306322439951 +transit,122.19124215442805,14.831175852607759 +transit,122.18345956822529,14.836045117504034 +transit,122.17567663382735,14.84091411702635 +transit,122.16789335111802,14.845782851072276 +transit,122.16010971998104,14.850651319539361 +transit,122.15232574030018,14.855519522325157 +transit,122.14454141195925,14.860387459327194 +transit,122.136756734842,14.865255130442998 +transit,122.12897170883222,14.870122535570081 +transit,122.12118633381372,14.874989674605935 +transit,122.11340060967032,14.87985654744806 +transit,122.10561453628581,14.884723153993935 +transit,122.09782811354404,14.889589494141026 +transit,122.0900413413288,14.894455567786792 +transit,122.08225421952395,14.899321374828682 +transit,122.07446674801334,14.904186915164132 +transit,122.0666789266808,14.909052188690572 +transit,122.05889075541019,14.91391719530541 +transit,122.05110223408538,14.918781934906056 +transit,122.04331336259025,14.923646407389905 +transit,122.03552414080868,14.928510612654335 +transit,122.02773456862452,14.933374550596724 +transit,122.01994464592171,14.93823822111443 +transit,122.01215437258413,14.943101624104806 +transit,122.0043637484957,14.947964759465188 +transit,121.99657277354034,14.95282762709291 +transit,121.98878144760195,14.95769022688529 +transit,121.98098977056446,14.962552558739631 +transit,121.97319774231184,14.967414622553237 +transit,121.96540536272802,14.97227641822339 +transit,121.95761263169695,14.977137945647371 +transit,121.94981954910257,14.981999204722436 +transit,121.94202611482889,14.986860195345843 +transit,121.93423232875986,14.991720917414838 +transit,121.92643819077946,14.99658137082665 +transit,121.91864370077171,15.001441555478497 +transit,121.91084885862058,15.006301471267596 +transit,121.90305366421008,15.011161118091142 +transit,121.89525811742422,15.016020495846332 +transit,121.88746221814702,15.020879604430334 +transit,121.87966596626254,15.025738443740327 +transit,121.87186936165476,15.030597013673455 +transit,121.86407240420777,15.035455314126871 +transit,121.85627509380559,15.040313344997712 +transit,121.8484774303323,15.0451711061831 +transit,121.84067941367195,15.050028597580143 +transit,121.83288104370862,15.054885819085952 +transit,121.8250823203264,15.05974277059761 +transit,121.81728324340935,15.064599452012208 +transit,121.80948381284159,15.06945586322681 +transit,121.80168402850722,15.074312004138477 +transit,121.79388389029036,15.079167874644254 +transit,121.7860833980751,15.084023474641183 +transit,121.77828255174559,15.088878804026292 +transit,121.77048135118595,15.093733862696592 +transit,121.76267979628034,15.09858865054909 +transit,121.7548778869129,15.10344316748078 +transit,121.74707562296777,15.108297413388643 +transit,121.73927300432914,15.113151388169657 +transit,121.73147003088116,15.118005091720779 +transit,121.72366670250803,15.122858523938962 +transit,121.71586301909392,15.127711684721149 +transit,121.70805898052303,15.132564573964261 +transit,121.70025458667959,15.137417191565222 +transit,121.69244983744775,15.142269537420944 +transit,121.6846447327118,15.147121611428311 +transit,121.67683927235592,15.151973413484216 +transit,121.66903345626434,15.15682494348553 +transit,121.66122728432133,15.161676201329124 +transit,121.65342075641112,15.166527186911841 +transit,121.64561387241798,15.171377900130533 +transit,121.63780663222616,15.176228340882028 +transit,121.62999903571995,15.181078509063143 +transit,121.6221910827836,15.185928404570689 +transit,121.61438277330143,15.190778027301468 +transit,121.60657410715773,15.195627377152261 +transit,121.59876508423677,15.200476454019848 +transit,121.59095570442291,15.205325257800993 +transit,121.58314596760046,15.210173788392458 +transit,121.57533587365371,15.215022045690983 +transit,121.56752542246704,15.219870029593292 +transit,121.55971461392477,15.22471773999612 +transit,121.55190344791124,15.229565176796171 +transit,121.54409192431083,15.23441233989015 +transit,121.5362800430079,15.239259229174742 +transit,121.52846780388683,15.24410584454663 +transit,121.52065520683199,15.248952185902473 +transit,121.51284225172778,15.253798253138939 +transit,121.50502893845858,15.258644046152666 +transit,121.49721526690882,15.263489564840294 +transit,121.4894012369629,15.268334809098441 +transit,121.48158684850526,15.273179778823721 +transit,121.47377210142031,15.278024473912744 +transit,121.46595699559248,15.28286889426209 +transit,121.45814153090625,15.287713039768345 +transit,121.45032570724604,15.292556910328077 +transit,121.44250952449632,15.29740050583784 +transit,121.43469298254158,15.30224382619419 +transit,121.42687608126626,15.307086871293658 +transit,121.41905882055488,15.311929641032771 +transit,121.41124120029193,15.316772135308046 +transit,121.40342322036187,15.321614354015976 +transit,121.39560488064927,15.326456297053063 +transit,121.38778618103862,15.331297964315786 +transit,121.37996712141444,15.336139355700615 +transit,121.37214770166128,15.340980471104006 +transit,121.36432792166367,15.345821310422412 +transit,121.35650778130615,15.350661873552276 +transit,121.3486872804733,15.355502160390012 +transit,121.34086641904968,15.360342170832043 +transit,121.33304519691985,15.365181904774774 +transit,121.32522361396842,15.3700213621146 +transit,121.31740167007995,15.374860542747898 +transit,121.30957936513906,15.379699446571044 +transit,121.30175669903035,15.384538073480398 +transit,121.29393367163843,15.389376423372305 +transit,121.28611028284793,15.39421449614311 +transit,121.27828653254349,15.399052291689138 +transit,121.27046242060972,15.403889809906707 +transit,121.2626379469313,15.408727050692123 +transit,121.25481311139286,15.413564013941675 +transit,121.2469879138791,15.418400699551658 +transit,121.23916235427465,15.423237107418332 +transit,121.2313364324642,15.428073237437966 +transit,121.22351014833248,15.432909089506806 +transit,121.21568350176413,15.437744663521098 +transit,121.20785649264388,15.442579959377069 +transit,121.20002912085647,15.447414976970931 +transit,121.19220138628657,15.452249716198892 +transit,121.18437328881895,15.457084176957158 +transit,121.17654482833832,15.4619183591419 +transit,121.16871600472946,15.466752262649294 +transit,121.16088681787708,15.471585887375513 +transit,121.153057267666,15.476419233216696 +transit,121.14522735398094,15.481252300068983 +transit,121.1373970767067,15.486085087828513 +transit,121.12956643572808,15.490917596391396 +transit,121.12173543092986,15.495749825653744 +transit,121.11390406219684,15.500581775511655 +transit,121.10607232941386,15.505413445861208 +transit,121.09824023246571,15.51024483659848 +transit,121.09040777123724,15.51507594761953 +transit,121.08257494561329,15.51990677882042 +transit,121.0747417554787,15.52473733009718 +transit,121.06690820071832,15.529567601345844 +transit,121.05907428121701,15.534397592462433 +transit,121.05123999685966,15.539227303342948 +transit,121.04340534753115,15.544056733883396 +transit,121.03557033311634,15.548885883979748 +transit,121.02773495350016,15.553714753527995 +transit,121.01989920856751,15.558543342424088 +transit,121.0120630982033,15.563371650563985 +transit,121.00422662229244,15.568199677843625 +transit,120.99638978071987,15.573027424158942 +transit,120.98855257337054,15.577854889405847 +transit,120.9807150001294,15.582682073480255 +transit,120.97287706088137,15.587508976278063 +transit,120.96503875551146,15.592335597695147 +transit,120.95720008390462,15.59716193762739 +transit,120.94936104594584,15.601987995970662 +transit,120.94152164152011,15.606813772620804 +transit,120.93368187051243,15.611639267473658 +transit,120.92584173280781,15.616464480425057 +transit,120.91800122829126,15.621289411370824 +transit,120.91016035684781,15.626114060206762 +transit,120.9023191183625,15.630938426828667 +transit,120.89447751272036,15.635762511132329 +transit,120.88663553980643,15.640586313013518 +transit,120.87879319950581,15.645409832368003 +transit,120.87095049170354,15.650233069091534 +transit,120.8631074162847,15.65505602307985 +transit,120.85526397313437,15.659878694228684 +transit,120.84742016213767,15.664701082433753 +transit,120.83957598317967,15.669523187590764 +transit,120.83173143614549,15.674345009595418 +transit,120.82388652092027,15.679166548343394 +transit,120.81604123738913,15.683987803730375 +transit,120.80819558543719,15.688808775652017 +transit,120.80034956494961,15.69362946400397 +transit,120.79250317581156,15.698449868681891 +transit,120.78465641790818,15.703269989581393 +transit,120.77680929112465,15.708089826598103 +transit,120.76896179534616,15.712909379627623 +transit,120.76111393045788,15.717728648565553 +transit,120.75326569634504,15.72254763330748 +transit,120.74541709289281,15.727366333748977 +transit,120.73756811998645,15.732184749785599 +transit,120.72971877751114,15.737002881312911 +transit,120.72186906535215,15.741820728226447 +transit,120.71401898339471,15.746638290421732 +transit,120.70616853152407,15.75145556779429 +transit,120.69831770962548,15.756272560239628 +transit,120.69046651758426,15.761089267653242 +transit,120.68261495528562,15.765905689930612 +transit,120.67476302261487,15.770721826967218 +transit,120.66691071945732,15.775537678658523 +transit,120.65905804569827,15.780353244899969 +transit,120.65120500122303,15.785168525587002 +transit,120.64335158591693,15.789983520615053 +transit,120.6354977996653,15.794798229879532 +transit,120.62764364235348,15.799612653275858 +transit,120.6197891138668,15.804426790699411 +transit,120.61193421409065,15.809240642045587 +transit,120.60407894291038,15.814054207209752 +transit,120.59622330021138,15.818867486087273 +transit,120.588367285879,15.823680478573497 +transit,120.58051089979868,15.828493184563765 +transit,120.57265414185579,15.8333056039534 +transit,120.56479701193577,15.838117736637717 +transit,120.556939509924,15.842929582512037 +transit,120.54908163570596,15.84774114147164 +transit,120.54122338916706,15.852552413411813 +transit,120.53336477019276,15.857363398227829 +transit,120.5255057786685,15.862174095814947 +transit,120.51764641447977,15.866984506068418 +transit,120.50978667751204,15.871794628883478 +transit,120.50192656765077,15.876604464155356 +transit,120.49406608478148,15.88141401177927 +transit,120.48620522878967,15.886223271650417 +transit,120.47834399956085,15.891032243664 +transit,120.47048239698053,15.895840927715195 +transit,120.46262042093426,15.90064932369917 +transit,120.45475807130757,15.905457431511095 +transit,120.44689534798599,15.910265251046106 +transit,120.43903225085509,15.915072782199351 +transit,120.43116877980046,15.91988002486595 +transit,120.42330493470766,15.924686978941011 +transit,120.41544071546227,15.929493644319649 +transit,120.40757612194987,15.93430002089695 +transit,120.39971115405609,15.939106108567994 +transit,120.39184581166654,15.943911907227859 +transit,120.38398009466682,15.94871741677159 +transit,120.37611400294259,15.953522637094247 +transit,120.36824753637947,15.958327568090855 +transit,120.36038069486312,15.96313220965645 +transit,120.35251347827919,15.96793656168603 +transit,120.34464588651336,15.972740624074607 +transit,120.33677791945131,15.97754439671717 +transit,120.3289095769787,15.982347879508701 +transit,120.32104085898125,15.987151072344163 +transit,120.31317176534466,15.991953975118513 +transit,120.30530229595463,15.9967565877267 +transit,120.29743245069693,16.001558910063654 +transit,120.28956222945723,16.006360942024305 +transit,120.28169163212132,16.01116268350356 +transit,120.27382065857493,16.015964134396313 +transit,120.26594930870382,16.020765294597464 +transit,120.25807758239378,16.025566164001887 +transit,120.25020547953058,16.03036674250444 +RPUG,120.242333,16.03516703 +transit,120.24623823181024,16.027308305816007 +transit,120.25014315779546,16.019449504816514 +transit,120.25404777813486,16.011590627046164 +transit,120.25795209300753,16.003731672549574 +transit,120.26185610259255,15.995872641371351 +transit,120.26575980706895,15.98801353355609 +transit,120.26966320661572,15.980154349148401 +transit,120.2735663014118,15.972295088192846 +transit,120.27746909163608,15.964435750733996 +transit,120.28137157746741,15.956576336816413 +transit,120.28527375908462,15.948716846484638 +transit,120.28917563666643,15.940857279783213 +transit,120.29307721039159,15.93299763675666 +transit,120.29697848043877,15.925137917449488 +transit,120.30087944698658,15.917278121906211 +transit,120.30478011021364,15.909418250171314 +transit,120.30868047029847,15.90155830228928 +transit,120.31258052741956,15.893698278304585 +transit,120.31648028175536,15.885838178261688 +transit,120.3203797334843,15.877978002205033 +transit,120.32427888278474,15.870117750179068 +transit,120.32817772983499,15.862257422228218 +transit,120.33207627481332,15.854397018396904 +transit,120.33597451789798,15.846536538729532 +transit,120.33987245926716,15.83867598327049 +transit,120.34377009909898,15.83081535206418 +transit,120.34766743757156,15.822954645154963 +transit,120.35156447486294,15.815093862587212 +transit,120.35546121115117,15.807233004405274 +transit,120.35935764661417,15.7993720706535 +transit,120.36325378142989,15.791511061376225 +transit,120.36714961577621,15.783649976617763 +transit,120.37104514983096,15.775788816422434 +transit,120.37494038377194,15.767927580834526 +transit,120.3788353177769,15.760066269898346 +transit,120.38272995202355,15.752204883658163 +transit,120.38662428668954,15.744343422158245 +transit,120.39051832195248,15.736481885442863 +transit,120.39441205798998,15.728620273556256 +transit,120.39830549497955,15.720758586542665 +transit,120.40219863309868,15.712896824446311 +transit,120.4060914725248,15.705034987311416 +transit,120.40998401343533,15.697173075182189 +transit,120.41387625600763,15.689311088102823 +transit,120.417768200419,15.681449026117498 +transit,120.42165984684671,15.6735868892704 +transit,120.425551195468,15.665724677605683 +transit,120.42944224646006,15.657862391167502 +TP9,120.433333,15.65000003 +transit,120.43556823903522,15.64149172352093 +transit,120.43780329336165,15.632983387670583 +transit,120.44003816309964,15.624475022467013 +transit,120.44227284836951,15.615966627928293 +transit,120.44450734929154,15.607458204072472 +transit,120.44674166598597,15.59894975091761 +transit,120.44897579857302,15.590441268481753 +transit,120.45120974717285,15.581932756782956 +transit,120.45344351190562,15.57342421583926 +transit,120.45567709289142,15.564915645668703 +transit,120.45791049025034,15.556407046289324 +transit,120.46014370410239,15.547898417719157 +transit,120.46237673456761,15.539389759976224 +transit,120.46460958176594,15.530881073078557 +transit,120.46684224581733,15.522372357044167 +transit,120.46907472684168,15.513863611891091 +transit,120.47130702495885,15.505354837637327 +transit,120.47353914028865,15.496846034300894 +transit,120.47577107295092,15.4883372018998 +transit,120.4780028230654,15.479828340452036 +transit,120.4802343907518,15.471319449975615 +transit,120.48246577612984,15.462810530488522 +transit,120.48469697931918,15.454301582008759 +transit,120.48692800043943,15.445792604554313 +transit,120.4891588396102,15.43728359814316 +transit,120.49138949695102,15.428774562793299 +transit,120.49361997258144,15.420265498522689 +transit,120.49585026662093,15.41175640534931 +transit,120.49808037918895,15.403247283291138 +transit,120.50031031040493,15.394738132366136 +transit,120.50254006038826,15.386228952592264 +transit,120.50476962925826,15.377719743987488 +transit,120.50699901713428,15.369210506569756 +transit,120.5092282241356,15.360701240357029 +transit,120.51145725038145,15.352191945367249 +transit,120.51368609599108,15.343682621618361 +transit,120.51591476108365,15.335173269128315 +transit,120.5181432457783,15.32666388791504 +transit,120.52037155019418,15.318154477996474 +transit,120.52259967445035,15.309645039390544 +transit,120.52482761866585,15.301135572115179 +transit,120.5270553829597,15.292626076188302 +transit,120.5292829674509,15.284116551627838 +transit,120.53151037225837,15.275606998451693 +transit,120.53373759750103,15.267097416677787 +transit,120.53596464329776,15.258587806324032 +transit,120.5381915097674,15.250078167408322 +transit,120.54041819702879,15.241568499948567 +transit,120.54264470520067,15.233058803962667 +transit,120.54487103440181,15.224549079468511 +transit,120.54709718475091,15.216039326483996 +transit,120.54932315636665,15.207529545027002 +transit,120.55154894936767,15.199019735115417 +transit,120.55377456387261,15.19050989676712 +RPLC,120.556,15.18200003 diff --git a/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/kuala_lumpur/kuala_lumpur_waypoints.csv b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/kuala_lumpur/kuala_lumpur_waypoints.csv new file mode 100644 index 0000000..d39a56d --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_plans/kuala_lumpur/kuala_lumpur_waypoints.csv @@ -0,0 +1,3844 @@ +city,utc_adjust +kuala_lumpur,8 +waypoint,lon,lat +WP1,101.5492,3.130800026 +transit,101.54671815629797,3.1394136350020267 +transit,101.54423627194012,3.148027236663594 +transit,101.54175434681403,3.1566408309644505 +transit,101.53927238080729,3.165254417884345 +transit,101.53679037380748,3.173867997403025 +transit,101.53430832570216,3.1824815695002364 +transit,101.53182623637889,3.1910951341557263 +transit,101.52934410572523,3.1997086913492376 +transit,101.52686193362874,3.2083222410605168 +transit,101.52437971997692,3.216935783269303 +transit,101.52189746465734,3.225549317955342 +transit,101.51941516755753,3.2341628450983726 +transit,101.51693282856498,3.242776364678136 +transit,101.51445044756721,3.25138987667437 +transit,101.51196802445175,3.2600033810668148 +transit,101.50948555910605,3.268616877835206 +transit,101.50700305141764,3.277230366959282 +transit,101.504520501274,3.2858438484187764 +transit,101.50203790856257,3.2944573221934257 +transit,101.49955527317086,3.3030707882629624 +transit,101.4970725949863,3.3116842466071192 +transit,101.49458987389636,3.320297697205628 +transit,101.49210710978849,3.3289111400382203 +transit,101.4896243025501,3.337524575084625 +transit,101.48714145206866,3.3461380023245715 +transit,101.48465855823156,3.3547514217377885 +transit,101.48217562092623,3.363364833304001 +transit,101.47969264004007,3.3719782370029368 +transit,101.4772096154605,3.3805916328143213 +transit,101.4747265470749,3.3892050207178777 +transit,101.47224343477065,3.3978184006933283 +transit,101.46976027843515,3.4064317727203974 +transit,101.46727707795574,3.4150451367788057 +transit,101.4647938332198,3.4236584928482725 +transit,101.4623105441147,3.432271840908518 +transit,101.45982721052776,3.44088518093926 +transit,101.45734383234634,3.4494985129202176 +transit,101.45486040945775,3.4581118368311032 +transit,101.45237694174935,3.4667251526516365 +transit,101.44989342910843,3.4753384603615296 +transit,101.4474098714223,3.483951759940496 +transit,101.44492626857826,3.4925650513682487 +transit,101.44244262046362,3.5011783346244996 +transit,101.43995892696566,3.5097916096889565 +transit,101.43747518797166,3.5184048765413327 +transit,101.43499140336887,3.5270181351613346 +transit,101.43250757304457,3.535631385528669 +transit,101.43002369688602,3.544244627623043 +transit,101.42753977478047,3.5528578614241626 +transit,101.42505580661513,3.5614710869117308 +transit,101.42257179227725,3.5700843040654515 +transit,101.42008773165406,3.5786975128650287 +transit,101.41760362463276,3.587310713290161 +transit,101.41511947110057,3.5959239053205514 +transit,101.41263527094466,3.6045370889358965 +transit,101.41015102405225,3.6131502641158972 +transit,101.40766673031052,3.6217634308402493 +transit,101.40518238960665,3.6303765890886495 +transit,101.40269800182779,3.6389897388407912 +transit,101.4002135668611,3.6476028800763705 +transit,101.39772908459373,3.656216012775081 +transit,101.39524455491284,3.6648291369166115 +transit,101.39275997770554,3.673442252480657 +transit,101.39027535285896,3.682055359446906 +transit,101.38779068026024,3.6906684577950455 +transit,101.38530595979645,3.699281547504767 +transit,101.38282119135474,3.7078946285557537 +transit,101.38033637482216,3.7165077009276932 +transit,101.37785151008582,3.725120764600269 +transit,101.37536659703278,3.7337338195531657 +transit,101.37288163555012,3.7423468657660672 +transit,101.37039662552489,3.7509599032186514 +transit,101.36791156684416,3.759572931890603 +transit,101.36542645939494,3.768185951761598 +transit,101.36294130306429,3.7767989628113146 +transit,101.36045609773923,3.7854119650194322 +transit,101.35797084330677,3.7940249583656254 +transit,101.35548553965394,3.802637942829569 +transit,101.35300018666771,3.811250918390939 +transit,101.35051478423509,3.8198638850294078 +transit,101.34802933224306,3.828476842724643 +transit,101.3455438305786,3.837089791456321 +transit,101.34305827912867,3.845702731204107 +transit,101.34057267778023,3.854315661947672 +transit,101.33808702642023,3.8629285836666845 +transit,101.33560132493561,3.8715414963408064 +transit,101.33311557321329,3.880154399949707 +transit,101.33062977114021,3.888767294473048 +transit,101.32814391860327,3.897380179890492 +transit,101.3256580154894,3.905993056181703 +transit,101.32317206168547,3.91460592332634 +transit,101.32068605707839,3.923218781304064 +transit,101.31820000155501,3.931831630094532 +transit,101.31571389500223,3.9404444696774013 +transit,101.3132277373069,3.94905730003233 +transit,101.31074152835589,3.9576701211389724 +transit,101.308255268036,3.9662829329769806 +transit,101.30576895623412,3.9748957355260095 +transit,101.30328259283704,3.9835085287657095 +transit,101.30079617773158,3.9921213126757333 +transit,101.29830971080456,4.000734087235728 +transit,101.29582319194279,4.009346852425342 +transit,101.29333662103303,4.017959608224223 +transit,101.29084999796208,4.026572354612019 +transit,101.28836332261672,4.035185091568371 +transit,101.2858765948837,4.043797819072925 +transit,101.28338981464978,4.052410537105323 +transit,101.28090298180172,4.061023245645206 +transit,101.27841609622622,4.069635944672215 +transit,101.27592915781004,4.0782486341659885 +transit,101.27344216643988,4.086861314106163 +transit,101.27095512200246,4.09547398447238 +transit,101.26846802438449,4.104086645244268 +transit,101.26598087347263,4.112699296401466 +transit,101.26349366915359,4.121311937923607 +transit,101.26100641131403,4.129924569790323 +transit,101.25851909984061,4.138537191981242 +transit,101.25603173461998,4.147149804475996 +transit,101.2535443155388,4.155762407254214 +transit,101.2510568424837,4.16437500029552 +transit,101.24856931534131,4.172987583579543 +transit,101.24608173399825,4.181600157085907 +transit,101.2435940983411,4.190212720794236 +transit,101.24110640825648,4.198825274684151 +transit,101.23861866363099,4.207437818735275 +transit,101.23613086435117,4.216050352927228 +transit,101.23364301030362,4.224662877239628 +transit,101.2311551013749,4.233275391652092 +transit,101.22866713745155,4.241887896144237 +transit,101.22617911842012,4.250500390695681 +transit,101.22369104416714,4.259112875286034 +transit,101.22120291457912,4.267725349894909 +transit,101.21871472954258,4.276337814501919 +transit,101.21622648894403,4.284950269086675 +transit,101.21373819266996,4.293562713628785 +transit,101.21124984060685,4.302175148107857 +transit,101.20876143264118,4.310787572503495 +transit,101.2062729686594,4.31939998679531 +transit,101.20378444854799,4.328012390962902 +transit,101.20129587219337,4.336624784985875 +transit,101.198807239482,4.345237168843831 +transit,101.19631855030028,4.35384954251637 +transit,101.19382980453463,4.36246190598309 +transit,101.19134100207147,4.37107425922359 +transit,101.18885214279719,4.379686602217468 +transit,101.18636322659817,4.388298934944316 +transit,101.1838742533608,4.396911257383732 +transit,101.18138522297144,4.405523569515307 +transit,101.17889613531645,4.414135871318632 +transit,101.17640699028216,4.422748162773298 +transit,101.17391778775493,4.431360443858896 +transit,101.17142852762109,4.43997271455501 +transit,101.16893920976692,4.4485849748412285 +transit,101.16644983407876,4.457197224697137 +transit,101.16396040044292,4.465809464102319 +transit,101.16147090874564,4.474421693036358 +transit,101.15898135887323,4.4830339114788345 +transit,101.15649175071196,4.491646119409329 +transit,101.15400208414808,4.500258316807418 +transit,101.15151235906782,4.508870503652683 +transit,101.14902257535744,4.517482679924698 +transit,101.14653273290315,4.52609484560304 +transit,101.1440428315912,4.53470700066728 +transit,101.14155287130774,4.54331914509699 +transit,101.13906285193902,4.551931278871744 +transit,101.13657277337119,4.560543401971109 +transit,101.13408263549043,4.569155514374654 +transit,101.13159243818293,4.577767616061948 +transit,101.12910218133483,4.586379707012555 +transit,101.12661186483227,4.594991787206039 +transit,101.12412148856139,4.603603856621966 +transit,101.1216310524083,4.612215915239894 +transit,101.11914055625914,4.620827963039385 +WP2,101.11665,4.62944 +transit,101.11163656307947,4.6367961180241295 +transit,101.10662302244387,4.644152198936055 +transit,101.10160937792632,4.65150824267596 +transit,101.0965956293599,4.658864249184025 +transit,101.09158177657767,4.666220218400423 +transit,101.0865678194127,4.673576150265327 +transit,101.08155375769807,4.680932044718904 +transit,101.07653959126681,4.688287901701314 +transit,101.07152531995195,4.695643721152719 +transit,101.06651094358652,4.70299950301327 +transit,101.06149646200353,4.71035524722312 +transit,101.05648187503598,4.7177109537224124 +transit,101.05146718251687,4.72506662245129 +transit,101.04645238427918,4.7324222533498865 +transit,101.04143748015588,4.739777846358341 +transit,101.03642246997993,4.747133401416775 +transit,101.03140735358427,4.754488918465319 +transit,101.02639213080187,4.76184439744409 +transit,101.02137680146562,4.769199838293204 +transit,101.01636136540846,4.7765552409527725 +transit,101.01134582246328,4.7839106053629035 +transit,101.006330172463,4.791265931463697 +transit,101.00131441524049,4.798621219195255 +transit,100.99629855062861,4.8059764684976685 +transit,100.99128257846026,4.813331679311029 +transit,100.98626649856827,4.820686851575422 +transit,100.98125031078548,4.828041985230926 +transit,100.97623401494472,4.835397080217622 +transit,100.97121761087884,4.842752136475578 +transit,100.96620109842061,4.850107153944866 +transit,100.96118447740284,4.857462132565549 +transit,100.95616774765833,4.864817072277681 +transit,100.95115090901986,4.872171973021322 +transit,100.94613396132017,4.879526834736521 +transit,100.94111690439203,4.8868816573633245 +transit,100.93609973806818,4.8942364408417705 +transit,100.93108246218137,4.901591185111901 +transit,100.9260650765643,4.9089458901137455 +transit,100.92104758104969,4.916300555787332 +transit,100.91602997547024,4.923655182072687 +transit,100.91101225965863,4.931009768909827 +transit,100.90599443344755,4.938364316238769 +transit,100.90097649666966,4.945718823999522 +transit,100.8959584491576,4.9530732921320935 +transit,100.89094029074406,4.960427720576481 +transit,100.88592202126162,4.967782109272686 +transit,100.88090364054293,4.9751364581607 +transit,100.8758851484206,4.982490767180508 +transit,100.8708665447272,4.989845036272097 +transit,100.86584782929536,4.9971992653754445 +transit,100.86082900195765,5.004553454430524 +transit,100.85581006254661,5.011907603377307 +transit,100.85079101089482,5.019261712155756 +transit,100.84577184683481,5.0266157807058365 +transit,100.8407525701991,5.0339698089675 +transit,100.83573318082024,5.041323796880702 +transit,100.83071367853071,5.048677744385387 +transit,100.82569406316303,5.056031651421497 +transit,100.82067433454968,5.063385517928972 +transit,100.81565449252312,5.070739343847745 +transit,100.81063453691584,5.078093129117744 +transit,100.80561446756028,5.085446873678894 +transit,100.80059428428886,5.092800577471113 +transit,100.79557398693403,5.100154240434319 +transit,100.79055357532822,5.107507862508419 +transit,100.78553304930381,5.114861443633323 +transit,100.78051240869321,5.122214983748927 +transit,100.7754916533288,5.12956848279513 +transit,100.77047078304295,5.136921940711825 +transit,100.76544979766803,5.144275357438897 +transit,100.76042869703636,5.151628732916229 +transit,100.75540748098031,5.158982067083698 +transit,100.75038614933219,5.166335359881179 +transit,100.74536470192432,5.17368861124854 +transit,100.74034313858898,5.1810418211256435 +transit,100.7353214591585,5.188394989452351 +transit,100.73029966346512,5.195748116168515 +transit,100.72527775134112,5.203101201213984 +transit,100.72025572261877,5.210454244528607 +transit,100.7152335771303,5.21780724605222 +transit,100.71021131470795,5.22516020572466 +transit,100.70518893518391,5.2325131234857585 +transit,100.70016643839044,5.239865999275342 +transit,100.69514382415969,5.24721883303323 +transit,100.69012109232386,5.25457162469924 +transit,100.68509824271514,5.261924374213183 +transit,100.68007527516566,5.269277081514867 +transit,100.6750521895076,5.276629746544092 +transit,100.67002898557308,5.283982369240659 +transit,100.66500566319422,5.291334949544358 +transit,100.65998222220314,5.298687487394977 +transit,100.65495866243195,5.306039982732301 +transit,100.64993498371273,5.313392435496106 +transit,100.64491118587755,5.320744845626166 +transit,100.6398872687585,5.328097213062249 +transit,100.6348632321876,5.335449537744121 +transit,100.62983907599693,5.342801819611537 +transit,100.62481480001848,5.3501540586042555 +transit,100.6197904040843,5.357506254662023 +transit,100.61476588802637,5.364858407724582 +transit,100.6097412516767,5.372210517731676 +transit,100.60471649486726,5.379562584623037 +transit,100.59969161743003,5.386914608338395 +transit,100.59466661919696,5.394266588817477 +WP3,100.5896415,5.401618526 +transit,100.5813445401226,5.398777679035525 +transit,100.57304765748664,5.395936718513381 +transit,100.56475085205356,5.393095644494695 +transit,100.55645412378486,5.390254457040593 +transit,100.54815747264199,5.3874131562122045 +transit,100.53986089858641,5.384571742070661 +transit,100.53156440157957,5.381730214677086 +transit,100.52326798158292,5.378888574092612 +transit,100.51497163855791,5.376046820378368 +transit,100.50667537246598,5.373204953595482 +transit,100.49837918326854,5.370362973805085 +transit,100.49008307092704,5.367520881068305 +transit,100.48178703540292,5.364678675446276 +transit,100.47349107665755,5.361836357000125 +transit,100.46519519465238,5.358993925790986 +transit,100.4568993893488,5.356151381879984 +transit,100.44860366070824,5.353308725328258 +transit,100.44030800869207,5.3504659561969365 +transit,100.43201243326168,5.347623074547148 +transit,100.42371693437848,5.344780080440028 +transit,100.41542151200383,5.341936973936709 +transit,100.40712616609913,5.339093755098322 +transit,100.39883089662574,5.336250423986 +transit,100.39053570354503,5.3334069806608735 +transit,100.38224058681836,5.330563425184082 +transit,100.37394554640707,5.327719757616753 +transit,100.36565058227255,5.324875978020024 +transit,100.35735569437612,5.322032086455028 +transit,100.34906088267914,5.319188082982897 +transit,100.34076614714292,5.316343967664767 +transit,100.33247148772882,5.313499740561776 +transit,100.32417690439816,5.310655401735053 +transit,100.31588239711225,5.307810951245737 +transit,100.30758796583241,5.304966389154963 +transit,100.29929361051997,5.302121715523866 +transit,100.29099933113622,5.299276930413582 +transit,100.28270512764246,5.296432033885248 +WP4,100.274411,5.293587026 +transit,100.27692121572846,5.284947654341158 +transit,100.27943136189771,5.276308270128779 +transit,100.28194143862395,5.267668873383704 +transit,100.28445144602334,5.2590294641267725 +transit,100.28696138421206,5.250390042378823 +transit,100.28947125330627,5.241750608160693 +transit,100.2919810534221,5.233111161493218 +transit,100.29449078467569,5.224471702397231 +transit,100.29700044718314,5.215832230893566 +transit,100.29951004106057,5.207192747003053 +transit,100.30201956642406,5.198553250746522 +transit,100.30452902338972,5.189913742144798 +transit,100.3070384120736,5.18127422121871 +transit,100.30954773259175,5.172634687989083 +transit,100.31205698506024,5.163995142476737 +transit,100.31456616959508,5.155355584702496 +transit,100.31707528631232,5.146716014687179 +transit,100.31958433532795,5.138076432451605 +transit,100.32209331675796,5.129436838016594 +transit,100.32460223071836,5.120797231402956 +transit,100.32711107732511,5.112157612631509 +transit,100.32961985669418,5.103517981723063 +transit,100.33212856894153,5.094878338698431 +transit,100.33463721418308,5.086238683578423 +transit,100.33714579253477,5.077599016383843 +transit,100.33965430411253,5.068959337135502 +transit,100.34216274903224,5.060319645854201 +transit,100.3446711274098,5.051679942560748 +transit,100.3471794393611,5.043040227275942 +transit,100.34968768500201,5.034400500020585 +transit,100.35219586444838,5.025760760815474 +transit,100.35470397781607,5.017121009681407 +transit,100.3572120252209,5.008481246639183 +transit,100.35972000677872,4.999841471709591 +transit,100.3622279226053,4.991201684913431 +transit,100.36473577281647,4.982561886271489 +transit,100.36724355752803,4.973922075804558 +transit,100.36975127685574,4.965282253533426 +transit,100.37225893091536,4.956642419478879 +transit,100.37476651982267,4.948002573661705 +transit,100.3772740436934,4.9393627161026865 +transit,100.37978150264328,4.930722846822606 +transit,100.38228889678804,4.922082965842248 +transit,100.38479622624338,4.91344307318239 +transit,100.38730349112501,4.904803168863809 +transit,100.38981069154862,4.896163252907287 +transit,100.39231782762987,4.887523325333594 +transit,100.39482489948443,4.8788833861635075 +transit,100.39733190722797,4.870243435417798 +transit,100.39983885097611,4.86160347311724 +transit,100.4023457308445,4.852963499282601 +transit,100.40485254694875,4.84432351393465 +transit,100.40735929940448,4.835683517094153 +transit,100.40986598832728,4.827043508781877 +transit,100.41237261383273,4.818403489018586 +transit,100.41487917603644,4.8097634578250394 +transit,100.41738567505392,4.801123415222004 +transit,100.41989211100078,4.792483361230237 +transit,100.42239848399252,4.783843295870497 +transit,100.42490479414471,4.77520321916354 +transit,100.42741104157284,4.766563131130122 +transit,100.42991722639245,4.757923031790999 +transit,100.432423348719,4.749282921166923 +transit,100.43492940866801,4.740642799278644 +transit,100.43743540635495,4.732002666146916 +transit,100.43994134189529,4.723362521792482 +transit,100.44244721540448,4.714722366236092 +transit,100.44495302699798,4.706082199498494 +transit,100.4474587767912,4.697442021600429 +transit,100.44996446489958,4.688801832562642 +transit,100.45247009143853,4.680161632405875 +transit,100.45497565652344,4.671521421150867 +transit,100.45748116026972,4.662881198818358 +transit,100.45998660279275,4.654240965429086 +transit,100.46249198420789,4.645600721003786 +transit,100.46499730463051,4.636960465563193 +transit,100.46750256417596,4.628320199128039 +transit,100.47000776295955,4.619679921719062 +transit,100.47251290109665,4.611039633356986 +transit,100.47501797870255,4.602399334062545 +transit,100.47752299589257,4.593759023856464 +transit,100.480027952782,4.585118702759472 +transit,100.48253284948612,4.576478370792293 +transit,100.48503768612021,4.567838027975652 +transit,100.48754246279954,4.559197674330269 +transit,100.49004717963936,4.5505573098768695 +transit,100.49255183675491,4.541916934636172 +transit,100.49505643426144,4.533276548628894 +transit,100.49756097227416,4.524636151875753 +transit,100.50006545090828,4.515995744397465 +transit,100.50256987027902,4.507355326214745 +transit,100.50507423050155,4.498714897348309 +transit,100.50757853169105,4.490074457818864 +transit,100.51008277396272,4.481434007647124 +transit,100.51258695743171,4.4727935468538 +transit,100.51509108221315,4.464153075459594 +transit,100.5175951484222,4.455512593485217 +transit,100.520099156174,4.446872100951376 +transit,100.52260310558364,4.438231597878771 +transit,100.52510699676625,4.42959108428811 +transit,100.52761082983695,4.4209505602000885 +transit,100.53011460491079,4.412310025635412 +transit,100.53261832210288,4.403669480614776 +transit,100.53512198152828,4.395028925158879 +transit,100.53762558330205,4.386388359288419 +transit,100.54012912753923,4.377747783024089 +transit,100.54263261435489,4.369107196386585 +transit,100.54513604386402,4.360466599396596 +transit,100.54763941618167,4.351825992074816 +transit,100.55014273142284,4.343185374441935 +transit,100.55264598970253,4.33454474651864 +transit,100.55514919113573,4.325904108325621 +transit,100.5576523358374,4.317263459883561 +transit,100.56015542392257,4.308622801213148 +transit,100.56265845550614,4.299982132335064 +transit,100.56516143070309,4.29134145326999 +transit,100.56766434962834,4.2827007640386086 +transit,100.57016721239685,4.2740600646616 +transit,100.57267001912352,4.265419355159642 +transit,100.57517276992327,4.256778635553414 +transit,100.57767546491101,4.2481379058635875 +transit,100.58017810420161,4.2394971661108425 +transit,100.58268068790997,4.230856416315849 +transit,100.58518321615097,4.22221565649928 +transit,100.58768568903945,4.2135748866818075 +transit,100.59018810669028,4.204934106884102 +transit,100.59269046921828,4.19629331712683 +transit,100.59519277673833,4.187652517430662 +transit,100.59769502936523,4.17901170781626 +transit,100.60019722721378,4.170370888304292 +transit,100.60269937039881,4.1617300589154205 +transit,100.6052014590351,4.15308921967031 +transit,100.60770349323745,4.14444837058962 +transit,100.61020547312063,4.1358075116940105 +transit,100.61270739879942,4.1271666430041405 +transit,100.61520927038855,4.118525764540668 +transit,100.6177110880028,4.109884876324249 +transit,100.62021285175689,4.101243978375539 +transit,100.62271456176556,4.092603070715192 +transit,100.62521621814354,4.083962153363863 +transit,100.62771782100552,4.075321226342201 +transit,100.63021937046621,4.066680289670856 +transit,100.63272086664031,4.058039343370478 +transit,100.6352223096425,4.049398387461716 +transit,100.63772369958747,4.040757421965217 +transit,100.64022503658985,4.032116446901626 +transit,100.64272632076433,4.023475462291587 +transit,100.64522755222553,4.014834468155744 +transit,100.64772873108812,4.006193464514738 +transit,100.6502298574667,3.9975524513892142 +transit,100.65273093147592,3.988911428799806 +transit,100.65523195323034,3.980270396767158 +transit,100.65773292284462,3.9716293553119044 +transit,100.6602338404333,3.962988304454682 +transit,100.66273470611101,3.9543472442161276 +transit,100.66523551999231,3.9457061746168716 +transit,100.66773628219174,3.937065095677551 +transit,100.67023699282387,3.9284240074187946 +transit,100.67273765200328,3.919782909861235 +transit,100.67523825984446,3.9111418030254987 +transit,100.67773881646197,3.9025006869322167 +transit,100.68023932197032,3.8938595616020164 +transit,100.68273977648403,3.885218427055523 +transit,100.68524018011759,3.8765772833133605 +transit,100.6877405329855,3.867936130396153 +transit,100.69024083520225,3.859294968324524 +transit,100.69274108688231,3.850653797119093 +transit,100.69524128814015,3.842012616800483 +transit,100.69774143909024,3.833371427389311 +transit,100.70024153984701,3.824730228906196 +transit,100.70274159052492,3.8160890213717553 +transit,100.70524159123839,3.8074478048066043 +transit,100.70774154210186,3.798806579231359 +transit,100.71024144322972,3.790165344666629 +transit,100.7127412947364,3.781524101133032 +transit,100.71524109673629,3.7728828486511756 +transit,100.71774084934378,3.7642415872416732 +transit,100.72024055267325,3.7556003169251313 +transit,100.72274020683908,3.7469590377221595 +transit,100.72523981195562,3.7383177496533655 +transit,100.72773936813724,3.7296764527393518 +transit,100.73023887549827,3.7210351470007286 +transit,100.73273833415307,3.7123938324580954 +transit,100.73523774421595,3.703752509132056 +transit,100.73773710580124,3.6951111770432115 +transit,100.74023641902326,3.6864698362121655 +transit,100.74273568399632,3.677828486659513 +transit,100.74523490083469,3.6691871284058553 +transit,100.74773406965268,3.6605457614717887 +transit,100.75023319056457,3.65190438587791 +transit,100.75273226368462,3.643263001644813 +transit,100.7552312891271,3.6346216087930916 +transit,100.75773026700627,3.6259802073433427 +transit,100.76022919743636,3.6173387973161546 +transit,100.76272808053162,3.6086973787321175 +transit,100.76522691640628,3.6000559516118256 +transit,100.76772570517456,3.5914145159758624 +transit,100.77022444695068,3.58277307184482 +transit,100.77272314184884,3.574131619239283 +transit,100.77522178998323,3.565490158179837 +transit,100.77772039146807,3.556848688687067 +transit,100.7802189464175,3.5482072107815568 +transit,100.78271745494571,3.5395657244838894 +transit,100.78521591716688,3.5309242298146435 +transit,100.78771433319515,3.5222827267944052 +transit,100.79021270314469,3.5136412154437484 +transit,100.79271102712961,3.504999695783254 +transit,100.79520930526407,3.4963581678335 +transit,100.79770753766218,3.487716631615061 +transit,100.80020572443806,3.4790750871485145 +transit,100.80270386570581,3.470433534454433 +transit,100.80520196157956,3.46179197355339 +transit,100.80770001217338,3.4531504044659584 +transit,100.81019801760137,3.4445088272127107 +transit,100.81269597797758,3.435867241814216 +transit,100.81519389341612,3.4272256482910426 +transit,100.81769176403104,3.4185840466637623 +transit,100.82018958993638,3.4099424369529365 +transit,100.82268737124619,3.4013008191791383 +transit,100.82518510807452,3.392659193362928 +transit,100.82768280053538,3.3840175595248736 +transit,100.83018044874282,3.375375917685536 +transit,100.83267805281086,3.3667342678654775 +transit,100.83517561285348,3.358092610085261 +transit,100.83767312898469,3.349450944365446 +transit,100.8401706013185,3.3408092707265924 +transit,100.84266802996888,3.3321675891892584 +transit,100.8451654150498,3.323525899774002 +transit,100.84766275667526,3.314884202501379 +transit,100.85016005495919,3.3062424973919446 +transit,100.85265731001557,3.2976007844662547 +transit,100.85515452195834,3.2889590637448634 +transit,100.85765169090143,3.2803173352483213 +transit,100.86014881695878,3.2716755989971817 +transit,100.86264590024433,3.2630338550119937 +transit,100.86514294087198,3.2543921033133096 +transit,100.86763993895563,3.245750343921676 +transit,100.87013689460922,3.237108576857644 +transit,100.87263380794663,3.228466802141756 +transit,100.87513067908172,3.219825019794561 +transit,100.87762750812841,3.2111832298366045 +transit,100.88012429520056,3.2025414322884296 +transit,100.88262104041203,3.19389962717058 +transit,100.8851177438767,3.1852578145035957 +transit,100.88761440570839,3.176615994308023 +transit,100.89011102602097,3.1679741666043983 +transit,100.89260760492829,3.1593323314132618 +transit,100.89510414254414,3.1506904887551532 +transit,100.89760063898237,3.14204863865061 +transit,100.9000970943568,3.133406781120168 +transit,100.90259350878122,3.1247649161843647 +transit,100.90508988236945,3.116123043863733 +transit,100.90758621523527,3.1074811641788096 +transit,100.91008250749249,3.0988392771501245 +transit,100.91257875925487,3.0901973827982125 +transit,100.9150749706362,3.0815554811436043 +transit,100.91757114175023,3.0729135722068293 +transit,100.92006727271072,3.0642716560084198 +transit,100.92256336363145,3.0556297325689004 +transit,100.92505941462615,3.046987801908803 +transit,100.92755542580855,3.038345864048651 +transit,100.93005139729239,3.029703919008973 +transit,100.9325473291914,3.021061966810293 +transit,100.93504322161928,3.0124200074731347 +transit,100.93753907468977,3.0037780410180224 +transit,100.94003488851655,2.995136067465479 +transit,100.94253066321333,2.9864940868360255 +transit,100.9450263988938,2.977852099150182 +transit,100.94752209567164,2.969210104428469 +transit,100.95001775366055,2.9605681026914064 +transit,100.95251337297418,2.9519260939595102 +transit,100.95500895372619,2.943284078253301 +transit,100.95750449603025,2.9346420555932924 +WP5,100.96,2.926000026 +transit,100.96736807373901,2.9208731072894585 +transit,100.97473608064752,2.915746139566842 +transit,100.982104020843,2.910619122918749 +transit,100.98947189444291,2.905492057431779 +transit,100.99683970156477,2.900364943192523 +transit,101.00420744232602,2.895237780287576 +transit,101.01157511684417,2.8901105688035282 +transit,101.01894272523668,2.8849833088269676 +transit,101.02631026762107,2.879856000444479 +transit,101.03367774411478,2.874728643742649 +transit,101.04104515483532,2.869601238808057 +transit,101.04841249990017,2.8644737857272835 +transit,101.0557797794268,2.859346284586906 +transit,101.0631469935327,2.8542187354735002 +transit,101.07051414233536,2.849091138473637 +transit,101.07788122595225,2.8439634936738916 +transit,101.08524824450087,2.8388358011608297 +transit,101.0926151980987,2.8337080610210186 +transit,101.0999820868632,2.8285802733410237 +transit,101.10734891091191,2.823452438207407 +transit,101.11471567036226,2.8183245557067305 +transit,101.12208236533176,2.813196625925549 +transit,101.12944899593789,2.808068648950422 +transit,101.13681556229815,2.8029406248679027 +transit,101.14418206453,2.797812553764542 +transit,101.15154850275094,2.792684435726891 +transit,101.15891487707846,2.787556270841498 +transit,101.16628118763005,2.7824280591949067 +transit,101.17364743452318,2.7772998008736636 +transit,101.18101361787534,2.772171495964307 +transit,101.18837973780401,2.7670431445533787 +transit,101.19574579442671,2.761914746727415 +transit,101.2031117878609,2.756786302572953 +transit,101.21047771822407,2.7516578121765236 +transit,101.21784358563372,2.746529275624659 +transit,101.22520939020733,2.741400693003888 +transit,101.23257513206238,2.73627206440074 +transit,101.23994081131636,2.731143389901736 +transit,101.24730642808677,2.7260146695934018 +transit,101.2546719824911,2.7208859035622575 +transit,101.26203747464683,2.715757091894822 +transit,101.26940290467145,2.7106282346776136 +transit,101.27676827268246,2.705499331997145 +transit,101.28413357879734,2.7003703839399296 +transit,101.29149882313357,2.69524139059248 +transit,101.29886400580865,2.6901123520413024 +transit,101.30622912694008,2.6849832683729047 +transit,101.31359418664533,2.6798541396737914 +transit,101.32095918504191,2.674724966030466 +transit,101.32832412224731,2.6695957475294287 +transit,101.335688998379,2.664466484257178 +transit,101.34305381355449,2.659337176300211 +transit,101.35041856789125,2.654207823745022 +transit,101.35778326150681,2.6490784266781042 +transit,101.36514789451863,2.6439489851859483 +transit,101.3725124670442,2.6388194993550425 +transit,101.37987697920104,2.6336899692718747 +transit,101.38724143110662,2.628560395022929 +transit,101.39460582287843,2.623430776694687 +transit,101.40197015463397,2.618301114373633 +transit,101.40933442649074,2.613171408146242 +transit,101.41669863856623,2.608041658098994 +transit,101.42406279097791,2.602911864318363 +transit,101.43142688384332,2.597782026890821 +transit,101.4387909172799,2.59265214590284 +transit,101.44615489140519,2.5875222214408895 +transit,101.45351880633665,2.582392253591437 +transit,101.46088266219179,2.577262242440946 +transit,101.4682464590881,2.572132188075882 +transit,101.47561019714308,2.5670020905827053 +transit,101.48297387647423,2.5618719500478755 +transit,101.49033749719904,2.5567417665578507 +transit,101.49770105943499,2.5516115401990853 +transit,101.50506456329958,2.546481271058034 +transit,101.51242800891032,2.5413509592211496 +transit,101.51979139638469,2.536220604774879 +transit,101.5271547258402,2.531090207805674 +transit,101.53451799739433,2.525959768399978 +transit,101.54188121116461,2.5208292866442363 +transit,101.54924436726849,2.5156987626248917 +transit,101.55660746582349,2.510568196428383 +transit,101.5639705069471,2.5054375881411506 +transit,101.57133349075683,2.50030693784963 +transit,101.57869641737017,2.4951762456402578 +transit,101.58605928690461,2.490045511599464 +transit,101.59342209947765,2.4849147358136827 +transit,101.6007848552068,2.4797839183693413 +transit,101.60814755420955,2.474653059352868 +transit,101.61551019660338,2.4695221588506877 +transit,101.62287278250582,2.4643912169492235 +transit,101.63023531203434,2.459260233734899 +transit,101.63759778530645,2.4541292092941327 +transit,101.64496020243966,2.448998143713344 +transit,101.65232256355146,2.4438670370789466 +transit,101.65968486875934,2.4387358894773596 +transit,101.6670471181808,2.433604700994991 +transit,101.67440931193336,2.428473471718254 +transit,101.68177145013449,2.4233422017335564 +transit,101.6891335329017,2.4182108911273064 +transit,101.69649556035252,2.413079539985908 +transit,101.7038575326044,2.4079481483957674 +transit,101.71121944977487,2.4028167164432834 +transit,101.71858131198142,2.3976852442148573 +transit,101.72594311934157,2.392553731796887 +transit,101.73330487197279,2.387422179275769 +transit,101.7406665699926,2.3822905867378976 +transit,101.7480282135185,2.377158954269665 +transit,101.75538980266798,2.3720272819574646 +transit,101.76275133755856,2.3668955698876823 +transit,101.77011281830771,2.361763818146708 +transit,101.77747424503296,2.356632026820926 +transit,101.78483561785181,2.3515001959967203 +transit,101.79219693688175,2.3463683257604733 +transit,101.7995582022403,2.341236416198566 +transit,101.80691941404494,2.336104467397376 +transit,101.81428057241318,2.3309724794432802 +transit,101.82164167746252,2.325840452422655 +transit,101.82900272931049,2.320708386421872 +transit,101.83636372807455,2.3155762815273033 +transit,101.84372467387223,2.31044413782532 +transit,101.85108556682103,2.305311955402289 +transit,101.85844640703843,2.3001797343445767 +transit,101.86580719464197,2.2950474747385483 +transit,101.87316792974913,2.289915176670566 +transit,101.88052861247742,2.2847828402269923 +transit,101.88788924294435,2.2796504654941856 +transit,101.89524982126743,2.274518052558505 +transit,101.90261034756413,2.269385601506305 +transit,101.90997082195199,2.264253112423941 +transit,101.91733124454849,2.259120585397766 +transit,101.92469161547116,2.2539880205141296 +transit,101.93205193483747,2.248855417859384 +transit,101.93941220276497,2.2437227775198725 +transit,101.94677241937113,2.2385900995819448 +transit,101.95413258477348,2.233457384131943 +transit,101.96149269908949,2.2283246312562115 +transit,101.96885276243671,2.2231918410410896 +transit,101.9762127749326,2.2180590135729177 +transit,101.98357273669471,2.2129261489380334 +transit,101.99093264784052,2.2077932472227713 +transit,101.99829250848754,2.2026603085134666 +transit,102.00565231875328,2.1975273328964513 +transit,102.01301207875524,2.192394320458058 +transit,102.02037178861093,2.1872612712846147 +transit,102.02773144843786,2.182128185462449 +transit,102.03509105835354,2.176995063077888 +transit,102.04245061847547,2.171861904217255 +transit,102.04981012892117,2.166728708966873 +transit,102.05716958980813,2.1615954774130643 +transit,102.06452900125385,2.1564622096421475 +transit,102.07188836337586,2.1513289057404394 +transit,102.07924767629166,2.146195565794258 +transit,102.08660694011877,2.1410621898899183 +transit,102.09396615497467,2.1359287781137315 +transit,102.10132532097688,2.1307953305520098 +transit,102.10868443824293,2.1256618472910653 +transit,102.1160435068903,2.120528328417203 +transit,102.12340252703652,2.115394774016732 +transit,102.13076149879907,2.1102611841759553 +transit,102.1381204222955,2.1051275589811773 +transit,102.14547929764329,2.0999938985187017 +transit,102.15283812495996,2.0948602028748264 +transit,102.160196904363,2.089726472135852 +transit,102.16755563596995,2.084592706388073 +transit,102.17491431989829,2.0794589057177886 +transit,102.18227295626555,2.0743250702112914 +transit,102.18963154518923,2.0691911999548736 +transit,102.19699008678685,2.0640572950348264 +transit,102.20434858117592,2.05892335553744 +transit,102.21170702847394,2.0537893815490005 +transit,102.21906542879843,2.048655373155795 +transit,102.22642378226689,2.0435213304441096 +transit,102.23378208899683,2.0383872535002268 +transit,102.24114034910578,2.033253142410428 +transit,102.24849856271123,2.028118997260994 +transit,102.2558567299307,2.0229848181382017 +transit,102.26321485088171,2.0178506051283316 +transit,102.27057292568176,2.012716358317656 +transit,102.27793095444835,2.007582077792452 +transit,102.28528893729903,2.00244776363899 +transit,102.29264687435126,1.9973134159435422 +transit,102.3000047657226,1.9921790347923782 +transit,102.30736261153054,1.9870446202717655 +transit,102.31472041189258,1.9819101724679717 +transit,102.32207816692626,1.9767756914672616 +transit,102.32943587674907,1.9716411773558984 +transit,102.33679354147853,1.9665066302201457 +transit,102.34415116123216,1.9613720501462628 +transit,102.35150873612747,1.9562374372205096 +transit,102.35886626628196,1.9511027915291435 +transit,102.36622375181315,1.9459681131584208 +transit,102.37358119283857,1.9408334021945972 +transit,102.38093858947572,1.935698658723926 +transit,102.3882959418421,1.9305638828326581 +transit,102.39565325005523,1.925429074607045 +transit,102.40301051423265,1.920294234133335 +transit,102.41036773449184,1.9151593614977762 +transit,102.41772491095034,1.910024456786615 +transit,102.42508204372564,1.9048895200860958 +transit,102.43243913293527,1.8997545514824623 +transit,102.43979617869674,1.8946195510619552 +transit,102.44715318112758,1.889484518910817 +transit,102.45451014034526,1.8843494551152842 +transit,102.46186705646734,1.8792143597615973 +transit,102.46922392961133,1.8740792329359908 +transit,102.47658075989472,1.868944074724699 +transit,102.48393754743505,1.8638088852139574 +transit,102.4912942923498,1.858673664489995 +transit,102.49865099475655,1.853538412639045 +transit,102.50600765477274,1.8484031297473364 +transit,102.51336427251593,1.8432678159010962 +transit,102.52072084810364,1.83813247118655 +transit,102.52807738165336,1.8329970956899249 +transit,102.53543387328261,1.8278616894974433 +transit,102.54279032310893,1.8227262526953285 +transit,102.55014673124981,1.8175907853697992 +transit,102.55750309782279,1.8124552876070774 +transit,102.56485942294536,1.8073197594933814 +transit,102.57221570673505,1.802184201114926 +transit,102.57957194930938,1.797048612557929 +transit,102.58692815078587,1.7919129939086027 +transit,102.59428431128202,1.7867773452531608 +transit,102.60164043091537,1.7816416666778148 +transit,102.6089965098034,1.7765059582687748 +transit,102.61635254806366,1.7713702201122492 +transit,102.62370854581367,1.7662344522944466 +transit,102.63106450317092,1.761098654901572 +transit,102.63842042025296,1.7559628280198303 +transit,102.64577629717728,1.7508269717354255 +transit,102.65313213406141,1.7456910861345591 +transit,102.66048793102286,1.7405551713034326 +transit,102.66784368817916,1.735419227328246 +transit,102.67519940564782,1.7302832542951962 +transit,102.68255508354636,1.725147252290482 +transit,102.6899107219923,1.7200112214002978 +transit,102.69726632110316,1.7148751617108373 +transit,102.70462188099646,1.7097390733082953 +transit,102.71197740178971,1.7046029562788627 +transit,102.71933288360043,1.6994668107087305 +transit,102.72668832654614,1.6943306366840876 +transit,102.73404373074436,1.6891944342911214 +transit,102.74139909631262,1.6840582036160194 +transit,102.74875442336842,1.678921944744967 +transit,102.75610971202929,1.673785657764148 +transit,102.76346496241275,1.6686493427597462 +transit,102.77082017463631,1.6635129998179425 +transit,102.77817534881751,1.6583766290249164 +transit,102.78553048507385,1.653240230466849 +transit,102.79288558352285,1.648103804229917 +transit,102.80024064428204,1.642967350400297 +transit,102.80759566746895,1.6378308690641663 +transit,102.81495065320107,1.6326943603076969 +transit,102.82230560159593,1.627557824217063 +transit,102.82966051277107,1.622421260878435 +transit,102.837015386844,1.6172846703779853 +transit,102.84437022393223,1.6121480528018823 +transit,102.85172502415328,1.6070114082362945 +transit,102.8590797876247,1.6018747367673885 +transit,102.86643451446398,1.5967380384813301 +transit,102.87378920478864,1.5916013134642835 +transit,102.88114385871621,1.5864645618024122 +transit,102.88849847636423,1.5813277835818789 +transit,102.89585305785019,1.576190978888844 +transit,102.90320760329163,1.5710541478094675 +transit,102.91056211280608,1.5659172904299077 +transit,102.91791658651103,1.5607804068363227 +transit,102.92527102452402,1.5556434971148676 +transit,102.93262542696257,1.5505065613516982 +transit,102.93997979394422,1.5453695996329682 +transit,102.94733412558647,1.5402326120448304 +transit,102.95468842200684,1.5350955986734367 +transit,102.96204268332286,1.5299585596049368 +transit,102.96939690965205,1.5248214949254808 +transit,102.97675110111193,1.519684404721216 +transit,102.98410525782003,1.5145472890782903 +transit,102.99145937989388,1.5094101480828477 +transit,102.99881346745097,1.5042729818210352 +transit,103.00616752060886,1.4991357903789955 +transit,103.01352153948505,1.493998573842871 +transit,103.02087552419707,1.4888613322988025 +transit,103.02822947486244,1.4837240658329311 +transit,103.03558339159869,1.4785867745313956 +transit,103.04293727452334,1.4734494584803337 +transit,103.0502911237539,1.4683121177658822 +transit,103.05764493940791,1.4631747524741774 +transit,103.06499872160289,1.4580373626913539 +transit,103.07235247045635,1.4528999485035443 +transit,103.07970618608584,1.4477625099968825 +transit,103.08705986860886,1.4426250472574986 +transit,103.09441351814294,1.4374875603715247 +transit,103.10176713480561,1.4323500494250883 +transit,103.1091207187144,1.4272125145043184 +transit,103.11647426998681,1.4220749556953414 +transit,103.12382778874039,1.4169373730842842 +transit,103.13118127509264,1.4117997667572708 +transit,103.13853472916111,1.4066621368004255 +transit,103.1458881510633,1.4015244832998714 +transit,103.15324154091674,1.3963868063417306 +transit,103.16059489883897,1.3912491060121224 +transit,103.16794822494751,1.3861113823971678 +transit,103.17530151935986,1.3809736355829842 +transit,103.18265478219358,1.3758358656556917 +transit,103.19000801356617,1.3706980727014035 +transit,103.19736121359517,1.3655602568062382 +transit,103.2047143823981,1.3604224180563078 +transit,103.21206752009248,1.3552845565377272 +transit,103.21942062679584,1.350146672336609 +transit,103.22677370262569,1.3450087655390632 +transit,103.23412674769959,1.3398708362312017 +transit,103.24147976213504,1.334732884499133 +transit,103.24883274604957,1.3295949104289662 +transit,103.2561856995607,1.324456914106809 +transit,103.26353862278596,1.3193188956187667 +transit,103.27089151584289,1.314180855050945 +transit,103.278244378849,1.3090427924894494 +transit,103.28559721192181,1.3039047080203823 +transit,103.29295001517886,1.2987666017298465 +transit,103.30030278873767,1.2936284737039434 +transit,103.30765553271577,1.288490324028774 +transit,103.3150082472307,1.2833521527904372 +transit,103.32236093239995,1.2782139600750326 +transit,103.32971358834106,1.2730757459686564 +transit,103.33706621517157,1.2679375105574051 +transit,103.344418813009,1.2627992539273767 +transit,103.35177138197088,1.257660976164664 +transit,103.35912392217473,1.2525226773553617 +transit,103.36647643373809,1.2473843575855623 +transit,103.37382891677846,1.2422460169413576 +transit,103.38118137141339,1.2371076555088392 +transit,103.3885337977604,1.231969273374096 +transit,103.39588619593702,1.226830870623219 +transit,103.40323856606076,1.221692447342295 +transit,103.41059090824918,1.2165540036174116 +transit,103.41794322261978,1.211415539534655 +transit,103.42529550929011,1.206277055180112 +transit,103.43264776837766,1.2011385506398657 +WP6,103.44,1.196000026 +transit,103.4440348984521,1.2037722281016348 +transit,103.44806981975256,1.2115444237502009 +transit,103.45210476404904,1.2193166129039905 +transit,103.45613973148924,1.2270887955212961 +transit,103.46017472222083,1.2348609715604077 +transit,103.4642097363915,1.242633140979616 +transit,103.46824477414893,1.2504053037372107 +transit,103.47227983564082,1.2581774597914792 +transit,103.47631492101488,1.2659496091007107 +transit,103.48035003041878,1.273721751623191 +transit,103.48438516400023,1.281493887317206 +transit,103.48842032190694,1.2892660161410416 +transit,103.49245550428662,1.2970381380529825 +transit,103.49649071128698,1.304810253011311 +transit,103.50052594305572,1.3125823609743108 +transit,103.50456119974056,1.3203544619002632 +transit,103.50859648148923,1.328126555747449 +transit,103.51263178844945,1.335898642474149 +transit,103.51666712076894,1.3436707220386421 +transit,103.52070247859544,1.3514427943992064 +transit,103.52473786207668,1.3592148595141196 +transit,103.52877327136038,1.3669869173416582 +transit,103.53280870659428,1.3747589678400982 +transit,103.53684416792613,1.3825310109677134 +transit,103.5408796555037,1.390303046682779 +transit,103.54491516947469,1.3980750749435669 +transit,103.5489507099869,1.4058470957083495 +transit,103.55298627718804,1.4136191089353984 +transit,103.5570218712259,1.421391114582983 +transit,103.56105749224824,1.4291631126093731 +transit,103.56509314040281,1.4369351029728372 +transit,103.56912881583737,1.4447070856316422 +transit,103.57316451869974,1.452479060544055 +transit,103.57720024913765,1.4602510276683411 +transit,103.5812360072989,1.4680229869627643 +transit,103.58527179333126,1.4757949383855895 +transit,103.58930760738252,1.4835668818950782 +transit,103.59334344960048,1.491338817449493 +transit,103.59737932013292,1.499110745007094 +transit,103.60141521912765,1.5068826645261406 +transit,103.60545114673245,1.5146545759648926 +transit,103.60948710309515,1.5224264792816067 +transit,103.61352308836354,1.5301983744345402 +transit,103.61755910268543,1.5379702613819488 +transit,103.62159514620865,1.5457421400820872 +transit,103.62563121908101,1.5535140104932088 +transit,103.62966732145033,1.561285872573567 +transit,103.63370345346443,1.5690577262814127 +transit,103.63773961527116,1.5768295715749974 +transit,103.64177580701833,1.5846014084125701 +transit,103.6458120288538,1.592373236752379 +transit,103.6498482809254,1.6001450565526734 +transit,103.65388456338096,1.607916867771698 +transit,103.65792087636835,1.6156886703676991 +transit,103.66195722003542,1.6234604642989214 +transit,103.66599359453001,1.6312322495236073 +WP7,103.67003,1.639004026 +transit,103.66240477485763,1.6435605098711012 +transit,103.65477951514863,1.648116964243239 +transit,103.64715422077721,1.6526733890344614 +transit,103.63952889164753,1.657229784162814 +transit,103.63190352766377,1.6617861495463415 +transit,103.62427812873014,1.6663424851030881 +transit,103.61665269475081,1.6708987907510977 +transit,103.60902722562999,1.6754550664084111 +transit,103.60140172127184,1.6800113119930717 +transit,103.59377618158057,1.6845675274231189 +transit,103.58615060646035,1.689123712616592 +transit,103.57852499581539,1.6936798674915303 +transit,103.57089934954988,1.6982359919659715 +transit,103.563273667568,1.7027920859579515 +transit,103.55564794977396,1.7073481493855067 +transit,103.54802219607193,1.711904182166672 +transit,103.54039640636613,1.716460184219482 +transit,103.53277058056074,1.721016155461969 +transit,103.52514471855996,1.725572095812165 +transit,103.517518820268,1.7301280051881018 +transit,103.50989288558903,1.7346838835078089 +transit,103.50226691442727,1.7392397306893157 +transit,103.49464090668691,1.743795546650651 +transit,103.48701486227216,1.7483513313098415 +transit,103.47938878108722,1.752907084584914 +transit,103.47176266303629,1.7574628063938937 +transit,103.46413650802356,1.762018496654805 +transit,103.45651031595324,1.7665741552856715 +transit,103.44888408672954,1.771129782204516 +transit,103.44125782025667,1.7756853773293593 +transit,103.43363151643881,1.7802409405782227 +transit,103.4260051751802,1.7847964718691254 +transit,103.41837879638501,1.7893519711200867 +transit,103.41075237995749,1.793907438249123 +transit,103.40312592580183,1.7984628731742522 +transit,103.39549943382222,1.8030182758134896 +transit,103.3878729039229,1.8075736460848493 +transit,103.38024633600807,1.8121289839063461 +transit,103.37261972998193,1.816684289195991 +transit,103.36499308574872,1.8212395618717976 +transit,103.35736640321262,1.8257948018517758 +transit,103.34973968227789,1.8303500090539349 +transit,103.34211292284868,1.8349051833962842 +transit,103.33448612482928,1.8394603247968309 +transit,103.32685928812386,1.8440154331735823 +transit,103.31923241263664,1.8485705084445434 +transit,103.31160549827186,1.8531255505277202 +transit,103.30397854493371,1.857680559341114 +transit,103.29635155252645,1.8622355348027306 +transit,103.28872452095426,1.8667904768305685 +transit,103.2810974501214,1.8713453853426305 +transit,103.27347033993205,1.8759002602569148 +transit,103.26584319029047,1.8804551014914208 +transit,103.25821600110088,1.885009908964146 +transit,103.25058877226748,1.8895646825930859 +transit,103.24296150369453,1.894119422296237 +transit,103.23533419528623,1.8986741279915933 +transit,103.22770684694682,1.9032287995971486 +transit,103.22007945858053,1.9077834370308946 +transit,103.21245203009158,1.9123380402108232 +transit,103.20482456138421,1.9168926090549236 +transit,103.19719705236267,1.9214471434811855 +transit,103.18956950293115,1.9260016434075975 +transit,103.1819419129939,1.9305561087521468 +transit,103.17431428245517,1.9351105394328183 +transit,103.16668661121918,1.9396649353675983 +transit,103.15905889919017,1.9442192964744696 +transit,103.15143114627237,1.9487736226714165 +transit,103.14380335237003,1.9533279138764188 +transit,103.13617551738737,1.957882170007458 +transit,103.12854764122865,1.962436390982514 +transit,103.1209197237981,1.9669905767195657 +transit,103.11329176499996,1.9715447271365898 +transit,103.10566376473847,1.976098842151563 +transit,103.09803572291787,1.9806529216824602 +transit,103.09040763944242,1.9852069656472566 +transit,103.08277951421636,1.9897609739639248 +transit,103.07515134714392,1.9943149465504364 +transit,103.06752313812935,1.998868883324763 +transit,103.05989488707691,2.003422784204874 +transit,103.05226659389083,2.007976649108739 +transit,103.04463825847539,2.0125304779543245 +transit,103.0370098807348,2.017084270659597 +transit,103.02938146057335,2.0216380271425236 +transit,103.02175299789526,2.0261917473210675 +transit,103.0141244926048,2.030745431113192 +transit,103.00649594460621,2.035299078436859 +transit,102.99886735380376,2.03985268921003 +transit,102.9912387201017,2.0444062633506648 +transit,102.98361004340428,2.0489598007767227 +transit,102.97598132361577,2.0535133014061597 +transit,102.96835256064043,2.058066765156934 +transit,102.96072375438249,2.0626201919469995 +transit,102.95309490474624,2.067173581694312 +transit,102.94546601163592,2.0717269343168243 +transit,102.93783707495581,2.076280249732488 +transit,102.93020809461017,2.080833527859254 +transit,102.92257907050325,2.085386768615072 +transit,102.91495000253931,2.0899399719178904 +transit,102.90732089062266,2.0944931376856575 +transit,102.89969173465752,2.0990462658363187 +transit,102.89206253454817,2.10359935628782 +transit,102.88443329019888,2.1081524089581047 +transit,102.87680400151393,2.1127054237651155 +transit,102.86917466839759,2.117258400626795 +transit,102.86154529075411,2.121811339461083 +transit,102.85391586848777,2.126364240185919 +transit,102.84628640150285,2.1309171027192413 +transit,102.83865688970364,2.1354699269789856 +transit,102.83102733299438,2.1400227128830918 +transit,102.82339773127937,2.14457546034949 +transit,102.81576808446289,2.1491281692961155 +transit,102.8081383924492,2.1536808396409013 +transit,102.80050865514258,2.158233471301778 +transit,102.79287887244733,2.162786064196675 +transit,102.78524904426772,2.167338618243522 +transit,102.77761917050802,2.171891133360247 +transit,102.76998925107253,2.176443609464775 +transit,102.76235928586553,2.1809960464750318 +transit,102.7547292747913,2.1855484443089415 +transit,102.74709921775414,2.190100802884428 +transit,102.73946911465832,2.1946531221194108 +transit,102.73183896540813,2.199205401931813 +transit,102.72420876990786,2.203757642239551 +transit,102.7165785280618,2.2083098429605448 +transit,102.70894823977424,2.212862004012711 +transit,102.70131790494949,2.217414125313964 +transit,102.69368752349183,2.2219662067822195 +transit,102.68605709530554,2.22651824833539 +transit,102.67842662029493,2.231070249891388 +transit,102.67079609836429,2.235622211368125 +transit,102.66316552941792,2.2401741326835083 +transit,102.65553491336013,2.244726013755447 +transit,102.6479042500952,2.2492778545018495 +transit,102.64027353952743,2.25382965484062 +transit,102.63264278156113,2.2583814146896644 +transit,102.6250119761006,2.262933133966885 +transit,102.61738112305014,2.2674848125901845 +transit,102.60975022231405,2.2720364504774637 +transit,102.60211927379666,2.276588047546622 +transit,102.59448827740223,2.281139603715559 +transit,102.58685723303512,2.2856911189021707 +transit,102.5792261405996,2.290242593024352 +WP8,102.571595,2.294794026 +transit,102.56431289950218,2.299920639760812 +transit,102.55703074701604,2.3050472157902515 +transit,102.5497485424256,2.3101737540038654 +transit,102.54246628561485,2.3153002543172034 +transit,102.53518397646778,2.3204267166458106 +transit,102.52790161486841,2.325553140905231 +transit,102.52061920070072,2.3306795270110077 +transit,102.51333673384873,2.335805874878681 +transit,102.50605421419644,2.340932184423789 +transit,102.49877164162784,2.346058455561871 +transit,102.49148901602695,2.351184688208461 +transit,102.48420633727774,2.3563108822790935 +transit,102.47692360526425,2.3614370376893 +transit,102.46964081987045,2.3665631543546124 +transit,102.46235798098036,2.3716892321905574 +transit,102.45507508847797,2.3768152711126636 +transit,102.44779214224731,2.3819412710364545 +transit,102.44050914217235,2.387067231877455 +transit,102.43322608813709,2.3921931535511853 +transit,102.42594298002557,2.3973190359731675 +transit,102.41865981772175,2.4024448790589177 +transit,102.41137660110967,2.4075706827239522 +transit,102.4040933300733,2.4126964468837877 +transit,102.39681000449666,2.4178221714539356 +transit,102.38952662426375,2.4229478563499063 +transit,102.38224318925857,2.4280735014872104 +transit,102.37495969936514,2.433199106781355 +transit,102.36767615446743,2.4383246721478455 +transit,102.36039255444948,2.4434501975021856 +transit,102.35310889919528,2.4485756827598784 +transit,102.3458251885888,2.453701127836423 +transit,102.3385414225141,2.4588265326473198 +transit,102.33125760085515,2.463951897108063 +transit,102.32397372349595,2.469077221134149 +transit,102.31668979032054,2.474202504641071 +transit,102.30940580121288,2.4793277475443203 +transit,102.30212175605699,2.484452949759386 +transit,102.29483765473688,2.489578111201755 +transit,102.28755349713656,2.494703231786915 +transit,102.28026928314,2.4998283114303477 +transit,102.27298501263125,2.5049533500475367 +transit,102.2657006854943,2.5100783475539625 +transit,102.25841630161314,2.5152033038651025 +transit,102.25113186087178,2.520328218896435 +transit,102.24384736315423,2.5254530925634318 +transit,102.23656280834449,2.5305779247815687 +transit,102.22927819632658,2.535702715466315 +transit,102.22199352698448,2.5408274645331415 +transit,102.21470880020222,2.5459521718975133 +transit,102.2074240158638,2.5510768374748984 +transit,102.2001391738532,2.5562014611807573 +transit,102.19285427405445,2.561326042930555 +transit,102.18556931635156,2.5664505826397495 +transit,102.17828430062852,2.571575080223798 +transit,102.17099922676935,2.576699535598158 +transit,102.16371409465805,2.581823948678284 +transit,102.15642890417861,2.5869483193796263 +transit,102.14914365521507,2.5920726476176372 +transit,102.14185834765141,2.597196933307763 +transit,102.13457298137165,2.6023211763654523 +transit,102.12728755625977,2.607445376706149 +transit,102.12000207219981,2.6125695342452966 +transit,102.11271652907577,2.617693648898334 +transit,102.10543092677165,2.622817720580701 +transit,102.09814526517145,2.627941749207835 +transit,102.09085954415919,2.633065734695171 +transit,102.08357376361887,2.6381896769581417 +transit,102.0762879234345,2.643313575912177 +transit,102.06900202349009,2.6484374314727086 +transit,102.06171606366964,2.6535612435551625 +transit,102.05443004385717,2.6586850120749643 +transit,102.04714396393666,2.663808736947536 +transit,102.03985782379215,2.6689324180883016 +transit,102.03257162330765,2.6740560554126773 +transit,102.02528536236713,2.679179648836083 +transit,102.01799904085463,2.684303198273934 +transit,102.01071265865416,2.6894267036416433 +transit,102.0034262156497,2.6945501648546224 +transit,101.99613971172529,2.699673581828281 +transit,101.98885314676492,2.704796954478027 +transit,101.9815665206526,2.7099202827192648 +transit,101.97427983327236,2.7150435664673993 +transit,101.96699308450819,2.720166805637832 +transit,101.95970627424408,2.725290000145962 +transit,101.95241940236409,2.730413149907187 +transit,101.94513246875218,2.7355362548369033 +transit,101.93784547329238,2.740659314850504 +transit,101.9305584158687,2.7457823298633808 +transit,101.92327129636516,2.750905299790924 +transit,101.91598411466575,2.7560282245485186 +transit,101.9086968706545,2.7611511040515526 +transit,101.90140956421538,2.766273938215409 +transit,101.89412219523246,2.7713967269554693 +transit,101.8868347635897,2.776519470187113 +transit,101.87954726917114,2.7816421678257166 +transit,101.87225971186078,2.786764819786656 +transit,101.86497209154263,2.791887425985305 +transit,101.8576844081007,2.7970099863370352 +transit,101.850396661419,2.8021325007572147 +transit,101.84310885138154,2.807254969161211 +transit,101.83582097787233,2.81237739146439 +transit,101.8285330407754,2.8174997675821123 +transit,101.82124503997474,2.8226220974297416 +transit,101.81395697535437,2.8277443809226352 +transit,101.8066688467983,2.8328666179761517 +transit,101.79938065419054,2.8379888085056435 +transit,101.7920923974151,2.8431109524264646 +transit,101.78480407635601,2.8482330496539654 +transit,101.77751569089726,2.8533551001034945 +transit,101.77022724092288,2.8584771036903978 +transit,101.76293872631686,2.86359906033002 +transit,101.75565014696322,2.8687209699377028 +transit,101.748361502746,2.8738428324287866 +transit,101.74107279354916,2.878964647718609 +transit,101.73378401925677,2.8840864157225057 +transit,101.7264951797528,2.889208136355812 +transit,101.71920627492129,2.894329809533858 +transit,101.71191730464624,2.8994514351719736 +transit,101.70462826881166,2.9045730131854857 +transit,101.69733916730158,2.9096945434897195 +WP9,101.69005,2.914816026 +transit,101.68535588738197,2.922015798814107 +transit,101.6806617149491,2.929215550992293 +transit,101.67596748255315,2.9364152824833907 +transit,101.6712731900459,2.9436149932362317 +transit,101.66657883727906,2.9508146831996442 +transit,101.66188442410441,2.9580143523224574 +transit,101.65718995037369,2.965214000553495 +transit,101.65249541593862,2.9724136278415783 +transit,101.64780082065093,2.979613234135528 +transit,101.64310616436235,2.9868128193841628 +transit,101.63841144692458,2.994012383536298 +transit,101.63371666818934,3.0012119265407464 +transit,101.62902182800832,3.0084114483463194 +transit,101.62432692623325,3.0156109489018266 +transit,101.61963196271579,3.0228104281560744 +transit,101.61493693730763,3.030009886057866 +transit,101.61024184986047,3.037209322556003 +transit,101.60554670022597,3.044408737599287 +transit,101.60085148825578,3.051608131136514 +transit,101.59615621380159,3.058807503116481 +transit,101.59146087671505,3.0660068534879774 +transit,101.58676547684779,3.0732061821997965 +transit,101.58207001405147,3.080405489200724 +transit,101.57737448817771,3.0876047744395483 +transit,101.57267889907816,3.0948040378650505 +transit,101.56798324660443,3.1020032794260133 +transit,101.56328753060814,3.1092024990712144 +transit,101.55859175094089,3.11640169674943 +transit,101.55389590745432,3.123600872409436 +WP1,101.5492,3.130800026 +transit,101.54671815629806,3.139413635151459 +transit,101.54423627194028,3.148027236962458 +transit,101.54175434681427,3.156640831412747 +transit,101.53927238080762,3.165254418482073 +transit,101.53679037380788,3.1738679981501847 +transit,101.53430832570264,3.182481570396828 +transit,101.53182623637944,3.1910951352017496 +transit,101.52934410572585,3.199708692544694 +transit,101.52686193362943,3.208322242405403 +transit,101.5243797199777,3.216935784763622 +transit,101.5218974646582,3.225549319599091 +transit,101.51941516755845,3.2341628468915533 +transit,101.51693282856597,3.2427763666207476 +transit,101.51445044756828,3.2513898787664135 +transit,101.51196802445287,3.260003383308289 +transit,101.50948555910726,3.2686168802261117 +transit,101.50700305141892,3.2772303694996183 +transit,101.50452050127534,3.2858438511085444 +transit,101.50203790856398,3.294457325032625 +transit,101.49955527317233,3.3030707912515926 +transit,101.49707259498784,3.3116842497451797 +transit,101.49458987389797,3.32029770049312 +transit,101.49210710979015,3.3289111434751426 +transit,101.48962430255183,3.337524578670978 +transit,101.48714145207045,3.346138006060355 +transit,101.4846585582334,3.354751425623002 +transit,101.48217562092815,3.3633648373386458 +transit,101.47969264004205,3.371978241187012 +transit,101.47720961546253,3.380591637147827 +transit,101.47472654707698,3.389205025200813 +transit,101.4722434347728,3.3978184053256952 +transit,101.46976027843735,3.4064317775021946 +transit,101.467277077958,3.4150451417100323 +transit,101.46479383322212,3.4236584979289284 +transit,101.46231054411707,3.4322718461386046 +transit,101.45982721053018,3.4408851863187766 +transit,101.45734383234881,3.4494985184491633 +transit,101.45486040946028,3.45811184250948 +transit,101.45237694175192,3.4667251584794423 +transit,101.44989342911106,3.4753384663387643 +transit,101.44740987142497,3.4839517660671615 +transit,101.44492626858099,3.4925650576443434 +transit,101.4424426204664,3.5011783410500232 +transit,101.43995892696849,3.5097916162639105 +transit,101.43747518797453,3.518404883265716 +transit,101.43499140337178,3.5270181420351463 +transit,101.43250757304754,3.53563139255191 +transit,101.43002369688902,3.5442446347957137 +transit,101.42753977478351,3.5528578687462615 +transit,101.42505580661822,3.5614710943832595 +transit,101.42257179228038,3.5700843116864105 +transit,101.42008773165722,3.578697520635415 +transit,101.41760362463596,3.587310721209977 +transit,101.4151194711038,3.595923913389796 +transit,101.41263527094794,3.60453709715457 +transit,101.41015102405557,3.6131502724839986 +transit,101.40766673031388,3.6217634393577787 +transit,101.40518238961003,3.6303765977556064 +transit,101.4026980018312,3.6389897476571775 +transit,101.40021356686454,3.6476028890421857 +transit,101.3977290845972,3.6562160218903226 +transit,101.39524455491633,3.6648291461812827 +transit,101.39275997770906,3.673442261894757 +transit,101.39027535286253,3.6820553690104316 +transit,101.38779068026382,3.690668467508 +transit,101.38530595980008,3.6992815573671485 +transit,101.38282119135837,3.7078946385675633 +transit,101.38033637482583,3.7165077110889295 +transit,101.37785151008951,3.7251207749109336 +transit,101.37536659703649,3.7337338300132594 +transit,101.37288163555385,3.742346876375586 +transit,101.37039662552866,3.7509599139775998 +transit,101.36791156684792,3.759572942798976 +transit,101.36542645939873,3.768185962819398 +transit,101.3629413030681,3.776798974018542 +transit,101.36045609774305,3.785411976376087 +transit,101.35797084331062,3.7940249698717072 +transit,101.35548553965779,3.8026379544850792 +transit,101.35300018667158,3.811250930195875 +transit,101.35051478423898,3.8198638969837684 +transit,101.34802933224697,3.828476854828432 +transit,101.34554383058251,3.837089803709535 +transit,101.34305827913259,3.8457027436067484 +transit,101.34057267778415,3.8543156744997398 +transit,101.33808702642416,3.862928596368177 +transit,101.33560132493955,3.871541509191725 +transit,101.33311557321724,3.8801544129500525 +transit,101.33062977114416,3.888767307622818 +transit,101.32814391860724,3.897380193189688 +transit,101.32565801549336,3.9059930696303256 +transit,101.32317206168943,3.914605936924388 +transit,101.32068605708234,3.923218795051537 +transit,101.31820000155898,3.931831643991432 +transit,101.3157138950062,3.9404444837237262 +transit,101.31322773731087,3.94905731422808 +transit,101.31074152835984,3.957670135484147 +transit,101.30825526803996,3.96628294747158 +transit,101.30576895623805,3.9748957501700337 +transit,101.30328259284097,3.983508543559159 +transit,101.3007961777355,3.9921213276186065 +transit,101.29830971080848,4.0007341023280265 +transit,101.2958231919467,4.009346867667064 +transit,101.29333662103693,4.017959623615371 +transit,101.29084999796596,4.02657237015259 +transit,101.28836332262058,4.035185107258367 +transit,101.28587659488755,4.043797834912345 +transit,101.28338981465362,4.052410553094166 +transit,101.28090298180553,4.061023261783475 +transit,101.27841609623002,4.069635960959906 +transit,101.27592915781382,4.078248650603104 +transit,101.27344216644364,4.086861330692703 +transit,101.2709551220062,4.095474001208342 +transit,101.2684680243882,4.104086662129656 +transit,101.26598087347632,4.112699313436277 +transit,101.26349366915726,4.12131195510784 +transit,101.26100641131767,4.129924587123978 +transit,101.25851909984422,4.138537209464321 +transit,101.25603173462356,4.1471498221084975 +transit,101.25354431554236,4.155762425036137 +transit,101.25105684248723,4.164375018226867 +transit,101.24856931534481,4.172987601660313 +transit,101.2460817340017,4.181600175316098 +transit,101.24359409834452,4.190212739173851 +transit,101.24110640825987,4.198825293213188 +transit,101.23861866363433,4.2074378374137344 +transit,101.23613086435448,4.216050371755109 +transit,101.23364301030689,4.224662896216931 +transit,101.23115510137814,4.233275410778818 +transit,101.22866713745474,4.241887915420385 +transit,101.22617911842326,4.25050041012125 +transit,101.22369104417024,4.259112894861023 +transit,101.22120291458218,4.26772536961932 +transit,101.2187147295456,4.2763378343757505 +transit,101.216226488947,4.284950289109929 +transit,101.21373819267288,4.293562733801459 +transit,101.21124984060971,4.302175168429952 +transit,101.208761432644,4.310787592975013 +transit,101.20627296866216,4.319400007416247 +transit,101.20378444855069,4.328012411733259 +transit,101.20129587219601,4.336624805905652 +transit,101.19880723948458,4.345237189913028 +transit,101.1963185503028,4.353849563734988 +transit,101.1938298045371,4.362461927351128 +transit,101.19134100207388,4.371074280741048 +transit,101.18885214279955,4.379686623884345 +transit,101.18636322660046,4.3882989567606145 +transit,101.18387425336303,4.39691127934945 +transit,101.1813852229736,4.405523591630444 +transit,101.17889613531854,4.414135893583188 +transit,101.17640699028419,4.422748185187274 +transit,101.17391778775689,4.43136046642229 +transit,101.17142852762296,4.439972737267824 +transit,101.16893920976874,4.448584997703461 +transit,101.16644983408051,4.4571972477087884 +transit,101.16396040044458,4.465809487263389 +transit,101.16147090874723,4.4744217163468445 +transit,101.15898135887475,4.4830339349387405 +transit,101.1564917507134,4.491646143018653 +transit,101.15400208414943,4.5002583405661625 +transit,101.1515123590691,4.508870527560845 +transit,101.14902257535863,4.517482703982278 +transit,101.14653273290426,4.526094869810036 +transit,101.14404283159222,4.534707025023693 +transit,101.14155287130868,4.543319169602823 +transit,101.13906285193985,4.551931303526992 +transit,101.13657277337194,4.560543426775776 +transit,101.13408263549111,4.569155539328738 +transit,101.13159243818352,4.5777676411654475 +transit,101.12910218133531,4.586379732265473 +transit,101.12661186483265,4.594991812608375 +transit,101.12412148856168,4.603603882173716 +transit,101.1216310524085,4.612215940941063 +transit,101.11914055625925,4.6208279888899675 +WP2,101.11665,4.629440026 +transit,101.1116365630793,4.636796143776513 +transit,101.10662302244353,4.6441522244408215 +transit,101.10160937792581,4.6515082679331075 +transit,101.09659562935923,4.658864274193555 +transit,101.09158177657683,4.6662202431623365 +transit,101.08656781941173,4.673576174779622 +transit,101.08155375769694,4.680932068985579 +transit,101.07653959126552,4.688287925720372 +transit,101.07152531995051,4.695643744924158 +transit,101.06651094358493,4.702999526537091 +transit,101.0614964620018,4.710355270499322 +transit,101.05648187503412,4.717710976750996 +transit,101.05146718251487,4.725066645232254 +transit,101.04645238427705,4.732422275883232 +transit,101.04143748015362,4.739777868644067 +transit,101.03642246997754,4.747133423454884 +transit,101.03140735358177,4.7544889402558095 +transit,101.02639213079924,4.761844418986961 +transit,101.02137680146286,4.769199859588455 +transit,101.01636136540559,4.776555262000405 +transit,101.0113458224603,4.783910626162916 +transit,101.00633017245991,4.791265952016091 +transit,101.00131441523729,4.7986212395000285 +transit,100.99629855062533,4.8059764885548235 +transit,100.99128257845688,4.813331699120564 +transit,100.98626649856479,4.820686871137338 +transit,100.9812503107819,4.828042004545224 +transit,100.97623401494107,4.835397099284299 +transit,100.97121761087509,4.842752155294637 +transit,100.96620109841678,4.850107172516305 +transit,100.96118447739893,4.857462150889367 +transit,100.95616774765435,4.864817090353879 +transit,100.9511509090158,4.872171990849901 +transit,100.94613396131604,4.87952685231748 +transit,100.94111690438784,4.886881674696663 +transit,100.93609973806393,4.894236457927489 +transit,100.93108246217706,4.90159120195 +transit,100.92606507655992,4.908945906704224 +transit,100.92104758104526,4.916300572130192 +transit,100.91602997546576,4.923655198167927 +transit,100.91101225965411,4.931009784757447 +transit,100.90599443344298,4.938364331838769 +transit,100.90097649666505,4.945718839351901 +transit,100.89595844915297,4.953073307236853 +transit,100.89094029073938,4.960427735433622 +transit,100.88592202125692,4.967782123882206 +transit,100.8809036405382,4.9751364725226 +transit,100.87588514841583,4.982490781294788 +transit,100.87086654472243,4.989845050138756 +transit,100.86584782929059,4.997199278994483 +transit,100.86082900195285,5.0045534678019425 +transit,100.8558100625418,5.011907616501104 +transit,100.85079101089,5.019261725031936 +transit,100.84577184682999,5.026615793334395 +transit,100.8407525701943,5.033969821348438 +transit,100.83573318081544,5.041323809014019 +transit,100.83071367852591,5.0486777562710845 +transit,100.82569406315825,5.056031663059574 +transit,100.8206743345449,5.063385529319429 +transit,100.81565449251838,5.070739354990583 +transit,100.81063453691111,5.078093140012962 +transit,100.80561446755557,5.085446884326492 +transit,100.80059428428419,5.092800587871093 +transit,100.7955739869294,5.100154250586678 +transit,100.79055357532363,5.1075078724131595 +transit,100.78553304929926,5.114861453290442 +transit,100.78051240868871,5.122214993158427 +transit,100.77549165332434,5.129568491957011 +transit,100.77047078303855,5.136921949626085 +transit,100.76544979766366,5.1442753661055365 +transit,100.76042869703207,5.151628741335249 +transit,100.75540748097607,5.1589820752551 +transit,100.75038614932802,5.166335367804962 +transit,100.74536470192022,5.173688618924702 +transit,100.74034313858496,5.1810418285541875 +transit,100.73532145915455,5.188394996633275 +transit,100.73029966346127,5.19574812310182 +transit,100.72527775133736,5.20310120789967 +transit,100.7202557226151,5.210454250966674 +transit,100.71523357712671,5.217807252242666 +transit,100.71021131470445,5.2251602116674905 +transit,100.70518893518053,5.232513129180969 +transit,100.70016643838714,5.2398660047229315 +transit,100.6951438241565,5.247218838233202 +transit,100.6901210923208,5.254571629651592 +transit,100.68509824271219,5.261924378917918 +transit,100.68007527516284,5.269277085971983 +transit,100.6750521895049,5.276629750753591 +transit,100.6700289855705,5.283982373202538 +transit,100.66500566319176,5.291334953258619 +transit,100.65998222220082,5.298687490861622 +transit,100.65495866242978,5.306039985951327 +transit,100.6499349837107,5.313392438467513 +transit,100.64491118587567,5.320744848349955 +transit,100.63988726875677,5.3280972155384205 +transit,100.63486323218602,5.335449539972675 +transit,100.6298390759955,5.342801821592474 +transit,100.62481480001722,5.350154060337575 +transit,100.6197904040832,5.3575062561477225 +transit,100.61476588802545,5.364858408962666 +transit,100.60974125167596,5.3722105187221425 +transit,100.60471649486671,5.379562585365886 +transit,100.59969161742966,5.386914608833628 +transit,100.59466661919677,5.394266589065092 +WP3,100.5896415,5.401618526 +transit,100.5813445401226,5.398777679035525 +transit,100.57304765748664,5.395936718513381 +transit,100.56475085205356,5.393095644494695 +transit,100.55645412378486,5.390254457040593 +transit,100.54815747264199,5.3874131562122045 +transit,100.53986089858641,5.384571742070661 +transit,100.53156440157957,5.381730214677086 +transit,100.52326798158292,5.378888574092612 +transit,100.51497163855791,5.376046820378368 +transit,100.50667537246598,5.373204953595482 +transit,100.49837918326854,5.370362973805085 +transit,100.49008307092704,5.367520881068305 +transit,100.48178703540292,5.364678675446276 +transit,100.47349107665755,5.361836357000125 +transit,100.46519519465238,5.358993925790986 +transit,100.4568993893488,5.356151381879984 +transit,100.44860366070824,5.353308725328258 +transit,100.44030800869207,5.3504659561969365 +transit,100.43201243326168,5.347623074547148 +transit,100.42371693437848,5.344780080440028 +transit,100.41542151200383,5.341936973936709 +transit,100.40712616609913,5.339093755098322 +transit,100.39883089662574,5.336250423986 +transit,100.39053570354503,5.3334069806608735 +transit,100.38224058681836,5.330563425184082 +transit,100.37394554640707,5.327719757616753 +transit,100.36565058227255,5.324875978020024 +transit,100.35735569437612,5.322032086455028 +transit,100.34906088267914,5.319188082982897 +transit,100.34076614714292,5.316343967664767 +transit,100.33247148772882,5.313499740561776 +transit,100.32417690439816,5.310655401735053 +transit,100.31588239711225,5.307810951245737 +transit,100.30758796583241,5.304966389154963 +transit,100.29929361051997,5.302121715523866 +transit,100.29099933113622,5.299276930413582 +transit,100.28270512764246,5.296432033885248 +WP4,100.274411,5.293587026 +transit,100.27692121572846,5.284947654341158 +transit,100.27943136189771,5.276308270128779 +transit,100.28194143862395,5.267668873383704 +transit,100.28445144602334,5.2590294641267725 +transit,100.28696138421206,5.250390042378823 +transit,100.28947125330627,5.241750608160693 +transit,100.2919810534221,5.233111161493218 +transit,100.29449078467569,5.224471702397231 +transit,100.29700044718314,5.215832230893566 +transit,100.29951004106057,5.207192747003053 +transit,100.30201956642406,5.198553250746522 +transit,100.30452902338972,5.189913742144798 +transit,100.3070384120736,5.18127422121871 +transit,100.30954773259175,5.172634687989083 +transit,100.31205698506024,5.163995142476737 +transit,100.31456616959508,5.155355584702496 +transit,100.31707528631232,5.146716014687179 +transit,100.31958433532795,5.138076432451605 +transit,100.32209331675796,5.129436838016594 +transit,100.32460223071836,5.120797231402956 +transit,100.32711107732511,5.112157612631509 +transit,100.32961985669418,5.103517981723063 +transit,100.33212856894153,5.094878338698431 +transit,100.33463721418308,5.086238683578423 +transit,100.33714579253477,5.077599016383843 +transit,100.33965430411253,5.068959337135502 +transit,100.34216274903224,5.060319645854201 +transit,100.3446711274098,5.051679942560748 +transit,100.3471794393611,5.043040227275942 +transit,100.34968768500201,5.034400500020585 +transit,100.35219586444838,5.025760760815474 +transit,100.35470397781607,5.017121009681407 +transit,100.3572120252209,5.008481246639183 +transit,100.35972000677872,4.999841471709591 +transit,100.3622279226053,4.991201684913431 +transit,100.36473577281647,4.982561886271489 +transit,100.36724355752803,4.973922075804558 +transit,100.36975127685574,4.965282253533426 +transit,100.37225893091536,4.956642419478879 +transit,100.37476651982267,4.948002573661705 +transit,100.3772740436934,4.9393627161026865 +transit,100.37978150264328,4.930722846822606 +transit,100.38228889678804,4.922082965842248 +transit,100.38479622624338,4.91344307318239 +transit,100.38730349112501,4.904803168863809 +transit,100.38981069154862,4.896163252907287 +transit,100.39231782762987,4.887523325333594 +transit,100.39482489948443,4.8788833861635075 +transit,100.39733190722797,4.870243435417798 +transit,100.39983885097611,4.86160347311724 +transit,100.4023457308445,4.852963499282601 +transit,100.40485254694875,4.84432351393465 +transit,100.40735929940448,4.835683517094153 +transit,100.40986598832728,4.827043508781877 +transit,100.41237261383273,4.818403489018586 +transit,100.41487917603644,4.8097634578250394 +transit,100.41738567505392,4.801123415222004 +transit,100.41989211100078,4.792483361230237 +transit,100.42239848399252,4.783843295870497 +transit,100.42490479414471,4.77520321916354 +transit,100.42741104157284,4.766563131130122 +transit,100.42991722639245,4.757923031790999 +transit,100.432423348719,4.749282921166923 +transit,100.43492940866801,4.740642799278644 +transit,100.43743540635495,4.732002666146916 +transit,100.43994134189529,4.723362521792482 +transit,100.44244721540448,4.714722366236092 +transit,100.44495302699798,4.706082199498494 +transit,100.4474587767912,4.697442021600429 +transit,100.44996446489958,4.688801832562642 +transit,100.45247009143853,4.680161632405875 +transit,100.45497565652344,4.671521421150867 +transit,100.45748116026972,4.662881198818358 +transit,100.45998660279275,4.654240965429086 +transit,100.46249198420789,4.645600721003786 +transit,100.46499730463051,4.636960465563193 +transit,100.46750256417596,4.628320199128039 +transit,100.47000776295955,4.619679921719062 +transit,100.47251290109665,4.611039633356986 +transit,100.47501797870255,4.602399334062545 +transit,100.47752299589257,4.593759023856464 +transit,100.480027952782,4.585118702759472 +transit,100.48253284948612,4.576478370792293 +transit,100.48503768612021,4.567838027975652 +transit,100.48754246279954,4.559197674330269 +transit,100.49004717963936,4.5505573098768695 +transit,100.49255183675491,4.541916934636172 +transit,100.49505643426144,4.533276548628894 +transit,100.49756097227416,4.524636151875753 +transit,100.50006545090828,4.515995744397465 +transit,100.50256987027902,4.507355326214745 +transit,100.50507423050155,4.498714897348309 +transit,100.50757853169105,4.490074457818864 +transit,100.51008277396272,4.481434007647124 +transit,100.51258695743171,4.4727935468538 +transit,100.51509108221315,4.464153075459594 +transit,100.5175951484222,4.455512593485217 +transit,100.520099156174,4.446872100951376 +transit,100.52260310558364,4.438231597878771 +transit,100.52510699676625,4.42959108428811 +transit,100.52761082983695,4.4209505602000885 +transit,100.53011460491079,4.412310025635412 +transit,100.53261832210288,4.403669480614776 +transit,100.53512198152828,4.395028925158879 +transit,100.53762558330205,4.386388359288419 +transit,100.54012912753923,4.377747783024089 +transit,100.54263261435489,4.369107196386585 +transit,100.54513604386402,4.360466599396596 +transit,100.54763941618167,4.351825992074816 +transit,100.55014273142284,4.343185374441935 +transit,100.55264598970253,4.33454474651864 +transit,100.55514919113573,4.325904108325621 +transit,100.5576523358374,4.317263459883561 +transit,100.56015542392257,4.308622801213148 +transit,100.56265845550614,4.299982132335064 +transit,100.56516143070309,4.29134145326999 +transit,100.56766434962834,4.2827007640386086 +transit,100.57016721239685,4.2740600646616 +transit,100.57267001912352,4.265419355159642 +transit,100.57517276992327,4.256778635553414 +transit,100.57767546491101,4.2481379058635875 +transit,100.58017810420161,4.2394971661108425 +transit,100.58268068790997,4.230856416315849 +transit,100.58518321615097,4.22221565649928 +transit,100.58768568903945,4.2135748866818075 +transit,100.59018810669028,4.204934106884102 +transit,100.59269046921828,4.19629331712683 +transit,100.59519277673833,4.187652517430662 +transit,100.59769502936523,4.17901170781626 +transit,100.60019722721378,4.170370888304292 +transit,100.60269937039881,4.1617300589154205 +transit,100.6052014590351,4.15308921967031 +transit,100.60770349323745,4.14444837058962 +transit,100.61020547312063,4.1358075116940105 +transit,100.61270739879942,4.1271666430041405 +transit,100.61520927038855,4.118525764540668 +transit,100.6177110880028,4.109884876324249 +transit,100.62021285175689,4.101243978375539 +transit,100.62271456176556,4.092603070715192 +transit,100.62521621814354,4.083962153363863 +transit,100.62771782100552,4.075321226342201 +transit,100.63021937046621,4.066680289670856 +transit,100.63272086664031,4.058039343370478 +transit,100.6352223096425,4.049398387461716 +transit,100.63772369958747,4.040757421965217 +transit,100.64022503658985,4.032116446901626 +transit,100.64272632076433,4.023475462291587 +transit,100.64522755222553,4.014834468155744 +transit,100.64772873108812,4.006193464514738 +transit,100.6502298574667,3.9975524513892142 +transit,100.65273093147592,3.988911428799806 +transit,100.65523195323034,3.980270396767158 +transit,100.65773292284462,3.9716293553119044 +transit,100.6602338404333,3.962988304454682 +transit,100.66273470611101,3.9543472442161276 +transit,100.66523551999231,3.9457061746168716 +transit,100.66773628219174,3.937065095677551 +transit,100.67023699282387,3.9284240074187946 +transit,100.67273765200328,3.919782909861235 +transit,100.67523825984446,3.9111418030254987 +transit,100.67773881646197,3.9025006869322167 +transit,100.68023932197032,3.8938595616020164 +transit,100.68273977648403,3.885218427055523 +transit,100.68524018011759,3.8765772833133605 +transit,100.6877405329855,3.867936130396153 +transit,100.69024083520225,3.859294968324524 +transit,100.69274108688231,3.850653797119093 +transit,100.69524128814015,3.842012616800483 +transit,100.69774143909024,3.833371427389311 +transit,100.70024153984701,3.824730228906196 +transit,100.70274159052492,3.8160890213717553 +transit,100.70524159123839,3.8074478048066043 +transit,100.70774154210186,3.798806579231359 +transit,100.71024144322972,3.790165344666629 +transit,100.7127412947364,3.781524101133032 +transit,100.71524109673629,3.7728828486511756 +transit,100.71774084934378,3.7642415872416732 +transit,100.72024055267325,3.7556003169251313 +transit,100.72274020683908,3.7469590377221595 +transit,100.72523981195562,3.7383177496533655 +transit,100.72773936813724,3.7296764527393518 +transit,100.73023887549827,3.7210351470007286 +transit,100.73273833415307,3.7123938324580954 +transit,100.73523774421595,3.703752509132056 +transit,100.73773710580124,3.6951111770432115 +transit,100.74023641902326,3.6864698362121655 +transit,100.74273568399632,3.677828486659513 +transit,100.74523490083469,3.6691871284058553 +transit,100.74773406965268,3.6605457614717887 +transit,100.75023319056457,3.65190438587791 +transit,100.75273226368462,3.643263001644813 +transit,100.7552312891271,3.6346216087930916 +transit,100.75773026700627,3.6259802073433427 +transit,100.76022919743636,3.6173387973161546 +transit,100.76272808053162,3.6086973787321175 +transit,100.76522691640628,3.6000559516118256 +transit,100.76772570517456,3.5914145159758624 +transit,100.77022444695068,3.58277307184482 +transit,100.77272314184884,3.574131619239283 +transit,100.77522178998323,3.565490158179837 +transit,100.77772039146807,3.556848688687067 +transit,100.7802189464175,3.5482072107815568 +transit,100.78271745494571,3.5395657244838894 +transit,100.78521591716688,3.5309242298146435 +transit,100.78771433319515,3.5222827267944052 +transit,100.79021270314469,3.5136412154437484 +transit,100.79271102712961,3.504999695783254 +transit,100.79520930526407,3.4963581678335 +transit,100.79770753766218,3.487716631615061 +transit,100.80020572443806,3.4790750871485145 +transit,100.80270386570581,3.470433534454433 +transit,100.80520196157956,3.46179197355339 +transit,100.80770001217338,3.4531504044659584 +transit,100.81019801760137,3.4445088272127107 +transit,100.81269597797758,3.435867241814216 +transit,100.81519389341612,3.4272256482910426 +transit,100.81769176403104,3.4185840466637623 +transit,100.82018958993638,3.4099424369529365 +transit,100.82268737124619,3.4013008191791383 +transit,100.82518510807452,3.392659193362928 +transit,100.82768280053538,3.3840175595248736 +transit,100.83018044874282,3.375375917685536 +transit,100.83267805281086,3.3667342678654775 +transit,100.83517561285348,3.358092610085261 +transit,100.83767312898469,3.349450944365446 +transit,100.8401706013185,3.3408092707265924 +transit,100.84266802996888,3.3321675891892584 +transit,100.8451654150498,3.323525899774002 +transit,100.84766275667526,3.314884202501379 +transit,100.85016005495919,3.3062424973919446 +transit,100.85265731001557,3.2976007844662547 +transit,100.85515452195834,3.2889590637448634 +transit,100.85765169090143,3.2803173352483213 +transit,100.86014881695878,3.2716755989971817 +transit,100.86264590024433,3.2630338550119937 +transit,100.86514294087198,3.2543921033133096 +transit,100.86763993895563,3.245750343921676 +transit,100.87013689460922,3.237108576857644 +transit,100.87263380794663,3.228466802141756 +transit,100.87513067908172,3.219825019794561 +transit,100.87762750812841,3.2111832298366045 +transit,100.88012429520056,3.2025414322884296 +transit,100.88262104041203,3.19389962717058 +transit,100.8851177438767,3.1852578145035957 +transit,100.88761440570839,3.176615994308023 +transit,100.89011102602097,3.1679741666043983 +transit,100.89260760492829,3.1593323314132618 +transit,100.89510414254414,3.1506904887551532 +transit,100.89760063898237,3.14204863865061 +transit,100.9000970943568,3.133406781120168 +transit,100.90259350878122,3.1247649161843647 +transit,100.90508988236945,3.116123043863733 +transit,100.90758621523527,3.1074811641788096 +transit,100.91008250749249,3.0988392771501245 +transit,100.91257875925487,3.0901973827982125 +transit,100.9150749706362,3.0815554811436043 +transit,100.91757114175023,3.0729135722068293 +transit,100.92006727271072,3.0642716560084198 +transit,100.92256336363145,3.0556297325689004 +transit,100.92505941462615,3.046987801908803 +transit,100.92755542580855,3.038345864048651 +transit,100.93005139729239,3.029703919008973 +transit,100.9325473291914,3.021061966810293 +transit,100.93504322161928,3.0124200074731347 +transit,100.93753907468977,3.0037780410180224 +transit,100.94003488851655,2.995136067465479 +transit,100.94253066321333,2.9864940868360255 +transit,100.9450263988938,2.977852099150182 +transit,100.94752209567164,2.969210104428469 +transit,100.95001775366055,2.9605681026914064 +transit,100.95251337297418,2.9519260939595102 +transit,100.95500895372619,2.943284078253301 +transit,100.95750449603025,2.9346420555932924 +WP5,100.96,2.926000026 +transit,100.96736807373901,2.9208731072894585 +transit,100.97473608064752,2.915746139566842 +transit,100.982104020843,2.910619122918749 +transit,100.98947189444291,2.905492057431779 +transit,100.99683970156477,2.900364943192523 +transit,101.00420744232602,2.895237780287576 +transit,101.01157511684417,2.8901105688035282 +transit,101.01894272523668,2.8849833088269676 +transit,101.02631026762107,2.879856000444479 +transit,101.03367774411478,2.874728643742649 +transit,101.04104515483532,2.869601238808057 +transit,101.04841249990017,2.8644737857272835 +transit,101.0557797794268,2.859346284586906 +transit,101.0631469935327,2.8542187354735002 +transit,101.07051414233536,2.849091138473637 +transit,101.07788122595225,2.8439634936738916 +transit,101.08524824450087,2.8388358011608297 +transit,101.0926151980987,2.8337080610210186 +transit,101.0999820868632,2.8285802733410237 +transit,101.10734891091191,2.823452438207407 +transit,101.11471567036226,2.8183245557067305 +transit,101.12208236533176,2.813196625925549 +transit,101.12944899593789,2.808068648950422 +transit,101.13681556229815,2.8029406248679027 +transit,101.14418206453,2.797812553764542 +transit,101.15154850275094,2.792684435726891 +transit,101.15891487707846,2.787556270841498 +transit,101.16628118763005,2.7824280591949067 +transit,101.17364743452318,2.7772998008736636 +transit,101.18101361787534,2.772171495964307 +transit,101.18837973780401,2.7670431445533787 +transit,101.19574579442671,2.761914746727415 +transit,101.2031117878609,2.756786302572953 +transit,101.21047771822407,2.7516578121765236 +transit,101.21784358563372,2.746529275624659 +transit,101.22520939020733,2.741400693003888 +transit,101.23257513206238,2.73627206440074 +transit,101.23994081131636,2.731143389901736 +transit,101.24730642808677,2.7260146695934018 +transit,101.2546719824911,2.7208859035622575 +transit,101.26203747464683,2.715757091894822 +transit,101.26940290467145,2.7106282346776136 +transit,101.27676827268246,2.705499331997145 +transit,101.28413357879734,2.7003703839399296 +transit,101.29149882313357,2.69524139059248 +transit,101.29886400580865,2.6901123520413024 +transit,101.30622912694008,2.6849832683729047 +transit,101.31359418664533,2.6798541396737914 +transit,101.32095918504191,2.674724966030466 +transit,101.32832412224731,2.6695957475294287 +transit,101.335688998379,2.664466484257178 +transit,101.34305381355449,2.659337176300211 +transit,101.35041856789125,2.654207823745022 +transit,101.35778326150681,2.6490784266781042 +transit,101.36514789451863,2.6439489851859483 +transit,101.3725124670442,2.6388194993550425 +transit,101.37987697920104,2.6336899692718747 +transit,101.38724143110662,2.628560395022929 +transit,101.39460582287843,2.623430776694687 +transit,101.40197015463397,2.618301114373633 +transit,101.40933442649074,2.613171408146242 +transit,101.41669863856623,2.608041658098994 +transit,101.42406279097791,2.602911864318363 +transit,101.43142688384332,2.597782026890821 +transit,101.4387909172799,2.59265214590284 +transit,101.44615489140519,2.5875222214408895 +transit,101.45351880633665,2.582392253591437 +transit,101.46088266219179,2.577262242440946 +transit,101.4682464590881,2.572132188075882 +transit,101.47561019714308,2.5670020905827053 +transit,101.48297387647423,2.5618719500478755 +transit,101.49033749719904,2.5567417665578507 +transit,101.49770105943499,2.5516115401990853 +transit,101.50506456329958,2.546481271058034 +transit,101.51242800891032,2.5413509592211496 +transit,101.51979139638469,2.536220604774879 +transit,101.5271547258402,2.531090207805674 +transit,101.53451799739433,2.525959768399978 +transit,101.54188121116461,2.5208292866442363 +transit,101.54924436726849,2.5156987626248917 +transit,101.55660746582349,2.510568196428383 +transit,101.5639705069471,2.5054375881411506 +transit,101.57133349075683,2.50030693784963 +transit,101.57869641737017,2.4951762456402578 +transit,101.58605928690461,2.490045511599464 +transit,101.59342209947765,2.4849147358136827 +transit,101.6007848552068,2.4797839183693413 +transit,101.60814755420955,2.474653059352868 +transit,101.61551019660338,2.4695221588506877 +transit,101.62287278250582,2.4643912169492235 +transit,101.63023531203434,2.459260233734899 +transit,101.63759778530645,2.4541292092941327 +transit,101.64496020243966,2.448998143713344 +transit,101.65232256355146,2.4438670370789466 +transit,101.65968486875934,2.4387358894773596 +transit,101.6670471181808,2.433604700994991 +transit,101.67440931193336,2.428473471718254 +transit,101.68177145013449,2.4233422017335564 +transit,101.6891335329017,2.4182108911273064 +transit,101.69649556035252,2.413079539985908 +transit,101.7038575326044,2.4079481483957674 +transit,101.71121944977487,2.4028167164432834 +transit,101.71858131198142,2.3976852442148573 +transit,101.72594311934157,2.392553731796887 +transit,101.73330487197279,2.387422179275769 +transit,101.7406665699926,2.3822905867378976 +transit,101.7480282135185,2.377158954269665 +transit,101.75538980266798,2.3720272819574646 +transit,101.76275133755856,2.3668955698876823 +transit,101.77011281830771,2.361763818146708 +transit,101.77747424503296,2.356632026820926 +transit,101.78483561785181,2.3515001959967203 +transit,101.79219693688175,2.3463683257604733 +transit,101.7995582022403,2.341236416198566 +transit,101.80691941404494,2.336104467397376 +transit,101.81428057241318,2.3309724794432802 +transit,101.82164167746252,2.325840452422655 +transit,101.82900272931049,2.320708386421872 +transit,101.83636372807455,2.3155762815273033 +transit,101.84372467387223,2.31044413782532 +transit,101.85108556682103,2.305311955402289 +transit,101.85844640703843,2.3001797343445767 +transit,101.86580719464197,2.2950474747385483 +transit,101.87316792974913,2.289915176670566 +transit,101.88052861247742,2.2847828402269923 +transit,101.88788924294435,2.2796504654941856 +transit,101.89524982126743,2.274518052558505 +transit,101.90261034756413,2.269385601506305 +transit,101.90997082195199,2.264253112423941 +transit,101.91733124454849,2.259120585397766 +transit,101.92469161547116,2.2539880205141296 +transit,101.93205193483747,2.248855417859384 +transit,101.93941220276497,2.2437227775198725 +transit,101.94677241937113,2.2385900995819448 +transit,101.95413258477348,2.233457384131943 +transit,101.96149269908949,2.2283246312562115 +transit,101.96885276243671,2.2231918410410896 +transit,101.9762127749326,2.2180590135729177 +transit,101.98357273669471,2.2129261489380334 +transit,101.99093264784052,2.2077932472227713 +transit,101.99829250848754,2.2026603085134666 +transit,102.00565231875328,2.1975273328964513 +transit,102.01301207875524,2.192394320458058 +transit,102.02037178861093,2.1872612712846147 +transit,102.02773144843786,2.182128185462449 +transit,102.03509105835354,2.176995063077888 +transit,102.04245061847547,2.171861904217255 +transit,102.04981012892117,2.166728708966873 +transit,102.05716958980813,2.1615954774130643 +transit,102.06452900125385,2.1564622096421475 +transit,102.07188836337586,2.1513289057404394 +transit,102.07924767629166,2.146195565794258 +transit,102.08660694011877,2.1410621898899183 +transit,102.09396615497467,2.1359287781137315 +transit,102.10132532097688,2.1307953305520098 +transit,102.10868443824293,2.1256618472910653 +transit,102.1160435068903,2.120528328417203 +transit,102.12340252703652,2.115394774016732 +transit,102.13076149879907,2.1102611841759553 +transit,102.1381204222955,2.1051275589811773 +transit,102.14547929764329,2.0999938985187017 +transit,102.15283812495996,2.0948602028748264 +transit,102.160196904363,2.089726472135852 +transit,102.16755563596995,2.084592706388073 +transit,102.17491431989829,2.0794589057177886 +transit,102.18227295626555,2.0743250702112914 +transit,102.18963154518923,2.0691911999548736 +transit,102.19699008678685,2.0640572950348264 +transit,102.20434858117592,2.05892335553744 +transit,102.21170702847394,2.0537893815490005 +transit,102.21906542879843,2.048655373155795 +transit,102.22642378226689,2.0435213304441096 +transit,102.23378208899683,2.0383872535002268 +transit,102.24114034910578,2.033253142410428 +transit,102.24849856271123,2.028118997260994 +transit,102.2558567299307,2.0229848181382017 +transit,102.26321485088171,2.0178506051283316 +transit,102.27057292568176,2.012716358317656 +transit,102.27793095444835,2.007582077792452 +transit,102.28528893729903,2.00244776363899 +transit,102.29264687435126,1.9973134159435422 +transit,102.3000047657226,1.9921790347923782 +transit,102.30736261153054,1.9870446202717655 +transit,102.31472041189258,1.9819101724679717 +transit,102.32207816692626,1.9767756914672616 +transit,102.32943587674907,1.9716411773558984 +transit,102.33679354147853,1.9665066302201457 +transit,102.34415116123216,1.9613720501462628 +transit,102.35150873612747,1.9562374372205096 +transit,102.35886626628196,1.9511027915291435 +transit,102.36622375181315,1.9459681131584208 +transit,102.37358119283857,1.9408334021945972 +transit,102.38093858947572,1.935698658723926 +transit,102.3882959418421,1.9305638828326581 +transit,102.39565325005523,1.925429074607045 +transit,102.40301051423265,1.920294234133335 +transit,102.41036773449184,1.9151593614977762 +transit,102.41772491095034,1.910024456786615 +transit,102.42508204372564,1.9048895200860958 +transit,102.43243913293527,1.8997545514824623 +transit,102.43979617869674,1.8946195510619552 +transit,102.44715318112758,1.889484518910817 +transit,102.45451014034526,1.8843494551152842 +transit,102.46186705646734,1.8792143597615973 +transit,102.46922392961133,1.8740792329359908 +transit,102.47658075989472,1.868944074724699 +transit,102.48393754743505,1.8638088852139574 +transit,102.4912942923498,1.858673664489995 +transit,102.49865099475655,1.853538412639045 +transit,102.50600765477274,1.8484031297473364 +transit,102.51336427251593,1.8432678159010962 +transit,102.52072084810364,1.83813247118655 +transit,102.52807738165336,1.8329970956899249 +transit,102.53543387328261,1.8278616894974433 +transit,102.54279032310893,1.8227262526953285 +transit,102.55014673124981,1.8175907853697992 +transit,102.55750309782279,1.8124552876070774 +transit,102.56485942294536,1.8073197594933814 +transit,102.57221570673505,1.802184201114926 +transit,102.57957194930938,1.797048612557929 +transit,102.58692815078587,1.7919129939086027 +transit,102.59428431128202,1.7867773452531608 +transit,102.60164043091537,1.7816416666778148 +transit,102.6089965098034,1.7765059582687748 +transit,102.61635254806366,1.7713702201122492 +transit,102.62370854581367,1.7662344522944466 +transit,102.63106450317092,1.761098654901572 +transit,102.63842042025296,1.7559628280198303 +transit,102.64577629717728,1.7508269717354255 +transit,102.65313213406141,1.7456910861345591 +transit,102.66048793102286,1.7405551713034326 +transit,102.66784368817916,1.735419227328246 +transit,102.67519940564782,1.7302832542951962 +transit,102.68255508354636,1.725147252290482 +transit,102.6899107219923,1.7200112214002978 +transit,102.69726632110316,1.7148751617108373 +transit,102.70462188099646,1.7097390733082953 +transit,102.71197740178971,1.7046029562788627 +transit,102.71933288360043,1.6994668107087305 +transit,102.72668832654614,1.6943306366840876 +transit,102.73404373074436,1.6891944342911214 +transit,102.74139909631262,1.6840582036160194 +transit,102.74875442336842,1.678921944744967 +transit,102.75610971202929,1.673785657764148 +transit,102.76346496241275,1.6686493427597462 +transit,102.77082017463631,1.6635129998179425 +transit,102.77817534881751,1.6583766290249164 +transit,102.78553048507385,1.653240230466849 +transit,102.79288558352285,1.648103804229917 +transit,102.80024064428204,1.642967350400297 +transit,102.80759566746895,1.6378308690641663 +transit,102.81495065320107,1.6326943603076969 +transit,102.82230560159593,1.627557824217063 +transit,102.82966051277107,1.622421260878435 +transit,102.837015386844,1.6172846703779853 +transit,102.84437022393223,1.6121480528018823 +transit,102.85172502415328,1.6070114082362945 +transit,102.8590797876247,1.6018747367673885 +transit,102.86643451446398,1.5967380384813301 +transit,102.87378920478864,1.5916013134642835 +transit,102.88114385871621,1.5864645618024122 +transit,102.88849847636423,1.5813277835818789 +transit,102.89585305785019,1.576190978888844 +transit,102.90320760329163,1.5710541478094675 +transit,102.91056211280608,1.5659172904299077 +transit,102.91791658651103,1.5607804068363227 +transit,102.92527102452402,1.5556434971148676 +transit,102.93262542696257,1.5505065613516982 +transit,102.93997979394422,1.5453695996329682 +transit,102.94733412558647,1.5402326120448304 +transit,102.95468842200684,1.5350955986734367 +transit,102.96204268332286,1.5299585596049368 +transit,102.96939690965205,1.5248214949254808 +transit,102.97675110111193,1.519684404721216 +transit,102.98410525782003,1.5145472890782903 +transit,102.99145937989388,1.5094101480828477 +transit,102.99881346745097,1.5042729818210352 +transit,103.00616752060886,1.4991357903789955 +transit,103.01352153948505,1.493998573842871 +transit,103.02087552419707,1.4888613322988025 +transit,103.02822947486244,1.4837240658329311 +transit,103.03558339159869,1.4785867745313956 +transit,103.04293727452334,1.4734494584803337 +transit,103.0502911237539,1.4683121177658822 +transit,103.05764493940791,1.4631747524741774 +transit,103.06499872160289,1.4580373626913539 +transit,103.07235247045635,1.4528999485035443 +transit,103.07970618608584,1.4477625099968825 +transit,103.08705986860886,1.4426250472574986 +transit,103.09441351814294,1.4374875603715247 +transit,103.10176713480561,1.4323500494250883 +transit,103.1091207187144,1.4272125145043184 +transit,103.11647426998681,1.4220749556953414 +transit,103.12382778874039,1.4169373730842842 +transit,103.13118127509264,1.4117997667572708 +transit,103.13853472916111,1.4066621368004255 +transit,103.1458881510633,1.4015244832998714 +transit,103.15324154091674,1.3963868063417306 +transit,103.16059489883897,1.3912491060121224 +transit,103.16794822494751,1.3861113823971678 +transit,103.17530151935986,1.3809736355829842 +transit,103.18265478219358,1.3758358656556917 +transit,103.19000801356617,1.3706980727014035 +transit,103.19736121359517,1.3655602568062382 +transit,103.2047143823981,1.3604224180563078 +transit,103.21206752009248,1.3552845565377272 +transit,103.21942062679584,1.350146672336609 +transit,103.22677370262569,1.3450087655390632 +transit,103.23412674769959,1.3398708362312017 +transit,103.24147976213504,1.334732884499133 +transit,103.24883274604957,1.3295949104289662 +transit,103.2561856995607,1.324456914106809 +transit,103.26353862278596,1.3193188956187667 +transit,103.27089151584289,1.314180855050945 +transit,103.278244378849,1.3090427924894494 +transit,103.28559721192181,1.3039047080203823 +transit,103.29295001517886,1.2987666017298465 +transit,103.30030278873767,1.2936284737039434 +transit,103.30765553271577,1.288490324028774 +transit,103.3150082472307,1.2833521527904372 +transit,103.32236093239995,1.2782139600750326 +transit,103.32971358834106,1.2730757459686564 +transit,103.33706621517157,1.2679375105574051 +transit,103.344418813009,1.2627992539273767 +transit,103.35177138197088,1.257660976164664 +transit,103.35912392217473,1.2525226773553617 +transit,103.36647643373809,1.2473843575855623 +transit,103.37382891677846,1.2422460169413576 +transit,103.38118137141339,1.2371076555088392 +transit,103.3885337977604,1.231969273374096 +transit,103.39588619593702,1.226830870623219 +transit,103.40323856606076,1.221692447342295 +transit,103.41059090824918,1.2165540036174116 +transit,103.41794322261978,1.211415539534655 +transit,103.42529550929011,1.206277055180112 +transit,103.43264776837766,1.2011385506398657 +WP6,103.44,1.196000026 +transit,103.4440348984521,1.2037722281016348 +transit,103.44806981975256,1.2115444237502009 +transit,103.45210476404904,1.2193166129039905 +transit,103.45613973148924,1.2270887955212961 +transit,103.46017472222083,1.2348609715604077 +transit,103.4642097363915,1.242633140979616 +transit,103.46824477414893,1.2504053037372107 +transit,103.47227983564082,1.2581774597914792 +transit,103.47631492101488,1.2659496091007107 +transit,103.48035003041878,1.273721751623191 +transit,103.48438516400023,1.281493887317206 +transit,103.48842032190694,1.2892660161410416 +transit,103.49245550428662,1.2970381380529825 +transit,103.49649071128698,1.304810253011311 +transit,103.50052594305572,1.3125823609743108 +transit,103.50456119974056,1.3203544619002632 +transit,103.50859648148923,1.328126555747449 +transit,103.51263178844945,1.335898642474149 +transit,103.51666712076894,1.3436707220386421 +transit,103.52070247859544,1.3514427943992064 +transit,103.52473786207668,1.3592148595141196 +transit,103.52877327136038,1.3669869173416582 +transit,103.53280870659428,1.3747589678400982 +transit,103.53684416792613,1.3825310109677134 +transit,103.5408796555037,1.390303046682779 +transit,103.54491516947469,1.3980750749435669 +transit,103.5489507099869,1.4058470957083495 +transit,103.55298627718804,1.4136191089353984 +transit,103.5570218712259,1.421391114582983 +transit,103.56105749224824,1.4291631126093731 +transit,103.56509314040281,1.4369351029728372 +transit,103.56912881583737,1.4447070856316422 +transit,103.57316451869974,1.452479060544055 +transit,103.57720024913765,1.4602510276683411 +transit,103.5812360072989,1.4680229869627643 +transit,103.58527179333126,1.4757949383855895 +transit,103.58930760738252,1.4835668818950782 +transit,103.59334344960048,1.491338817449493 +transit,103.59737932013292,1.499110745007094 +transit,103.60141521912765,1.5068826645261406 +transit,103.60545114673245,1.5146545759648926 +transit,103.60948710309515,1.5224264792816067 +transit,103.61352308836354,1.5301983744345402 +transit,103.61755910268543,1.5379702613819488 +transit,103.62159514620865,1.5457421400820872 +transit,103.62563121908101,1.5535140104932088 +transit,103.62966732145033,1.561285872573567 +transit,103.63370345346443,1.5690577262814127 +transit,103.63773961527116,1.5768295715749974 +transit,103.64177580701833,1.5846014084125701 +transit,103.6458120288538,1.592373236752379 +transit,103.6498482809254,1.6001450565526734 +transit,103.65388456338096,1.607916867771698 +transit,103.65792087636835,1.6156886703676991 +transit,103.66195722003542,1.6234604642989214 +transit,103.66599359453001,1.6312322495236073 +WP7,103.67003,1.639004026 +transit,103.66240477485763,1.6435605098711012 +transit,103.65477951514863,1.648116964243239 +transit,103.64715422077721,1.6526733890344614 +transit,103.63952889164753,1.657229784162814 +transit,103.63190352766377,1.6617861495463415 +transit,103.62427812873014,1.6663424851030881 +transit,103.61665269475081,1.6708987907510977 +transit,103.60902722562999,1.6754550664084111 +transit,103.60140172127184,1.6800113119930717 +transit,103.59377618158057,1.6845675274231189 +transit,103.58615060646035,1.689123712616592 +transit,103.57852499581539,1.6936798674915303 +transit,103.57089934954988,1.6982359919659715 +transit,103.563273667568,1.7027920859579515 +transit,103.55564794977396,1.7073481493855067 +transit,103.54802219607193,1.711904182166672 +transit,103.54039640636613,1.716460184219482 +transit,103.53277058056074,1.721016155461969 +transit,103.52514471855996,1.725572095812165 +transit,103.517518820268,1.7301280051881018 +transit,103.50989288558903,1.7346838835078089 +transit,103.50226691442727,1.7392397306893157 +transit,103.49464090668691,1.743795546650651 +transit,103.48701486227216,1.7483513313098415 +transit,103.47938878108722,1.752907084584914 +transit,103.47176266303629,1.7574628063938937 +transit,103.46413650802356,1.762018496654805 +transit,103.45651031595324,1.7665741552856715 +transit,103.44888408672954,1.771129782204516 +transit,103.44125782025667,1.7756853773293593 +transit,103.43363151643881,1.7802409405782227 +transit,103.4260051751802,1.7847964718691254 +transit,103.41837879638501,1.7893519711200867 +transit,103.41075237995749,1.793907438249123 +transit,103.40312592580183,1.7984628731742522 +transit,103.39549943382222,1.8030182758134896 +transit,103.3878729039229,1.8075736460848493 +transit,103.38024633600807,1.8121289839063461 +transit,103.37261972998193,1.816684289195991 +transit,103.36499308574872,1.8212395618717976 +transit,103.35736640321262,1.8257948018517758 +transit,103.34973968227789,1.8303500090539349 +transit,103.34211292284868,1.8349051833962842 +transit,103.33448612482928,1.8394603247968309 +transit,103.32685928812386,1.8440154331735823 +transit,103.31923241263664,1.8485705084445434 +transit,103.31160549827186,1.8531255505277202 +transit,103.30397854493371,1.857680559341114 +transit,103.29635155252645,1.8622355348027306 +transit,103.28872452095426,1.8667904768305685 +transit,103.2810974501214,1.8713453853426305 +transit,103.27347033993205,1.8759002602569148 +transit,103.26584319029047,1.8804551014914208 +transit,103.25821600110088,1.885009908964146 +transit,103.25058877226748,1.8895646825930859 +transit,103.24296150369453,1.894119422296237 +transit,103.23533419528623,1.8986741279915933 +transit,103.22770684694682,1.9032287995971486 +transit,103.22007945858053,1.9077834370308946 +transit,103.21245203009158,1.9123380402108232 +transit,103.20482456138421,1.9168926090549236 +transit,103.19719705236267,1.9214471434811855 +transit,103.18956950293115,1.9260016434075975 +transit,103.1819419129939,1.9305561087521468 +transit,103.17431428245517,1.9351105394328183 +transit,103.16668661121918,1.9396649353675983 +transit,103.15905889919017,1.9442192964744696 +transit,103.15143114627237,1.9487736226714165 +transit,103.14380335237003,1.9533279138764188 +transit,103.13617551738737,1.957882170007458 +transit,103.12854764122865,1.962436390982514 +transit,103.1209197237981,1.9669905767195657 +transit,103.11329176499996,1.9715447271365898 +transit,103.10566376473847,1.976098842151563 +transit,103.09803572291787,1.9806529216824602 +transit,103.09040763944242,1.9852069656472566 +transit,103.08277951421636,1.9897609739639248 +transit,103.07515134714392,1.9943149465504364 +transit,103.06752313812935,1.998868883324763 +transit,103.05989488707691,2.003422784204874 +transit,103.05226659389083,2.007976649108739 +transit,103.04463825847539,2.0125304779543245 +transit,103.0370098807348,2.017084270659597 +transit,103.02938146057335,2.0216380271425236 +transit,103.02175299789526,2.0261917473210675 +transit,103.0141244926048,2.030745431113192 +transit,103.00649594460621,2.035299078436859 +transit,102.99886735380376,2.03985268921003 +transit,102.9912387201017,2.0444062633506648 +transit,102.98361004340428,2.0489598007767227 +transit,102.97598132361577,2.0535133014061597 +transit,102.96835256064043,2.058066765156934 +transit,102.96072375438249,2.0626201919469995 +transit,102.95309490474624,2.067173581694312 +transit,102.94546601163592,2.0717269343168243 +transit,102.93783707495581,2.076280249732488 +transit,102.93020809461017,2.080833527859254 +transit,102.92257907050325,2.085386768615072 +transit,102.91495000253931,2.0899399719178904 +transit,102.90732089062266,2.0944931376856575 +transit,102.89969173465752,2.0990462658363187 +transit,102.89206253454817,2.10359935628782 +transit,102.88443329019888,2.1081524089581047 +transit,102.87680400151393,2.1127054237651155 +transit,102.86917466839759,2.117258400626795 +transit,102.86154529075411,2.121811339461083 +transit,102.85391586848777,2.126364240185919 +transit,102.84628640150285,2.1309171027192413 +transit,102.83865688970364,2.1354699269789856 +transit,102.83102733299438,2.1400227128830918 +transit,102.82339773127937,2.14457546034949 +transit,102.81576808446289,2.1491281692961155 +transit,102.8081383924492,2.1536808396409013 +transit,102.80050865514258,2.158233471301778 +transit,102.79287887244733,2.162786064196675 +transit,102.78524904426772,2.167338618243522 +transit,102.77761917050802,2.171891133360247 +transit,102.76998925107253,2.176443609464775 +transit,102.76235928586553,2.1809960464750318 +transit,102.7547292747913,2.1855484443089415 +transit,102.74709921775414,2.190100802884428 +transit,102.73946911465832,2.1946531221194108 +transit,102.73183896540813,2.199205401931813 +transit,102.72420876990786,2.203757642239551 +transit,102.7165785280618,2.2083098429605448 +transit,102.70894823977424,2.212862004012711 +transit,102.70131790494949,2.217414125313964 +transit,102.69368752349183,2.2219662067822195 +transit,102.68605709530554,2.22651824833539 +transit,102.67842662029493,2.231070249891388 +transit,102.67079609836429,2.235622211368125 +transit,102.66316552941792,2.2401741326835083 +transit,102.65553491336013,2.244726013755447 +transit,102.6479042500952,2.2492778545018495 +transit,102.64027353952743,2.25382965484062 +transit,102.63264278156113,2.2583814146896644 +transit,102.6250119761006,2.262933133966885 +transit,102.61738112305014,2.2674848125901845 +transit,102.60975022231405,2.2720364504774637 +transit,102.60211927379666,2.276588047546622 +transit,102.59448827740223,2.281139603715559 +transit,102.58685723303512,2.2856911189021707 +transit,102.5792261405996,2.290242593024352 +WP8,102.571595,2.294794026 +transit,102.56431289950218,2.299920639760812 +transit,102.55703074701604,2.3050472157902515 +transit,102.5497485424256,2.3101737540038654 +transit,102.54246628561485,2.3153002543172034 +transit,102.53518397646778,2.3204267166458106 +transit,102.52790161486841,2.325553140905231 +transit,102.52061920070072,2.3306795270110077 +transit,102.51333673384873,2.335805874878681 +transit,102.50605421419644,2.340932184423789 +transit,102.49877164162784,2.346058455561871 +transit,102.49148901602695,2.351184688208461 +transit,102.48420633727774,2.3563108822790935 +transit,102.47692360526425,2.3614370376893 +transit,102.46964081987045,2.3665631543546124 +transit,102.46235798098036,2.3716892321905574 +transit,102.45507508847797,2.3768152711126636 +transit,102.44779214224731,2.3819412710364545 +transit,102.44050914217235,2.387067231877455 +transit,102.43322608813709,2.3921931535511853 +transit,102.42594298002557,2.3973190359731675 +transit,102.41865981772175,2.4024448790589177 +transit,102.41137660110967,2.4075706827239522 +transit,102.4040933300733,2.4126964468837877 +transit,102.39681000449666,2.4178221714539356 +transit,102.38952662426375,2.4229478563499063 +transit,102.38224318925857,2.4280735014872104 +transit,102.37495969936514,2.433199106781355 +transit,102.36767615446743,2.4383246721478455 +transit,102.36039255444948,2.4434501975021856 +transit,102.35310889919528,2.4485756827598784 +transit,102.3458251885888,2.453701127836423 +transit,102.3385414225141,2.4588265326473198 +transit,102.33125760085515,2.463951897108063 +transit,102.32397372349595,2.469077221134149 +transit,102.31668979032054,2.474202504641071 +transit,102.30940580121288,2.4793277475443203 +transit,102.30212175605699,2.484452949759386 +transit,102.29483765473688,2.489578111201755 +transit,102.28755349713656,2.494703231786915 +transit,102.28026928314,2.4998283114303477 +transit,102.27298501263125,2.5049533500475367 +transit,102.2657006854943,2.5100783475539625 +transit,102.25841630161314,2.5152033038651025 +transit,102.25113186087178,2.520328218896435 +transit,102.24384736315423,2.5254530925634318 +transit,102.23656280834449,2.5305779247815687 +transit,102.22927819632658,2.535702715466315 +transit,102.22199352698448,2.5408274645331415 +transit,102.21470880020222,2.5459521718975133 +transit,102.2074240158638,2.5510768374748984 +transit,102.2001391738532,2.5562014611807573 +transit,102.19285427405445,2.561326042930555 +transit,102.18556931635156,2.5664505826397495 +transit,102.17828430062852,2.571575080223798 +transit,102.17099922676935,2.576699535598158 +transit,102.16371409465805,2.581823948678284 +transit,102.15642890417861,2.5869483193796263 +transit,102.14914365521507,2.5920726476176372 +transit,102.14185834765141,2.597196933307763 +transit,102.13457298137165,2.6023211763654523 +transit,102.12728755625977,2.607445376706149 +transit,102.12000207219981,2.6125695342452966 +transit,102.11271652907577,2.617693648898334 +transit,102.10543092677165,2.622817720580701 +transit,102.09814526517145,2.627941749207835 +transit,102.09085954415919,2.633065734695171 +transit,102.08357376361887,2.6381896769581417 +transit,102.0762879234345,2.643313575912177 +transit,102.06900202349009,2.6484374314727086 +transit,102.06171606366964,2.6535612435551625 +transit,102.05443004385717,2.6586850120749643 +transit,102.04714396393666,2.663808736947536 +transit,102.03985782379215,2.6689324180883016 +transit,102.03257162330765,2.6740560554126773 +transit,102.02528536236713,2.679179648836083 +transit,102.01799904085463,2.684303198273934 +transit,102.01071265865416,2.6894267036416433 +transit,102.0034262156497,2.6945501648546224 +transit,101.99613971172529,2.699673581828281 +transit,101.98885314676492,2.704796954478027 +transit,101.9815665206526,2.7099202827192648 +transit,101.97427983327236,2.7150435664673993 +transit,101.96699308450819,2.720166805637832 +transit,101.95970627424408,2.725290000145962 +transit,101.95241940236409,2.730413149907187 +transit,101.94513246875218,2.7355362548369033 +transit,101.93784547329238,2.740659314850504 +transit,101.9305584158687,2.7457823298633808 +transit,101.92327129636516,2.750905299790924 +transit,101.91598411466575,2.7560282245485186 +transit,101.9086968706545,2.7611511040515526 +transit,101.90140956421538,2.766273938215409 +transit,101.89412219523246,2.7713967269554693 +transit,101.8868347635897,2.776519470187113 +transit,101.87954726917114,2.7816421678257166 +transit,101.87225971186078,2.786764819786656 +transit,101.86497209154263,2.791887425985305 +transit,101.8576844081007,2.7970099863370352 +transit,101.850396661419,2.8021325007572147 +transit,101.84310885138154,2.807254969161211 +transit,101.83582097787233,2.81237739146439 +transit,101.8285330407754,2.8174997675821123 +transit,101.82124503997474,2.8226220974297416 +transit,101.81395697535437,2.8277443809226352 +transit,101.8066688467983,2.8328666179761517 +transit,101.79938065419054,2.8379888085056435 +transit,101.7920923974151,2.8431109524264646 +transit,101.78480407635601,2.8482330496539654 +transit,101.77751569089726,2.8533551001034945 +transit,101.77022724092288,2.8584771036903978 +transit,101.76293872631686,2.86359906033002 +transit,101.75565014696322,2.8687209699377028 +transit,101.748361502746,2.8738428324287866 +transit,101.74107279354916,2.878964647718609 +transit,101.73378401925677,2.8840864157225057 +transit,101.7264951797528,2.889208136355812 +transit,101.71920627492129,2.894329809533858 +transit,101.71191730464624,2.8994514351719736 +transit,101.70462826881166,2.9045730131854857 +transit,101.69733916730158,2.9096945434897195 +WP9,101.69005,2.914816026 +transit,101.68535588738197,2.922015798814107 +transit,101.6806617149491,2.929215550992293 +transit,101.67596748255315,2.9364152824833907 +transit,101.6712731900459,2.9436149932362317 +transit,101.66657883727906,2.9508146831996442 +transit,101.66188442410441,2.9580143523224574 +transit,101.65718995037369,2.965214000553495 +transit,101.65249541593862,2.9724136278415783 +transit,101.64780082065093,2.979613234135528 +transit,101.64310616436235,2.9868128193841628 +transit,101.63841144692458,2.994012383536298 +transit,101.63371666818934,3.0012119265407464 +transit,101.62902182800832,3.0084114483463194 +transit,101.62432692623325,3.0156109489018266 +transit,101.61963196271579,3.0228104281560744 +transit,101.61493693730763,3.030009886057866 +transit,101.61024184986047,3.037209322556003 +transit,101.60554670022597,3.044408737599287 +transit,101.60085148825578,3.051608131136514 +transit,101.59615621380159,3.058807503116481 +transit,101.59146087671505,3.0660068534879774 +transit,101.58676547684779,3.0732061821997965 +transit,101.58207001405147,3.080405489200724 +transit,101.57737448817771,3.0876047744395483 +transit,101.57267889907816,3.0948040378650505 +transit,101.56798324660443,3.1020032794260133 +transit,101.56328753060814,3.1092024990712144 +transit,101.55859175094089,3.11640169674943 +transit,101.55389590745432,3.123600872409436 +WP1,101.5492,3.130800026 +transit,101.54671815629806,3.139413635151459 +transit,101.54423627194028,3.148027236962458 +transit,101.54175434681427,3.156640831412747 +transit,101.53927238080762,3.165254418482073 +transit,101.53679037380788,3.1738679981501847 +transit,101.53430832570264,3.182481570396828 +transit,101.53182623637944,3.1910951352017496 +transit,101.52934410572585,3.199708692544694 +transit,101.52686193362943,3.208322242405403 +transit,101.5243797199777,3.216935784763622 +transit,101.5218974646582,3.225549319599091 +transit,101.51941516755845,3.2341628468915533 +transit,101.51693282856597,3.2427763666207476 +transit,101.51445044756828,3.2513898787664135 +transit,101.51196802445287,3.260003383308289 +transit,101.50948555910726,3.2686168802261117 +transit,101.50700305141892,3.2772303694996183 +transit,101.50452050127534,3.2858438511085444 +transit,101.50203790856398,3.294457325032625 +transit,101.49955527317233,3.3030707912515926 +transit,101.49707259498784,3.3116842497451797 +transit,101.49458987389797,3.32029770049312 +transit,101.49210710979015,3.3289111434751426 +transit,101.48962430255183,3.337524578670978 +transit,101.48714145207045,3.346138006060355 +transit,101.4846585582334,3.354751425623002 +transit,101.48217562092815,3.3633648373386458 +transit,101.47969264004205,3.371978241187012 +transit,101.47720961546253,3.380591637147827 +transit,101.47472654707698,3.389205025200813 +transit,101.4722434347728,3.3978184053256952 +transit,101.46976027843735,3.4064317775021946 +transit,101.467277077958,3.4150451417100323 +transit,101.46479383322212,3.4236584979289284 +transit,101.46231054411707,3.4322718461386046 +transit,101.45982721053018,3.4408851863187766 +transit,101.45734383234881,3.4494985184491633 +transit,101.45486040946028,3.45811184250948 +transit,101.45237694175192,3.4667251584794423 +transit,101.44989342911106,3.4753384663387643 +transit,101.44740987142497,3.4839517660671615 +transit,101.44492626858099,3.4925650576443434 +transit,101.4424426204664,3.5011783410500232 +transit,101.43995892696849,3.5097916162639105 +transit,101.43747518797453,3.518404883265716 +transit,101.43499140337178,3.5270181420351463 +transit,101.43250757304754,3.53563139255191 +transit,101.43002369688902,3.5442446347957137 +transit,101.42753977478351,3.5528578687462615 +transit,101.42505580661822,3.5614710943832595 +transit,101.42257179228038,3.5700843116864105 +transit,101.42008773165722,3.578697520635415 +transit,101.41760362463596,3.587310721209977 +transit,101.4151194711038,3.595923913389796 +transit,101.41263527094794,3.60453709715457 +transit,101.41015102405557,3.6131502724839986 +transit,101.40766673031388,3.6217634393577787 +transit,101.40518238961003,3.6303765977556064 +transit,101.4026980018312,3.6389897476571775 +transit,101.40021356686454,3.6476028890421857 +transit,101.3977290845972,3.6562160218903226 +transit,101.39524455491633,3.6648291461812827 +transit,101.39275997770906,3.673442261894757 +transit,101.39027535286253,3.6820553690104316 +transit,101.38779068026382,3.690668467508 +transit,101.38530595980008,3.6992815573671485 +transit,101.38282119135837,3.7078946385675633 +transit,101.38033637482583,3.7165077110889295 +transit,101.37785151008951,3.7251207749109336 +transit,101.37536659703649,3.7337338300132594 +transit,101.37288163555385,3.742346876375586 +transit,101.37039662552866,3.7509599139775998 +transit,101.36791156684792,3.759572942798976 +transit,101.36542645939873,3.768185962819398 +transit,101.3629413030681,3.776798974018542 +transit,101.36045609774305,3.785411976376087 +transit,101.35797084331062,3.7940249698717072 +transit,101.35548553965779,3.8026379544850792 +transit,101.35300018667158,3.811250930195875 +transit,101.35051478423898,3.8198638969837684 +transit,101.34802933224697,3.828476854828432 +transit,101.34554383058251,3.837089803709535 +transit,101.34305827913259,3.8457027436067484 +transit,101.34057267778415,3.8543156744997398 +transit,101.33808702642416,3.862928596368177 +transit,101.33560132493955,3.871541509191725 +transit,101.33311557321724,3.8801544129500525 +transit,101.33062977114416,3.888767307622818 +transit,101.32814391860724,3.897380193189688 +transit,101.32565801549336,3.9059930696303256 +transit,101.32317206168943,3.914605936924388 +transit,101.32068605708234,3.923218795051537 +transit,101.31820000155898,3.931831643991432 +transit,101.3157138950062,3.9404444837237262 +transit,101.31322773731087,3.94905731422808 +transit,101.31074152835984,3.957670135484147 +transit,101.30825526803996,3.96628294747158 +transit,101.30576895623805,3.9748957501700337 +transit,101.30328259284097,3.983508543559159 +transit,101.3007961777355,3.9921213276186065 +transit,101.29830971080848,4.0007341023280265 +transit,101.2958231919467,4.009346867667064 +transit,101.29333662103693,4.017959623615371 +transit,101.29084999796596,4.02657237015259 +transit,101.28836332262058,4.035185107258367 +transit,101.28587659488755,4.043797834912345 +transit,101.28338981465362,4.052410553094166 +transit,101.28090298180553,4.061023261783475 +transit,101.27841609623002,4.069635960959906 +transit,101.27592915781382,4.078248650603104 +transit,101.27344216644364,4.086861330692703 +transit,101.2709551220062,4.095474001208342 +transit,101.2684680243882,4.104086662129656 +transit,101.26598087347632,4.112699313436277 +transit,101.26349366915726,4.12131195510784 +transit,101.26100641131767,4.129924587123978 +transit,101.25851909984422,4.138537209464321 +transit,101.25603173462356,4.1471498221084975 +transit,101.25354431554236,4.155762425036137 +transit,101.25105684248723,4.164375018226867 +transit,101.24856931534481,4.172987601660313 +transit,101.2460817340017,4.181600175316098 +transit,101.24359409834452,4.190212739173851 +transit,101.24110640825987,4.198825293213188 +transit,101.23861866363433,4.2074378374137344 +transit,101.23613086435448,4.216050371755109 +transit,101.23364301030689,4.224662896216931 +transit,101.23115510137814,4.233275410778818 +transit,101.22866713745474,4.241887915420385 +transit,101.22617911842326,4.25050041012125 +transit,101.22369104417024,4.259112894861023 +transit,101.22120291458218,4.26772536961932 +transit,101.2187147295456,4.2763378343757505 +transit,101.216226488947,4.284950289109929 +transit,101.21373819267288,4.293562733801459 +transit,101.21124984060971,4.302175168429952 +transit,101.208761432644,4.310787592975013 +transit,101.20627296866216,4.319400007416247 +transit,101.20378444855069,4.328012411733259 +transit,101.20129587219601,4.336624805905652 +transit,101.19880723948458,4.345237189913028 +transit,101.1963185503028,4.353849563734988 +transit,101.1938298045371,4.362461927351128 +transit,101.19134100207388,4.371074280741048 +transit,101.18885214279955,4.379686623884345 +transit,101.18636322660046,4.3882989567606145 +transit,101.18387425336303,4.39691127934945 +transit,101.1813852229736,4.405523591630444 +transit,101.17889613531854,4.414135893583188 +transit,101.17640699028419,4.422748185187274 +transit,101.17391778775689,4.43136046642229 +transit,101.17142852762296,4.439972737267824 +transit,101.16893920976874,4.448584997703461 +transit,101.16644983408051,4.4571972477087884 +transit,101.16396040044458,4.465809487263389 +transit,101.16147090874723,4.4744217163468445 +transit,101.15898135887475,4.4830339349387405 +transit,101.1564917507134,4.491646143018653 +transit,101.15400208414943,4.5002583405661625 +transit,101.1515123590691,4.508870527560845 +transit,101.14902257535863,4.517482703982278 +transit,101.14653273290426,4.526094869810036 +transit,101.14404283159222,4.534707025023693 +transit,101.14155287130868,4.543319169602823 +transit,101.13906285193985,4.551931303526992 +transit,101.13657277337194,4.560543426775776 +transit,101.13408263549111,4.569155539328738 +transit,101.13159243818352,4.5777676411654475 +transit,101.12910218133531,4.586379732265473 +transit,101.12661186483265,4.594991812608375 +transit,101.12412148856168,4.603603882173716 +transit,101.1216310524085,4.612215940941063 +transit,101.11914055625925,4.6208279888899675 +WP2,101.11665,4.629440026 +transit,101.1116365630793,4.636796143776513 +transit,101.10662302244353,4.6441522244408215 +transit,101.10160937792581,4.6515082679331075 +transit,101.09659562935923,4.658864274193555 +transit,101.09158177657683,4.6662202431623365 +transit,101.08656781941173,4.673576174779622 +transit,101.08155375769694,4.680932068985579 +transit,101.07653959126552,4.688287925720372 +transit,101.07152531995051,4.695643744924158 +transit,101.06651094358493,4.702999526537091 +transit,101.0614964620018,4.710355270499322 +transit,101.05648187503412,4.717710976750996 +transit,101.05146718251487,4.725066645232254 +transit,101.04645238427705,4.732422275883232 +transit,101.04143748015362,4.739777868644067 +transit,101.03642246997754,4.747133423454884 +transit,101.03140735358177,4.7544889402558095 +transit,101.02639213079924,4.761844418986961 +transit,101.02137680146286,4.769199859588455 +transit,101.01636136540559,4.776555262000405 +transit,101.0113458224603,4.783910626162916 +transit,101.00633017245991,4.791265952016091 +transit,101.00131441523729,4.7986212395000285 +transit,100.99629855062533,4.8059764885548235 +transit,100.99128257845688,4.813331699120564 +transit,100.98626649856479,4.820686871137338 +transit,100.9812503107819,4.828042004545224 +transit,100.97623401494107,4.835397099284299 +transit,100.97121761087509,4.842752155294637 +transit,100.96620109841678,4.850107172516305 +transit,100.96118447739893,4.857462150889367 +transit,100.95616774765435,4.864817090353879 +transit,100.9511509090158,4.872171990849901 +transit,100.94613396131604,4.87952685231748 +transit,100.94111690438784,4.886881674696663 +transit,100.93609973806393,4.894236457927489 +transit,100.93108246217706,4.90159120195 +transit,100.92606507655992,4.908945906704224 +transit,100.92104758104526,4.916300572130192 +transit,100.91602997546576,4.923655198167927 +transit,100.91101225965411,4.931009784757447 +transit,100.90599443344298,4.938364331838769 +transit,100.90097649666505,4.945718839351901 +transit,100.89595844915297,4.953073307236853 +transit,100.89094029073938,4.960427735433622 +transit,100.88592202125692,4.967782123882206 +transit,100.8809036405382,4.9751364725226 +transit,100.87588514841583,4.982490781294788 +transit,100.87086654472243,4.989845050138756 +transit,100.86584782929059,4.997199278994483 +transit,100.86082900195285,5.0045534678019425 +transit,100.8558100625418,5.011907616501104 +transit,100.85079101089,5.019261725031936 +transit,100.84577184682999,5.026615793334395 +transit,100.8407525701943,5.033969821348438 +transit,100.83573318081544,5.041323809014019 +transit,100.83071367852591,5.0486777562710845 +transit,100.82569406315825,5.056031663059574 +transit,100.8206743345449,5.063385529319429 +transit,100.81565449251838,5.070739354990583 +transit,100.81063453691111,5.078093140012962 +transit,100.80561446755557,5.085446884326492 +transit,100.80059428428419,5.092800587871093 +transit,100.7955739869294,5.100154250586678 +transit,100.79055357532363,5.1075078724131595 +transit,100.78553304929926,5.114861453290442 +transit,100.78051240868871,5.122214993158427 +transit,100.77549165332434,5.129568491957011 +transit,100.77047078303855,5.136921949626085 +transit,100.76544979766366,5.1442753661055365 +transit,100.76042869703207,5.151628741335249 +transit,100.75540748097607,5.1589820752551 +transit,100.75038614932802,5.166335367804962 +transit,100.74536470192022,5.173688618924702 +transit,100.74034313858496,5.1810418285541875 +transit,100.73532145915455,5.188394996633275 +transit,100.73029966346127,5.19574812310182 +transit,100.72527775133736,5.20310120789967 +transit,100.7202557226151,5.210454250966674 +transit,100.71523357712671,5.217807252242666 +transit,100.71021131470445,5.2251602116674905 +transit,100.70518893518053,5.232513129180969 +transit,100.70016643838714,5.2398660047229315 +transit,100.6951438241565,5.247218838233202 +transit,100.6901210923208,5.254571629651592 +transit,100.68509824271219,5.261924378917918 +transit,100.68007527516284,5.269277085971983 +transit,100.6750521895049,5.276629750753591 +transit,100.6700289855705,5.283982373202538 +transit,100.66500566319176,5.291334953258619 +transit,100.65998222220082,5.298687490861622 +transit,100.65495866242978,5.306039985951327 +transit,100.6499349837107,5.313392438467513 +transit,100.64491118587567,5.320744848349955 +transit,100.63988726875677,5.3280972155384205 +transit,100.63486323218602,5.335449539972675 +transit,100.6298390759955,5.342801821592474 +transit,100.62481480001722,5.350154060337575 +transit,100.6197904040832,5.3575062561477225 +transit,100.61476588802545,5.364858408962666 +transit,100.60974125167596,5.3722105187221425 +transit,100.60471649486671,5.379562585365886 +transit,100.59969161742966,5.386914608833628 +transit,100.59466661919677,5.394266589065092 +WP3,100.5896415,5.401618526 +transit,100.5813445401226,5.398777679035525 +transit,100.57304765748664,5.395936718513381 +transit,100.56475085205356,5.393095644494695 +transit,100.55645412378486,5.390254457040593 +transit,100.54815747264199,5.3874131562122045 +transit,100.53986089858641,5.384571742070661 +transit,100.53156440157957,5.381730214677086 +transit,100.52326798158292,5.378888574092612 +transit,100.51497163855791,5.376046820378368 +transit,100.50667537246598,5.373204953595482 +transit,100.49837918326854,5.370362973805085 +transit,100.49008307092704,5.367520881068305 +transit,100.48178703540292,5.364678675446276 +transit,100.47349107665755,5.361836357000125 +transit,100.46519519465238,5.358993925790986 +transit,100.4568993893488,5.356151381879984 +transit,100.44860366070824,5.353308725328258 +transit,100.44030800869207,5.3504659561969365 +transit,100.43201243326168,5.347623074547148 +transit,100.42371693437848,5.344780080440028 +transit,100.41542151200383,5.341936973936709 +transit,100.40712616609913,5.339093755098322 +transit,100.39883089662574,5.336250423986 +transit,100.39053570354503,5.3334069806608735 +transit,100.38224058681836,5.330563425184082 +transit,100.37394554640707,5.327719757616753 +transit,100.36565058227255,5.324875978020024 +transit,100.35735569437612,5.322032086455028 +transit,100.34906088267914,5.319188082982897 +transit,100.34076614714292,5.316343967664767 +transit,100.33247148772882,5.313499740561776 +transit,100.32417690439816,5.310655401735053 +transit,100.31588239711225,5.307810951245737 +transit,100.30758796583241,5.304966389154963 +transit,100.29929361051997,5.302121715523866 +transit,100.29099933113622,5.299276930413582 +transit,100.28270512764246,5.296432033885248 +WP4,100.274411,5.293587026 +transit,100.27692121572846,5.284947654341158 +transit,100.27943136189771,5.276308270128779 +transit,100.28194143862395,5.267668873383704 +transit,100.28445144602334,5.2590294641267725 +transit,100.28696138421206,5.250390042378823 +transit,100.28947125330627,5.241750608160693 +transit,100.2919810534221,5.233111161493218 +transit,100.29449078467569,5.224471702397231 +transit,100.29700044718314,5.215832230893566 +transit,100.29951004106057,5.207192747003053 +transit,100.30201956642406,5.198553250746522 +transit,100.30452902338972,5.189913742144798 +transit,100.3070384120736,5.18127422121871 +transit,100.30954773259175,5.172634687989083 +transit,100.31205698506024,5.163995142476737 +transit,100.31456616959508,5.155355584702496 +transit,100.31707528631232,5.146716014687179 +transit,100.31958433532795,5.138076432451605 +transit,100.32209331675796,5.129436838016594 +transit,100.32460223071836,5.120797231402956 +transit,100.32711107732511,5.112157612631509 +transit,100.32961985669418,5.103517981723063 +transit,100.33212856894153,5.094878338698431 +transit,100.33463721418308,5.086238683578423 +transit,100.33714579253477,5.077599016383843 +transit,100.33965430411253,5.068959337135502 +transit,100.34216274903224,5.060319645854201 +transit,100.3446711274098,5.051679942560748 +transit,100.3471794393611,5.043040227275942 +transit,100.34968768500201,5.034400500020585 +transit,100.35219586444838,5.025760760815474 +transit,100.35470397781607,5.017121009681407 +transit,100.3572120252209,5.008481246639183 +transit,100.35972000677872,4.999841471709591 +transit,100.3622279226053,4.991201684913431 +transit,100.36473577281647,4.982561886271489 +transit,100.36724355752803,4.973922075804558 +transit,100.36975127685574,4.965282253533426 +transit,100.37225893091536,4.956642419478879 +transit,100.37476651982267,4.948002573661705 +transit,100.3772740436934,4.9393627161026865 +transit,100.37978150264328,4.930722846822606 +transit,100.38228889678804,4.922082965842248 +transit,100.38479622624338,4.91344307318239 +transit,100.38730349112501,4.904803168863809 +transit,100.38981069154862,4.896163252907287 +transit,100.39231782762987,4.887523325333594 +transit,100.39482489948443,4.8788833861635075 +transit,100.39733190722797,4.870243435417798 +transit,100.39983885097611,4.86160347311724 +transit,100.4023457308445,4.852963499282601 +transit,100.40485254694875,4.84432351393465 +transit,100.40735929940448,4.835683517094153 +transit,100.40986598832728,4.827043508781877 +transit,100.41237261383273,4.818403489018586 +transit,100.41487917603644,4.8097634578250394 +transit,100.41738567505392,4.801123415222004 +transit,100.41989211100078,4.792483361230237 +transit,100.42239848399252,4.783843295870497 +transit,100.42490479414471,4.77520321916354 +transit,100.42741104157284,4.766563131130122 +transit,100.42991722639245,4.757923031790999 +transit,100.432423348719,4.749282921166923 +transit,100.43492940866801,4.740642799278644 +transit,100.43743540635495,4.732002666146916 +transit,100.43994134189529,4.723362521792482 +transit,100.44244721540448,4.714722366236092 +transit,100.44495302699798,4.706082199498494 +transit,100.4474587767912,4.697442021600429 +transit,100.44996446489958,4.688801832562642 +transit,100.45247009143853,4.680161632405875 +transit,100.45497565652344,4.671521421150867 +transit,100.45748116026972,4.662881198818358 +transit,100.45998660279275,4.654240965429086 +transit,100.46249198420789,4.645600721003786 +transit,100.46499730463051,4.636960465563193 +transit,100.46750256417596,4.628320199128039 +transit,100.47000776295955,4.619679921719062 +transit,100.47251290109665,4.611039633356986 +transit,100.47501797870255,4.602399334062545 +transit,100.47752299589257,4.593759023856464 +transit,100.480027952782,4.585118702759472 +transit,100.48253284948612,4.576478370792293 +transit,100.48503768612021,4.567838027975652 +transit,100.48754246279954,4.559197674330269 +transit,100.49004717963936,4.5505573098768695 +transit,100.49255183675491,4.541916934636172 +transit,100.49505643426144,4.533276548628894 +transit,100.49756097227416,4.524636151875753 +transit,100.50006545090828,4.515995744397465 +transit,100.50256987027902,4.507355326214745 +transit,100.50507423050155,4.498714897348309 +transit,100.50757853169105,4.490074457818864 +transit,100.51008277396272,4.481434007647124 +transit,100.51258695743171,4.4727935468538 +transit,100.51509108221315,4.464153075459594 +transit,100.5175951484222,4.455512593485217 +transit,100.520099156174,4.446872100951376 +transit,100.52260310558364,4.438231597878771 +transit,100.52510699676625,4.42959108428811 +transit,100.52761082983695,4.4209505602000885 +transit,100.53011460491079,4.412310025635412 +transit,100.53261832210288,4.403669480614776 +transit,100.53512198152828,4.395028925158879 +transit,100.53762558330205,4.386388359288419 +transit,100.54012912753923,4.377747783024089 +transit,100.54263261435489,4.369107196386585 +transit,100.54513604386402,4.360466599396596 +transit,100.54763941618167,4.351825992074816 +transit,100.55014273142284,4.343185374441935 +transit,100.55264598970253,4.33454474651864 +transit,100.55514919113573,4.325904108325621 +transit,100.5576523358374,4.317263459883561 +transit,100.56015542392257,4.308622801213148 +transit,100.56265845550614,4.299982132335064 +transit,100.56516143070309,4.29134145326999 +transit,100.56766434962834,4.2827007640386086 +transit,100.57016721239685,4.2740600646616 +transit,100.57267001912352,4.265419355159642 +transit,100.57517276992327,4.256778635553414 +transit,100.57767546491101,4.2481379058635875 +transit,100.58017810420161,4.2394971661108425 +transit,100.58268068790997,4.230856416315849 +transit,100.58518321615097,4.22221565649928 +transit,100.58768568903945,4.2135748866818075 +transit,100.59018810669028,4.204934106884102 +transit,100.59269046921828,4.19629331712683 +transit,100.59519277673833,4.187652517430662 +transit,100.59769502936523,4.17901170781626 +transit,100.60019722721378,4.170370888304292 +transit,100.60269937039881,4.1617300589154205 +transit,100.6052014590351,4.15308921967031 +transit,100.60770349323745,4.14444837058962 +transit,100.61020547312063,4.1358075116940105 +transit,100.61270739879942,4.1271666430041405 +transit,100.61520927038855,4.118525764540668 +transit,100.6177110880028,4.109884876324249 +transit,100.62021285175689,4.101243978375539 +transit,100.62271456176556,4.092603070715192 +transit,100.62521621814354,4.083962153363863 +transit,100.62771782100552,4.075321226342201 +transit,100.63021937046621,4.066680289670856 +transit,100.63272086664031,4.058039343370478 +transit,100.6352223096425,4.049398387461716 +transit,100.63772369958747,4.040757421965217 +transit,100.64022503658985,4.032116446901626 +transit,100.64272632076433,4.023475462291587 +transit,100.64522755222553,4.014834468155744 +transit,100.64772873108812,4.006193464514738 +transit,100.6502298574667,3.9975524513892142 +transit,100.65273093147592,3.988911428799806 +transit,100.65523195323034,3.980270396767158 +transit,100.65773292284462,3.9716293553119044 +transit,100.6602338404333,3.962988304454682 +transit,100.66273470611101,3.9543472442161276 +transit,100.66523551999231,3.9457061746168716 +transit,100.66773628219174,3.937065095677551 +transit,100.67023699282387,3.9284240074187946 +transit,100.67273765200328,3.919782909861235 +transit,100.67523825984446,3.9111418030254987 +transit,100.67773881646197,3.9025006869322167 +transit,100.68023932197032,3.8938595616020164 +transit,100.68273977648403,3.885218427055523 +transit,100.68524018011759,3.8765772833133605 +transit,100.6877405329855,3.867936130396153 +transit,100.69024083520225,3.859294968324524 +transit,100.69274108688231,3.850653797119093 +transit,100.69524128814015,3.842012616800483 +transit,100.69774143909024,3.833371427389311 +transit,100.70024153984701,3.824730228906196 +transit,100.70274159052492,3.8160890213717553 +transit,100.70524159123839,3.8074478048066043 +transit,100.70774154210186,3.798806579231359 +transit,100.71024144322972,3.790165344666629 +transit,100.7127412947364,3.781524101133032 +transit,100.71524109673629,3.7728828486511756 +transit,100.71774084934378,3.7642415872416732 +transit,100.72024055267325,3.7556003169251313 +transit,100.72274020683908,3.7469590377221595 +transit,100.72523981195562,3.7383177496533655 +transit,100.72773936813724,3.7296764527393518 +transit,100.73023887549827,3.7210351470007286 +transit,100.73273833415307,3.7123938324580954 +transit,100.73523774421595,3.703752509132056 +transit,100.73773710580124,3.6951111770432115 +transit,100.74023641902326,3.6864698362121655 +transit,100.74273568399632,3.677828486659513 +transit,100.74523490083469,3.6691871284058553 +transit,100.74773406965268,3.6605457614717887 +transit,100.75023319056457,3.65190438587791 +transit,100.75273226368462,3.643263001644813 +transit,100.7552312891271,3.6346216087930916 +transit,100.75773026700627,3.6259802073433427 +transit,100.76022919743636,3.6173387973161546 +transit,100.76272808053162,3.6086973787321175 +transit,100.76522691640628,3.6000559516118256 +transit,100.76772570517456,3.5914145159758624 +transit,100.77022444695068,3.58277307184482 +transit,100.77272314184884,3.574131619239283 +transit,100.77522178998323,3.565490158179837 +transit,100.77772039146807,3.556848688687067 +transit,100.7802189464175,3.5482072107815568 +transit,100.78271745494571,3.5395657244838894 +transit,100.78521591716688,3.5309242298146435 +transit,100.78771433319515,3.5222827267944052 +transit,100.79021270314469,3.5136412154437484 +transit,100.79271102712961,3.504999695783254 +transit,100.79520930526407,3.4963581678335 +transit,100.79770753766218,3.487716631615061 +transit,100.80020572443806,3.4790750871485145 +transit,100.80270386570581,3.470433534454433 +transit,100.80520196157956,3.46179197355339 +transit,100.80770001217338,3.4531504044659584 +transit,100.81019801760137,3.4445088272127107 +transit,100.81269597797758,3.435867241814216 +transit,100.81519389341612,3.4272256482910426 +transit,100.81769176403104,3.4185840466637623 +transit,100.82018958993638,3.4099424369529365 +transit,100.82268737124619,3.4013008191791383 +transit,100.82518510807452,3.392659193362928 +transit,100.82768280053538,3.3840175595248736 +transit,100.83018044874282,3.375375917685536 +transit,100.83267805281086,3.3667342678654775 +transit,100.83517561285348,3.358092610085261 +transit,100.83767312898469,3.349450944365446 +transit,100.8401706013185,3.3408092707265924 +transit,100.84266802996888,3.3321675891892584 +transit,100.8451654150498,3.323525899774002 +transit,100.84766275667526,3.314884202501379 +transit,100.85016005495919,3.3062424973919446 +transit,100.85265731001557,3.2976007844662547 +transit,100.85515452195834,3.2889590637448634 +transit,100.85765169090143,3.2803173352483213 +transit,100.86014881695878,3.2716755989971817 +transit,100.86264590024433,3.2630338550119937 +transit,100.86514294087198,3.2543921033133096 +transit,100.86763993895563,3.245750343921676 +transit,100.87013689460922,3.237108576857644 +transit,100.87263380794663,3.228466802141756 +transit,100.87513067908172,3.219825019794561 +transit,100.87762750812841,3.2111832298366045 +transit,100.88012429520056,3.2025414322884296 +transit,100.88262104041203,3.19389962717058 +transit,100.8851177438767,3.1852578145035957 +transit,100.88761440570839,3.176615994308023 +transit,100.89011102602097,3.1679741666043983 +transit,100.89260760492829,3.1593323314132618 +transit,100.89510414254414,3.1506904887551532 +transit,100.89760063898237,3.14204863865061 +transit,100.9000970943568,3.133406781120168 +transit,100.90259350878122,3.1247649161843647 +transit,100.90508988236945,3.116123043863733 +transit,100.90758621523527,3.1074811641788096 +transit,100.91008250749249,3.0988392771501245 +transit,100.91257875925487,3.0901973827982125 +transit,100.9150749706362,3.0815554811436043 +transit,100.91757114175023,3.0729135722068293 +transit,100.92006727271072,3.0642716560084198 +transit,100.92256336363145,3.0556297325689004 +transit,100.92505941462615,3.046987801908803 +transit,100.92755542580855,3.038345864048651 +transit,100.93005139729239,3.029703919008973 +transit,100.9325473291914,3.021061966810293 +transit,100.93504322161928,3.0124200074731347 +transit,100.93753907468977,3.0037780410180224 +transit,100.94003488851655,2.995136067465479 +transit,100.94253066321333,2.9864940868360255 +transit,100.9450263988938,2.977852099150182 +transit,100.94752209567164,2.969210104428469 +transit,100.95001775366055,2.9605681026914064 +transit,100.95251337297418,2.9519260939595102 +transit,100.95500895372619,2.943284078253301 +transit,100.95750449603025,2.9346420555932924 +WP5,100.96,2.926000026 +transit,100.96736807373901,2.9208731072894585 +transit,100.97473608064752,2.915746139566842 +transit,100.982104020843,2.910619122918749 +transit,100.98947189444291,2.905492057431779 +transit,100.99683970156477,2.900364943192523 +transit,101.00420744232602,2.895237780287576 +transit,101.01157511684417,2.8901105688035282 +transit,101.01894272523668,2.8849833088269676 +transit,101.02631026762107,2.879856000444479 +transit,101.03367774411478,2.874728643742649 +transit,101.04104515483532,2.869601238808057 +transit,101.04841249990017,2.8644737857272835 +transit,101.0557797794268,2.859346284586906 +transit,101.0631469935327,2.8542187354735002 +transit,101.07051414233536,2.849091138473637 +transit,101.07788122595225,2.8439634936738916 +transit,101.08524824450087,2.8388358011608297 +transit,101.0926151980987,2.8337080610210186 +transit,101.0999820868632,2.8285802733410237 +transit,101.10734891091191,2.823452438207407 +transit,101.11471567036226,2.8183245557067305 +transit,101.12208236533176,2.813196625925549 +transit,101.12944899593789,2.808068648950422 +transit,101.13681556229815,2.8029406248679027 +transit,101.14418206453,2.797812553764542 +transit,101.15154850275094,2.792684435726891 +transit,101.15891487707846,2.787556270841498 +transit,101.16628118763005,2.7824280591949067 +transit,101.17364743452318,2.7772998008736636 +transit,101.18101361787534,2.772171495964307 +transit,101.18837973780401,2.7670431445533787 +transit,101.19574579442671,2.761914746727415 +transit,101.2031117878609,2.756786302572953 +transit,101.21047771822407,2.7516578121765236 +transit,101.21784358563372,2.746529275624659 +transit,101.22520939020733,2.741400693003888 +transit,101.23257513206238,2.73627206440074 +transit,101.23994081131636,2.731143389901736 +transit,101.24730642808677,2.7260146695934018 +transit,101.2546719824911,2.7208859035622575 +transit,101.26203747464683,2.715757091894822 +transit,101.26940290467145,2.7106282346776136 +transit,101.27676827268246,2.705499331997145 +transit,101.28413357879734,2.7003703839399296 +transit,101.29149882313357,2.69524139059248 +transit,101.29886400580865,2.6901123520413024 +transit,101.30622912694008,2.6849832683729047 +transit,101.31359418664533,2.6798541396737914 +transit,101.32095918504191,2.674724966030466 +transit,101.32832412224731,2.6695957475294287 +transit,101.335688998379,2.664466484257178 +transit,101.34305381355449,2.659337176300211 +transit,101.35041856789125,2.654207823745022 +transit,101.35778326150681,2.6490784266781042 +transit,101.36514789451863,2.6439489851859483 +transit,101.3725124670442,2.6388194993550425 +transit,101.37987697920104,2.6336899692718747 +transit,101.38724143110662,2.628560395022929 +transit,101.39460582287843,2.623430776694687 +transit,101.40197015463397,2.618301114373633 +transit,101.40933442649074,2.613171408146242 +transit,101.41669863856623,2.608041658098994 +transit,101.42406279097791,2.602911864318363 +transit,101.43142688384332,2.597782026890821 +transit,101.4387909172799,2.59265214590284 +transit,101.44615489140519,2.5875222214408895 +transit,101.45351880633665,2.582392253591437 +transit,101.46088266219179,2.577262242440946 +transit,101.4682464590881,2.572132188075882 +transit,101.47561019714308,2.5670020905827053 +transit,101.48297387647423,2.5618719500478755 +transit,101.49033749719904,2.5567417665578507 +transit,101.49770105943499,2.5516115401990853 +transit,101.50506456329958,2.546481271058034 +transit,101.51242800891032,2.5413509592211496 +transit,101.51979139638469,2.536220604774879 +transit,101.5271547258402,2.531090207805674 +transit,101.53451799739433,2.525959768399978 +transit,101.54188121116461,2.5208292866442363 +transit,101.54924436726849,2.5156987626248917 +transit,101.55660746582349,2.510568196428383 +transit,101.5639705069471,2.5054375881411506 +transit,101.57133349075683,2.50030693784963 +transit,101.57869641737017,2.4951762456402578 +transit,101.58605928690461,2.490045511599464 +transit,101.59342209947765,2.4849147358136827 +transit,101.6007848552068,2.4797839183693413 +transit,101.60814755420955,2.474653059352868 +transit,101.61551019660338,2.4695221588506877 +transit,101.62287278250582,2.4643912169492235 +transit,101.63023531203434,2.459260233734899 +transit,101.63759778530645,2.4541292092941327 +transit,101.64496020243966,2.448998143713344 +transit,101.65232256355146,2.4438670370789466 +transit,101.65968486875934,2.4387358894773596 +transit,101.6670471181808,2.433604700994991 +transit,101.67440931193336,2.428473471718254 +transit,101.68177145013449,2.4233422017335564 +transit,101.6891335329017,2.4182108911273064 +transit,101.69649556035252,2.413079539985908 +transit,101.7038575326044,2.4079481483957674 +transit,101.71121944977487,2.4028167164432834 +transit,101.71858131198142,2.3976852442148573 +transit,101.72594311934157,2.392553731796887 +transit,101.73330487197279,2.387422179275769 +transit,101.7406665699926,2.3822905867378976 +transit,101.7480282135185,2.377158954269665 +transit,101.75538980266798,2.3720272819574646 +transit,101.76275133755856,2.3668955698876823 +transit,101.77011281830771,2.361763818146708 +transit,101.77747424503296,2.356632026820926 +transit,101.78483561785181,2.3515001959967203 +transit,101.79219693688175,2.3463683257604733 +transit,101.7995582022403,2.341236416198566 +transit,101.80691941404494,2.336104467397376 +transit,101.81428057241318,2.3309724794432802 +transit,101.82164167746252,2.325840452422655 +transit,101.82900272931049,2.320708386421872 +transit,101.83636372807455,2.3155762815273033 +transit,101.84372467387223,2.31044413782532 +transit,101.85108556682103,2.305311955402289 +transit,101.85844640703843,2.3001797343445767 +transit,101.86580719464197,2.2950474747385483 +transit,101.87316792974913,2.289915176670566 +transit,101.88052861247742,2.2847828402269923 +transit,101.88788924294435,2.2796504654941856 +transit,101.89524982126743,2.274518052558505 +transit,101.90261034756413,2.269385601506305 +transit,101.90997082195199,2.264253112423941 +transit,101.91733124454849,2.259120585397766 +transit,101.92469161547116,2.2539880205141296 +transit,101.93205193483747,2.248855417859384 +transit,101.93941220276497,2.2437227775198725 +transit,101.94677241937113,2.2385900995819448 +transit,101.95413258477348,2.233457384131943 +transit,101.96149269908949,2.2283246312562115 +transit,101.96885276243671,2.2231918410410896 +transit,101.9762127749326,2.2180590135729177 +transit,101.98357273669471,2.2129261489380334 +transit,101.99093264784052,2.2077932472227713 +transit,101.99829250848754,2.2026603085134666 +transit,102.00565231875328,2.1975273328964513 +transit,102.01301207875524,2.192394320458058 +transit,102.02037178861093,2.1872612712846147 +transit,102.02773144843786,2.182128185462449 +transit,102.03509105835354,2.176995063077888 +transit,102.04245061847547,2.171861904217255 +transit,102.04981012892117,2.166728708966873 +transit,102.05716958980813,2.1615954774130643 +transit,102.06452900125385,2.1564622096421475 +transit,102.07188836337586,2.1513289057404394 +transit,102.07924767629166,2.146195565794258 +transit,102.08660694011877,2.1410621898899183 +transit,102.09396615497467,2.1359287781137315 +transit,102.10132532097688,2.1307953305520098 +transit,102.10868443824293,2.1256618472910653 +transit,102.1160435068903,2.120528328417203 +transit,102.12340252703652,2.115394774016732 +transit,102.13076149879907,2.1102611841759553 +transit,102.1381204222955,2.1051275589811773 +transit,102.14547929764329,2.0999938985187017 +transit,102.15283812495996,2.0948602028748264 +transit,102.160196904363,2.089726472135852 +transit,102.16755563596995,2.084592706388073 +transit,102.17491431989829,2.0794589057177886 +transit,102.18227295626555,2.0743250702112914 +transit,102.18963154518923,2.0691911999548736 +transit,102.19699008678685,2.0640572950348264 +transit,102.20434858117592,2.05892335553744 +transit,102.21170702847394,2.0537893815490005 +transit,102.21906542879843,2.048655373155795 +transit,102.22642378226689,2.0435213304441096 +transit,102.23378208899683,2.0383872535002268 +transit,102.24114034910578,2.033253142410428 +transit,102.24849856271123,2.028118997260994 +transit,102.2558567299307,2.0229848181382017 +transit,102.26321485088171,2.0178506051283316 +transit,102.27057292568176,2.012716358317656 +transit,102.27793095444835,2.007582077792452 +transit,102.28528893729903,2.00244776363899 +transit,102.29264687435126,1.9973134159435422 +transit,102.3000047657226,1.9921790347923782 +transit,102.30736261153054,1.9870446202717655 +transit,102.31472041189258,1.9819101724679717 +transit,102.32207816692626,1.9767756914672616 +transit,102.32943587674907,1.9716411773558984 +transit,102.33679354147853,1.9665066302201457 +transit,102.34415116123216,1.9613720501462628 +transit,102.35150873612747,1.9562374372205096 +transit,102.35886626628196,1.9511027915291435 +transit,102.36622375181315,1.9459681131584208 +transit,102.37358119283857,1.9408334021945972 +transit,102.38093858947572,1.935698658723926 +transit,102.3882959418421,1.9305638828326581 +transit,102.39565325005523,1.925429074607045 +transit,102.40301051423265,1.920294234133335 +transit,102.41036773449184,1.9151593614977762 +transit,102.41772491095034,1.910024456786615 +transit,102.42508204372564,1.9048895200860958 +transit,102.43243913293527,1.8997545514824623 +transit,102.43979617869674,1.8946195510619552 +transit,102.44715318112758,1.889484518910817 +transit,102.45451014034526,1.8843494551152842 +transit,102.46186705646734,1.8792143597615973 +transit,102.46922392961133,1.8740792329359908 +transit,102.47658075989472,1.868944074724699 +transit,102.48393754743505,1.8638088852139574 +transit,102.4912942923498,1.858673664489995 +transit,102.49865099475655,1.853538412639045 +transit,102.50600765477274,1.8484031297473364 +transit,102.51336427251593,1.8432678159010962 +transit,102.52072084810364,1.83813247118655 +transit,102.52807738165336,1.8329970956899249 +transit,102.53543387328261,1.8278616894974433 +transit,102.54279032310893,1.8227262526953285 +transit,102.55014673124981,1.8175907853697992 +transit,102.55750309782279,1.8124552876070774 +transit,102.56485942294536,1.8073197594933814 +transit,102.57221570673505,1.802184201114926 +transit,102.57957194930938,1.797048612557929 +transit,102.58692815078587,1.7919129939086027 +transit,102.59428431128202,1.7867773452531608 +transit,102.60164043091537,1.7816416666778148 +transit,102.6089965098034,1.7765059582687748 +transit,102.61635254806366,1.7713702201122492 +transit,102.62370854581367,1.7662344522944466 +transit,102.63106450317092,1.761098654901572 +transit,102.63842042025296,1.7559628280198303 +transit,102.64577629717728,1.7508269717354255 +transit,102.65313213406141,1.7456910861345591 +transit,102.66048793102286,1.7405551713034326 +transit,102.66784368817916,1.735419227328246 +transit,102.67519940564782,1.7302832542951962 +transit,102.68255508354636,1.725147252290482 +transit,102.6899107219923,1.7200112214002978 +transit,102.69726632110316,1.7148751617108373 +transit,102.70462188099646,1.7097390733082953 +transit,102.71197740178971,1.7046029562788627 +transit,102.71933288360043,1.6994668107087305 +transit,102.72668832654614,1.6943306366840876 +transit,102.73404373074436,1.6891944342911214 +transit,102.74139909631262,1.6840582036160194 +transit,102.74875442336842,1.678921944744967 +transit,102.75610971202929,1.673785657764148 +transit,102.76346496241275,1.6686493427597462 +transit,102.77082017463631,1.6635129998179425 +transit,102.77817534881751,1.6583766290249164 +transit,102.78553048507385,1.653240230466849 +transit,102.79288558352285,1.648103804229917 +transit,102.80024064428204,1.642967350400297 +transit,102.80759566746895,1.6378308690641663 +transit,102.81495065320107,1.6326943603076969 +transit,102.82230560159593,1.627557824217063 +transit,102.82966051277107,1.622421260878435 +transit,102.837015386844,1.6172846703779853 +transit,102.84437022393223,1.6121480528018823 +transit,102.85172502415328,1.6070114082362945 +transit,102.8590797876247,1.6018747367673885 +transit,102.86643451446398,1.5967380384813301 +transit,102.87378920478864,1.5916013134642835 +transit,102.88114385871621,1.5864645618024122 +transit,102.88849847636423,1.5813277835818789 +transit,102.89585305785019,1.576190978888844 +transit,102.90320760329163,1.5710541478094675 +transit,102.91056211280608,1.5659172904299077 +transit,102.91791658651103,1.5607804068363227 +transit,102.92527102452402,1.5556434971148676 +transit,102.93262542696257,1.5505065613516982 +transit,102.93997979394422,1.5453695996329682 +transit,102.94733412558647,1.5402326120448304 +transit,102.95468842200684,1.5350955986734367 +transit,102.96204268332286,1.5299585596049368 +transit,102.96939690965205,1.5248214949254808 +transit,102.97675110111193,1.519684404721216 +transit,102.98410525782003,1.5145472890782903 +transit,102.99145937989388,1.5094101480828477 +transit,102.99881346745097,1.5042729818210352 +transit,103.00616752060886,1.4991357903789955 +transit,103.01352153948505,1.493998573842871 +transit,103.02087552419707,1.4888613322988025 +transit,103.02822947486244,1.4837240658329311 +transit,103.03558339159869,1.4785867745313956 +transit,103.04293727452334,1.4734494584803337 +transit,103.0502911237539,1.4683121177658822 +transit,103.05764493940791,1.4631747524741774 +transit,103.06499872160289,1.4580373626913539 +transit,103.07235247045635,1.4528999485035443 +transit,103.07970618608584,1.4477625099968825 +transit,103.08705986860886,1.4426250472574986 +transit,103.09441351814294,1.4374875603715247 +transit,103.10176713480561,1.4323500494250883 +transit,103.1091207187144,1.4272125145043184 +transit,103.11647426998681,1.4220749556953414 +transit,103.12382778874039,1.4169373730842842 +transit,103.13118127509264,1.4117997667572708 +transit,103.13853472916111,1.4066621368004255 +transit,103.1458881510633,1.4015244832998714 +transit,103.15324154091674,1.3963868063417306 +transit,103.16059489883897,1.3912491060121224 +transit,103.16794822494751,1.3861113823971678 +transit,103.17530151935986,1.3809736355829842 +transit,103.18265478219358,1.3758358656556917 +transit,103.19000801356617,1.3706980727014035 +transit,103.19736121359517,1.3655602568062382 +transit,103.2047143823981,1.3604224180563078 +transit,103.21206752009248,1.3552845565377272 +transit,103.21942062679584,1.350146672336609 +transit,103.22677370262569,1.3450087655390632 +transit,103.23412674769959,1.3398708362312017 +transit,103.24147976213504,1.334732884499133 +transit,103.24883274604957,1.3295949104289662 +transit,103.2561856995607,1.324456914106809 +transit,103.26353862278596,1.3193188956187667 +transit,103.27089151584289,1.314180855050945 +transit,103.278244378849,1.3090427924894494 +transit,103.28559721192181,1.3039047080203823 +transit,103.29295001517886,1.2987666017298465 +transit,103.30030278873767,1.2936284737039434 +transit,103.30765553271577,1.288490324028774 +transit,103.3150082472307,1.2833521527904372 +transit,103.32236093239995,1.2782139600750326 +transit,103.32971358834106,1.2730757459686564 +transit,103.33706621517157,1.2679375105574051 +transit,103.344418813009,1.2627992539273767 +transit,103.35177138197088,1.257660976164664 +transit,103.35912392217473,1.2525226773553617 +transit,103.36647643373809,1.2473843575855623 +transit,103.37382891677846,1.2422460169413576 +transit,103.38118137141339,1.2371076555088392 +transit,103.3885337977604,1.231969273374096 +transit,103.39588619593702,1.226830870623219 +transit,103.40323856606076,1.221692447342295 +transit,103.41059090824918,1.2165540036174116 +transit,103.41794322261978,1.211415539534655 +transit,103.42529550929011,1.206277055180112 +transit,103.43264776837766,1.2011385506398657 +WP6,103.44,1.196000026 +transit,103.4440348984521,1.2037722281016348 +transit,103.44806981975256,1.2115444237502009 +transit,103.45210476404904,1.2193166129039905 +transit,103.45613973148924,1.2270887955212961 +transit,103.46017472222083,1.2348609715604077 +transit,103.4642097363915,1.242633140979616 +transit,103.46824477414893,1.2504053037372107 +transit,103.47227983564082,1.2581774597914792 +transit,103.47631492101488,1.2659496091007107 +transit,103.48035003041878,1.273721751623191 +transit,103.48438516400023,1.281493887317206 +transit,103.48842032190694,1.2892660161410416 +transit,103.49245550428662,1.2970381380529825 +transit,103.49649071128698,1.304810253011311 +transit,103.50052594305572,1.3125823609743108 +transit,103.50456119974056,1.3203544619002632 +transit,103.50859648148923,1.328126555747449 +transit,103.51263178844945,1.335898642474149 +transit,103.51666712076894,1.3436707220386421 +transit,103.52070247859544,1.3514427943992064 +transit,103.52473786207668,1.3592148595141196 +transit,103.52877327136038,1.3669869173416582 +transit,103.53280870659428,1.3747589678400982 +transit,103.53684416792613,1.3825310109677134 +transit,103.5408796555037,1.390303046682779 +transit,103.54491516947469,1.3980750749435669 +transit,103.5489507099869,1.4058470957083495 +transit,103.55298627718804,1.4136191089353984 +transit,103.5570218712259,1.421391114582983 +transit,103.56105749224824,1.4291631126093731 +transit,103.56509314040281,1.4369351029728372 +transit,103.56912881583737,1.4447070856316422 +transit,103.57316451869974,1.452479060544055 +transit,103.57720024913765,1.4602510276683411 +transit,103.5812360072989,1.4680229869627643 +transit,103.58527179333126,1.4757949383855895 +transit,103.58930760738252,1.4835668818950782 +transit,103.59334344960048,1.491338817449493 +transit,103.59737932013292,1.499110745007094 +transit,103.60141521912765,1.5068826645261406 +transit,103.60545114673245,1.5146545759648926 +transit,103.60948710309515,1.5224264792816067 +transit,103.61352308836354,1.5301983744345402 +transit,103.61755910268543,1.5379702613819488 +transit,103.62159514620865,1.5457421400820872 +transit,103.62563121908101,1.5535140104932088 +transit,103.62966732145033,1.561285872573567 +transit,103.63370345346443,1.5690577262814127 +transit,103.63773961527116,1.5768295715749974 +transit,103.64177580701833,1.5846014084125701 +transit,103.6458120288538,1.592373236752379 +transit,103.6498482809254,1.6001450565526734 +transit,103.65388456338096,1.607916867771698 +transit,103.65792087636835,1.6156886703676991 +transit,103.66195722003542,1.6234604642989214 +transit,103.66599359453001,1.6312322495236073 +WP7,103.67003,1.639004026 +transit,103.66240477485763,1.6435605098711012 +transit,103.65477951514863,1.648116964243239 +transit,103.64715422077721,1.6526733890344614 +transit,103.63952889164753,1.657229784162814 +transit,103.63190352766377,1.6617861495463415 +transit,103.62427812873014,1.6663424851030881 +transit,103.61665269475081,1.6708987907510977 +transit,103.60902722562999,1.6754550664084111 +transit,103.60140172127184,1.6800113119930717 +transit,103.59377618158057,1.6845675274231189 +transit,103.58615060646035,1.689123712616592 +transit,103.57852499581539,1.6936798674915303 +transit,103.57089934954988,1.6982359919659715 +transit,103.563273667568,1.7027920859579515 +transit,103.55564794977396,1.7073481493855067 +transit,103.54802219607193,1.711904182166672 +transit,103.54039640636613,1.716460184219482 +transit,103.53277058056074,1.721016155461969 +transit,103.52514471855996,1.725572095812165 +transit,103.517518820268,1.7301280051881018 +transit,103.50989288558903,1.7346838835078089 +transit,103.50226691442727,1.7392397306893157 +transit,103.49464090668691,1.743795546650651 +transit,103.48701486227216,1.7483513313098415 +transit,103.47938878108722,1.752907084584914 +transit,103.47176266303629,1.7574628063938937 +transit,103.46413650802356,1.762018496654805 +transit,103.45651031595324,1.7665741552856715 +transit,103.44888408672954,1.771129782204516 +transit,103.44125782025667,1.7756853773293593 +transit,103.43363151643881,1.7802409405782227 +transit,103.4260051751802,1.7847964718691254 +transit,103.41837879638501,1.7893519711200867 +transit,103.41075237995749,1.793907438249123 +transit,103.40312592580183,1.7984628731742522 +transit,103.39549943382222,1.8030182758134896 +transit,103.3878729039229,1.8075736460848493 +transit,103.38024633600807,1.8121289839063461 +transit,103.37261972998193,1.816684289195991 +transit,103.36499308574872,1.8212395618717976 +transit,103.35736640321262,1.8257948018517758 +transit,103.34973968227789,1.8303500090539349 +transit,103.34211292284868,1.8349051833962842 +transit,103.33448612482928,1.8394603247968309 +transit,103.32685928812386,1.8440154331735823 +transit,103.31923241263664,1.8485705084445434 +transit,103.31160549827186,1.8531255505277202 +transit,103.30397854493371,1.857680559341114 +transit,103.29635155252645,1.8622355348027306 +transit,103.28872452095426,1.8667904768305685 +transit,103.2810974501214,1.8713453853426305 +transit,103.27347033993205,1.8759002602569148 +transit,103.26584319029047,1.8804551014914208 +transit,103.25821600110088,1.885009908964146 +transit,103.25058877226748,1.8895646825930859 +transit,103.24296150369453,1.894119422296237 +transit,103.23533419528623,1.8986741279915933 +transit,103.22770684694682,1.9032287995971486 +transit,103.22007945858053,1.9077834370308946 +transit,103.21245203009158,1.9123380402108232 +transit,103.20482456138421,1.9168926090549236 +transit,103.19719705236267,1.9214471434811855 +transit,103.18956950293115,1.9260016434075975 +transit,103.1819419129939,1.9305561087521468 +transit,103.17431428245517,1.9351105394328183 +transit,103.16668661121918,1.9396649353675983 +transit,103.15905889919017,1.9442192964744696 +transit,103.15143114627237,1.9487736226714165 +transit,103.14380335237003,1.9533279138764188 +transit,103.13617551738737,1.957882170007458 +transit,103.12854764122865,1.962436390982514 +transit,103.1209197237981,1.9669905767195657 +transit,103.11329176499996,1.9715447271365898 +transit,103.10566376473847,1.976098842151563 +transit,103.09803572291787,1.9806529216824602 +transit,103.09040763944242,1.9852069656472566 +transit,103.08277951421636,1.9897609739639248 +transit,103.07515134714392,1.9943149465504364 +transit,103.06752313812935,1.998868883324763 +transit,103.05989488707691,2.003422784204874 +transit,103.05226659389083,2.007976649108739 +transit,103.04463825847539,2.0125304779543245 +transit,103.0370098807348,2.017084270659597 +transit,103.02938146057335,2.0216380271425236 +transit,103.02175299789526,2.0261917473210675 +transit,103.0141244926048,2.030745431113192 +transit,103.00649594460621,2.035299078436859 +transit,102.99886735380376,2.03985268921003 +transit,102.9912387201017,2.0444062633506648 +transit,102.98361004340428,2.0489598007767227 +transit,102.97598132361577,2.0535133014061597 +transit,102.96835256064043,2.058066765156934 +transit,102.96072375438249,2.0626201919469995 +transit,102.95309490474624,2.067173581694312 +transit,102.94546601163592,2.0717269343168243 +transit,102.93783707495581,2.076280249732488 +transit,102.93020809461017,2.080833527859254 +transit,102.92257907050325,2.085386768615072 +transit,102.91495000253931,2.0899399719178904 +transit,102.90732089062266,2.0944931376856575 +transit,102.89969173465752,2.0990462658363187 +transit,102.89206253454817,2.10359935628782 +transit,102.88443329019888,2.1081524089581047 +transit,102.87680400151393,2.1127054237651155 +transit,102.86917466839759,2.117258400626795 +transit,102.86154529075411,2.121811339461083 +transit,102.85391586848777,2.126364240185919 +transit,102.84628640150285,2.1309171027192413 +transit,102.83865688970364,2.1354699269789856 +transit,102.83102733299438,2.1400227128830918 +transit,102.82339773127937,2.14457546034949 +transit,102.81576808446289,2.1491281692961155 +transit,102.8081383924492,2.1536808396409013 +transit,102.80050865514258,2.158233471301778 +transit,102.79287887244733,2.162786064196675 +transit,102.78524904426772,2.167338618243522 +transit,102.77761917050802,2.171891133360247 +transit,102.76998925107253,2.176443609464775 +transit,102.76235928586553,2.1809960464750318 +transit,102.7547292747913,2.1855484443089415 +transit,102.74709921775414,2.190100802884428 +transit,102.73946911465832,2.1946531221194108 +transit,102.73183896540813,2.199205401931813 +transit,102.72420876990786,2.203757642239551 +transit,102.7165785280618,2.2083098429605448 +transit,102.70894823977424,2.212862004012711 +transit,102.70131790494949,2.217414125313964 +transit,102.69368752349183,2.2219662067822195 +transit,102.68605709530554,2.22651824833539 +transit,102.67842662029493,2.231070249891388 +transit,102.67079609836429,2.235622211368125 +transit,102.66316552941792,2.2401741326835083 +transit,102.65553491336013,2.244726013755447 +transit,102.6479042500952,2.2492778545018495 +transit,102.64027353952743,2.25382965484062 +transit,102.63264278156113,2.2583814146896644 +transit,102.6250119761006,2.262933133966885 +transit,102.61738112305014,2.2674848125901845 +transit,102.60975022231405,2.2720364504774637 +transit,102.60211927379666,2.276588047546622 +transit,102.59448827740223,2.281139603715559 +transit,102.58685723303512,2.2856911189021707 +transit,102.5792261405996,2.290242593024352 +WP8,102.571595,2.294794026 +transit,102.56431289950218,2.299920639760812 +transit,102.55703074701604,2.3050472157902515 +transit,102.5497485424256,2.3101737540038654 +transit,102.54246628561485,2.3153002543172034 +transit,102.53518397646778,2.3204267166458106 +transit,102.52790161486841,2.325553140905231 +transit,102.52061920070072,2.3306795270110077 +transit,102.51333673384873,2.335805874878681 +transit,102.50605421419644,2.340932184423789 +transit,102.49877164162784,2.346058455561871 +transit,102.49148901602695,2.351184688208461 +transit,102.48420633727774,2.3563108822790935 +transit,102.47692360526425,2.3614370376893 +transit,102.46964081987045,2.3665631543546124 +transit,102.46235798098036,2.3716892321905574 +transit,102.45507508847797,2.3768152711126636 +transit,102.44779214224731,2.3819412710364545 +transit,102.44050914217235,2.387067231877455 +transit,102.43322608813709,2.3921931535511853 +transit,102.42594298002557,2.3973190359731675 +transit,102.41865981772175,2.4024448790589177 +transit,102.41137660110967,2.4075706827239522 +transit,102.4040933300733,2.4126964468837877 +transit,102.39681000449666,2.4178221714539356 +transit,102.38952662426375,2.4229478563499063 +transit,102.38224318925857,2.4280735014872104 +transit,102.37495969936514,2.433199106781355 +transit,102.36767615446743,2.4383246721478455 +transit,102.36039255444948,2.4434501975021856 +transit,102.35310889919528,2.4485756827598784 +transit,102.3458251885888,2.453701127836423 +transit,102.3385414225141,2.4588265326473198 +transit,102.33125760085515,2.463951897108063 +transit,102.32397372349595,2.469077221134149 +transit,102.31668979032054,2.474202504641071 +transit,102.30940580121288,2.4793277475443203 +transit,102.30212175605699,2.484452949759386 +transit,102.29483765473688,2.489578111201755 +transit,102.28755349713656,2.494703231786915 +transit,102.28026928314,2.4998283114303477 +transit,102.27298501263125,2.5049533500475367 +transit,102.2657006854943,2.5100783475539625 +transit,102.25841630161314,2.5152033038651025 +transit,102.25113186087178,2.520328218896435 +transit,102.24384736315423,2.5254530925634318 +transit,102.23656280834449,2.5305779247815687 +transit,102.22927819632658,2.535702715466315 +transit,102.22199352698448,2.5408274645331415 +transit,102.21470880020222,2.5459521718975133 +transit,102.2074240158638,2.5510768374748984 +transit,102.2001391738532,2.5562014611807573 +transit,102.19285427405445,2.561326042930555 +transit,102.18556931635156,2.5664505826397495 +transit,102.17828430062852,2.571575080223798 +transit,102.17099922676935,2.576699535598158 +transit,102.16371409465805,2.581823948678284 +transit,102.15642890417861,2.5869483193796263 +transit,102.14914365521507,2.5920726476176372 +transit,102.14185834765141,2.597196933307763 +transit,102.13457298137165,2.6023211763654523 +transit,102.12728755625977,2.607445376706149 +transit,102.12000207219981,2.6125695342452966 +transit,102.11271652907577,2.617693648898334 +transit,102.10543092677165,2.622817720580701 +transit,102.09814526517145,2.627941749207835 +transit,102.09085954415919,2.633065734695171 +transit,102.08357376361887,2.6381896769581417 +transit,102.0762879234345,2.643313575912177 +transit,102.06900202349009,2.6484374314727086 +transit,102.06171606366964,2.6535612435551625 +transit,102.05443004385717,2.6586850120749643 +transit,102.04714396393666,2.663808736947536 +transit,102.03985782379215,2.6689324180883016 +transit,102.03257162330765,2.6740560554126773 +transit,102.02528536236713,2.679179648836083 +transit,102.01799904085463,2.684303198273934 +transit,102.01071265865416,2.6894267036416433 +transit,102.0034262156497,2.6945501648546224 +transit,101.99613971172529,2.699673581828281 +transit,101.98885314676492,2.704796954478027 +transit,101.9815665206526,2.7099202827192648 +transit,101.97427983327236,2.7150435664673993 +transit,101.96699308450819,2.720166805637832 +transit,101.95970627424408,2.725290000145962 +transit,101.95241940236409,2.730413149907187 +transit,101.94513246875218,2.7355362548369033 +transit,101.93784547329238,2.740659314850504 +transit,101.9305584158687,2.7457823298633808 +transit,101.92327129636516,2.750905299790924 +transit,101.91598411466575,2.7560282245485186 +transit,101.9086968706545,2.7611511040515526 +transit,101.90140956421538,2.766273938215409 +transit,101.89412219523246,2.7713967269554693 +transit,101.8868347635897,2.776519470187113 +transit,101.87954726917114,2.7816421678257166 +transit,101.87225971186078,2.786764819786656 +transit,101.86497209154263,2.791887425985305 +transit,101.8576844081007,2.7970099863370352 +transit,101.850396661419,2.8021325007572147 +transit,101.84310885138154,2.807254969161211 +transit,101.83582097787233,2.81237739146439 +transit,101.8285330407754,2.8174997675821123 +transit,101.82124503997474,2.8226220974297416 +transit,101.81395697535437,2.8277443809226352 +transit,101.8066688467983,2.8328666179761517 +transit,101.79938065419054,2.8379888085056435 +transit,101.7920923974151,2.8431109524264646 +transit,101.78480407635601,2.8482330496539654 +transit,101.77751569089726,2.8533551001034945 +transit,101.77022724092288,2.8584771036903978 +transit,101.76293872631686,2.86359906033002 +transit,101.75565014696322,2.8687209699377028 +transit,101.748361502746,2.8738428324287866 +transit,101.74107279354916,2.878964647718609 +transit,101.73378401925677,2.8840864157225057 +transit,101.7264951797528,2.889208136355812 +transit,101.71920627492129,2.894329809533858 +transit,101.71191730464624,2.8994514351719736 +transit,101.70462826881166,2.9045730131854857 +transit,101.69733916730158,2.9096945434897195 +WP9,101.69005,2.914816026 +transit,101.68535588738197,2.922015798814107 +transit,101.6806617149491,2.929215550992293 +transit,101.67596748255315,2.9364152824833907 +transit,101.6712731900459,2.9436149932362317 +transit,101.66657883727906,2.9508146831996442 +transit,101.66188442410441,2.9580143523224574 +transit,101.65718995037369,2.965214000553495 +transit,101.65249541593862,2.9724136278415783 +transit,101.64780082065093,2.979613234135528 +transit,101.64310616436235,2.9868128193841628 +transit,101.63841144692458,2.994012383536298 +transit,101.63371666818934,3.0012119265407464 +transit,101.62902182800832,3.0084114483463194 +transit,101.62432692623325,3.0156109489018266 +transit,101.61963196271579,3.0228104281560744 +transit,101.61493693730763,3.030009886057866 +transit,101.61024184986047,3.037209322556003 +transit,101.60554670022597,3.044408737599287 +transit,101.60085148825578,3.051608131136514 +transit,101.59615621380159,3.058807503116481 +transit,101.59146087671505,3.0660068534879774 +transit,101.58676547684779,3.0732061821997965 +transit,101.58207001405147,3.080405489200724 +transit,101.57737448817771,3.0876047744395483 +transit,101.57267889907816,3.0948040378650505 +transit,101.56798324660443,3.1020032794260133 +transit,101.56328753060814,3.1092024990712144 +transit,101.55859175094089,3.11640169674943 +transit,101.55389590745432,3.123600872409436 +WP1,101.5492,3.130800026 diff --git a/projects/MissionSupport/applications/WxFlight/asia-aq/flight_schedule.yml b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_schedule.yml new file mode 100644 index 0000000..7797d4e --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/asia-aq/flight_schedule.yml @@ -0,0 +1,30 @@ +aircraft: [DC8, snapshot] +flight_times: [PT8H, PT12H, PT15H] +flight_plans: [default] + +schedule: + + 20240101-20240201: + aircraft: [DC8, snapshot] + flight_times: [PT8H, PT12H, PT15H] + flight_plans: [default] + + 20240202-20240206: + aircraft: [DC8] + flight_times: [PT7H30M, PT12H, PT15H] + flight_plans: [Manila] + + 20240207-20240213: + aircraft: [DC8] + flight_times: [P1DT9H, P2DT9H, P3DT9H, P4DT9H] + flight_plans: [Manila] + + 20240214-20240309: + aircraft: [DC8] + flight_times: [P1DT9H, P2DT9H, P3DT9H, P4DT9H] + flight_plans: [Seoul] + + 20240310-: + aircraft: [DC8] + flight_times: [P1DT8H, P2DT8H, P3DT8H, P4DT8H] + flight_plans: [bangkok] diff --git a/projects/MissionSupport/applications/WxFlight/bin/findit.sh b/projects/MissionSupport/applications/WxFlight/bin/findit.sh new file mode 100755 index 0000000..84cd72e --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/bin/findit.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +DIR=/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/das/Y2024/M01 +COLLECTIONS="inst3_3d_ext_Np inst3_2d_met_Nx inst1_2d_hwl_Nx inst3_3d_aer_Np inst3_3d_chm_Np inst3_3d_asm_Np tavg1_2d_slv_Nx" + +for collection in $COLLECTIONS; do + + result=`find $DIR -type f -name "*${collection}*"` + if [ -n "$result" ]; then + echo $collection + fi + +done + +exit 0 diff --git a/projects/MissionSupport/applications/WxFlight/bin/flight.py b/projects/MissionSupport/applications/WxFlight/bin/flight.py new file mode 100644 index 0000000..45e0c28 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/bin/flight.py @@ -0,0 +1,67 @@ +import os +import datetime as dt + +def find_forecast_file(time_dt, stride, file_template, window=None): + + if not window: window = dt.timedelta(days=1) + t_dt = dt.datetime(time_dt.year, time_dt.month, time_dt.day) - window + + if t_dt+stride <= t_dt: + stride = dt.timedelta(hours=12) + + fcst_file = None + while t_dt <= time_dt: + + file = t_dt.strftime(file_template) + if os.path.isfile(file): + + start_dt, end_dt = get_file_times(file) + if start_dt > time_dt: break + + fcst_file = file + + t_dt += stride + + return fcst_file + +def get_file_times(filename): + + months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', + 'sep', 'oct', 'nov', 'dec'] + + seconds = {'mn': 60, 'hr': 3600, 'dy': 86400} + + with open(filename, 'r') as f: + lines = f.readlines() + + for line in lines: + + line = line.lower().strip() + + if 'tdef' in line: + line = line.split() + + dim = int(line[1]) + tstring = line[3] + tinc = line[4] + + time, date = tstring.split('z') + day = int(date[0:2]) + month = months.index(date[2:5]) + 1 + year = int(date[5:]) + + if ':' in time: + hour, minute = [int(n) for n in time.split(':')] + else: + hour, minute = (int(time), 0) + + stride = [c for c in tinc if c.isdigit()] + stride = int(''.join(stride)) + units = [c for c in tinc if not c.isdigit()] + units = ''.join(units) + incsec = dt.timedelta(seconds=seconds[units]*stride) + totsec = incsec * (dim-1) + time_dt = dt.datetime(year, month, day, hour, minute) + return (time_dt, time_dt+totsec) + + raise Exception("File is not a GrADS control file") diff --git a/projects/MissionSupport/applications/WxFlight/bin/modules b/projects/MissionSupport/applications/WxFlight/bin/modules new file mode 100644 index 0000000..6d9c616 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/bin/modules @@ -0,0 +1,8 @@ + setenv ESMADIR /discover/nobackup/rgovinda/git_motel/GAAS-SLES12/GAAS +# setenv ESMADIR /home/adasilva/workspace/GAAS + setenv ARCH `uname -s` +# setenv PYTHONPATH $ESMADIR/$ARCH/lib/Python + setenv PYTHONPATH $ESMADIR/Linux/lib/Python:/home/dao_ops/gmao_packages/Workflow/Shared:/home/dao_ops/gmao_packages/WxFlight/bin:/home/dao_ops/gmao_packages/Workflow/Shared:/home/dao_ops/gmao_packages/WxFlight/lib +# setenv PYTHONPATH /discover/nobackup/acollow/Python + set path = ( . /home/dao_ops/gmao_packages/WxFlight/bin $ESMADIR/$ARCH/bin $ESMADIR/src/GMAO_Shared/Chem_Base/ $path ) + source $ESMADIR/src/g5_modules diff --git a/projects/MissionSupport/applications/WxFlight/bin/myutils.py b/projects/MissionSupport/applications/WxFlight/bin/myutils.py new file mode 100644 index 0000000..96b1e08 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/bin/myutils.py @@ -0,0 +1,134 @@ +import os +import re +import yaml +from string import Template +from datetime import timedelta + +class Utils(object): + + def __init__(self): pass + + def replace(self, s, **defs): + + s_interp = Template(s).safe_substitute(defs) + + if s_interp != s: + s_interp = self.replace(s_interp, **defs) + + return s_interp + +def str_replace(s, **defs): + """ Recursive variable substitution. Shell-style variables ($var, ${var}) + are recursively substituted with definitions from ``defs``. + + :param s: input string containing variables. + :param defs: input dict (kwargs) containing variable definitions. + :return: string with variable substitutions where defined. + """ + + s_interp = Template(s).safe_substitute(defs) + + if s_interp != s: + s_interp = str_replace(s_interp, **defs) + + return s_interp + +#------------------------------------------------------------------------------ + +def dict_merge(dct, merge_dct): + """ Recursive dict merge. Inspired by :meth:``dict.update()``, instead of + updating only top-level keys, dict_merge recurses down into dicts nested + to an arbitrary depth, updating keys. The ``merge_dct`` is merged into + ``dct``. + + :param dct: dict onto which the merge is executed + :param merge_dct: merge_dct merged into dct + :return: None + """ + for k in merge_dct: + if (k in dct and isinstance(dct[k], dict) and isinstance(merge_dct[k], dict)): #noqa + dict_merge(dct[k], merge_dct[k]) + else: + dct[k] = merge_dct[k] + +#------------------------------------------------------------------------------ + +def read_yaml(filename): + + with open(filename, 'r') as handle: + buf = handle.read() + + cfg = yaml.safe_load(buf) + + defs = {k:str(v) for k, v in iter(os.environ.items())} + defs.update({k:str(v) for k, v in iter(cfg.items()) if not isinstance(v, dict)}) + + buf = str_replace(buf, **defs) + + cfg = yaml.safe_load(buf) + + return cfg + +#------------------------------------------------------------------------------ + +def make_dirs(path, mode=0o755, exist_ok=True): + + if exist_ok: + + try: + os.makedirs(path, mode) + except: + pass + + else: + + os.makedirs(path, mode) + + return + +#------------------------------------------------------------------------------ + +def parse_duration(iso_duration): + """Parses an ISO 8601 duration string into a datetime.timedelta instance. + Args: + iso_duration: an ISO 8601 duration string. + Returns: + a datetime.timedelta instance + """ + + factor = 1 + if iso_duration[0] == '-': + factor = -1 + iso_duration = iso_duration[1:] + + if 'T' not in iso_duration: + iso_duration += 'T0H' + + m = re.match(r'^P(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)D)?T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:.\d+)?)S)?$', + iso_duration) + if m is None: + raise ValueError("invalid ISO 8601 duration string") + + m = [m.group(i) for i in range(0,7)] + + days = 0 + hours = 0 + minutes = 0 + seconds = 0.0 + + # Years and months are not being utilized here, as there is not enough + # information provided to determine which year and which month. + # Python's time_delta class stores durations as days, seconds and + # microseconds internally, and therefore we'd have to + # convert parsed years and months to specific number of days. + + if m[3]: + days = int(m[3]) + if m[4]: + hours = int(m[4]) + if m[5]: + minutes = int(m[5]) + if m[6]: + seconds = float(m[6]) + + return factor * timedelta(days=days, hours=hours, minutes=minutes, seconds=seconds) diff --git a/projects/MissionSupport/applications/WxFlight/bin/rename.sh b/projects/MissionSupport/applications/WxFlight/bin/rename.sh new file mode 100755 index 0000000..7263040 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/bin/rename.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +while read filename; do + + field=`echo $filename | cut -d'_' -f1` + airport=`echo $filename | cut -d'_' -f2` + aircraft=`echo $filename | cut -d'_' -f3` + departure=`echo $filename | cut -d'_' -f4 | cut -d'.' -f1` + + oname=nasa.gmao.flight_track.$aircraft.GEOSFP.$field.0.$airport.$departure.PT000H.png + + mv $filename $oname + +done + +exit 0 diff --git a/projects/MissionSupport/applications/WxFlight/bin/taskmanager.py b/projects/MissionSupport/applications/WxFlight/bin/taskmanager.py new file mode 100755 index 0000000..0cc2139 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/bin/taskmanager.py @@ -0,0 +1,113 @@ +"""Defines classes and methods for managing multiple tasks in parallel. + +**See Also:** + Modules: subprocess, multiprocessing +""" + +from __future__ import print_function +# should move print statements outside of module + +import time +import shlex +import subprocess +import multiprocessing + +class TaskManager(object): + """Provides methods for managing multiple tasks in parallel. + + **Args:** + none + + **Raises:** + none + """ + + def __init__(self, ntask=4): # bad default + + assert ntask > 0, "Bad request for number of processors" + self.max_task = min(ntask, multiprocessing.cpu_count()) + print('Using ' + str(self.max_task) + ' processors.') + self.task = {} + self.command = {} + + def spawn(self, command): + """Executes the specified command as a new task. + + **Args:** + command : string : input + Command to be executed. + + **Returns:** + none + + **Raises:** + none + + **Notes:** + 1. This method will wait for a processor to become available. There + is currently no option to specify the wait time or query + interval. + """ + + while self.load() >= self.max_task: + time.sleep(1) + + cmd = shlex.split(command) + + p = subprocess.Popen( + cmd, stdout=None, stderr=None, shell=False + ) + process = str(p.pid) + self.task[process] = p + self.command[process] = command + + def load(self): + """Determines the number of tasks (load) currently executing. + + **Args:** + none + + **Returns:** + ntasks : integer + Number of tasks currently executing. + + **Raises:** + none + + **Notes:** + none + """ + + ntask = len(self.task) + processes = self.task.keys() + + for process in processes: + p = self.task[process] + + if p.poll() == None: + continue + + if p.returncode != 0: + print(str(self.command[process]) + 'ended with rc=' + str(p.returncode)) + del self.task[process] + del self.command[process] + + ntask -= 1 + + return ntask + + def wait(self): + """Waits for all tasks to complete. + + **Args:** + none + + **Returns:** + none + + **Raises:** + none + """ + + while self.load() > 0: + time.sleep(1) diff --git a/projects/MissionSupport/applications/WxFlight/bin/trj_sampler.py b/projects/MissionSupport/applications/WxFlight/bin/trj_sampler.py new file mode 100755 index 0000000..60ea96e --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/bin/trj_sampler.py @@ -0,0 +1,580 @@ +#!/usr/bin/env python + +""" + Utility to generate a orbital trajectory and sample model + output along it. + + Arlindo da Silva, February 2014. + +""" + +import os + +from numpy import zeros, arange, array, float32 + +from optparse import OptionParser +from datetime import datetime, timedelta +from dateutil.parser import parse as isoparser +#import dateutil.parsesr +from csv import DictReader + +from MAPL import Config, eta +from MAPL.constants import * +from pyobs.sgp4 import getTrack as getTrackTLE +from pyobs import ICARTT, NPZ, HSRL, ORACLES + +class TleVar(object): + """ + Generic container for Variables + """ + def __init__(self,name): + self.name = name + + +#--- +def Open(filename): + """ + Uses GFIO or GFIOctl to open either a NetCDF-4 or a control file. + Very heuristic. + """ + from gfio import GFIOurl, GFIOctl + name, ext = os.path.splitext(filename) + + # Open the GFIO dataset + # --------------------- + f = None + if 'HTTP://' == name[:7].upper(): + f = GFIOurl(filename) + f.lower = True # force variable names to be lower case when sampling. + elif ext.upper() in ('.NC4','.NC','.HDF','.H5'): + f = GFIOurl(filename) + f.lower = False + else: + f = GFIOctl(filename) + f.lower = False + + # Create variable dictionary + # -------------------------- + Vars = dict() + if len(f.vtitle)0: + var.levunits = f.levunits[:] + var.levs = f.levs[:] + try: + var.units = f.vunits[i] + except: + var.units = 'unknown' # opendap currently lacks units + Vars[v] = var + + f.Vars = Vars + + return f + +def getTrackICT(ictFile,dt_secs): + """ + Get trajectory from ICART (.ict) file. + """ + m = ICARTT(ictFile) + lon, lat, tyme = m.Nav['Longitude'], m.Nav['Latitude'], m.Nav['Time'] + mdt = (tyme[-1] - tyme[0]).total_seconds()/float(len(tyme)-1) # in seconds + idt = int(dt_secs/mdt+0.5) + return (lon[::idt], lat[::idt], tyme[::idt]) + +def getTrackHSRL(hsrlFile,dt_secs=60): + """ + Get trajectory from HSRL HDF-5 file. + """ + h = HSRL(hsrlFile,Nav_only=True) + lon, lat, tyme = h.lon[:].ravel(), h.lat[:].ravel(), h.tyme[:].ravel() + if dt_secs > 0: + dt = tyme[1] - tyme[0] + idt = int(dt_secs/dt.total_seconds()+0.5) + return (lon[::idt], lat[::idt], tyme[::idt]) + else: + idt = 1 + return (lon[::idt], lat[::idt], tyme[::idt]) + +def getTrackORACLES(mergeFile,dt_secs=60): + """ + Get trajectory from ORACLES merge file (netCDF). + """ + m = ORACLES(mergeFile) + lon, lat, tyme = m.lon, m.lat, m.tyme + mdt = (tyme[-1] - tyme[0]).total_seconds()/float(len(tyme)-1) # in seconds + idt = int(dt_secs/mdt+0.5) + return (lon[::idt], lat[::idt], tyme[::idt]) + +def getTrackCSV(csvFile): + """ + Get trajectory from a CSV with (lon,lat,time) coordinates. + + + 2014-02-05T12:30:45 + """ + CSV = DictReader(open(csvFile)) + lon, lat, tyme = [], [], [] + for row in CSV: + lon += [float(row['lon']),] + lat += [float(row['lat']),] +# tyme += [isoparser(row['time']),] + time = row['time'] + time0 = update_isotime(time) + print time, time0 + tyme += [isoparser(time0, ignoretz=True),] + + return ( array(lon), array(lat), array(tyme) ) + +def update_isotime(time): + + """ + To fix ISODATE when hours has 24 + (yyyy-mm-ddT24:mn:sc) + """ + datestring_new = time + time0 = time + if time[12:14] == "24": + datestring = time[0:11] + minsec = time[15:] +# d = dateutil.parser.parse(datestring) + d = isoparser(datestring) + d2 = d + timedelta(seconds=86400) + datestring_new = (d2.isoformat()) + + if time[18:20] != "60": + datestring_new1 = datestring_new[0:14] + minsec + datestring_new = datestring_new1 + time0 = datestring_new + + + + """ + To fix ISODATE when seconds has 60 + (yyyy-mm-ddThh:mn:60) + """ + + elif time[18:20] == "60": + datestring = time[0:17] +# d = dateutil.parser.parse(datestring) + d = isoparser(datestring) + d2 = d + timedelta(seconds=60) + datestring_new = (d2.isoformat()) + time0 = datestring_new + return (time0) + + +def getTrackNPZ(npzFile): + """ + Get trajectory from a NPZ with (lon,lat,time) coordinates. + Notice that *time* is a datetime object. + + Note: These are simple NPZ usually generated during Neural + Net or other type of python based utility. Not meant + for general consumption, but could be since NPZ files + are much more compact than CSV. + + """ + n = NPZ(npzFile) + if 'time' in n.__dict__: + return ( n.lon, n.lat, n.time) + elif 'tyme' in n.__dict__: + return ( n.lon, n.lat, n.tyme) + else: + raise ValueError, 'NPZ file has neither *time* nor *tyme* attribut.e' + +def getVars(rcFile): + """ + Parse reource file, create variable dictionary with relevant + metadata. + """ + + cf = Config(rcFile) + Vars = dict() + AllVars = dict() + levUnits = 'none' + levs = [] + for V in cf.keys(): + path = cf(V) + f = Open(path) + varList = [] + if '*' in V: + VARS = f.Vars.keys() + else: + VARS = V.split(',') + for v in VARS: + v = v.strip() + var = f.Vars[v] + if AllVars.__contains__(v): # unique variable names for output + print " >< Skipping duplicate variable <%s> in %s"%(v,path) + continue + elif v.upper() == "TAITIME": + continue # annoying HDFEOS crap + else: + AllVars[v] = True + if var.km>0: + levUnits = var.levunits + levs = var.levs + varList += [var,] + Vars[path] = varList + + return (Vars, levs, levUnits) + +#--- +def writeNC ( lons, lats, tyme, Vars, levs, levUnits, trjFile, options, + title='GEOS-5 Trajectory Sampler', + doAkBk=False, zlib=False): + """ + Write a NetCDF file with sampled GEOS-5 variables along the satellite track + described by (lon,lat,tyme). + """ + from netCDF4 import Dataset + + km = len(levs) + + # Open NC file + # ------------ + nc = Dataset(options.outFile,'w',format=options.format) + + # Set global attributes + # --------------------- + nc.title = title + nc.institution = 'NASA/Goddard Space Flight Center' + nc.source = 'Global Model and Assimilation Office' + nc.history = 'Created from GEOS-5 standard collections by trj_sampler.py' + nc.references = 'n/a' + nc.comment = 'This file contains GEOS-5 related parameters along a satellite or aircraft track.' + nc.contact = 'Arlindo da Silva ' + nc.Conventions = 'CF' + nc.trjFile = trjFile + + # Create dimensions + # ----------------- + nt = nc.createDimension('time',len(tyme)) + ls = nc.createDimension('ls',19) + if km>0: + nz = nc.createDimension('lev',km) + if doAkBk: + ne = nc.createDimension('ne',km+1) + x = nc.createDimension('x',1) + y = nc.createDimension('y',1) + + # Coordinate variables + # -------------------- + time = nc.createVariable('time','i4',('time',),zlib=zlib) + time.long_name = 'Time' + t0 = tyme[0] + time.units = 'seconds since %s'%t0.isoformat(' ') + time[:] = array([int((t-t0).total_seconds()+0.5) for t in tyme]) + if km > 0: # pressure level not supported yet + lev = nc.createVariable('lev','f4',('lev',),zlib=zlib) + lev.long_name = 'Vertical Level' + lev.units = levUnits.strip() + lev.positive = 'down' + lev.axis = 'z' + lev[:] = levs[:] + + if doAkBk: + ae, be = eta.getEdge(km) # Coefficients for Hybrid coordinates + ak = nc.createVariable('ak','f4',('ne',),zlib=zlib) + ak.long_name = 'Eta coordinate coefficient ak (p = ak + bk * ps)' + ak.units = 'Pa' + ak = ae[:] + bk = nc.createVariable('bk','f4',('ne',),zlib=zlib) + bk.long_name = 'Eta coordinate coefficient bk (p = ak + bk * ps)' + bk.units = '1' + bk = be[:] + + # Add fake dimensions for GrADS compatibility + # ------------------------------------------- + x = nc.createVariable('x','f4',('x',),zlib=zlib) + x.long_name = 'Fake Longitude for GrADS Compatibility' + x.units = 'degrees_east' + x[:] = zeros(1) + y = nc.createVariable('y','f4',('y',),zlib=zlib) + y.long_name = 'Fake Latitude for GrADS Compatibility' + y.units = 'degrees_north' + y[:] = zeros(1) + + # Trajectory coordinates + # ---------------------- + lon = nc.createVariable('trjLon','f4',('time',),zlib=zlib) + lon.long_name = 'Trajectory Longitude' + lon.units = 'degrees_east' + lon[:] = lons[:] + lat = nc.createVariable('trjLat','f4',('time',),zlib=zlib) + lat.long_name = 'Trajectory Latitude' + lat.units = 'degrees_north' + lat[:] = lats[:] + + # Time in ISO format if so desired + # --------------------------------- + if options.isoTime: + isotime = nc.createVariable('isotime','S1',('time','ls'),zlib=zlib) + isotime.long_name = 'Time (ISO Format)' + isotmp = zeros((len(lons),19),dtype='S1') + for i in range(len(lons)): + isotmp[i][:] = list(tyme[i].isoformat()) + isotime[:] = isotmp[:] + + # Loop over datasets, sample and write each variable + # -------------------------------------------------- + for path in Vars: + if options.verbose: + print " <> opening "+path + g = Open(path) + for var in Vars[path]: + if var.km == 0: + dim = ('time',) + else: + dim = ('time','lev') + this = nc.createVariable(var.name,'f4',dim,zlib=zlib) + this.standard_name = var.title + this.long_name = var.title.replace('_',' ') + this.missing_value = float32(MAPL_UNDEF) + this.units = var.units + if g.lower: + name = var.name.lower() # GDS always uses lower case + else: + name = var.name + if options.verbose: + print " [] %s interpolating <%s>"%\ + (options.algo.capitalize(),name.upper()) + Z = g.sample(name,lons,lats,tyme,algorithm=options.algo, + Transpose=True,squeeze=True) + Z[abs(Z)>MAPL_UNDEF/1000.] = MAPL_UNDEF # detect undef contaminated interp + this[:] = Z + + # Close the file + # -------------- + nc.close() + + if options.verbose: + print " <> wrote %s file %s"%(options.format,options.outFile) + +#--- +def writeXLS ( lons, lats, tyme, Vars, trjFile, options, + title='GEOS-5 Trajectory Sampler'): + """ + Write a Excel Spreadsheet file with sampled GEOS-5 variables along the satellite track + described by (lons,lats,tyme). + """ + from xlwt import Workbook + + km = len(levs) + + # Open XLS file + # ------------- + book = Workbook() + meta = book.add_sheet('Metadata') + + # Set global attributes on its own sheet + # -------------------------------------- + meta.write(0,0,'Title:') + meta.write(0,1,title) + + meta.write(1,0,'Institution:') + meta.write(1,1,'NASA/Goddard Space Flight Center') + + meta.write(2,0,'Source:') + meta.write(2,1,'Global Model and Assimilation Office') + + meta.write(3,0,'History:') + meta.write(3,1,'Created from GEOS-5 standard collections by trj_sampler.py') + + meta.write(4,0,'References:') + meta.write(4,1,'n/a') + + meta.write(5,0,'Comment:') + meta.write(5,1,'This file contains GEOS-5 parameters sampled along a satellite or aircraft track.') + + meta.write(6,0,'Contact:') + meta.write(6,1,'Arlindo da Silva ') + + meta.write(7,0,'Trajectory File:') + meta.write(7,1,trjFile) + + # Time in ISO format + # ------------------ + isoTime = array([t.isoformat() for t in tyme]) + + # Data sheet + # ---------- + sheet = book.add_sheet('Data') + + # Header: coordinates + # ------------------- + sheet.write(1,0,'Time') + sheet.write(1,1,'Longitude') + sheet.write(2,1,'degrees') + sheet.write(1,2,'Latitude') + sheet.write(2,2,'Degrees') + + # Coordinate variables + # -------------------- + for n in range(len(isoTime)): + sheet.write(n+3,0,isoTime[n]) + sheet.write(n+3,1,lons[n]) + sheet.write(n+3,2,lats[n]) + + # Loop over datasets, sample and write each variable + # -------------------------------------------------- + j = 3 + for path in Vars: + + if options.verbose: + print " <> opening "+path + g = Open(path) + for var in Vars[path]: + if var.km > 0: + print 'Warning: ignoring <%s>, only single-level variables supported for now'%var.name + continue # no profiles for now + if g.lower: + name = var.name.lower() # GDS always uses lower case + else: + name = var.name + + # Variable header + # --------------- + sheet.write(0,j,var.name.upper()) + sheet.write(1,j,var.title.replace('_',' ').replace('ensemble','')) + sheet.write(2,j,var.units) + + # Interpolate + # ----------- + if options.verbose: + print " [] Interpolating <%s>"%name.upper() + Z = g.sample(name,lons,lats,tyme,Transpose=True,squeeze=True) + Z[abs(Z)>MAPL_UNDEF/1000.] = MAPL_UNDEF # detect undef contaminated interp + + # Write to sheet + # -------------- + Z = Z.astype('float') + for n in range(len(isoTime)): + sheet.write(n+3,j,Z[n]) + + j += 1 + + # Close the file + # -------------- + book.save(options.outFile) + + if options.verbose: + print " <> wrote %s file %s"%(options.format,options.outFile) + +#------------------------------------ M A I N ------------------------------------ + +if __name__ == "__main__": + + format = 'NETCDF3_CLASSIC' + rcFile = 'trj_sampler.rc' + outFile = 'trj_sampler.nc' + dt_secs = 60 + algo = 'linear' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] tleFile|ictFile|csvFile|npzFile [iso_t1 iso_t2]", + version='1.0.1' ) + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, nearest (default=%s)"\ + %algo) + + parser.add_option("-r", "--rcFile", dest="rcFile", default=rcFile, + help="Resource file defining parameters to sample (default=%s)"\ + %rcFile ) + + parser.add_option("-o", "--output", dest="outFile", default=outFile, + help="Output NetCDF file (default=%s)"\ + %outFile ) + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC, NETCDF3_64BIT or EXCEL (default=%s)"%format ) + + parser.add_option("-t", "--trajectory", dest="traj", default=None, + help="Trajectory file format: one of tle, ict, csv, npz, hsrl, oracles (default=trjFile extension)" ) + + parser.add_option("-d", "--dt_secs", dest="dt_secs", default=dt_secs, + type='int', + help="Timesetp in seconds for TLE sampling (default=%s)"%dt_secs ) + + parser.add_option("-I", "--isoTime", + action="store_true", dest="isoTime", + help="Include ISO format time in output file.") + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + (options, args) = parser.parse_args() + + if len(args) == 3: + trjFile, iso_t1, iso_t2 = args + t1, t2 = (isoparser(iso_t1), isoparser(iso_t2)) + elif len(args) == 1: + trjFile = args[0] + t1, t2 = None, None + else: + parser.error("must have 1 or 3 arguments: tleFile|ictFile [iso_t1 iso_t2]") + + if options.traj is None: + name, ext = os.path.splitext(trjFile) + options.traj = ext[1:] + options.traj = options.traj.upper() + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if ext.upper() == '.XLS': + options.format = 'EXCEL' + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + elif 'EXCEL' in options.format: + options.outFile = name + '.xls' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # Get Variables and Metadata + # -------------------------- + Vars, levs, levUnits = getVars(options.rcFile) + + # Create trajectory + # ----------------- + if options.traj == 'TLE': + if t1 is None: + raise ValueError, 'time range (t1,t2) must be specified when doing TLE sampling.' + lon, lat, tyme = getTrackTLE(trjFile, t1, t2, options.dt_secs) + elif options.traj == 'ICT': + lon, lat, tyme = getTrackICT(trjFile,options.dt_secs) + elif options.traj == 'CSV': + lon, lat, tyme = getTrackCSV(trjFile) + elif options.traj == 'NPZ': + lon, lat, tyme = getTrackNPZ(trjFile) + elif options.traj == 'HSRL' or options.traj == 'H5': + lon, lat, tyme = getTrackHSRL(trjFile,options.dt_secs) + elif options.traj == 'ORACLES': + lon, lat, tyme = getTrackORACLES(trjFile,options.dt_secs) + else: + raise ValueError, 'cannot handle trajectory file format <%s>'%options.traj + + # Make sure longitudes in [-180,180] + # ---------------------------------- + if lon.max()>180.: + lon[lon>180] = lon[lon>180] - 360. + + # Write output file + # ----------------- + if options.format == 'EXCEL': + writeXLS(lon,lat,tyme,Vars,trjFile,options) + else: + writeNC(lon,lat,tyme,Vars,levs,levUnits,trjFile,options) diff --git a/projects/MissionSupport/applications/WxFlight/bin/wp2traj.py b/projects/MissionSupport/applications/WxFlight/bin/wp2traj.py new file mode 100755 index 0000000..8a05a74 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/bin/wp2traj.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python +""" + +Convert waypoint files to (time,lon,lat) trajectory CSV. + +""" + +import os +import pandas as pd +import numpy as np +import pyproj as pj + +from datetime import datetime, timedelta +from dateutil.parser import parse as isoparser +from optparse import OptionParser + +# When running under pyobs we will use this +# from pyobs.aircrafts import platform + +# For now, hardwire DC8. +platform = dict( +DC8 = {'Platform':'dc8','names':['dc8','DC8','DC-8','dc-8','DC 8','dc 8','Dc','dC'], + 'max_alt':13000.0,'base_speed':130.0,'speed_per_alt':0.0075, + 'mean_speed': 136, + 'max_speed':175.0,'max_speed_alt':6000.0,'descent_speed_decrease':15.0, + 'climb_vert_speed':15.0,'descent_vert_speed':-10.0,'alt_for_variable_vert_speed':0.0, + 'vert_speed_base':15.0,'vert_speed_per_alt':0.001, + 'rate_of_turn':None,'turn_bank_angle':15.0, + 'warning':False}, +) + +def write_traj(options,takeoff): + """ + Write trajectory file for a givem take off. + """ + + # Default file name + # ----------------- + if 'city_aircraft_takeoff' in options.outFile: + outFile = options.outFile.replace('city',city).replace('aircraft',options.plane).replace('takeoff',takeoff) + else: + outFile = options.outFile + + # Generate time coordinates + # ------------------------- + t0 = isoparser(takeoff) - timedelta(hours=int(utcOffset)) # UTC + time = np.repeat(t0,N) + + if options.plane != 'snapshot': + + geod = pj.Geod(ellps='WGS84') + _, _, dist = geod.inv(np.asarray(wp.lon[0:-1]),np.asarray(wp.lat[0:-1]),np.asarray(wp.lon[1:]),np.asarray(wp.lat[1:])) + speed = platform[options.plane]['mean_speed'] # m/s + dt = dist / speed + time[1:] += np.array([timedelta(seconds=s) for s in dt.cumsum()]) + + + # Create trajectory DataFrame + # --------------------------- + traj = pd.DataFrame(dict(lon=wp.lon.values, lat=wp.lat.values), index=time) + + #if options.verbose: + # print(traj) + + # Write out results + # ----------------- + if options.verbose: + print('- Writing',outFile) + + if options.format == 'csv' or options.format == 'gzip': + + traj.index = traj.index.map(lambda x: datetime.strftime(x, '%Y-%m-%dT%H:%M:%SZ')) + traj.to_csv(outFile,index_label='time') + + elif options.format == 'netcdf' or options.format == 'nc': + + traj.to_xarray().rename({'index':'time'}).to_netcdf(outFile) + + +if __name__ == "__main__": + + plane = 'DC8' + outFile = 'city_aircraft_takeoff.csv' + format = 'csv' + + # Parse command line options + # -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] wpFile takeOff_isoLocalTime(s)", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=outFile, + help="Output file (default=%s)"\ + %outFile ) + + parser.add_option("-p", "--platform", dest="plane", default=plane, + help="Platform (default=%s). Specify '-p snapshot' for a snapshot at takeoff time "%plane) + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of 'csv' or 'netcdf' (default=%s)"%format ) + + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + (options, args) = parser.parse_args() + + if len(args) >= 2 : + wpFile = args[0] + TakeOff = args[1:] + else: + parser.error("must have 2 arguments: wpFile takeOff") + + # Parse CSV file + # -------------- + f = open(wpFile,"r") + f.readline() + city, utcOffset = f.readline().replace('\n','').split(',') + wp = pd.read_csv(f) + N = wp.shape[0] + + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if ext.lower() == '.csv': + options.format = 'csv' + elif ext.lower() == '.nc': + options.format = 'netcdf' + elif ext.lower() == '.gz': + options.format = 'gzip' + + if options.format == 'csv': + options.outFile = name + '.csv' + elif options.format == 'netcdf': + options.outFile = name + '.nc' + elif options.format == 'gzip': + options.outFile = name + '.gz' + else: + raise ValueError('invalid extension <%s>'%ext) + + for takeoff in TakeOff: + write_traj(options,takeoff) + + diff --git a/projects/MissionSupport/applications/WxFlight/bin/wxcurtain.py b/projects/MissionSupport/applications/WxFlight/bin/wxcurtain.py new file mode 100755 index 0000000..43b80fc --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/bin/wxcurtain.py @@ -0,0 +1,69 @@ +#! /usr/bin/env python + +import os +import re +import sys +import glob +import shutil +import argparse +import importlib +import datetime as dt + +from multiprocessing import Pool + +from curtain_cf import plot +from flight_software import Flight, FlightController +from taskmanager import * +from myutils import read_yaml, str_replace, parse_duration, make_dirs + +# Get command-line arguments + +parser = argparse.ArgumentParser(description='Weather Flights') + +parser.add_argument('datetime', metavar='datetime', type=str, + help='ISO datetime as ccyy-mm-ddThh:mm:ss') +parser.add_argument('model', metavar='model', type=str, + help='model name') + +args = parser.parse_args() + +dattim = re.sub('[^0-9]', '', args.datetime+'000000')[0:14] +idate = int(dattim[0:8]) +itime = int(dattim[8:14]) +time_dt = dt.datetime.strptime(dattim,'%Y%m%d%H%M%S') +ref_date = dt.datetime.strptime(dattim[0:8],'%Y%m%d') + +# Set up environment based on field campaign + +os.environ['WX_MODEL'] = args.model +campaign_name = os.environ.get('WX_CAMPAIGN', 'default') +bin_path = os.path.abspath(os.path.dirname(sys.argv[0])) +root_path = os.path.dirname(bin_path) +campaign_path = os.path.join(root_path, campaign_name) +resource_file = os.path.join(campaign_path, 'default.yml') + +resource = read_yaml(resource_file) +handlers = resource['HANDLERS'] + +# Create the output flight directories + +in_dir = time_dt.strftime(resource['WX_FLIGHT_PATH']) +out_dir = time_dt.strftime(resource['WX_CURTAIN_PATH']) +in_src_dir = os.path.join(in_dir, 'src') +in_data_dir = os.path.join(in_dir, 'data') + +make_dirs(out_dir) + +fh = Flight(in_dir) +fc = FlightController() + +flights = fh.get_flights() +carryon = {'fcst_dt': time_dt, 'ipath': in_dir, 'opath': out_dir} + +handler = importlib.import_module(handlers[args.model]) + +pool = Pool(24) + +pool.map(handler.plot, fc.iter(flights, **carryon)) +pool.close() +pool.join() diff --git a/projects/MissionSupport/applications/WxFlight/bin/wxflight.py b/projects/MissionSupport/applications/WxFlight/bin/wxflight.py new file mode 100755 index 0000000..e6809c9 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/bin/wxflight.py @@ -0,0 +1,154 @@ +#! /usr/bin/env python + +import os +import re +import sys +import glob +import shutil +import argparse +import datetime as dt + +from flight_software import find_forecast_file +from taskmanager import * +from myutils import read_yaml, str_replace, parse_duration, make_dirs + +# Get command-line arguments + +parser = argparse.ArgumentParser(description='Weather Flights') + +parser.add_argument('datetime', metavar='datetime', type=str, + help='ISO datetime as ccyy-mm-ddThh:mm:ss') +parser.add_argument('model', metavar='model', type=str, + help='model name') + +args = parser.parse_args() + +dattim = re.sub('[^0-9]', '', args.datetime+'000000')[0:14] +idate = int(dattim[0:8]) +itime = int(dattim[8:14]) +time_dt = dt.datetime.strptime(dattim,'%Y%m%d%H%M%S') +ref_date = dt.datetime.strptime(dattim[0:8],'%Y%m%d') + +# Set up environment based on field campaign + +os.environ['WX_MODEL'] = args.model +campaign_name = os.environ.get('WX_CAMPAIGN', 'default') +bin_path = os.path.abspath(os.path.dirname(sys.argv[0])) +root_path = os.path.dirname(bin_path) +campaign_path = os.path.join(root_path, campaign_name) +resource_file = os.path.join(campaign_path, 'default.yml') +collection_file = os.path.join(campaign_path, 'collection.yml') +flight_plan_dir = os.path.join(campaign_path, 'flight_plans') +flight_schedule_file = os.path.join(campaign_path, 'flight_schedule.yml') + +resource = read_yaml(resource_file) + +# Create the output flight directories + +out_dir = time_dt.strftime(resource['WX_FLIGHT_PATH']) +src_out_dir = os.path.join(out_dir, 'src') +data_out_dir = os.path.join(out_dir, 'data') + +make_dirs(src_out_dir) +make_dirs(data_out_dir) + +# Get the latest flight schedule + +schedule = read_yaml(flight_schedule_file) +record = schedule.get('schedule', {}) + +for period, sched in record.items(): + + start_date = period.split('-')[0] + end_date = period.split('-')[-1] + + apply = True + if start_date and idate < int(start_date): + apply = False + + if end_date and idate > int(end_date): + apply = False + + if apply: + schedule.update(sched) + +print(schedule['aircraft']) +print(schedule['flight_times']) +print(schedule['flight_plans']) + +aircraft = schedule.get('aircraft', ['DC8', 'snapshot']) +flight_times = schedule.get('flight_times', ['PT0H']) +flight_plans = schedule.get('flight_plans', ['default']) + +# Generate flight times + +times = [] +for tod in flight_times: + departure = ref_date+parse_duration(tod) + times.append(departure.strftime("%Y-%m-%dT%H:%M:%S")) + +flight_times = ' '.join(times) + +# Generate flight paths + +task = TaskManager(ntask=14) +os.chdir(data_out_dir) + +for plan in flight_plans: + + pattern = os.path.join(flight_plan_dir, plan, '*.csv') + filelist = glob.glob(pattern) + + for flight_plan in filelist: + + shutil.copy(flight_plan, src_out_dir) + + for plane in aircraft: + + cmd = ['-v -p', plane, flight_plan, flight_times] + print('wp2traj.py ' + ' '.join(cmd)) + task.spawn('wp2traj.py ' + ' '.join(cmd)) + +task.wait() + +# Interpolate model data collections in space and time to each point along +# the flight paths. + +model_data = read_yaml(collection_file)[args.model] +stride = parse_duration(model_data.get('stride', 'PT12H')) +collections = model_data['collections'] + +pattern = os.path.join(data_out_dir, '*.csv') +track_files = glob.glob(pattern) + +for track_file in track_files: + + with open(track_file, 'r') as f: + lines = f.readlines() + + dattim = lines[1].split(',')[0] + dattim = re.sub('[^0-9]', '', dattim+'000000')[0:14] + start_dt = dt.datetime.strptime(dattim,'%Y%m%d%H%M%S') + + for cname, cdata in collections.items(): + + vars = cdata.get('vars', '*') + cfile = find_forecast_file(start_dt, stride, cdata['file']) + + if not cfile: + continue + + name, ext = os.path.splitext(track_file) + out_file = '.'.join([name, args.model, cname, 'nc']) + rc_file = '.'.join([name, args.model, cname, 'rc']) + + with open(rc_file, 'w') as f: + f.write(','.join(vars) + ': ' + cfile + '\n') + + cmd = ['-d 60 -o', out_file, '-v -t csv -I -r', rc_file, track_file] + print ('trj_sampler.py ' + ' '.join(cmd)) + task.spawn('trj_sampler.py ' + ' '.join(cmd)) + +task.wait() + +sys.exit(0) diff --git a/projects/MissionSupport/applications/WxFlight/bin/wxflight.py.dev b/projects/MissionSupport/applications/WxFlight/bin/wxflight.py.dev new file mode 100755 index 0000000..675d22a --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/bin/wxflight.py.dev @@ -0,0 +1,154 @@ +#! /usr/bin/env python + +import os +import re +import sys +import glob +import shutil +import argparse +import datetime as dt + +from flight import * +from taskmanager import * +from myutils import read_yaml, str_replace, parse_duration, make_dirs + +# Get command-line arguments + +parser = argparse.ArgumentParser(description='Weather Flights') + +parser.add_argument('datetime', metavar='datetime', type=str, + help='ISO datetime as ccyy-mm-ddThh:mm:ss') +parser.add_argument('model', metavar='model', type=str, + help='model name') + +args = parser.parse_args() + +dattim = re.sub('[^0-9]', '', args.datetime+'000000')[0:14] +idate = int(dattim[0:8]) +itime = int(dattim[8:14]) +time_dt = dt.datetime.strptime(dattim,'%Y%m%d%H%M%S') +ref_date = dt.datetime.strptime(dattim[0:8],'%Y%m%d') + +# Set up environment based on field campaign + +os.environ['WX_MODEL'] = args.model +campaign_name = os.environ.get('WX_CAMPAIGN', 'default') +bin_path = os.path.abspath(os.path.dirname(sys.argv[0])) +root_path = os.path.dirname(bin_path) +campaign_path = os.path.join(root_path, campaign_name) +resource_file = os.path.join(campaign_path, 'default.yml') +collection_file = os.path.join(campaign_path, 'collection.yml') +flight_plan_dir = os.path.join(campaign_path, 'flight_plans') +flight_schedule_file = os.path.join(campaign_path, 'flight_schedule.yml') + +resource = read_yaml(resource_file) + +# Create the output flight directories + +out_dir = time_dt.strftime(resource['WX_FLIGHT_PATH']) +src_out_dir = os.path.join(out_dir, 'src') +data_out_dir = os.path.join(out_dir, 'data') + +make_dirs(src_out_dir) +make_dirs(data_out_dir) + +# Get the latest flight schedule + +schedule = read_yaml(flight_schedule_file) +record = schedule.get('schedule', {}) + +for period, sched in record.items(): + + start_date = period.split('-')[0] + end_date = period.split('-')[-1] + + apply = True + if start_date and ref_date < start_date: + apply = False + + if end_date and ref_date > end_date: + apply = False + + if apply: + schedule.update(sched) + +print(schedule['aircraft']) +print(schedule['flight_times']) +print(schedule['flight_plans']) + +aircraft = schedule.get('aircraft', ['DC8', 'snapshot']) +flight_times = schedule.get('flight_times', ['PT0H']) +flight_plans = schedule.get('flight_plans', ['default']) + +# Generate flight times + +times = [] +for tod in flight_times: + departure = ref_date+parse_duration(tod) + times.append(departure.strftime("%Y-%m-%dT%H:%M:%S")) + +flight_times = ' '.join(times) + +# Generate flight paths + +task = TaskManager() +os.chdir(data_out_dir) + +for plan in flight_plans: + + pattern = os.path.join(flight_plan_dir, plan, '*.csv') + filelist = glob.glob(pattern) + + for flight_plan in filelist: + + shutil.copy(flight_plan, src_out_dir) + + for plane in aircraft: + + cmd = ['-v -p', plane, flight_plan, flight_times] + print('wp2traj.py ' + ' '.join(cmd)) + task.spawn('wp2traj.py ' + ' '.join(cmd)) + +task.wait() + +# Interpolate model data collections in space and time to each point along +# the flight paths. + +model_data = read_yaml(collection_file)[args.model] +stride = parse_duration(model_data.get('stride', 12)) +collections = model_data['collections'] + +pattern = os.path.join(data_out_dir, '*.csv') +track_files = glob.glob(pattern) + +for track_file in track_files: + + with open(track_file, 'r') as f: + lines = f.readlines() + + dattim = lines[1].split(',')[0] + dattim = re.sub('[^0-9]', '', dattim+'000000')[0:14] + start_dt = dt.datetime.strptime(dattim,'%Y%m%d%H%M%S') + + for cname, cdata in collections.items(): + + vars = cdata.get('vars', '*') + cfile = find_forecast_file(start_dt, stride, cdata['file']) + + if not cfile: + continue + + name, ext = os.path.splitext(track_file) + out_file = '.'.join(name, model, cname, '.nc') + rc_file = '.'.join(name, model, cname, '.rc') + + with open(rc_file, 'w') as f: + f.write(','.join(vars) + ':' + cfile) + + cmd = ['-d 60 -o', out_file, '-v -t csv -I -r', rc_file, track_file] + print ('trj_sampler.py ' + ' '.join(cmd)) + # task.spawn('trj_sampler.py ' + ' '.join(cmd)) + +task.wait() + +sys.exit(0) diff --git a/projects/MissionSupport/applications/WxFlight/bin/wxflight.py.save b/projects/MissionSupport/applications/WxFlight/bin/wxflight.py.save new file mode 100755 index 0000000..35bd2bd --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/bin/wxflight.py.save @@ -0,0 +1,157 @@ +#! /usr/bin/env python + +import os +import re +import sys +import glob +import shutil +import argparse +import datetime as dt + +from myutils import read_yaml, str_replace, parse_duration, make_dirs +from taskmanager import * + +# Get command-line arguments + +parser = argparse.ArgumentParser(description='Weather Flights') + +parser.add_argument('datetime', metavar='datetime', type=str, + help='ISO datetime as ccyy-mm-ddThh:mm:ss') + +args = parser.parse_args() + +dattim = re.sub('[^0-9]', '', args.datetime+'000000')[0:14] +idate = int(dattim[0:8]) +itime = int(dattim[8:14]) +fcst_dt = dt.datetime.strptime(dattim,'%Y%m%d%H%M%S') +fcst_date = dt.datetime.strptime(dattim[0:8],'%Y%m%d') + +# Set up environment based on field campaign + +campaign_name = os.environ.get('WX_CAMPAIGN', 'default') +bin_path = os.path.abspath(os.path.dirname(sys.argv[0])) +root_path = os.path.dirname(bin_path) +campaign_path = os.path.join(root_path, campaign_name) +resource_file = os.path.join(campaign_path, 'default.yml') +collection_file = os.path.join(campaign_path, 'collection.rc') +flight_plan_dir = os.path.join(campaign_path, 'flight_plans') +flight_schedule_file = os.path.join(campaign_path, 'flight_schedule.yml') + +resource = read_yaml(resource_file) + +# Create the output flight directories + +out_dir = fcst_dt.strftime(resource['WX_FLIGHT_PATH']) +src_out_dir = os.path.join(out_dir, 'src') +data_out_dir = os.path.join(out_dir, 'data') + +make_dirs(src_out_dir) +make_dirs(data_out_dir) + +# Get the latest flight schedule + +schedule = read_yaml(flight_schedule_file) +record = schedule.get('schedule', {}) + +idate = int(fcst_date.strftime('%Y%m%d')) +for period, sched in record.items(): + + start_date = period.split('-')[0] + end_date = period.split('-')[-1] + + if not end_date: + end_date = 20991231 + + print(start_date, end_date, idate) + + if idate >= int(start_date) and idate <= int(end_date): + schedule.update(sched) + +print(schedule['aircraft']) +print(schedule['flight_times']) +print(schedule['flight_plans']) + +aircraft = schedule.get('aircraft', ['DC8', 'snapshot']) +flight_times = schedule.get('flight_times', ['PT0H']) +flight_plans = schedule.get('flight_plans', ['default']) + +# Generate flight times + +times = [] +for tod in flight_times: + + departure = fcst_date+parse_duration(tod) + if departure < fcst_dt: continue + + times.append(departure.strftime("%Y-%m-%dT%H:%M:%S")) + +# Generate flight paths based on the specified time. + +task = TaskManager() +os.chdir(data_out_dir) + +for plan in flight_plans: + + dir = os.path.join(flight_plan_dir, plan, '*.csv') + filelist = glob.glob(dir) + + for flight_plan in filelist: + + shutil.copy(flight_plan, src_out_dir) + + for plane in aircraft: + + cmd = [] + cmd.append('-v -p') + cmd.append(plane) + cmd.append(flight_plan) + cmd.append(' '.join(times)) + + print('wp2traj.py ' + ' '.join(cmd)) + task.spawn('wp2traj.py ' + ' '.join(cmd)) + +task.wait() + +# Create input collection names based on the current forecast +# time and the prior forecast time (assuming forecasts are issued +# every 12-hours). The earier forecast time is needed if the starting +# flight time is before the current forecast start time. + +os.chdir(data_out_dir) + +with open(collection_file, 'r') as f: + buf = f.read() + +with open('collection-12.rc', 'w') as f: + f.write((fcst_dt-dt.timedelta(hours=12)).strftime(buf)) + +with open('collection-00.rc', 'w') as f: + f.write(fcst_dt.strftime(buf)) + +# Interpolate model data collections in space and time to each point along +# the flight paths. + +pattern = os.path.join(data_out_dir, '*.csv') +filelist = glob.glob(pattern) + +for file in filelist: + + with open(file, 'r') as f: + lines = f.readlines() + + mintime = lines[1].split(',')[0] + dattim = re.sub('[^0-9]', '', mintime+'000000')[0:14] + min_dt = dt.datetime.strptime(dattim,'%Y%m%d%H%M%S') + + cfile = 'collection-00.rc' + if min_dt < fcst_dt: + cfile = 'collection-12.rc' + + name, ext = os.path.splitext(file) + out_file = name + '.nc' + cmd = ['-d 60 -o', out_file, '-v -t csv -I -r', cfile, file] + task.spawn('trj_sampler.py ' + ' '.join(cmd)) + +task.wait() + +sys.exit(0) diff --git a/projects/MissionSupport/applications/WxFlight/default b/projects/MissionSupport/applications/WxFlight/default new file mode 120000 index 0000000..eecb6c0 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/default @@ -0,0 +1 @@ +asia-aq \ No newline at end of file diff --git a/projects/MissionSupport/applications/WxFlight/src/read_flight.py b/projects/MissionSupport/applications/WxFlight/src/read_flight.py new file mode 100755 index 0000000..1155a44 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/src/read_flight.py @@ -0,0 +1,25 @@ +import os +import sys +import glob +from netCDF4 import Dataset + +from flight import * + +fl = Flight(sys.argv[1]) + +flights = fl.get_flights() + +#flight = { 'location': 'Manila', 'aircraft': 'DC8' } +#field = get_data(sys.argv[1], 'BC', flight) + +#print(field['time']) + +for k,v in flights.items(): + data = fl.get_data('BC' , v) + print(k) + print(v['airport']) + print(v['aircraft']) + print(v['departure']) + + waypoints = fl.get_waypoints(v) + print(waypoints) diff --git a/projects/MissionSupport/applications/WxFlight/src/read_flight.py.save b/projects/MissionSupport/applications/WxFlight/src/read_flight.py.save new file mode 100755 index 0000000..b44a3e6 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/src/read_flight.py.save @@ -0,0 +1,49 @@ +import os +import sys +import glob +from netCDF4 import Dataset + +def get_data(ipath, field, flight): + + location = flight['location'] + aircraft = flight['aircraft'] + + # Find the collection file containing the desired field + + ipath = os.path.join(ipath, 'data') + pattern = os.path.join(ipath, location+'_'+aircraft+'_*.rc') + filelist = glob.glob(pattern) + + track_file = None + for file in filelist: + + with open(file, 'r') as f: + lines = f.readlines() + + vars = lines[0].split(':')[0] + vars = vars.split(',') + + if field in vars: + track_file = os.path.splitext(file)[0] + '.nc' + + if not track_file: + return None + + fh = Dataset(track_file, 'r') + + time = fh.variables['time'][:] + + if 'lev' in fh.variables: + lev = fh.variables['lev'][:] + else: + lev = None + + data = fh.variables[field][:] + fh.close() + + return {'name':field, 'data':data, 'time':time, 'lev':lev} + +flight = { 'location': 'Manila', 'aircraft': 'DC8' } +field = get_data(sys.argv[1], 'BC', flight) + +print(field['time']) diff --git a/projects/MissionSupport/applications/WxFlight/src/wxcurtain.py b/projects/MissionSupport/applications/WxFlight/src/wxcurtain.py new file mode 100755 index 0000000..1406921 --- /dev/null +++ b/projects/MissionSupport/applications/WxFlight/src/wxcurtain.py @@ -0,0 +1,62 @@ +#! /usr/bin/env python + +import os +import re +import sys +import glob +import shutil +import argparse +import datetime as dt + +from curtain_fp import plot +from flight_software import Flight, FlightController +from taskmanager import * +from myutils import read_yaml, str_replace, parse_duration, make_dirs + +# Get command-line arguments + +parser = argparse.ArgumentParser(description='Weather Flights') + +parser.add_argument('datetime', metavar='datetime', type=str, + help='ISO datetime as ccyy-mm-ddThh:mm:ss') +parser.add_argument('model', metavar='model', type=str, + help='model name') + +args = parser.parse_args() + +dattim = re.sub('[^0-9]', '', args.datetime+'000000')[0:14] +idate = int(dattim[0:8]) +itime = int(dattim[8:14]) +time_dt = dt.datetime.strptime(dattim,'%Y%m%d%H%M%S') +ref_date = dt.datetime.strptime(dattim[0:8],'%Y%m%d') + +# Set up environment based on field campaign + +os.environ['WX_MODEL'] = args.model +campaign_name = os.environ.get('WX_CAMPAIGN', 'default') +bin_path = os.path.abspath(os.path.dirname(sys.argv[0])) +root_path = os.path.dirname(bin_path) +campaign_path = os.path.join(root_path, campaign_name) +resource_file = os.path.join(campaign_path, 'default.yml') + +resource = read_yaml(resource_file) + +# Create the output flight directories + +in_dir = time_dt.strftime(resource['WX_FLIGHT_PATH']) +out_dir = time_dt.strftime(resource['WX_CURTAIN_PATH']) +in_src_dir = os.path.join(in_dir, 'src') +in_data_dir = os.path.join(in_dir, 'data') + +make_dirs(out_dir) + +fh = Flight(in_dir) +fc = FlightController() + +flights = fh.get_flights() +carryon = {'fcst_dt': time_dt, 'ipath': in_dir, 'opath': out_dir} + +for request in fc.iter(flights, **carryon): + print(request) + plot(request) + sys.exit(0) diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/alt_g2ctl b/projects/MissionSupport/applications/WxModel/asia-aq/bin/alt_g2ctl new file mode 100755 index 0000000..2eb42ef --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/alt_g2ctl @@ -0,0 +1,1671 @@ +#!/usr/bin/perl -w +# 2012 Public Domain Wesley Ebisuzaki +# +# makes a GrADS control file for grib2 files +# +# requires wgrib2 and Perl5 +# +# usage: alt_g2ctl [options] [grib file] [optional index file] >[control file] +# +# note: this script does not make the index file .. you have to run alt_gmp +# +# Analyses: (using initial time) +# +# $ alt_g2ctl -0 example.grib >example.ctl +# $ alt_gmp example.ctl +# +# Forecasts: (using verifiation time) +# +# $ alt_g2ctl example.grib >example.ctl +# $ alt_gmp example.ctl +# +# bugs: +# many +# +# requires newer wgrib2 +# +# documentation: http://www.cpc.ncep.noaa.gov/products/wesley/alt_g2ctl_gmp.html +# +# +# added output for rotated LatLon grids +# Helmut P. Frank, Helmut.Frank@dwd.de +# Fri Sep 14 13:54:00 GMT 2001 +# -ts, -lc options: Ag Stephens, BADC 3/2003 +# +# requires grads 2.0a3+ - thinned grid update +# +$version="1.0.7"; +use POSIX; +use Math::Trig qw(deg2rad rad2deg); + + +# ***** if wgrib2 is not on path, add it here +$wgrib2='wgrib2'; + +$wgrib2_flags='-npts -set_ext_name 1 -end_FT -ext_name -lev'; +$wgrib2_inv=".invd01"; + +$file=""; +$index=""; +$pdef=""; +$calendar=""; +$timestep=""; +# $nearest_neighbor=""; +$kludge=""; +$template=""; +$pdef_nearest=1; +$raw="no"; +$profile="mb"; +$profile_sort='reverse'; +$update='0'; +$big='0'; +$nthreads=4; +$short_varname=0; +$match=""; + +# set pdef_offset = 0 for old code, 1 for new code +$pdef_offset=0; + +for ($i = 0; $i <= $#ARGV; $i++) { + $_ = $ARGV[$i]; + SWITCH: { + /^-verf$/ && do { last SWITCH; }; + + /^-0$/ && do { $wgrib2_flags = '-npts -set_ext_name 1 -T -ext_name -lev'; $wgrib2_inv = ".invd03"; last SWITCH }; + /^-0t$/ && do { $wgrib2_flags = '-npts -set_ext_name 1 -T -ext_name -ftime -lev'; $wgrib2_inv = ".invd02"; last SWITCH }; + + /^-b$/ && do { $wgrib2_flags = '-npts -set_ext_name 1 -start_FT -ext_name -lev'; $wgrib2_inv = ".invd04"; last SWITCH }; + /^-bt$/ && do { $wgrib2_flags = '-npts -set_ext_name 1 -start_FT -ext_name -lev'; $wgrib2_inv = ".invd05"; last SWITCH }; + + /^-e$/ && do { $wgrib2_flags='-npts -set_ext_name 1 -end_FT -ext_name -lev'; $wgrib2_inv=".invd01"; last SWITCH }; + /^-et$/ && do { $wgrib2_flags='-npts -set_ext_name 1 -end_FT -ext_name -ftime -lev'; $wgrib2_inv=".invd01"; last SWITCH }; + + /^-update$/ && do { $update="1"; last SWITCH }; + + /^-(prs|mb)$/ && do { $profile = "mb"; $profile_sort='reverse'; last SWITCH }; + /^-no_profile$/ && do { $profile = ""; $profile_sort=''; last SWITCH }; + /^-iso$/ && do { $profile = "iso"; $profile_sort='' ; last SWITCH }; + /^-bsl$/ && do { $profile = "bsl"; $profile_sort='reverse' ; last SWITCH }; + /^-dsl$/ && do { $profile = "dsl"; $profile_sort='reverse' ; last SWITCH }; + /^-hyp$/ && do { $profile = "hyp"; $profile_sort='' ; last SWITCH }; + /^-hply$/ && do { $profile = "hply"; $profile_sort='' ; last SWITCH }; + /^-sig$/ && do { $profile = "sig"; $profile_sort='' ; $profile_sort='reverse'; last SWITCH }; + + /^-365$/ && do { $calendar="365"; last SWITCH; }; + /^-ts(\d+\w+)/ && do { $timestep=$1; last SWITCH; }; + /^-kludge$/ && do { $kludge="on"; last SWITCH; }; + +# /^-sub$/ && do { push @from, $ARGV[$i+1]; push @to, $ARGV[$i+2]; $i+=2; last SWITCH; }; + /^-del$/ && do { push @from, $ARGV[$i+1]; push @to,""; $i+=1; last SWITCH; }; + + /^-raw$/ && do { $raw="yes" ; last SWITCH }; + /^-pdef_linear$/ && do { $pdef_nearest=0 ; last SWITCH }; + + /^-nthreads$/ && do { $nthreads=$ARGV[++$i]; ; last SWITCH }; + + /^-wgrib2$/ && do { $wgrib2=$ARGV[++$i]; last SWITCH }; + /^-short$/ && do { $short_varname = 1; last SWITCH }; + /^-match$/ && do { $match = $match . " -match \"$ARGV[++$i]\""; last SWITCH }; + /^-not$/ && do { $match = $match . " -not \"$ARGV[++$i]\""; last SWITCH }; + +# /^-big$/ && do { $big='1'; ; last SWITCH }; + + /^-/ && do { print STDERR "unknown option: $_\n"; exit 8; }; + if ($file eq "") { + $file = $_; + } + elsif ($index eq "") { + $index = $_; + } + else { + $pdef = $_; + } + } +} + +# print STDERR "file=$file index=$index\n"; + + +if ($file eq "") { + if ($#ARGV >= 0) { + print STDERR "*** missing grib file ***\n\n\n"; + } + print STDERR "$0 $version wesley ebisuzaki\n"; + print STDERR " makes a Grads alt control file for grib2 files\n"; + print STDERR " usage: $0 [options] [grib_file] [optional index file] [optional pdef file] >[ctl file]\n"; + + print STDERR " -0 .. use analysis time\n"; + print STDERR " -0t .. use analysis time + fhour\n"; + print STDERR " -b .. use use start of ave/acc period or fcst time\n"; + print STDERR " -bt .. use use start of ave/acc period or fcst time + fhour\n"; + print STDERR " -e .. use use end of ave/acc period or fcst time (default\n"; + print STDERR " -et .. use use end of ave/acc period or fcst time + fhour\n"; + +# print STDERR " -big .. for files > 2GB (only works on 64-bit machines/codes\n"; + + print STDERR " -update .. alt_gmp will be in fast update mode\n"; + print STDERR " -nthreads N .. number of threads used by alt_gmp (default=1)\n"; + print STDERR " -wgrib2 EXE .. replace wgrib2 by EXE\n"; + print STDERR " -short .. remove comments and shorten variables names\n"; + print STDERR " -match X .. only match X (regex) from wgrib2 inv, can be repeated\n"; + print STDERR " -not X .. not X (regex) from wgrib2 inv, can be repeated\n"; +# print STDERR " -sub \"A\" \"B\" .. substiute variables names, A -> B, use regular expressions\n"; +# print STDERR " .. any number of -sub options can be used\n"; + + print STDERR " -prs .. pressure (mb) vertical coordinates (default)\n"; + print STDERR " -iso .. pot temp (K) vertical coordinates\n"; + print STDERR " -dsl .. below sea level (m) vertical coordinates\n"; + print STDERR " -bsl .. below sea level (m) vertical coordinates (obsolete)\n"; + print STDERR " -sig .. sigma (0..1) vertical coordinates\n"; + print STDERR " -no_profile .. no vertical coordinates\n"; + + + print STDERR " -365 .. 365 day calendar\n"; + print STDERR " -ts[timestep] .. set timestep for individual time files (e.g. -ts6hr)\n"; + print STDERR " -lc .. set lowercase option for parameter names\n"; + print STDERR " -pdef_linear .. linear interpolation for thinned grids\n"; + print STDERR " -raw .. raw grid\n"; + print STDERR "\n"; + print STDERR "Note 1: the index file will be generated by the alt_gmp program, default: grib_file.idx\n"; + print STDERR "Note 2: the pdef file is only generated for thinned lat-lon grids, default: grib_file.pdef\n"; + print STDERR "Note 3: template options supported: %y4 %y2 %m2 %m1 %d2 %d1 %h2 %h1 %n2 %f2 %f3 %e %j3\n"; + print STDERR " %iy4 %iy2 %im2 %im1 %id2 %id1 %ih2 %ih1 %in2 %fn2 %fhn %fdhn\n"; + + exit 8; +} + +$_ = $file; + +if (/%y4/ || /%y2/ || /%m2/ || /%m1/ || /%d2/ || /%d1/ || /%h2/ || /%h1/ || /%n2/ + || /%f2/ || /%j3/ || /%f3/ || /%e/ || /%iy2/ || /%iy4/ || /%im1/ || /%im2/ || + /%id1/ || /%id2/ || /%ih1/ || /%ih2/ || /%in2/ || /%fn2/ || /%fhn/ || /%fdhn/ ) { $template='on'; } + +if ($^O eq 'MSWin32') { + $ListA="$ENV{TEMP}\\h$$.tmp"; + $TmpFile="NUL"; + unlink $ListA; + $sys="win"; +} +else { + $TmpFile="/dev/null"; + $j=0; + while (-f "/tmp/g.$$.$j.tmp") { + $j++; + } + $ListA="/tmp/g.$$.$j.tmp"; + $sys="unix"; +} + +# ctlfilename = name used by control file (different for template option( +# file = file name (of first matching file) +$ctlfilename=$file; + + +# inventory of All records +if ($template eq "on") { + $gfile=$file; + +# if windows change backslashes to regular slashes + if ($sys eq 'win') { $gfile =~ s=\\=/=g; } + +# change GrADS templates to "capture" regular expressions + $gfile =~ s/%y4/(\?\\d{4})/g; + $gfile =~ s/%iy4/(\?\\d{4})/g; + $gfile =~ s/%y2/(\?\\d{2})/g; + $gfile =~ s/%iy2/(\?\\d{2})/g; + $gfile =~ s/%m2/(\?\\d{2})/g; + $gfile =~ s/%im2/(\?\\d{2})/g; + $gfile =~ s/%m1/(\?\\d{1,2})/g; + $gfile =~ s/%im1/(\?\\d{1,2})/g; + $gfile =~ s/%d2/(\?\\d{2})/g; + $gfile =~ s/%id2/(\?\\d{2})/g; + $gfile =~ s/%d1/(\?\\d{1,2})/g; + $gfile =~ s/%j3/(\?\\d{3})/g; + $gfile =~ s/%id1/(\?\\d{1,2})/g; + $gfile =~ s/%h2/(\?\\d{2})/g; + $gfile =~ s/%ih2/(\?\\d{2})/g; + $gfile =~ s/%h1/(\?\\d{1,2})/g; + $gfile =~ s/%ih1/(\?\\d{1,2})/g; + $gfile =~ s/%n2/(\?\\d{1,2})/g; + $gfile =~ s/%in2/(\?\\d{1,2})/g; + $gfile =~ s/%h3/(\?\\d{3})/g; + $gfile =~ s/%f2/(\?\\d{2,8})/g; + $gfile =~ s/%f3/(\?\\d{3,8})/g; + $gfile =~ s/%fn2/(\?\\d{2})/g; + $gfile =~ s/%fhn/(\?\\d{4})/g; + $gfile =~ s/%fdhn/(\?\\d{6})/g; + + $dir=$gfile; + $dir =~ s=(/*)[^/]*$=$1=; + $gfile =~ s/^$dir//; + + if (($gfile =~ s/%/%/g) != 0) { + print STDERR "unrecognized GrADS template"; + exit 8; + } + if ($dir eq "") { + opendir(DIR,'.'); + } + else { + opendir(DIR,$dir); + } + + @allfiles = grep /^$gfile$/, readdir DIR; + closedir DIR; + + if ($#allfiles <= -1 ) { + print STDERR "\nError: could not find any files in directory: $dir\n"; + exit 8; + } + +# find 1st, 2nd and last files in chronological order + for ($i = 0; $i <= $#allfiles; $i++) { + $tfile = $allfiles[$i]; + $tfile =~ m/$gfile/; + +# find time_index .. + $t_index = 0; + if (defined($+{min})) { $t_index += $+{min}; } + if (defined($+{fhn})) { $t_index += $+{fhn}; } + if (defined($+{fdhn})) { $t_index += $+{fdhn}; } + if (defined($+{hour})) { $t_index += 100*$+{hour}; } + if (defined($+{fhr})) { $t_index += 100*$+{fhr}; } + if (defined($+{day})) { $t_index += 10000*$+{day}; } + if (defined($+{month})) { $t_index += 1000000*$+{month}; } + if (defined($+{year})) { $t_index += 100000000*$+{year}; } + if (!defined($file1)) { # 1st time through + $file1=$tfile; + $file2=$tfile; + $filelast=$tfile; + $index1 = $t_index; + $index2 = $t_index; + $indexlast = $t_index; + } + elsif ( $t_index < $index1) { + $index2 = $index1; + $file2 = $file1; + $index1 = $t_index; + $file1 = $tfile; + } + elsif ($t_index > $indexlast) { + if ($index1 == $index2) { + $index2 = $t_index; + $file2 = $tfile; + } + $indexlast = $t_index; + $filelast = $tfile; + } + elsif ($t_index < $index2 && $t_index > $index1) { + $index2 = $t_index; + $file2 = $tfile; + } + } +# used in grid section + $file = "$dir$file1"; +# print STDERR "1,2,n= $file1 $file2 $filelast\n"; +# make inventory of times 1, 2 and last + system "$wgrib2 $match -lev0 $wgrib2_flags \"$dir$file1\" >$ListA"; + if ($file1 ne $file2) { + system "$wgrib2 $match -lev0 $wgrib2_flags \"$dir$file2\" >>$ListA"; + } + if ($file2 ne $filelast) { + system "$wgrib2 $match -lev0 $wgrib2_flags \"$dir$filelast\" >>$ListA"; + } +} +else { + system "$wgrib2 $match -lev0 $wgrib2_flags \"$file\" >$ListA"; +} +if ( ! -s $ListA ) { + if ($match ne '') { + print STDERR "Control file was not generated, variables not found\n"; + print STDERR " $match used\n"; + } + else { + print STDERR "Big problem:\n"; + print STDERR " either $file is missing or not a grib file\n"; + print STDERR " or wgrib2 is not on your path or wgrib2 is too old\n"; + print STDERR " or can not write to $ListA (full disk or permissions)\n"; + } + unlink $ListA; + exit 8; +} + + +# make table of dates and variables + +scan_ListA(); +unlink $ListA; + +@sdates=sort keys(%dates); + +# number of time 1 or greater +$ntime=$#sdates + 1; + +$time=$sdates[0]; + +$year = substr($time,0,4); +$mo = substr($time,4,2); +$day = substr($time,6,2); +$hour = substr($time,8,2); +$minute = substr($time,10,2); +if ($mo < 0 || $mo > 12) { + print "illegal date code $time\n"; + exit 8; +} + +$month=substr("janfebmaraprmayjunjulaugsepoctnovdec",$mo*3-3,3); + +if ($ntime > 1) { + $year1 = substr($sdates[1],0,4); + $mo1 = substr($sdates[1],4,2); + $day1 = substr($sdates[1],6,2); + $hour1 = substr($sdates[1],8,2); + $minute1 = substr($sdates[1],10,2); + + $year_last = substr($sdates[$#sdates],0,4); + $mo_last = substr($sdates[$#sdates],4,2); + $day_last = substr($sdates[$#sdates],6,2); + $hour_last = substr($sdates[$#sdates],8,2); + $minute_last = substr($sdates[$#sdates],10,2); +} + +# ---------------intro------------------------------------ + +if ("$index" eq "") {$index="$file.idx";} +if ("$pdef" eq "") { $pdef = "$file.pdef";} + + +if ($sys eq "unix") { + $caret1 = (substr($file,0,1) eq "/") ? "" : '^'; + $caret2 = (substr($index,0,1) eq "/") ? "" : '^'; + $caret3 = (substr($pdef,0,1) eq "/") ? "" : '^'; +} +else { + $caret1 = (substr($file,1,1) eq ":") ? "" : '^'; + $caret2 = (substr($index,1,1) eq ":") ? "" : '^'; + $caret3 = (substr($pdef,1,1) eq ":") ? "" : '^'; +} + +print "dset $caret1$ctlfilename\nindex $caret2$index\n"; + +print "undef 9.999E+20\ntitle $file\n* produced by alt_g2ctl v$version, use alt_gmp to make idx file\n"; +print "* command line options: @ARGV\n"; +print "* alt_gmp options: update=$update\n"; +print "* alt_gmp options: nthreads=$nthreads\n"; +print "* alt_gmp options: big=$big\n"; +print "* alt_gmp options: match=$match\n"; +print "* wgrib2 inventory flags: $wgrib2_flags\n"; +print "* wgrib2 inv suffix: $wgrib2_inv\n"; + +# ------------------- grid ----------------------- +$griddef = `$wgrib2 "$file" -one_line -d 1 -nxny -grid -vector_dir`; +$_=$griddef; + +$_ = $griddef; +$_ =~ s/^[^(]*//; +$_ =~ s/:.*//; + +/\((\S*) x -*(\d*)\)/; +$nx=$1; +$ny=$2; + +$_=$griddef; + +$t = substr($griddef,0,240); +print "* griddef=$t\n"; +print "dtype grib2\n"; +if ($template eq "on") { print "options template\n"; } + +if ($raw eq 'yes') { + print "xdef $nx linear 0 0.1\n"; + print "ydef $ny linear 0 0.1\n"; +} + +elsif (/: Gaussian grid:/) { + / lon (\S*) to (\S*)/; + $lon0=$1; + $lon1=$2; + if ($lon1 <= $lon0) { $lon1 += 360.0; } + $dlon = ($lon1 - $lon0) / ($nx - 1); + + / lat (\S*) to (\S*)/; + if ($1 < $2) { + $lat0=$1; + $lat1=$2; + } + else { + $lat0=$2; + $lat1=$1; + } + + /number of latitudes between pole-equator=(\S*)/; + $nGauLats=2*$1; + print "* ny=$ny nlat=$nGauLats lat0=$lat0 lat1=$lat1\n"; + print "xdef $nx linear $lon0 $dlon\n"; + print "ydef $ny levels\n"; + &print_range_gau_lats; +} + +elsif (/ thinned global Gaussian grid:/) { + + / input (\S*)/; + $scan = $1; + if ($scan ne 'WE:NS' && $scan ne 'WE:SN') { print "\n* **** unsupported scan mode $scan\n"; } + + /#grid points by latitude: (.*)/; + $list = $1; + /#points=(\d*)/; + $npnts=$1; + $i = 1; $nx = 0; + foreach $t (split(' ',$list)) { + $t =~ s/:.*//; + $nlon[$i++] = $t; + if ($nx < $t) { $nx = $t; } + } + $dx = 360.0 / $nx; + $t = 0; + printf "xdef $nx linear 0 $dx\n"; + print "ydef $ny levels\n"; + &print_gau_lats; + +# now to create the pdef file + + open (PDEF, ">$pdef") or die "Could not open pdef file for write: $pdef"; + binmode PDEF; + + $regional_thinned_grid=0; + if ($pdef_nearest == 0) { + pdef_linear(); + } else { + pdef_near(); + } + close(PDEF); +} +elsif (/ thinned (global|regional) lat-lon grid:/) { + / lat *(\S*) to (\S*) by (\S*) /; + $lat0 = $1; + $lat1 = $2; + $dy = $3; + / lon (\S*) to (\S*) with variable spacing/; + $lon0=$1; + $lon1=$2; + /\(-1 x (\d*)\)/; + $ny = $1; + / #points=(\d*) /; + $npnts = $1; + / input (\S*)/; + $scan = $1; + if ($scan ne 'WE:NS' && $scan ne 'WE:SN') { print "\n* **** unsupported scan mode $scan\n"; } + + if ($lat0 > $lat1) { + $yrev = 1; + print "ydef $ny linear $lat1 ", abs($dy), "\n" + } + else { + $yrev = 0; + print "ydef $ny linear $lat0 ", abs($dy), "\n" + } + + $t=$_; + $_ =~ s/^.*points by latitude: //; + $_ =~ s/:.*//; + $list=$_; + $i = 1; + foreach $t (split(' ',$list)) { + $nlon[$i++] = $t; + } + if ($lon1 <= $lon0) { $lon1 += 360.0; } +# +# check if global +# + $nx = $nlon[$ny]; + $dx = ($lon1 - $lon0) / ($nx - 1); + $dx=$dx*$nx; + $regional_thinned_grid = 1; + if (abs($dx-360.0) < 0.01) {$regional_thinned_grid=0; } +# +# figure out dx and nx for the projection grid +# + $nx=$nlon[1]; + if ($nx < $nlon[$ny]) { $nx = $nlon[$ny]; } + $dx = ($lon1 - $lon0) / ($nx - 1); + print "xdef $nx linear $lon0 $dx\n"; + + + open (PDEF, ">$pdef") or die "Could not open pdef file for write: $pdef"; + binmode PDEF; + + $regional_thinned_grid=1; + if ($pdef_nearest == 0) { + pdef_linear(); + } else { + pdef_near(); + } + + close(PDEF); +} + + +elsif (/: lat-lon grid:/) { + / lat (\S*) to (\S*) by (\S*)/; + $lat0=$1; + $lat1=$2; + $dlat=$3; + + / lon (\S*) to (\S*) by (\S*)/; + $lon0=$1; + # $lon1=$2; + $dlon=$3; + + if ($lat0 > $lat1) { + print "ydef $ny linear $lat1 ", abs($dlat), "\n" + } + else { + print "ydef $ny linear $lat0 ", abs($dlat), "\n" + } + if ($lon0 + ($nx-1) * $dlon > 360.0) { $lon0 -= 360.0; } + print "xdef $nx linear $lon0 $dlon\n"; +} + +elsif (/ Mercator grid: /) { + + # beta: mercator + # scan modes .. assumes west to east + /lat *(\S*) to (\S*) /; + $lat1 = $1; + $lat2 = $2; + /lon (\S*) to (\S*) /; + $lon1 = $1; + $lon2 = $2; + /grid: \((\d*) x (\d*)\) /; + $nx = $1; + $ny = $2; + + $dlon = $lon2 - $lon1; + if ($dlon <= 0) { + $dlon = $dlon + 360; + } + $dlon = $dlon / ($nx - 1); + + if ($lon1 + ($nx-1) * $dlon > 360.0) { $lon1 -= 360.0 } + + print "xdef $nx linear $lon1 $dlon\n"; + + if ($lat1 > $lat2) { +# print "options yrev\n"; + $t = $lat2; + $lat2 = $lat1; + $lat1 = $t; + } + print "ydef $ny levels\n"; + $i = 0; + $n1 = log(tan((45+$lat1/2)*3.1415927/180)); + $n2 = log(tan((45+$lat2/2)*3.1415927/180)); + $dy = ($n2 - $n1) / ($ny - 1); + + while ($i < $ny) { + $nn = $n1 + $dy * $i; + $lat = (atan(exp($nn))*180/3.1415927-45)*2; + printf ("%9.4f ", $lat); + $i++; + if ($i % 7 == 0) { print "\n"; } + } + if ($i % 7 != 0) { print "\n"; } + +} + +elsif (/ Lambert Conformal: /) { + / Lat1 (\S*) Lon1 (\S*) LoV (\S*) LatD \S* Latin1 (\S*) Latin2 (\S*) /; + $lat1 = $1; + $lon1 = $2; + $lov = $3; + $latin1 = $4; + $latin2 = $5; + + /Pole \((\S*) x (\S*)\) Dx (\S*) m Dy (\S*) m /; + $nx = $1; + $ny = $2; + $dx = $3; + $dy = $4; + + $t='lcc'; + if (/:winds\(grid\)/) { $t='lccr' ; } + + if ($dx == 0 || $dy == 0) { + print STDERR "Problem: DX or DY is missing! Cannot make a control file\n"; + exit; + } + + &domain; + +# make sure than lon1 is within 180 degrees of lov +# lov, lon1 should be between 0 and 360 + if ($lon1 < $lov - 180.0) { $lon1 += 360.0; } + if ($lon1 > $lov + 180.0) { $lon1 -= 360.0; } + +# make sure that lov is within 180 degrees of west +# lov is between 0 and 360 and west is between -180 and 180 + + if ($lov < ($west+$east)/2 - 180.0) { $lov += 360.0 ; $lon1 += 360.0; }; + if ($lov > ($west+$east)/2 + 180.0) { $lov -= 360.0 ; $lon1 -= 360.0; }; + + print "pdef $nx $ny $t $lat1 $lon1 1 1 $latin1 $latin2 $lov $dx $dy\n"; + +# if ($lon1 - $west >= 360.0) { +# $lon1 -= 360.0; +# $lov -= 360.0; +# } +# if ($lov < $lon1 - 180.0) { $lov += 360.0; } +# if ($lov > $lon1 + 180.0) { $lov -= 360.0; } +# print "pdef $nx $ny $t $lat1 $lon1 1 1 $latin1 $latin2 $lov $dx $dy\n"; + + $dx = $dx / (110000.0 * cos($lat1*3.141592654/180.0)); + $dy = $dy / 110000.0; + + $tmp = int(($east - $west) / $dx + 1); + if (($west == -180) && ($east == 180)) { + $tmp -= 1; + } + print "xdef $tmp linear $west $dx\n"; + $tmp = int(($north - $south) / $dy + 1); + print "ydef $tmp linear $south $dy\n"; + +} +elsif (/ polar stereographic grid: /) { + / (\S*) pole lat1 (\S*) lon1 (\S*) latD (\S*) lonV (\S*) dx (\S*) m dy (\S*) m/; + $pole = $1; + $lat1 = $2; + $lon1 = $3; + $orient = $5; + $dx = $6; + $dy = $7; + + / \((\S*) x (\S*)\) input (\S*) /; + $nx=$1; + $ny=$2; + $scan=64; +# $scan=-1; +# if ($3 eq 'WE:NS') { $scan = 0; } +# if ($3 eq 'WE:SN') { $scan = 64; } +# if ($scan == -1) { printf STDERR "HELP polar stereographic code needs to be extended!!\n"; } + + # probably only works for scan=64 + + $dpr=3.14159265358979/180.0; + $rearth=6.3712e6; + + $h=1; + $proj="nps"; + if ($pole eq "South") { + $h=-1; + $orient -= 180.0; + $proj="sps"; + } + $hi=1; + $hj=-1; + if (($scan/128 % 2) == 1) { + $hi=-1; + } + if (($scan/64 % 2) == 1) { + $hj=1; + } + if ($dx == 0 || $dy == 0) { + print STDERR "Problem: DX or DY is missing! Cannot make a control file\n"; + exit; + } + $dxs=$dx*$hi; + $dys=$dy*$hj; + $de=(1+sin(60*$dpr))*$rearth; + $dr=$de*cos($lat1*$dpr)/(1+$h*sin($lat1*$dpr)); + $xp=1-$h*sin(($lon1-$orient)*$dpr)*$dr/$dxs; + $yp=1+cos(($lon1-$orient)*$dpr)*$dr/$dys; + $dx=$h*$dx/1000; + + printf "pdef $nx $ny $proj $xp $yp $orient $dx\n"; + + &domain; + + $dx = 1000.0 * abs($dx); + $nx = int(2 * $rearth * 3.14 * ($east-$west)/360.0 / $dx + 1); + $dx = ($east-$west) /($nx-1); + +# make dx a faction of 360 so grads can id as a global field + $nx = int(360.0 / $dx) + 1.0; + $dx = 360.0 / $nx; + $nx = int( ($east-$west)/$dx ) + 1; + + $dy = abs($dy); + $ny = int($rearth * 3.14 * ($north-$south)/180.0 / $dy + 1); + $dy = ($north-$south)/($ny-1); + + $tmp = int(($east - $west) / $dx + 1); + if (($west == -180) && ($east == 180)) { + $tmp -= 1; + } + print "xdef $tmp linear $west $dx\n"; + + $tmp = int(($north - $south) / $dy + 1); + print "ydef $tmp linear $south $dy\n"; + +# $dx = 1000.0 * abs($dx); +# $nx = int($rearth * 3.14 / $dx + 1); +# $dx = 360/$nx; +# printf "xdef $nx linear 0 $dx\n"; +# if ($proj eq 'sps') { +# $ny=int(($north+90)/$dx)+1; +# printf "ydef $ny linear -90 $dx\n", +# } +# else { +# $ny=int((90-$south)/$dx)+1; +# $l=90-($ny-1)*$dx; +# printf "ydef $ny linear $l $dx\n", +# } + +} +elsif ( / thinned gaussian:/) { + / lat *(\S*) to (\S*)/; + $lat0 = $1; + $lat1 = $2; + + / long (\S*) to (\S*), (\S*) grid pts \(-1 x (\S*)\) /; + $lon0=$1; + $lon1=$2; + $nxny = $3; + $ny = $4; + print "ydef $ny levels\n"; + $yrev = 0; + if ($lat0 > $lat1) { $yrev = 1; } + + $eps = 3e-14; + $m=int(($ny+1)/2); + + $i=1; + while ($i <= $m) { + $z=cos(3.141592654*($i-0.25)/($ny+0.5)); + do { + $p1 = 1; + $p2 = 0; + $j = 1; + while ($j <= $ny) { + $p3 = $p2; + $p2 = $p1; + $p1=((2*$j-1)*$z*$p2-($j-1)*$p3)/$j; + $j++; + } + $pp = $ny*($z*$p1-$p2)/($z*$z-1); + + $z1 = $z; + $z = $z1 - $p1/$pp; + } until abs($z-$z1) < $eps; + $x[$i] = -atan2($z,sqrt(1-$z*$z))*180/3.141592654; + $x[$ny+1-$i] = -$x[$i]; + $i++; + } + $i = 1; + while ($i < $ny) { + printf " %7.3f", $x[$i]; + if (($i % 10) == 0) { print "\n"; } + $i++; + } + printf " %7.3f\n", $x[$ny]; + + $t=$_; + + s/\n//g; + / bdsgrid \S* (.*) min/; + $list=$1; + $i = 1; + $nx = 0; + foreach $t (split(' ',$list)) { + $nlon[$i++] = $t; + if ($nx < $t) { $nx = $t; } + } + if ($lon1 <= $lon0) { $lon1 += 360.0; } + $dx = ($lon1 - $lon0) / ($nx - 1); + print "xdef $nx linear $lon0 $dx\n"; + +# now to create the pdef file + + open (PDEF, ">$pdef") or die "Could not open pdef file for write: $pdef"; + binmode PDEF; + + print "pdef $nxny 1 file 1 stream binary $caret3$pdef\n"; + + if ($yrev == 0) { + $offset = 0; + for ($j = 1; $j <= $ny; $j++) { + for ($i = 0; $i < $nx; $i++) { + $x = $i / ($nx - 1.0) * ($nlon[$j] - 1); + $x = floor($x + 0.5) + $offset + $pdef_offset; + print PDEF pack("L", $x); + } + $offset += $nlon[$j]; + } + } + else { + $offset = $nxny; + for ($j = $ny; $j >= 1; $j--) { + $offset -= $nlon[$j]; + for ($i = 0; $i < $nx; $i++) { + $x = $i / ($nx - 1.0) * ($nlon[$j] - 1); + $x = floor($x + 0.5) + $offset + $pdef_offset; + print PDEF pack("L", $x); + } + } + } + +# print weights + $x = pack("f", 1.0); + for ($i = 0; $i < $nx*$ny; $i++) { + print PDEF $x; + } +# print wind rotation + $x = pack("L", -999); + for ($i = 0; $i < $nx*$ny; $i++) { + print PDEF $x; + } + close(PDEF); +} + +# rotated LatLon grid +elsif (/ rotated lat-lon grid/) { + / lat (\S*) to (\S*) by (\S*)/; + $lat0 = $1; + $lat1 = $2; + $dlat = $3; + + / lon (\S*) to (\S*) by (\S*)/; + $lon0 = $1; + $lon1 = $2; + $dlon = $3; + if ($lon0 > 180.0) { $lon0 -= 360.0; } + + /rotated lat-lon grid:\((\S*) x (\S*)\)/; + $nx = $1; + $ny = $2; + + / south pole lat=(\S*) lon=(\S*) angle of rot=(\S*):/; + $lat_sp = $1; + $lon_sp = $2; + $rot_angle = $3; + + print "* Rotated xxxxLatLon grid: South pole lat $lat_sp lon $lon_sp", + " rot angle $rot_angle\n"; + + if ($dlon < $dlat) { $dlat = $dlon ;} + $dlon = $dlat; + +# $dlon = ($lon1-$lon0)/($nx-1); +# $dlat = ($lat1-$lat0)/($ny-1); + + $t0 = $lon_sp+180.0; + if ($t0 > 360.0) { $t0 -= 360.0; } + $t1 = -$lat_sp; + $pdef='rotll'; + if (/:winds\(grid\)/) { $pdef='rotllr'; } + print "pdef $nx $ny $pdef $t0 $t1 $dlon $dlat $lon0 $lat0\n"; + ($swlat, $swlon) = rr2ll($lat_sp,$lon_sp,$rot_angle,$lat1,$lon0); + + if ($lat0 > $lat1) { + ($swlat, $swlon) = rr2ll($lat_sp,$lon_sp,$rot_angle,$lat1,$lon0); + ($nwlat, $nwlon) = rr2ll($lat_sp,$lon_sp,$rot_angle,$lat0,$lon0); + ($nelat, $nelon) = rr2ll($lat_sp,$lon_sp,$rot_angle,$lat0,$lon1); + ($selat, $selon) = rr2ll($lat_sp,$lon_sp,$rot_angle,$lat1,$lon1); + $northlat=($nwlat>$nelat)?$nwlat:$nelat; + $southlat=($swlat<$selat)?$swlat:$selat; + $goodny=($northlat-$southlat)/$dlat; + $nlat=$northlat-fmod($northlat,abs($dlat)); + print "options yrev\n"; + print "ydef $goodny linear $nlat ", abs($dlat), "\n" + } + else { + ($swlat, $swlon) = rr2ll($lat_sp,$lon_sp,$rot_angle,$lat0,$lon0); + ($nwlat, $nwlon) = rr2ll($lat_sp,$lon_sp,$rot_angle,$lat1,$lon0); + ($nelat, $nelon) = rr2ll($lat_sp,$lon_sp,$rot_angle,$lat1,$lon1); + ($selat, $selon) = rr2ll($lat_sp,$lon_sp,$rot_angle,$lat0,$lon1); + $northlat=($nwlat>$nelat)?$nwlat:$nelat; + $southlat=($swlat<$selat)?$swlat:$selat; + $goodny=floor(($northlat-$southlat)/$dlat)+1; + $slat=$southlat-fmod($southlat,abs($dlat)); + print "ydef $goodny linear $slat ", abs($dlat), "\n" + } + + $eastlon=($nelon>$selon)?$nelon:$selon; + $westlon=($swlon<$nwlon)?$swlon:$nwlon; + $goodnx=floor(($eastlon-$westlon)/$dlon)+1; + $wlon=$westlon-fmod($westlon,abs($dlon)); + print "xdef $goodnx linear $wlon $dlon\n"; +} +elsif (/: Irregular Grid:/) { + /: Irregular Grid:\((\S*) x/; + $nx = $1; + print "xdef $nx linear 0 1\n"; + print "ydef 1 linear 0 1\n"; +} +elsif (/:grid_template=204:/) { + print "pdef 1200 1684 bilin sequential binary-big pdef_ncep_12.atl\n"; + print "xdef 1300 linear -105.04 0.1325\n"; + print "ydef 1500 linear -25.2 0.0678\n"; +} +else { + print STDERR "*** script needs to be modified ***\n"; + print STDERR "*** unknown grid ***\n"; + exit 8; +} + + +# make the tdef statement + +&tdef; + +# ------------------var-------------------------------------; + +# Find the vertical profile + +foreach $var (keys(%levels)) { + $var_old=$var; + $vert_lev = ''; + if ($profile eq 'mb') { +# $var =~ s/:([\d.e+-]*) mb$/prs/ && do { $vert_lev = $1 ; $var_id = $var; $var_id =~ s/prs$/:%s mb/; }; +# $var =~ s/:([0-9]*\.?[0-9]+([eE][+-]?[0-9]+)?) mb$/prs/ && do { $vert_lev = $1 ; $var_id = $var; $var_id =~ s/prs$/:%s mb/; }; + $var =~ s/:([0-9]*\.?[0-9]+([eE][+-]?[0-9]+)?) mb$/:prs/ && + do { $vert_lev = $1 ; $var_id = $var; $var_id =~ s/:prs$/:%s mb/; }; + } + if ($profile eq 'iso') { + $var =~ s/:([0-9]*\.?[0-9]+([eE][+-]?[0-9]+)?) K isentropic level$/:iso/ && + do { $vert_lev = $1 ; $var_id = $var; $var_id =~ s/:iso$/:%s K isentropic level/; }; + } + if ($profile eq 'bsl') { + $var =~ s/:([0-9]*\.?[0-9]+([eE][+-]?[0-9]+)?) m below sea level$/:bsl/ && + do { $vert_lev = $1 ; $var_id = $var; $var_id =~ s/:bsl$/:%s m below sea level/; }; + } + if ($profile eq 'dsl') { + $var =~ s/:([0-9]*\.?[0-9]+([eE][+-]?[0-9]+)?) m below sea level$/:dsl/ && + do { $vert_lev = $1 ; $var_id = $var; $var_id =~ s/:dsl$/:%s m below sea level/; }; + } + if ($profile eq 'sig') { + $var =~ s/:([0-9]*\.?[0-9]+([eE][+-]?[0-9]+)?) sigma level$/:sig/ && + do { $vert_lev = $1 ; $var_id = $var; $var_id =~ s/:sig$/:%s sigma level/; }; + } + if ($profile eq 'hyp') { + $var =~ s/:([0-9]*) hybrid pressure level$/:hyp/ && + do { $vert_lev = $1 ; $var_id = $var; $var_id =~ s/:hyp$/:%s hybrid pressure level/; }; + } + if ($profile eq 'hply') { + $var =~ /:([0-9]*)-([0-9]*) hybrid pressure layer$/ && do { + if ($1 + 1 == $2) { + $var =~ s/:([0-9]*)-([0-9]*) hybrid pressure layer$/:hply/; + $vert_lev = $1 ; $var_id = $var; $var_id =~ s/:hply$/:%s-%s hybrid pressure layer/; + + } + } + } + + if ($vert_lev ne '') { + $levels{$var_old} = $var; + if (defined($prof_lev{$var})) { + $prof_lev{$var} = $prof_lev{$var} . ' ' . $vert_lev; + } + else { + $prof_lev{$var} = $vert_lev; + $prof_id{$var} = $var_id; + } + } +} + + +# find variable with most levels +# sort the levels + +$nmax = 1; +$max_levels='1'; + +foreach $var (keys(%prof_lev)) { + if ($profile_sort eq 'reverse') { $levels = join ' ', sort {$b <=> $a} split(/ /,$prof_lev{$var}); } + else { $levels = join ' ', sort {$a <=> $b} split(/ /,$prof_lev{$var}); } + $prof_lev{$var} = $levels; + $n=($levels =~ s/ //g)+1; + if ($n <= 3) { $prof_lev{$var} = ''; } + else { + if ($n > $nmax) { $max_levels = $prof_lev{$var}; $nmax = $n;} + } +} + +print "zdef $nmax levels $max_levels\n"; + +$max_levels = ' ' . $max_levels . ' '; + +# to use a profile, the levels must be a subset of the max_levels + +# generate ctl lines for profiles +$iout=0; +foreach $var (keys(%prof_lev)) { + if ($prof_lev{$var} ne '') { + $levels = $prof_lev{$var}; + if ($max_levels =~ /$levels/) { + $_ = $'; +# WNE??? 9/2013 + $n=$nmax - (s/ //g) + 1; + $name = $var; + shorten_name(); + if ($short_varname == 0) { + $out[$iout++] = "$name $n 0 \"$prof_id{$var}\" * profile $prof_id{$var}\n"; + } + else { + $out[$iout++] = "$name $n 0 \"$prof_id{$var}\"\n"; + } + } + else { + $prof_lev{$var} = ''; + } + } +} + +# generate the ctl line for single levels +foreach $var (sort keys(%levels)) { + $lev = $levels{$var}; + $multi_level = 0; + if ($lev ne '0') { + if ($prof_lev{$lev} ne '') { $multi_level = 1; } + } + if ($multi_level == 0) { + $name = $var; + $name =~ s/:[^:]*$/:$lev0{$var}/; + shorten_name(); + if ($short_varname == 0) { + $out[$iout++] = "$name 0 0 \"$var\" * $var\n"; + } + else { + $out[$iout++] = "$name 0 0 \"$var\"\n"; + } + } +} + +print "vars $iout\n"; +if ($short_varname == 0) { + foreach $line (sort @out) { + print $line; + } +} +else { + $i = 1; + foreach $line (sort @out) { + $_ = $line; + $_ =~ s/^[^ ]*/v$i/; + print $_; + $i++; + } +} +print "endvars\n"; + +exit 0; + + + + +#------------------ jday -------------------- +# jday(year,mo,day) return the julian day relative to jan 0 +# mo=1..12 +# +sub jday { + + local($n); + local($nleap); + local($year1); + $n=substr(" 000 031 059 090 120 151 181 212 243 273 304 334",($_[1]-1)*4,4); + $n = $n + $_[2]; + $year1 = $_[0] - 1905; + + if ($calendar eq '365') { + $n += $year1 * 365; + } + else { + if ($_[1] > 2 && $_[0] % 4 == 0) { + if ($_[0] % 400 == 0 || $_[0] % 100 != 0) { + $n++; + } + } + $nleap = int($year1 / 4); + $n = $n + $nleap + $year1 * 365; + } + $n; +} + +#------------------ write tdef statement ------------------ +# still not great but better than before + +sub tdef { + + local($tmp); + local($n); + $n=$ntime; + + if ($timestep) { $dt=$timestep } + else { + if ($ntime == 1) { + if ($timestep) { $dt=$timestep } + else { $dt="1mo"; } + } + elsif ( ($minute != $minute1) || ($hour != $hour1)) { + $tmp= (&jday($year1,$mo1,$day1) - &jday($year,$mo,$day)) * 24 * 60 + ($hour1 - $hour)*60 + + $minute1 - $minute; + if (($tmp % 60) == 0) { + $tmp = $tmp / 60; + $dt="${tmp}hr"; + $n = (&jday($year_last,$mo_last,$day_last) - &jday($year,$mo,$day)) * 24 + $hour_last - $hour; + $n = int($n / $tmp) + 1; + } + else { + $dt="${tmp}mn"; + $n= (&jday($year_last,$mo_last,$day_last) - &jday($year,$mo,$day)) * 24 * 60 + + ($hour_last - $hour)*60 + ($minute_last - $minute); + $n = int($n / $tmp) + 1; + } + } + elsif ($day != $day1) { + $tmp = &jday($year1,$mo1,$day1) - &jday($year,$mo,$day); + $dt="${tmp}dy"; + $n=int((&jday($year_last,$mo_last,$day_last) - &jday($year,$mo,$day))/$tmp)+1; + } + elsif ($mo != $mo1) { + # assume that dt < 12 months + $tmp = $year1*12+$mo1 - $year*12-$mo; + $dt="${tmp}mo"; + $n = int(($year_last*12+$mo_last - $year*12 - $mo) / $tmp) + 1; + } + else { + $tmp = $year1 - $year; + $dt="${tmp}yr"; + $n = int(($year_last - $year) / $tmp) + 1; + } + } + if ($calendar eq "365") { + print "options 365_day_calendar\n"; + } + if ($minute == 0) { print "tdef $n linear ${hour}Z$day$month$year $dt\n"; } + else { print "tdef $n linear ${hour}:${minute}Z$day$month$year $dt\n"; } +} + +#----------------- find size of domain for regular grids + +sub domain { + $_ = `$wgrib2 -d 1 "$file" -domain`; + /:N=(\S*) S=(\S*) W=(\S*) E=(\S*)/; + $north=$1; + $south=$2; + $west=$3; + $east=$4; +} + +#----------------- print Gaussian latitudes from lat1..lat2 +sub print_range_gau_lats { + local($i); + local($eps); + local($m); + local($z); + local($i); + local($j); + local($p1); + local($p2); + local($p3); + local($z1); + local($x); + + $eps = 3e-14; + $m=int(($nGauLats+1)/2); + $i=1; + while ($i <= $m) { + $z=cos(3.141592654*($i-0.25)/($nGauLats+0.5)); + do { + $p1 = 1; + $p2 = 0; + $j = 1; + while ($j <= $nGauLats) { + $p3 = $p2; + $p2 = $p1; + $p1=((2*$j-1)*$z*$p2-($j-1)*$p3)/$j; + $j++; + } + $pp = $nGauLats*($z*$p1-$p2)/($z*$z-1); + + $z1 = $z; + $z = $z1 - $p1/$pp; + } until abs($z-$z1) < $eps; + $x[$i] = -atan2($z,sqrt(1-$z*$z))*180/3.141592654; + $x[$nGauLats+1-$i] = -$x[$i]; + $i++; + } + $i = $j = 1; + while ($i <= $nGauLats) { + if ($x[$i] > $lat0 - 0.002 && $x[$i] < $lat1 + 0.002) { + printf " %7.3f", $x[$i]; + if (($j % 14) == 0) { print "\n"; } + $j++; + } + $i++; + } + if ((($j-1) % 14) != 0) { print "\n"; } +} + + + +#----------------- print Gaussian latitudes +sub print_gau_lats { + local($i); + local($eps); + local($m); + local($z); + local($i); + local($j); + local($p1); + local($p2); + local($p3); + local($z1); + local($x); + + $eps = 3e-14; + $m=int(($ny+1)/2); + $i=1; + while ($i <= $m) { + $z=cos(3.141592654*($i-0.25)/($ny+0.5)); + do { + $p1 = 1; + $p2 = 0; + $j = 1; + while ($j <= $ny) { + $p3 = $p2; + $p2 = $p1; + $p1=((2*$j-1)*$z*$p2-($j-1)*$p3)/$j; + $j++; + } + $pp = $ny*($z*$p1-$p2)/($z*$z-1); + + $z1 = $z; + $z = $z1 - $p1/$pp; + } until abs($z-$z1) < $eps; + $x[$i] = -atan2($z,sqrt(1-$z*$z))*180/3.141592654; + $x[$ny+1-$i] = -$x[$i]; + $i++; + } + $i = 1; + while ($i < $ny) { + printf " %7.3f", $x[$i]; + if (($i % 14) == 0) { print "\n"; } + $i++; + } + printf " %7.3f\n", $x[$ny]; +} + + +sub gau_pdf_near { +# +# writes pdef file for thinned gaussian grid +# +# nx, ny = dimension of output grid +# + print "pdef $npnts 1 general 1 stream binary $caret3$pdef\n"; + if ($scan eq 'WE:NS') { + $offset = $npnts; + for ($j = $ny; $j >= 1; $j--) { + $offset -= $nlon[$j]; + for ($i = 0; $i < $nx; $i++) { + $x = $i / ($nx - $t) * ($nlon[$j] - $t); + $x = floor($x + 0.5); + if ($x >= $nlon[$j]) { $x -= $nlon[$j] }; + $x += $offset + $pdef_offset; + print PDEF pack("L", $x); + } + } + } + else { + $offset = 0; + for ($j = 1; $j <= $ny; $j++) { + for ($i = 0; $i < $nx; $i++) { + $x = $i / ($nx - $t) * ($nlon[$j] - $t); + $x = floor($x + 0.5); + if ($x >= $nlon[$j]) { $x -= $nlon[$j]; } + $x += $offset + $pdef_offset; + print PDEF pack("L", $x); + } + $offset += $nlon[$j]; + } + } +# print weights + $x = pack("f", 1.0); + for ($i = 0; $i < $nx*$ny; $i++) { + print PDEF $x; + } + +# print wind rotation + $x = pack("L", -999); + for ($i = 0; $i < $nx*$ny; $i++) { + print PDEF $x; + } +} + +sub gau_pdf_linear { +# +# not working +# linear interpolation along latitude + + my @n1 = (); # left locations + my @n2 = (); # right locations + my @w1 = (); # left weights + my @w2 = (); # right weights + + print "pdef $npnts 1 general 2 stream binary $caret3$pdef\n"; + + $offset = 0; + for ($j = 1; $j <= $ny; $j++) { + for ($i = 0; $i < $nx; $i++) { + $x = $i / ($nx - $t) * ($nlon[$j] - $t); + +# grid points and weights + $nl = floor($x); + $wl = 1 - ($x - $nl); + $nr = $nl + 1; + $wr = $x - $nl; + + if ($nl >= $nlon[$j]) { $nl -= $nlon[$j]; } + if ($nr >= $nlon[$j]) { $nr -= $nlon[$j]; } + + $nr += $offset + $pdef_offset; + $nl += $offset + $pdef_offset; + + push @n1, $nl; + push @w1, $wl; + push @n2, $nr; + push @w2, $wr; + + } + $offset += $nlon[$j]; + } + +# write locations and weights to PDEF file + + $rem =($nx*$ny) % 4; + + for ($i = 0; $i < $rem; $i++) { + print PDEF pack("L", $n1[$i]); + } + for ($i = $rem; $i < $nx*$ny; $i += 4) { + print PDEF pack("LLLL", $n1[$i], $n1[$i+1], $n1[$i+2], $n1[$i+3]); + } + + for ($i = 0; $i < $rem; $i++) { + print PDEF pack("f", $w1[$i]); + } + for ($i = $rem; $i < $nx*$ny; $i += 4) { + print PDEF pack("ffff", $w1[$i], $w1[$i+1], $w1[$i+2], $w1[$i+3]); + } + + + for ($i = 0; $i < $rem; $i++) { + print PDEF pack("L", $n2[$i]); + } + for ($i = $rem; $i < $nx*$ny; $i += 4) { + print PDEF pack("LLLL", $n2[$i], $n2[$i+1], $n2[$i+2], $n2[$i+3]); + } + + for ($i = 0; $i < $rem; $i++) { + print PDEF pack("f", $w2[$i]); + } + for ($i = $rem; $i < $nx*$ny; $i += 4) { + print PDEF pack("ffff", $w2[$i], $w2[$i+1], $w2[$i+2], $w2[$i+3]); + } + +# wind rotation + + $x = pack("L", -999); + for ($i = 0; $i < $rem; $i++) { + print PDEF $x; + } + for ($i = $rem; $i < $nx*$ny; $i += 4) { + print PDEF $x,$x,$x,$x; + } +} + +sub rr2ll{ + my $polelat=shift; + my $polelon=shift; + my $rotation=shift; + my $rlat=shift; + my $rlon=shift; + my $a = deg2rad(90.0+$polelat); + my $b = deg2rad($polelon); + my $r = deg2rad($rotation); + my $pr = deg2rad($rlat); + my $gr = -deg2rad($rlon); + my $pm = asin(cos($pr)*cos($gr)); + my $gm = atan2(cos($pr)*sin($gr),-sin($pr)); + my $lat = rad2deg(asin(sin($a)*sin($pm)-cos($a)*cos($pm)*cos($gm-$r))); + my $lon = -rad2deg((-$b+atan2(cos($pm)*sin($gm-$r), + sin($a)*cos($pm)*cos($gm-$r)+cos($a)*sin($pm)))); + return ($lat, $lon); +} + +# +# reads inventory +# picks out variables and levels +# +sub scan_ListA { + my ($ens, $rec_no, $rec_loc, $npts, $time, $var, $lev00); + open (FileDate, "<$ListA") or die "Could not open wgrib2 inventory: $ListA"; + while () { + chomp; + ($rec_no,$rec_loc,$lev00, $npts, $time, $var) = split(/:/,$_,6); + $npts =~ s/npts=//; + $time =~ s/.*=//; + $dates{$time} = 0; + $levels{$var} = 0; + $lev0{$var} = $lev00; + } + close (FileDate); +} +sub gdate{ + my ($year, $mo, $day, $hour, $month, $minute); + $_ = $_[0]; + $year = substr($_,0,4); + $mo = substr($_,4,2); + $day = substr($_,6,2); + $hour = substr($_,8,2); + $minute = substr($_,10,2); + + if ($mo < 0 || $mo > 12) { + print "illegal date code $time\n"; + exit 8; + } + + $month=substr("janfebmaraprmayjunjulaugsepoctnovdec",$mo*3-3,3); + if ($minute != 0) { return " ${hour}:${minute}Z$day$month$year"; } + return " ${hour}Z$day$month$year"; +} + +sub pdef_near { + +# now to create the pdef file +# regional means grid points are on left and right boundaries +# +# $regional_thinned_grid = 1 +# + print "pdef $npnts 1 file 1 stream binary $caret3$pdef\n"; + + $t=0; + if ($regional_thinned_grid == 1) { $t = 1; } + + if ($scan eq 'WE:SN') { + $offset = 0; + for ($j = 1; $j <= $ny; $j++) { + for ($i = 0; $i < $nx; $i++) { + $x = $i / ($nx - $t) * ($nlon[$j] - $t); + $x = floor($x + 0.5); + if ($x >= $nlon[$j]) { $x -= $nlon[$j]; } + $x += $offset + $pdef_offset; + print PDEF pack("L", $x); + } + $offset += $nlon[$j]; + } + } + else { + $offset = $npnts; + for ($j = $ny; $j >= 1; $j--) { + $offset -= $nlon[$j]; + for ($i = 0; $i < $nx; $i++) { + $x = $i / ($nx - $t) * ($nlon[$j] - $t); + $x = floor($x + 0.5); + if ($x >= $nlon[$j]) { $x -= $nlon[$j] }; + $x += $offset + $pdef_offset; + print PDEF pack("L", $x); + } + } + } +# print weights + $x = pack("f", 1.0); + for ($i = 0; $i < $nx*$ny; $i++) { + print PDEF $x; + } +# print wind rotation + $x = pack("L", -999); + for ($i = 0; $i < $nx*$ny; $i++) { + print PDEF $x; + } +} + + +sub pdef_linear { + +# linear interpolation along latitude + + my @n1 = (); # left locations + my @n2 = (); # right locations + my @w1 = (); # left weights + my @w2 = (); # right weights + + print "pdef $npnts 1 file 2 stream binary $caret3$pdef\n"; + + $t=0; + if ($regional_thinned_grid == 1) { $t = 1; } + + if ($scan eq 'WE:SN') { + $offset = 0; + for ($j = 1; $j <= $ny; $j++) { + for ($i = 0; $i < $nx; $i++) { + $x = $i / ($nx - $t) * ($nlon[$j] - $t); + +# grid points and weights + $nl = floor($x); + $wl = 1 - ($x - $nl); + $nr = $nl + 1; + $wr = $x - $nl; + + if ($nl >= $nlon[$j]) { $nl -= $nlon[$j]; } + if ($nr >= $nlon[$j]) { $nr -= $nlon[$j]; } + + $nr += $offset + $pdef_offset; + $nl += $offset + $pdef_offset; + + push @n1, $nl; + push @w1, $wl; + push @n2, $nr; + push @w2, $wr; + + } + $offset += $nlon[$j]; + } + } + else { + $offset = $npnts; + for ($j = $ny; $j >= 1; $j--) { + $offset -= $nlon[$j]; + for ($i = 0; $i < $nx; $i++) { + $x = $i / ($nx - $t) * ($nlon[$j] - $t); + +# grid points and weights + $nl = floor($x); + $wl = 1.0 - ($x - $nl); + $nr = $nl + 1; + $wr = 1.0 - $wl; + + if ($nl >= $nlon[$j]) { $nl -= $nlon[$j]; } + if ($nr >= $nlon[$j]) { $nr -= $nlon[$j]; } + + $nr+= $offset + $pdef_offset; + $nl+= $offset + $pdef_offset; + + push @n1, $nl; + push @w1, $wl; + push @n2, $nr; + push @w2, $wr; + } + } + } + +# write locations and weights to PDEF file + + $rem =($nx*$ny) % 4; + + for ($i = 0; $i < $rem; $i++) { + print PDEF pack("L", $n1[$i]); + } + for ($i = $rem; $i < $nx*$ny; $i += 4) { + print PDEF pack("LLLL", $n1[$i], $n1[$i+1], $n1[$i+2], $n1[$i+3]); + } + + for ($i = 0; $i < $rem; $i++) { + print PDEF pack("f", $w1[$i]); + } + for ($i = $rem; $i < $nx*$ny; $i += 4) { + print PDEF pack("ffff", $w1[$i], $w1[$i+1], $w1[$i+2], $w1[$i+3]); + } + + + for ($i = 0; $i < $rem; $i++) { + print PDEF pack("L", $n2[$i]); + } + for ($i = $rem; $i < $nx*$ny; $i += 4) { + print PDEF pack("LLLL", $n2[$i], $n2[$i+1], $n2[$i+2], $n2[$i+3]); + } + + for ($i = 0; $i < $rem; $i++) { + print PDEF pack("f", $w2[$i]); + } + for ($i = $rem; $i < $nx*$ny; $i += 4) { + print PDEF pack("ffff", $w2[$i], $w2[$i+1], $w2[$i+2], $w2[$i+3]); + } + +# wind rotation + + $x = pack("L", -999); + for ($i = 0; $i < $rem; $i++) { + print PDEF $x; + } + for ($i = $rem; $i < $nx*$ny; $i += 4) { + print PDEF $x,$x,$x,$x; + } +} + +# this routine makes shorter names + +sub shorten_name { + $_ = $name; + s/,missing=\d*([.:])/$1/; + s/\.std_dev([.:])/sDEV$1/; + s/\.ENS=\+(\d*)([.:])/ENS$1$2/; + s/\.ENS=-(\d*)([.:])/ENSm$1$2/; + s/\.Confidence_Indicator/qc/; + s/\.spatial_max/spmax/; + s/\.spatial_ave/spave/; + s/\.spatial_min/spmin/; + s/\.(\d*)[%]_level/$1PC/; + tr/ :-//d; + tr/\./d/; + if (/^\d/) { $_ = "no" . $_; } + $name = $_; + return; +# old code + for ($i = 0; $i <= $#from; $i++) { + s/$from[$i]/$to[$i]/; + } + + $name = $_; +} diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/alt_gmp b/projects/MissionSupport/applications/WxModel/asia-aq/bin/alt_gmp new file mode 100755 index 0000000..3f34d88 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/alt_gmp @@ -0,0 +1,682 @@ +#!/usr/bin/perl -w +# 2012 Public Domain Wesley Ebisuzaki +# +# alt_gribmap alternative format for grib2 ctl files +# 6/2013 added ENV{OMP_NUM_THREADS}=1 for wgrib2 +use POSIX; +use threads; +use threads::shared; + +$program=$0; +$version="0.0.4"; +$wgrib2="wgrib2"; +$gzip='gzip'; +$wgrib2_flags=''; +# $index_format = 1; +$ctl=''; +$good_npts=0; +$verbose = 0; +$update = 0; +$nthreads = 5; +$ENV{'OMP_NUM_THREADS'}=1; + +$undef = -999; +# $undef will not be the same after packed into $index_buffer because +# saved as 32-bit unsigned number and converted back into positive 64-bit number +$undef_vec = unpack("N", pack("N", -999)); + +# get options +for ($i = 0; $i <= $#ARGV; $i++) { + $_ = $ARGV[$i]; + if (/^-npts/) { $good_npts = $ARGV[++$i]; } + if (/^-proc/) { $nthreads = $ARGV[++$i]; } + if (/^-nthreads/) { $nthreads = $ARGV[++$i]; } + elsif (/^-i/) { $ctl = $ARGV[++$i]; } + elsif (/^-v/) { $verbose++; } + else { $ctl = $ARGV[$i]; } +} + +if ($ctl eq "") { die "no ctl file specified\n"; } + +&scan_ctl; +&resolve_dset_index; + +# print contents of the id table +if ($verbose > 1) { + for ($i = 0; $i < $nfields; $i++) { print "table: $i id=$var_id[$i]\n"; } +} + +# find number of fields per time step +$size = $nfields * $ntime * 2; +if ($verbose > 1) { print "size=$size\n"; } + +# figure out the initial date code +$date0=from_gdate($start_time); +if ($verbose > 1) { print "date0 = $date0 or $start_time\n"; } + +# make an array of all the time codes +make_timestamps($ntime, $date0, $inc_time); + +if ($verbose > 1) { + foreach $time (sort keys(%time_stamp)) { print "time=$time $time_stamp{$time} \n"; } +} + +mk_template_list($dset, $inc_time); + +$n=$#template_file; +$nfound=0; +$nmissing=0; + +make_index(); + +$total=$ntime*$nfields; +print "$program v$version finished ctl=$ctl records matched=$nfound, not matched=$nmissing ctl_defn=$total\n"; + +exit 0; + + +#----------------------------------------------------------------- + +sub make_index { + +# my ($index_buffer); + my ($inv, $last, $j); + my ($num,$loc,$npts,$date,$id); + my ($fail_fork); + + + # open index file + open(INDEX, ">", $index) or die "failed to open index file: $index\n"; + binmode(INDEX); + # initialize index file buffer with -999 (32-bit network order) + $index_buffer = (pack "N", $undef) x $size; + $temp_index_buffer = $index_buffer; + +# make pipes for communiation + + for ($count = 1; $count < $nthreads; $count++) { + pipe($read[$count], $write[$count] ); + binmode($read[$count]); + binmode($write[$count]); + } + +# make $nthreads threads/processes + my (@pids); + $fail_fork = 0; + $pid = -1; + + for ($count = 1; $count < $nthreads; $count++) { + $pid = fork(); + if (not defined($pid)) { +# if fork fails, set number of procs=1 + print "fork failed, nprocs set to 1\n"; + $nthreads = 1; $fail_fork = 1; last; } + if ($pid != 0) { + # parent + $pids[$count] = $pid; + } + else { + # child + last; + } + } + if ($pid != 0) { $count = 0 }; + +# if fork failed, kill childern procs + if ($fail_fork == 1 && $pid == 0) { exit 0; } + +# print "process=$count out of $nthreads processes\n"; + + if ($update == 1) { + # update: use index files + for ($inv = $count; $inv <= $n; $inv += $nthreads) { + $inv_file = $template_file[$inv] . $wgrib2_inv . '.gz'; + # make inventory file + if (! -f $inv_file) { + if (! -f $template_file[$inv]) { + $file = $template_file[$inv]; + print "missing grib2 file $file\n"; + $template_file[$inv] = ''; + next; + } + else { +# print "making: $inv_file process=$count\n"; + system "$wgrib2 $wgrib2_flags \"$template_file[$inv]\" | $gzip -c > $inv_file"; + } + } + if (-f $inv_file) { + print "scanning-gz $inv_file (process=$count)\n"; + open(INV, "$gzip -dc $inv_file |") or die "could not $gzip $inv_file\n"; + scan_inv(); + } + } + } + else { + # scan the grib2 files + for ($inv = $count; $inv <= $n; $inv += $nthreads) { + if (! -r $template_file[$inv]) { + print "missing grib2 file $template_file[$inv] (process=$count)\n"; + next; + } + open(INV,"$wgrib2 $wgrib2_flags \"$template_file[$inv]\" |") or die "unexpect fail $wgrib2 $template_file[$inv]\n"; + print "scanning $template_file[$inv] (process=$count)\n"; + scan_inv(); + } + } + +# child processes write $index_buffer to parent + + if ($pid == 0) { + print { $write[$count] } pack("NNN", $count, $nmissing, $nfound); +# only write index file if found a match + if ($nfound != 0) { print { $write[$count] } $index_buffer; } + exit 0; + } + +# parent process reads $index_buffer from all child process +# and merges index_buffer + + print "merge index files\n"; + for ($count = 1; $count < $nthreads; $count++) { + read $read[$count], $i, 4; + $j = unpack("N", $i); + if ($j != $count) { print "programming error, pipe mismatch\n"; } + + read $read[$count], $i, 4; + $j = unpack("N", $i); + $nmissing += $j; + + read $read[$count], $i, 4; + $j = unpack("N", $i); + $nfound += $j; + + if ($j != 0) { + $i = read $read[$count], $temp_index_buffer, 4*$size; + } + +# print "read pipe $count bytes=$i nfound=$j undef=$undef\n"; + + for ($i = 0; $i < $size; $i++) { + $j = vec($temp_index_buffer, $i, 32); + if ($j != $undef_vec) { vec($index_buffer, $i, 32) = $j;} + } + waitpid($pids[$count], 0); + } + + # write index file + print "writing out index\n"; + print INDEX pack("NN", 1, $size); + print INDEX $index_buffer; +} + + +# --------------------- start of various routines ----------------------- + +sub scan_inv { + + my ($num, $loc, $npts, $date, $id, $t, $j); + + while () { + chomp; + if ($verbose > 2) { print "wgrib2 inv=$_\n"; } + ($num,$loc,$npts,$date,$id) = split(/:/, $_, 5); + $npts =~ s/npts=//; + $npts = $npts + 0; + $date =~ s/.*=//; + # convert YYYYMMDDHHMMSS -> YYYYMMDDHHMM + $date = substr($date,0,12); + if ($good_npts == 0) { $good_npts = $npts; } + + # get submessage number + if ($num =~ /\.(\d*)/) { $num = $1; } + else { $num = 1; } + + if ($verbose > 2) { print "submsg num=$num loc=$loc date=$date id=$id\n"; } + $t = -1; + if (($good_npts == $npts) && defined($i = $var_num{$id}) && defined($t = $time_stamp{$date}) ) { + if ($verbose > 0) { print "MATCH $id $date\n"; } + $j = 2*($i + $nfields * $t); + vec($index_buffer, $j, 32) = $loc; + vec($index_buffer, $j+1, 32) = $num; + $nfound++; + } + else { + if ($verbose > 0) { print "NO MATCH $id $date\n"; } + $nmissing++; + } + } + close(INV); +} + + +sub resolve_dset_index { + +# dset and index could have a caret, resolve relative to ctl file + if (substr($index,0,1) eq '^' || substr($dset,0,1) eq '^') { + if ($ctl =~ /\//) { + $ctldir = $ctl; + $ctldir =~ s/\/[^\/]+$/\//; + } + else { + $ctldir = ''; + } + if (substr($index,0,1) eq '^') { $index =~ s/\^/$ctldir/ }; + if (substr($dset,0,1) eq '^') { $dset =~ s/\^/$ctldir/ }; + if ($verbose > 1) {print "ctldir=$ctldir index=$index dset=$dset\n"; } + } +} + +# make a hash of possible time stamps +sub make_timestamps { + my ($nt, $date0, $inc, $i, $j, $jj); + my ($year, $month, $day, $hour, $minute, $unit, $n); + $nt = $_[0]; + $date0 = $_[1]; + $inc = $_[2]; + $time_stamp{$date0} = 0; + if ($nt == 1) { return; } + + $year = substr($date0,0,4); + $month = substr($date0,4,2); + $day = substr($date0,6,2); + $hour = substr($date0,8,2); + $minute = substr($date0,10,2); + $inc =~ /(\d+)([a-zA-Z]+)/ or die "make_timestamps: fatal error bad increment $inc\n"; + $n = $1; + $unit = $2; + $unit =~ tr/A-Z/a-z/; + + if ($unit =~ /yr/) { + for ($i = 1; $i < $nt; $i++) { + $year += $n; + $time_stamp{sprintf "%4d%2.2d%2.2d%2.2d%2.2d", $year, $month, $day, $hour, $minute} = $i; + } + return; + } + if ($unit =~ /mo/) { + for ($i = 1; $i < $nt; $i++) { + $month += $n; + if ($month > 12) { + $j = floor(($month-1)/12); + $year += $j; + $month = $month - 12*$j; + } + $time_stamp{sprintf "%4d%2.2d%2.2d%2.2d%2.2d", $year, $month, $day, $hour, $minute} = $i; + } + return; + } + +# convert to minutes + + if ($unit eq 'hr') { $n *= 60; $unit = 'mn'; } + elsif ($unit eq 'dy') { $n *= 24*60; $unit = 'mn'; } + else { die "bad unit $unit\n"; } + + for ($i = 1; $i < $nt; $i++) { + $minute += $n; + if ($minute >= 60) { + $j = floor($minute/60); + $minute -= 60*$j; + $hour += $j; + if ($hour >= 24) { + $j = floor($hour/24); + $hour -= 24*$j; +# $j is number of days to add + $j += julian($year,$month,$day); + while ($j > 365 + leap_year($year)) { + $j -= (365 + leap_year($year)); + $year++; + } + $jj = unjulian($j,$year); + $month = substr($jj,0,2); + $day = substr($jj,2,2); + } + } + $time_stamp{sprintf "%4d%2.2d%2.2d%2.2d%2.2d", $year, $month, $day, $hour, $minute} = $i; + } +} + +# +# convert from gdate to YYYYMMDDHHMM format +# + +sub from_gdate { + my ($gdate, $min, $hour, $day, $mon, $year); + $gdate = $_[0]; + $_ = $gdate; + + $min = 0; + $hour = 0; + +# get hour and optional minutes + if (/^(\d+)+Z/i) { + $hour = $1; + $_ = $'; + } + elsif (/^(\d+):(\d+)Z/i) { + $hour = $1; + $min = $2; + $_ = $'; + } + +# get day month and year + /(\d+)([a-zA-Z]{3})(\d+)/ or die "from_gdate fatal error: $gdate\n"; + $day = $1; + $mon = $2; + $year = $3; + + if (/jan/i) { $mon=1; } + elsif (/feb/i) { $mon=2; } + elsif (/mar/i) { $mon=3; } + elsif (/apr/i) { $mon=4; } + elsif (/may/i) { $mon=5; } + elsif (/jun/i) { $mon=6; } + elsif (/jul/i) { $mon=7; } + elsif (/aug/i) { $mon=8; } + elsif (/sep/i) { $mon=9; } + elsif (/oct/i) { $mon=10; } + elsif (/nov/i) { $mon=11; } + elsif (/dec/i) { $mon=12; } + + return sprintf "%4d%2.2d%2.2d%2.2d%2.2d", $year, $mon, $day, $hour, $min; +} + + +# +# scan_ctl +# +# this routine scans the ctl file +# and sets the needed variables +# +# time variables +# $ntime, $start_time, $inc_time +# +# level variables +# $nlevels number of levels +# $level[0..$nlevels-1] level values +# +# variables +# +# $var_id[$i] +# $var_num{$id} +# +# +# $nfields = number of fields (var + levels) per time + +sub scan_ctl { + + my ($tmp, $i, $a, $b); + + open(CTL,"<", $ctl) or die "Could not open ctl file: $ctl"; + $dtype = 0; + $pdef = 0; + $calendar=366; + $pascals=0; + while () { + chomp; + +# can have more than one option per line + + if (/^options.*\s365_day_calendar/i) { + $calendar=365; + if ($verbose > 1) { print "365 day calendar\n"; } + } + if (/^options.*\spascals/i) { + $pascals=1; + if ($verbose > 1) { print "pascals\n"; } + } + +# scan lines + if (/^tdef /i) { + /^tdef *(\d+) linear +(\S+) +(\S+)/i or die "failed scanning tdef: $_"; + $ntime=$1; + $start_time=$2; + $inc_time=$3; + print "tdef: nt=$ntime start=$start_time by=$inc_time\n"; + } + + elsif (/^zdef /i) { + $_=~ s/^zdef +(\d+) +levels//i or die "failed scanning zdef: $_"; + + $nlevels=$1; + print "zdef: nlevel=$nlevels\n"; + for ($i = 0; $i < $nlevels; $i++) { +# if empty line, read another + if (! / *\S+/) { + chomp; + if (!(defined($_ = ))) { + die "failed scanning zdef:\n"; + } + } +# need to read a level + / *(\S+)/ or die "failed scanning zdef:\n"; + $a = $1; + $_ = $'; + $level[$i] = $a+0; + if ($verbose > 1) { print "level[$i]=$level[$i]\n"; } + } + } + + elsif (/^vars /i) { + /^vars +(\d+)/i or die "failed scanning vars: $_"; + $nvars = $1; + $nfields = 0; + for ($i = 0; $i < $nvars; $i++) { + if (!(defined($_ = ))) { + die "vars: end of control file\n"; + } + chomp; + if (/^ *endvars/i) { + die "vars: not enough variables\n"; + } + / *(\S+) +(\d+) *\d+ *"([^"]+)"/ or die "vars: problem with $_\n"; + + # $name = $1; + $nlevs = $2; + $id = $3; + if ($verbose > 1) { print "vars: $1 $2 $id\n"; } + + if ($nlevs == 0) { + $var_id[$nfields] = $id; + $var_num{$id} = $nfields; + $nfields++; + } + else { + if ($nlevs < 0 || $nlevs > $nlevels) { die "vars: number of levels is too big $nlevs\n"; } + for ($j = 0; $j < $nlevs; $j++) { + $tmp = sprintf($id, $level[$j]); + $var_id[$nfields] = $tmp; + $var_num{$tmp} = $nfields; + $nfields++; + } + } + } + if (!(defined($_ = ))) { + die "vars: end of control file\n"; + } + /^ *endvars/i or die "vars: expecting endvars\n"; + if ($verbose > 1) { print "number of fields=$nfields\n"; } + } + elsif (/^xdef /i) { + if ($verbose > 1) { print "xdef: $_\n"; } + } + elsif (/^ydef /i) { + if ($verbose > 1) { print "ydef: $_\n"; } + } + elsif (/^pdef /i) { + print "pdef: $_"; + $pdef++; + } + elsif (/^dtype grib2/i) { + print "dtype: $_\n"; + $dtype++; + } + elsif (/^index /i) { + /^index +(\S.*)/i or die "failed scanning index: $_"; + $index=$1; + if ($verbose > 1) { print "index: $index\n"; } + } + elsif (/^dset /i) { + /^dset +(\S.*)/i or die "failed scanning dset: $_\n"; + $dset=$1; + if ($verbose > 1) { print "dset: $dset\n"; } + } + elsif (/^\* wgrib2 inventory flags: (.*)/) { + $wgrib2_flags=$1; + print "wgrib2_flags=$wgrib2_flags\n"; + } + elsif (/^\* wgrib2 inv suffix:\s*(\S*)/) { + $wgrib2_inv=$1; + print "wgrib2_inv=$wgrib2_inv\n"; + } + elsif (/^\* alt_gmp options: update=(\S*)/) { + $update=$1; + } + elsif (/^\* alt_gmp options: nthreads=(\S*)/) { + $nthreads=$1; + } + } + close(CTL); +} + + +# make a list of templated files along with valid time range + +sub mk_template_list { + + my ($dset, $time, $inctime, $fhr, $i, $tmp, $n); + my ($y4,$y2,$m2,$d2,$f2,$f3); + + $dset = $_[0]; + $inctime = $_[1]; + print "resolve_dsets dset=$dset inctime=$inctime\n"; + + $_ = $dset; + if (! /%/) { + $template_file[0] = $dset; + $template_file_min[0] = 0; + $template_file_max[0] = $ntime-1; + print "resolve_dsets: no template\n"; + return; + } + + print "resolve_dsets template dset=$dset\n"; + $_ = $dset; + $y4 = /%y4/; + $y2 = /%y2/; + $m2 = /%m2/; + $d2 = /%d2/; + $h2 = /%h2/; + $n2 = /%n2/; + $f2 = /%f2/; + $f3 = /%f3/; + if ($f2 || $f3) { + $inctime =~ s/hr$// or die "%f2 needs dt-units of hr\n"; + $fhr = $inctime + 0; + } + + $n = 0; + foreach $time (sort keys(%time_stamp)) { + $_ = $dset; + $i = $time_stamp{$time}; + + if ($y4) { $tmp = substr($time,0,4); s/%y4/$tmp/g; } + if ($y2) { $tmp = substr($time,2,2); s/%y2/$tmp/g; } + if ($m2) { $tmp = substr($time,4,2); s/%m2/$tmp/g; } + if ($d2) { $tmp = substr($time,6,2); s/%d2/$tmp/g; } + if ($h2) { $tmp = substr($time,8,2); s/%h2/$tmp/g; } + if ($n2) { $tmp = substr($time,10,2); s/%n2/$tmp/g; } + if ($f2) { + $tmp = sprintf "%2.0f", $i * $fhr; + $tmp =~ s/ /0/g; + s/%f2/$tmp/g; + } + if ($f3) { + $tmp = sprintf "%3.0f", $i * $fhr; + $tmp =~ s/ /0/g; + s/%f3/$tmp/g; + } + + if ($n == 0) { + $template_file[$n] = $_; + $template_file_min[$n] = 0; + $template_file_max[$n] = 0; + $n++; + } + else { + if ($_ eq $template_file[$n-1]) { + $template_file_max[$n-1]++; + } + else { + $template_file[$n] = $_; + $template_file_min[$n] = $i; + $template_file_max[$n] = $i; + $n++; + } + } + } + +# for ($i = 0; $i < $n; $i++) { +# print "$i $template_file[$i] - $template_file_min[$i] $template_file_max[$i]\n"; +# } + return; +} + +# +# leap year: 0/1 +# +sub leap_year { + my ($year); + $year = $_[0]; + if ($calendar == 365) { return 0; } + if ($year % 4 != 0) { return 0; } + if ($year % 400 == 0) { return 1; } + if ($year % 100 == 0) { return 0; } + return 1; +} + +# +# return the Julian day 1..365/366 +# julian(year, month, day) +# +sub julian { + + my ($year,$mon, $day, $n); + + $year=$_[0]; + $mon=$_[1]; + $day=$_[2]; + + $n=substr(" 000 031 059 090 120 151 181 212 243 273 304 334",($mon-1)*4,4); + $n = $n + $day; + + if ($calendar eq '365') { return $n; } + + if ($mon > 2) { $n += leap_year($year); } + + return $n; +} + +# unjulian(julian_day,year) +# julian day (1..366) to "MMDD" + +sub unjulian { + + my ($julian, $n, $mon, $day, $year, $leap); + $julian=$_[0]; + $year=$_[1]; + $leap = leap_year($year); + if ($leap == 1) { + if ($julian == 31 + 29) { return "0229"; } + if ($julian > 31 + 28) { $julian--; } + } + + for ($mon = 12; $mon > 0; $mon--) { + $n=substr(" 000 031 059 090 120 151 181 212 243 273 304 334",($mon-1)*4,4); + if ($julian > $n) { + $day = $julian - $n; + return sprintf("%2.2d%2.2d", $mon, $day); + } + } + die "fatal error in unjulian\n"; +} diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/append_vars.sh b/projects/MissionSupport/applications/WxModel/asia-aq/bin/append_vars.sh new file mode 100755 index 0000000..5d1f68f --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/append_vars.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +# usage: append_vars.sh yyyymmdd +# + +runtime=$1 +y4=`echo $runtime | cut -c1-4` +y2=`echo $runtime | cut -c3-4` +m2=`echo $runtime | cut -c5-6` +d2=`echo $runtime | cut -c7-8` +path_store="/home/xinxinye/data/FIREX-AQ/compare/CAMS/cropped" +path_data=$path_store"/"$y4$m2$d2 + +cd $path_data +for fh in `seq -w 0 3 120` +do + i=0 + for fname in `ls *sfc_${fh}*` + do + let i+=1 + if [ $i -eq '1' ];then + ss=${fname/sfc/merged} + fout=${ss/_aod1240/} + echo $fout + cp $fname $fout + else + ncks -h -A $fname $fout + fi + done + + for fname in `ls *pl_${fh}*` + do + ncks -h -A $fname $fout + done + + for fname in `ls *ml_${fh}*` + do + ncks -h -A $fname $fout + done +done + + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi2llp.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi2llp.py new file mode 100755 index 0000000..91d6500 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi2llp.py @@ -0,0 +1,194 @@ +#!/usr/bin/env python +# +# Convert ARQI output to COARDS compliant file on a regular lat-lon-pressure grid. +# +# Arlindo da Silva, March 2019. + +from dateutil.parser import parse as isoparser +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + lon = nc.variables['rlon1'] + lat = nc.variables['rlat1'] + pref = nc.variables['pref'] + a = ncin.variables['a_1'][:] + b = ncin.variables['b_1'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = nc.variables['P0'][n,:,:]*100.0 # Pa + cP = npy.zeros((nz,ny,nx)) + for k in range(nz): + cP[k,:,:] = npy.exp(a[k] + b[k]*npy.log(ps[:,:]/pref))/100. #hPa + return cP + + +#--- +def getTyme(ncin): + T = ncin.variables['time'] + # hourss since 2018-08-07 00:00:00 + units = T.units + isoT0 = units.split(' since ')[1].replace(' ','T') + cDT = units.split(' ')[0] + sec = timedelta(seconds=1) + if cDT == "hours": + DT = 60 + else: + raise ValueError, "fix me, can only handle hours as unit of time" + t0 = isoparser(isoT0) + tyme = npy.array([t0 + int(t * DT)*sec for t in T]) + return tyme + +#--- +def append_vars(ncin, options, zlib=False): + """ + Append total column PM2.5, OC, CO + """ + g = 9.80665 + nc = Dataset(options.outFile,'a',format=options.format) + p = myCurv2LLP.get_cP(0,ncin) + nz, ny, nx = p.shape + dp= npy.zeros((nz,ny,nx)) + + +#--- +def append_lml( nc, zlib=False): + """ + Append vars at lowest model level to the oroginal file. + """ + + for v in ['AF','AC','AMAC', 'AM25','NIAC', 'NI25','SUAC', 'SU25', + 'PCAC', 'PC25','OCAC', 'OC25','ECAC', 'EC25','CMAC', 'CM25', + 'SSC5', 'SSC6', 'SSC7', 'SSC8', 'SSC9', 'SSCA', 'SSCB', + 'C3H8','CO','HCHO','ISOP','N2','NH3','NO','O3','OH','S2','PAN']: + + print 'Appending ', v + this = nc.createVariable(v+'_lml','f4',('time','rlat1', 'rlon1'),zlib=zlib) + this.long_name = '' + this.missing_value = UNDEF # out of domain + this.units = '' + + nz, ny, nx = nc.variables[v][0,:,:,:].shape + this[0,:,:] = nc.variables[v][0,nz-1,:,:] # top to bottom + + + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + rP = '925,850,700,600' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] arqi_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with arqiout replaced with arqillp)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + arqi_File = args[0] + else: + parser.error("must have 1 argument: arqi_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + dirn = os.path.dirname(arqi_File) + base = os.path.basename(arqi_File) + options.outFile = dirn + '/arqi.llp.' + base.replace('_uconversion_particles.netcdf4.compressed','.nc4') + if options.outFile == arqi_File: + options.outFile = 'arqi_llp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['rlon1', 'rlat1', 'pref', 'reftime', 'rotate_pole', + 'a', 'b','lon_1', 'lat_1', 'p', 'time'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # copy original file + # ------------------ + + tpath = os.path.dirname(name) + tname = os.path.basename(arqi_File) + interm = tpath + os.sep + tname + '.tmp.nc' + + os.system("cp "+arqi_File+" " + interm) + + # Open the input file + # ------------------- + nc = Dataset(interm,'a',format=options.format) + + # Time range + # ---------- + tyme = getTyme(nc) + + # Append lml vars + # --------------- + append_lml(nc, zlib=False) + + + # Instantiate regridding class + # ---------------------------- + cLon = nc.variables['lon_1'][:,:] + cLat = nc.variables['lat_1'][:,:] + r = myCurv2LLP(cLon,cLat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + + os.remove(interm) diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi2llp.py.keep b/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi2llp.py.keep new file mode 100755 index 0000000..61304b2 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi2llp.py.keep @@ -0,0 +1,186 @@ +#!/usr/bin/env python +# +# Convert ARQI output to COARDS compliant file on a regular lat-lon-pressure grid. +# +# Arlindo da Silva, March 2019. + +from dateutil.parser import parse as isoparser +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + lon = nc.variables['rlon'] + lat = nc.variables['rlat'] + pref = nc.variables['pref'] + a = ncin.variables['a'][:] + b = ncin.variables['b'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = nc.variables['P0'][n,:,:]*100.0 # Pa + cP = npy.zeros((nz,ny,nx)) + for k in range(nz): + cP[k,:,:] = npy.exp(a[k] + b[k]*npy.log(ps[:,:]/pref))/100. #hPa + return cP + + +#--- +def getTyme(ncin): + T = ncin.variables['time'] + # hourss since 2018-08-07 00:00:00 + units = T.units + isoT0 = units.split(' since ')[1].replace(' ','T') + cDT = units.split(' ')[0] + sec = timedelta(seconds=1) + if cDT == "hours": + DT = 60 + else: + raise ValueError, "fix me, can only handle hours as unit of time" + t0 = isoparser(isoT0) + tyme = npy.array([t0 + int(t * DT)*sec for t in T]) + return tyme + +#--- +def append_vars(ncin, options, zlib=False): + """ + Append total column PM2.5, OC, CO + """ + g = 9.80665 + nc = Dataset(options.outFile,'a',format=options.format) + p = myCurv2LLP.get_cP(0,ncin) + nz, ny, nx = p.shape + dp= npy.zeros((nz,ny,nx)) + + +#--- +def append_lml( nc, zlib=False): + """ + Append vars at lowest model level to the oroginal file. + """ + + for v in ['AF','AC','AM10', 'AM25','NI10', 'NI25','SU10', 'SU25', + 'PC10', 'PC25','OC10', 'OC25','EC10', 'EC25','CM10', 'CM25','SS10', 'SS25', + 'C3H8','CO','HCHO','ISOP','N2','NH3','NO','O3','OH','S2','PAN']: + this = nc.createVariable(v+'_lml','f4',('time','rlat', 'rlon'),zlib=zlib) + this.long_name = '' + this.missing_value = UNDEF # out of domain + this.units = '' + this[0,:,:] = nc.variables[v][0,35,:,:] # total level: 36, top to bottom + + + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + rP = '925,850,700,600' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] arqi_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with arqiout replaced with arqillp)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + arqi_File = args[0] + else: + parser.error("must have 1 argument: arqi_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + dirn = os.path.dirname(arqi_File) + base = os.path.basename(arqi_File) + options.outFile = dirn + '/arqi.llp.' + base.replace('_uconversion_particles.netcdf4.compressed','.nc4') + if options.outFile == arqi_File: + options.outFile = 'arqi_llp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['rlon', 'rlat', 'pref', 'reftime', 'rotate_pole', + 'a', 'b','lon', 'lat', 'p', 'time'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # copy original file + # ------------------ + os.system("cp "+arqi_File+" interm.nc") + + # Open the input file + # ------------------- + nc = Dataset("interm.nc",'a',format=options.format) + + # Time range + # ---------- + tyme = getTyme(nc) + + # Append lml vars + # --------------- + append_lml(nc, zlib=False) + + + # Instantiate regridding class + # ---------------------------- + cLon = nc.variables['lon'][:,:] + cLat = nc.variables['lat'][:,:] + r = myCurv2LLP(cLon,cLat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + + # Append vars + # ----------- + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi_lv1_2llp.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi_lv1_2llp.py new file mode 100755 index 0000000..7214bf9 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi_lv1_2llp.py @@ -0,0 +1,236 @@ +#!/usr/bin/env python +# +# Convert ARQI output to COARDS compliant file on a regular lat-lon-pressure grid. +# +# Arlindo da Silva, March 2019. + +from dateutil.parser import parse as isoparser +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + lon = nc.variables['rlon1'] + lat = nc.variables['rlat1'] + pref = nc.variables['pref'] + a = ncin.variables['a_1'][:] + b = ncin.variables['b_1'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = nc.variables['P0'][n,:,:]*100.0 # Pa + cP = npy.zeros((nz,ny,nx)) + for k in range(nz): + cP[k,:,:] = npy.exp(a[k] + b[k]*npy.log(ps[:,:]/pref))/100. #hPa + return cP + + +#--- +def getTyme(ncin): + T = ncin.variables['time'] + # hourss since 2018-08-07 00:00:00 + units = T.units + isoT0 = units.split(' since ')[1].replace(' ','T') + cDT = units.split(' ')[0] + sec = timedelta(seconds=1) + if cDT == "hours": + DT = 60 + else: + raise ValueError, "fix me, can only handle hours as unit of time" + t0 = isoparser(isoT0) + tyme = npy.array([t0 + int(t * DT)*sec for t in T]) + return tyme + +#--- +def append_vars(nc, zlib=False): + """ + Append total column PM2.5, OC, CO to original file + """ + gz = nc.variables['GZ'][0,:,:,:] # geopotential height, units: dam, level2 (81 levels) + gz = gz*10.0 # dam -> m + pm25 = nc.variables['AF'][0,:,:,:] # ug m-3 + oc = nc.variables['OCAC'][0,:,:,:] # ug m-3 + co = nc.variables['CO'][0,:,:,:] # ppbv + rho = nc.variables['RHO'][0,:,:,:] # kg m-3 + aod3d = nc.variables['OPDA'][0,:,:,:] + + nz, ny, nx = pm25.shape + dz = npy.zeros((nz,ny,nx)) + for k in range(nz): # top to bottom + if k == nz-1: + dz[k,:,:] = 0.0 + else: + dz[k,:,:] = gz[2*k,:,:]-gz[2*k+2,:,:] + + # total cloumn OC + #---------------- + this = nc.createVariable('tcoc','f4',('time', 'rlat1', 'rlon1'),zlib=zlib) + this.description = 'total column OC <=10 um' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(oc*dz/1e9, axis=0) # kg m-2 + + # total cloumn PM2.5 + #---------------- + this = nc.createVariable('tcpm25','f4',('time', 'rlat1', 'rlon1'),zlib=zlib) + this.description = 'total column PM2.5 <=10 um' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(pm25*dz/1e9, axis=0) # kg m-2 + + # total cloumn CO + #---------------- + this = nc.createVariable('tcco','f4',('time', 'rlat1', 'rlon1'),zlib=zlib) + this.description = 'total column CO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(co/1e9*28.00/28.97*rho*dz, axis=0) # kg m-2 + + # AOD + #---------------- + this = nc.createVariable('aod','f4',('time', 'rlat1', 'rlon1'),zlib=zlib) + this.description = 'aod 550 nm' + this.missing_value = UNDEF # out of domain + this.units = ' ' + this[0,:,:] = npy.sum(aod3d, axis=0) # kg m-2 + +#--- +def append_lml( nc, zlib=False): + """ + Append vars at lowest model level to the oroginal file. + """ + + for v in ['AF','AC','AMAC', 'AM25','NIAC', 'NI25','SUAC', 'SU25', + 'PCAC', 'PC25','OCAC', 'OC25','ECAC', 'EC25','CMAC', 'CM25', + 'SSC5', 'SSC6', 'SSC7', 'SSC8', 'SSC9', 'SSCA', 'SSCB', + 'C3H8','CO','HCHO','ISOP','N2','NH3','NO','O3','OH','S2','PAN']: + this = nc.createVariable(v+'_lml','f4',('time','rlat1', 'rlon1'),zlib=zlib) + this.long_name = '' + this.missing_value = UNDEF # out of domain + this.units = '' + + nz, ny, nx = nc.variables[v][0,:,:,:].shape + this[0,:,:] = nc.variables[v][0,nz-1,:,:] # top to bottom + + + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + # rP = '925,850,700,600' + rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,450,400,350,300,250,200' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] arqi_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with arqiout replaced with arqillp)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + arqi_File = args[0] + else: + parser.error("must have 1 argument: arqi_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + dirn = os.path.dirname(arqi_File) + base = os.path.basename(arqi_File) + options.outFile = dirn + '/arqi.llp.' + base.replace('_uconversion_particles.netcdf4.compressed','.nc4') + if options.outFile == arqi_File: + options.outFile = 'arqi_llp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['rlon1', 'rlat1', 'pref', 'reftime', 'rotate_pole', + 'a_1', 'b_1','lon_1', 'lat_1', 'level1', + 'a_2', 'b_2','level2', + 'a_3', 'b_3','level3', + 'a_4', 'b_4','level4', + 'p', 'time'] # these are coordinates + options.ignore += ['GZ','WT1','UU','VV' ] + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # copy original file + # ------------------ + os.system("cp "+arqi_File+" "+arqi_File+".interm.nc") + + # Open the input file + # ------------------- + nc = Dataset(arqi_File+".interm.nc",'a',format=options.format) + + # Time range + # ---------- + tyme = getTyme(nc) + + # Append lml vars + # --------------- + append_lml(nc, zlib=False) + append_vars(nc, zlib=False) + + + # Instantiate regridding class + # ---------------------------- + cLon = nc.variables['lon_1'][:,:] + cLat = nc.variables['lat_1'][:,:] + r = myCurv2LLP(cLon,cLat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + + os.system("rm "+arqi_File+".interm.nc") + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi_lv1_2p.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi_lv1_2p.py new file mode 100755 index 0000000..416c1db --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi_lv1_2p.py @@ -0,0 +1,238 @@ +#!/usr/bin/env python +# +# Convert ARQI output to COARDS compliant file on a regular lat-lon-pressure grid. +# +# Arlindo da Silva, March 2019. + +from dateutil.parser import parse as isoparser +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + lon = nc.variables['lon'] + lat = nc.variables['lat'] + pref = nc.variables['pref'] + a = ncin.variables['a_1'][:] + b = ncin.variables['b_1'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = nc.variables['P0'][n,:,:]*100.0 # Pa + cP = npy.zeros((nz,ny,nx)) + for k in range(nz): + cP[k,:,:] = npy.exp(a[k] + b[k]*npy.log(ps[:,:]/pref))/100. #hPa + return cP + + +#--- +def getTyme(ncin): + T = ncin.variables['time'] + # hourss since 2018-08-07 00:00:00 + units = T.units + isoT0 = units.split(' since ')[1].replace(' ','T') + cDT = units.split(' ')[0] + sec = timedelta(seconds=1) + if cDT == "hours": + DT = 60 + else: + raise ValueError, "fix me, can only handle hours as unit of time" + t0 = isoparser(isoT0) + tyme = npy.array([t0 + int(t * DT)*sec for t in T]) + return tyme + +#--- +def append_vars(nc, zlib=False): + """ + Append total column PM2.5, OC, CO to original file + """ + gz = nc.variables['GZ'][0,:,:,:] # geopotential height, units: dam, level2 (81 levels) + gz = gz*10.0 # dam -> m + pm25 = nc.variables['AF'][0,:,:,:] # ug m-3 + oc = nc.variables['OCAC'][0,:,:,:] # ug m-3 + co = nc.variables['CO'][0,:,:,:] # ppbv + rho = nc.variables['RHO'][0,:,:,:] # kg m-3 + aod3d = nc.variables['OPDA'][0,:,:,:] + + nz, ny, nx = pm25.shape + dz = npy.zeros((nz,ny,nx)) + for k in range(nz): # top to bottom + if k == nz-1: + dz[k,:,:] = 0.0 + else: + dz[k,:,:] = gz[2*k,:,:]-gz[2*k+2,:,:] + + # total cloumn OC + #---------------- + # this = nc.createVariable('tcoc','f4',('time', 'rlat1', 'rlon1'),zlib=zlib) + this = nc.createVariable('tcoc','f4',('time', 'lat', 'lon'),zlib=zlib) + this.description = 'total column OC <=10 um' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(oc*dz/1e9, axis=0) # kg m-2 + + # total cloumn PM2.5 + #---------------- + # this = nc.createVariable('tcpm25','f4',('time', 'rlat1', 'rlon1'),zlib=zlib) + this = nc.createVariable('tcpm25','f4',('time', 'lat', 'lon'),zlib=zlib) + this.description = 'total column PM2.5 <=10 um' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(pm25*dz/1e9, axis=0) # kg m-2 + + # total cloumn CO + #---------------- + # this = nc.createVariable('tcco','f4',('time', 'rlat1', 'rlon1'),zlib=zlib) + this = nc.createVariable('tcco','f4',('time', 'lat', 'lon'),zlib=zlib) + this.description = 'total column CO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(co/1e9*28.00/28.97*rho*dz, axis=0) # kg m-2 + + # AOD + #---------------- + this = nc.createVariable('aod','f4',('time', 'lat', 'lon'),zlib=zlib) + this.description = 'aod 550 nm' + this.missing_value = UNDEF # out of domain + this.units = ' ' + this[0,:,:] = npy.sum(aod3d, axis=0) # kg m-2 + +#--- +def append_lml( nc, zlib=False): + """ + Append vars at lowest model level to the oroginal file. + """ + + for v in ['AF','AC','AMAC', 'AM25','NIAC', 'NI25','SUAC', 'SU25', + 'PCAC', 'PC25','OCAC', 'OC25','ECAC', 'EC25','CMAC', 'CM25', + 'CO','N2','NH3','NO','O3','OH','S2']: + this = nc.createVariable(v+'_lml','f4',('time','lat', 'lon'),zlib=zlib) + this.long_name = '' + this.missing_value = UNDEF # out of domain + this.units = '' + + nz, ny, nx = nc.variables[v][0,:,:,:].shape + this[0,:,:] = nc.variables[v][0,nz-1,:,:] # top to bottom + + + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + # rP = '925,850,700,600' + rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,450,400,350,300,250,200' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] arqi_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with arqiout replaced with arqillp)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + arqi_File = args[0] + else: + parser.error("must have 1 argument: arqi_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + dirn = os.path.dirname(arqi_File) + base = os.path.basename(arqi_File) + options.outFile = dirn + '/arqi.llp.' + base.replace('_uconversion_particles.netcdf4.compressed','.nc4') + if options.outFile == arqi_File: + options.outFile = 'arqi_llp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['lon', 'lat', 'pref', 'reftime', 'rotate_pole', + 'a_1', 'b_1','lon_1', 'lat_1', 'level1', + 'a_2', 'b_2','level2', + 'a_3', 'b_3','level3', + 'a_4', 'b_4','level4', + 'p', 'time'] # these are coordinates + options.ignore += ['GZ','WT1','UU','VV' ] + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # copy original file + # ------------------ + os.system("cp "+arqi_File+" "+arqi_File+".interm.nc") + + # Open the input file + # ------------------- + nc = Dataset(arqi_File+".interm.nc",'a',format=options.format) + + # Time range + # ---------- + tyme = getTyme(nc) + + # Append lml vars + # --------------- + append_lml(nc, zlib=False) + append_vars(nc, zlib=False) + + + # Instantiate regridding class + # ---------------------------- + cLon = nc.variables['lon'][:] + cLat = nc.variables['lat'][:] + r = myCurv2LLP(cLon,cLat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + + os.system("rm "+arqi_File+".interm.nc") + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi_lv3_2llp.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi_lv3_2llp.py new file mode 100755 index 0000000..691f8b8 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi_lv3_2llp.py @@ -0,0 +1,155 @@ +#!/usr/bin/env python +# +# Convert ARQI output to COARDS compliant file on a regular lat-lon-pressure grid. +# +# Arlindo da Silva, March 2019. + +from dateutil.parser import parse as isoparser +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + lon = nc.variables['rlon1'] + lat = nc.variables['rlat1'] + pref = nc.variables['pref'] + a = ncin.variables['a_3'][:] + b = ncin.variables['b_3'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = nc.variables['P0'][n,:,:]*100.0 # Pa + cP = npy.zeros((nz,ny,nx)) + for k in range(nz): + cP[k,:,:] = npy.exp(a[k] + b[k]*npy.log(ps[:,:]/pref))/100. #hPa + return cP + + +#--- +def getTyme(ncin): + T = ncin.variables['time'] + # hourss since 2018-08-07 00:00:00 + units = T.units + isoT0 = units.split(' since ')[1].replace(' ','T') + cDT = units.split(' ')[0] + sec = timedelta(seconds=1) + if cDT == "hours": + DT = 60 + else: + raise ValueError, "fix me, can only handle hours as unit of time" + t0 = isoparser(isoT0) + tyme = npy.array([t0 + int(t * DT)*sec for t in T]) + return tyme + + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + # rP = '925,850,700,600' + rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,450,400,350,300,250,200' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] arqi_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with arqiout replaced with arqillp)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + arqi_File = args[0] + else: + parser.error("must have 1 argument: arqi_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + dirn = os.path.dirname(arqi_File) + base = os.path.basename(arqi_File) + options.outFile = dirn + '/arqi.llp.' + base.replace('_uconversion_particles.netcdf4.compressed','.nc4') + if options.outFile == arqi_File: + options.outFile = 'arqi_llp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['rlon1', 'rlat1', 'pref', 'reftime', 'rotate_pole', + 'a_1', 'b_1','lon_1', 'lat_1', 'level1', + 'a_2', 'b_2','level2', + 'a_3', 'b_3','level3', + 'a_4', 'b_4','level4', + 'p', 'time'] # these are coordinates + options.ignore += ['GZ','WT1' ] + options.Vars = ['UU', 'VV'] + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # Open the input file + # ------------------- + nc = Dataset(arqi_File,format=options.format) + + # Time range + # ---------- + tyme = getTyme(nc) + + + # Instantiate regridding class + # ---------------------------- + cLon = nc.variables['lon_1'][:,:] + cLat = nc.variables['lat_1'][:,:] + r = myCurv2LLP(cLon,cLat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi_lv3_2p.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi_lv3_2p.py new file mode 100755 index 0000000..3597692 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi_lv3_2p.py @@ -0,0 +1,155 @@ +#!/usr/bin/env python +# +# Convert ARQI output to COARDS compliant file on a regular lat-lon-pressure grid. +# +# Arlindo da Silva, March 2019. + +from dateutil.parser import parse as isoparser +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + lon = nc.variables['lon'] + lat = nc.variables['lat'] + pref = nc.variables['pref'] + a = ncin.variables['a_3'][:] + b = ncin.variables['b_3'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = nc.variables['P0'][n,:,:]*100.0 # Pa + cP = npy.zeros((nz,ny,nx)) + for k in range(nz): + cP[k,:,:] = npy.exp(a[k] + b[k]*npy.log(ps[:,:]/pref))/100. #hPa + return cP + + +#--- +def getTyme(ncin): + T = ncin.variables['time'] + # hourss since 2018-08-07 00:00:00 + units = T.units + isoT0 = units.split(' since ')[1].replace(' ','T') + cDT = units.split(' ')[0] + sec = timedelta(seconds=1) + if cDT == "hours": + DT = 60 + else: + raise ValueError, "fix me, can only handle hours as unit of time" + t0 = isoparser(isoT0) + tyme = npy.array([t0 + int(t * DT)*sec for t in T]) + return tyme + + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + # rP = '925,850,700,600' + rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,450,400,350,300,250,200' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] arqi_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with arqiout replaced with arqillp)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + arqi_File = args[0] + else: + parser.error("must have 1 argument: arqi_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + dirn = os.path.dirname(arqi_File) + base = os.path.basename(arqi_File) + options.outFile = dirn + '/arqi.llp.' + base.replace('_uconversion_particles.netcdf4.compressed','.nc4') + if options.outFile == arqi_File: + options.outFile = 'arqi_llp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['lon', 'lat', 'pref', 'reftime', 'rotate_pole', + 'a_1', 'b_1','lon_1', 'lat_1', 'level1', + 'a_2', 'b_2','level2', + 'a_3', 'b_3','level3', + 'a_4', 'b_4','level4', + 'p', 'time'] # these are coordinates + options.ignore += ['GZ','WT1' ] + options.Vars = ['UU', 'VV'] + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # Open the input file + # ------------------- + nc = Dataset(arqi_File,format=options.format) + + # Time range + # ---------- + tyme = getTyme(nc) + + + # Instantiate regridding class + # ---------------------------- + cLon = nc.variables['lon'][:] + cLat = nc.variables['lat'][:] + r = myCurv2LLP(cLon,cLat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi_regrid.ncl b/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi_regrid.ncl new file mode 100755 index 0000000..cd108b6 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi_regrid.ncl @@ -0,0 +1,106 @@ +; extract variables from original wrfout files +; Usage: ncl 'file_in="inname.nc"' 'file_out="outname.nc"' arqi_regrid.ncl +;---------------------------------------------------------------------------- + +; load in the libraries +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/esmf/ESMF_regridding.ncl" + + + ; default values for file_in, dir_in, and file_out, if not specified + if (.not.isvar("file_in")) then + file_in = "../ARQI/2019062912_001" + end if + if (.not.isvar("file_out")) then + file_out = "../ARQI/2019062912_001_grid1.nc" + end if + + f=addfile(file_in, "r") + setfileoption("nc","Format","NetCDF4Classic") + setfileoption("nc","CompressionLevel",5) ; 0 ~ 9 + system("rm -f "+file_out) ;-- delete file + fo = addfile(file_out,"c") + + + ; global attributes + global_attnames = getvaratts(f) + att=True + do i=0,dimsizes(global_attnames)-1 + ; print(f@$global_attnames(i)$) + att@$global_attnames(i)$ = f@$global_attnames(i)$ + end do + fileattdef(fo, att) + filedimdef(fo,"time",-1,True) + + vars = getfilevarnames(f) + vars_skip = (/"lat_2", "lon_2", "rlat2", "rlon2"/) + lat_1 = f->lat_1 + lon_1 = f->lon_1 + lat_2 = f->lat_2 + lon_2 = f->lon_2 + rlat1 = f->rlat1 + rlon1 = f->rlon1 + + + do i=0,dimsizes(vars)-1 + + if (ismissing(str_match( vars_skip, vars(i) ))) then + print("processing: "+ vars(i)) + v := f->$vars(i)$ + dims := getvardims(v) + diml := dimsizes(v) + + if ( .not.ismissing(str_match(dims,"rlat2")) \ + .and. .not.ismissing(str_match(dims,"rlon2")) ) then + ; re-grid from lat_2 lon_2 to lat_1 lon_1 + + ;---Set up options for regridding + wgt_file="/gpfsm/dnb04/projects/p109/FIREX-AQ/sample_forecasts2/scripts/arqi_regrid_wgt.nc" + Opt = True + Opt@WgtFileName = wgt_file + Opt@SrcGridLat = lat_2 ; source grid + Opt@SrcGridLon = lon_2 + Opt@DstGridLat = lat_1 ; destination grid + Opt@DstGridLon = lon_1 + + Opt@SrcRegional = True ; Necessary if grids + Opt@DstRegional = True ; are regional + + Opt@InterpMethod = "bilinear" ; "patch", "conserve" + Opt@ForceOverwrite = True ; Optional, but recommended. + Opt@PrintTimings = True ; Optional + Opt@Debug = False ; Optional + + ;---Do the regridding + v_regrid := ESMF_regrid_with_weights(v, wgt_file, Opt) ; Do the regridding + + delete(v_regrid@lat2d) + delete(v_regrid@lon2d) + nd = dimsizes(diml) + v_regrid!(nd-1)="rlon1" + v_regrid!(nd-2)="rlat1" + v_regrid&rlat1 = rlat1 + v_regrid&rlon1 = rlon1 + + ; printVarSummary(v) + ; printVarSummary(v_regrid) + + ; write output + fo->$vars(i)$ = v_regrid + + else + + fo->$vars(i)$ = v + + + end if + end if + end do + + + + + + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi_regrid_latlon.ncl b/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi_regrid_latlon.ncl new file mode 100755 index 0000000..3939039 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/arqi_regrid_latlon.ncl @@ -0,0 +1,136 @@ +; extract variables from original wrfout files +; Usage: ncl 'file_in="inname.nc"' 'file_out="outname.nc"' arqi_regrid.ncl +;---------------------------------------------------------------------------- + +; load in the libraries +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/esmf/ESMF_regridding.ncl" + + + ; default values for file_in, dir_in, and file_out, if not specified + if (.not.isvar("file_in")) then + file_in = "../ARQI/2019062912_001" + end if + if (.not.isvar("file_out")) then + file_out = "../ARQI/2019062912_001_grid1.nc" + end if + + f=addfile(file_in, "r") + setfileoption("nc","Format","NetCDF4Classic") + setfileoption("nc","CompressionLevel",5) ; 0 ~ 9 + system("rm -f "+file_out) ;-- delete file + fo = addfile(file_out,"c") + + latlon_file="/gpfsm/dnb04/projects/p109/FIREX-AQ/sample_forecasts2/scripts/arqi.lat_lon_1d.nc" + f_ll=addfile(latlon_file, "r") + lat_1d = f_ll->lat + lon_1d = f_ll->lon + + ;------------------------------------------------------------------------ + ; global attributes + global_attnames = getvaratts(f) + att=True + do i=0,dimsizes(global_attnames)-1 + ; print(f@$global_attnames(i)$) + att@$global_attnames(i)$ = f@$global_attnames(i)$ + end do + fileattdef(fo, att) + filedimdef(fo,"time",-1,True) + + ;------------------------------------------------------------------------ + vars = getfilevarnames(f) + ; vars_skip = (/"lat_2", "lon_2", "rlat2", "rlon2"/) + vars_subset = (/"time", "pref", \ + "a_1","b_1","level1", \ + "a_2","b_2","level2", \ + "a_3","b_3","level3", \ + "AF","AC","CO","N2","NO","O3","S2","GZ", \ + "NH3","OH", "P0", "NI25","NIAC", "OC25", "OCAC", \ + "AM25","AMAC","CM25","CMAC","EC25","ECAC", "OPDA", "PC25", "PCAC", "SU25", "SUAC", \ + "H","HR","RHO","TT","UU","VV" /) + + lat_1 = f->lat_1 + lon_1 = f->lon_1 + lat_2 = f->lat_2 + lon_2 = f->lon_2 + rlat1 = f->rlat1 + rlon1 = f->rlon1 + + + do i=0, dimsizes(vars)-1 + + if (.not.ismissing(ind( vars_subset.eq. vars(i) ))) then + print("processing: "+ vars(i)) + v := f->$vars(i)$ + dims := getvardims(v) + diml := dimsizes(v) + + if ( (.not.ismissing(str_match(dims,"rlat1")) .and. .not.ismissing(str_match(dims,"rlon1"))) \ + .or. (.not.ismissing(str_match(dims,"rlat2")) .and. .not.ismissing(str_match(dims,"rlon2"))) ) then + ; re-grid to lat lon + + ;---Set up options for regridding + if (.not.ismissing(str_match(dims,"rlat1"))) then + wgt_file="/gpfsm/dnb04/projects/p109/FIREX-AQ/sample_forecasts2/scripts/arqi_regrid_wgt1.nc" + Opt = True + Opt@WgtFileName = wgt_file + Opt@SrcGridLat := lat_1 ; source grid + Opt@SrcGridLon := lon_1 + + else + wgt_file="/gpfsm/dnb04/projects/p109/FIREX-AQ/sample_forecasts2/scripts/arqi_regrid_wgt2.nc" + Opt = True + Opt@WgtFileName = wgt_file + Opt@SrcGridLat := lat_2 ; source grid + Opt@SrcGridLon := lon_2 + end if + + + Opt@DstGridLat = lat_1d ; destination grid + Opt@DstGridLon = lon_1d + + Opt@SrcRegional = True ; Necessary if grids + Opt@DstRegional = True ; are regional + + Opt@InterpMethod = "bilinear" ; "patch", "conserve" + Opt@ForceOverwrite = True ; Optional, but recommended. + Opt@PrintTimings = True ; Optional + Opt@Debug = False ; Optional + + ;---Do the regridding + if (.not.fileexists(wgt_file)) then + v_regrid := ESMF_regrid(v, Opt) + else + v_regrid := ESMF_regrid_with_weights(v, wgt_file, Opt) ; Do the regridding + end if + + ;delete(v_regrid@lat2d) + ;delete(v_regrid@lon2d) + nd = dimsizes(diml) + v_regrid!(nd-1)="lon" + v_regrid!(nd-2)="lat" + v_regrid&lat = lat_1d + v_regrid&lon = lon_1d + + ; printVarSummary(v) + ; printVarSummary(v_regrid) + + ; write output + fo->$vars(i)$ = v_regrid + + else + + fo->$vars(i)$ = v + + + end if + end if + end do + + + + + + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/arunwrfchem2llp.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/arunwrfchem2llp.py new file mode 100755 index 0000000..b2d4718 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/arunwrfchem2llp.py @@ -0,0 +1,216 @@ +#!/usr/bin/env python +# +# Convert WRFchem output to COARDS compliant file on a regular lat-lon-pressure grid. +# +# Arlindo da Silva, March 2019. + +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + press = ncin.variables['p'][n,:,:,:]/100.0 # hPa + return press[:,:,:] + +#--- +def getTyme(ncin): + t = ncin.variables['Times'] + + if len(t[:,0]) != 1: + raise ValueError, 'Fix me, I can only handle 1 step per file for now' + tstr=''.join(t[0,:]) + print(tstr[0:4]) # 2018-08-07_06:00:00 + tyme = datetime(int(tstr[0:4]), + int(tstr[5:7]), + int(tstr[8:10]), + int(tstr[11:13])) + return npy.array([tyme,]) + +#--- +def append_lml(nc, zlib=False): + """ + Append vars at lowest model level to the oroginal file. + """ + for v in ['o3', 'no2', 'no3', + 'so2', 'sulf', 'hcho', 'co', 'PM2_5_DRY', + 'BC1', 'BC2', 'OC1', 'OC2', 'rho']: + var = nc.variables[v] + this = nc.createVariable(v+'_lml','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = var.description+' at lowest model level' + this.missing_value = UNDEF # out of domain + this.units = var.units + this[0,:,:] = var[0,0,:,:] + + +#--- +def append_vars(nc, zlib=False): + """ + Append total column vars + """ + + co = nc.variables['co'][0,:,:,:] # ppmv + co = co/1e6*28.0/28.97 # kg kg-1 + nz, ny, nx = co.shape + oc = nc.variables['OC1'][0,:,:,:] + nc.variables['OC2'][0,:,:,:] # ug kg-1 +# bc = nc.varaibles['BC1'][0,:,:,:] + nc.varaibles['BC2'][0,:,:,:] + dz = nc.variables['dz'][0,:,:,:] # m + rho = nc.variables['rho'][0,:,:,:] # kg m-3 + no2 = nc.variables['no2'][0,:,:,:] + no2 = no2/1e6*46.0/28.97 + no2 = no2*6.022*10e23/460 + nz, ny, nx = no2.shape + pm25 = nc.variables['PM2_5_DRY'][0,:,:,:] # ug m-3 + ext = nc.variables['EXTCOF55'][0,:,:,:] + + #AOD + #--------------- + this = nc.createVariable('aod', 'f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'aod' + this.missing_value = UNDEF + this.units = '' + this[0,:,:] = npy.sum(ext*dz/1000, axis=0) + + # total cloumn OC + #---------------- + this = nc.createVariable('tcoc','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column OC' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(oc*rho*dz/1e9, axis=0) # kg m-2 + + # total cloumn NO2 + #---------------- + this = nc.createVariable('tcno2','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column NO2' + this.missing_value = UNDEF # out of domain + this.units = 'molecules cm-2' + this[0,:,:] = npy.sum(no2*rho*dz, axis=0) # molecules cm-2 + + # total cloumn CO + #---------------- + this = nc.createVariable('tcco','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column CO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(co*rho*dz, axis=0) # kg m-2 + + # total cloumn PM2.5 + #---------------- + this = nc.createVariable('tcpm25','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column PM2.5' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(pm25*dz/1e9, axis=0) # kg m-2 + + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + # rP = '925,850,700,600' + rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,450,400,350,300,250,200,150,100' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] wrf_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with wrfout replaced with wrfllp)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + wrf_File = args[0] + else: + parser.error("must have 1 argument: wrf_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + options.outFile = wrf_File.replace('wrfout_','wrfllp_') + if options.outFile == wrf_File: + options.outFile = 'wrfllp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['XLONG', 'XLAT', 'p', 'time','lon','lat'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # copy original file + # ------------------ + os.system("cp "+wrf_File+" "+wrf_File+".interm.nc") + # Open the input file + # ------------------- + nc = Dataset( wrf_File+".interm.nc", 'a', format=options.format) + # Append vars + # ----------- + append_lml(nc,zlib=False) + append_vars(nc,zlib=False) + + # Time range + # ---------- + tyme = getTyme(nc) + + + # Instantiate regridding class + # ---------------------------- + cLon = npy.squeeze(nc.variables['XLONG'][:,:,:]) + cLat = npy.squeeze(nc.variables['XLAT'][:,:,:]) + r = myCurv2LLP(cLon,cLat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + + os.system("rm "+wrf_File+".interm.nc") diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/cam2p.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/cam2p.py new file mode 100755 index 0000000..896a47e --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/cam2p.py @@ -0,0 +1,281 @@ +#!/usr/bin/env python +# +# Convert CAM output to COARDS compliant file on pressure coordinates. +# The input grid is already regular lat/lon. +# +# Arlindo da Silva, March 2019. + +from dateutil.parser import parse as isoparser +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset, num2date +import numpy as npy +import os + +from curv2llp import * + +def get_cP(n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + lon = nc.variables['lon'] + lat = nc.variables['lat'] + a = ncin.variables['hyam'][:] + b = ncin.variables['hybm'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = nc.variables['PS'][n,:,:] + cP = npy.zeros((nz,ny,nx)) + for k in range(nz): + cP[k,:,:] = (a[k] + b[k]*ps[:,:])/100.0 # hPa + return cP + +#--- +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + lon = nc.variables['lon'] + lat = nc.variables['lat'] + a = ncin.variables['hyam'][:] + b = ncin.variables['hybm'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = nc.variables['PS'][n,:,:] + cP = npy.zeros((nz,ny,nx)) + for k in range(nz): + cP[k,:,:] = ( a[k] + b[k]*ps[:,:] )/100.0 # hPa + return cP + +def get_cPi(n,ncin): + """ + Given time level "n", return 3D pressure (at model interfaces) for this time. + """ + lon = nc.variables['lon'] + lat = nc.variables['lat'] + a = ncin.variables['hyai'][:] + b = ncin.variables['hybi'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = nc.variables['PS'][n,:,:] + cPi = npy.zeros((nz,ny,nx)) + for k in range(nz): + cPi[k,:,:] = (a[k] + b[k]*ps[:,:])/100.0 # hPa + return cPi + +#--- +def getTyme(ncin): + T = ncin.variables['time'] + # days since 2018-08-07 00:00:00 + # datetime = num2date(T[:],units=T.units, calendar=T.calendar) + # print(datetime) + units = T.units + isoT0 = units.split(' since ')[1].replace(' ','T') + cDT = units.split(' ')[0] + sec = timedelta(seconds=1) + if cDT == "days": + DT = 24*60*60 + else: + raise ValueError, "fix me, can only handle days as unit of time" + t0 = isoparser(isoT0) + tyme = npy.array([t0 + int(t * DT)*sec for t in T ]) + return tyme + + +#--- +def append_density( ncin, zlib=False): + this = ncin.createVariable('rho','f4',('time', 'lev', 'lat', 'lon'),zlib=zlib) + this.long_name = 'air density' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-3' + tk = ncin.variables['T'][:,:,:,:] + nt, nz, ny, nx = tk.shape + + for n in range(nt): + cP = get_cP(n,ncin) + rho = cP # to conserve memory + Rd = 287.05 + for k in range(nz): + rho[k,:,:] = cP[k,:,:]*100.0/Rd/tk[n,k,:,:] + this[n,:,:,:] = rho[:,:,:] + + +#--- +def append_lml(ncin, options, zlib=False): + """ + Append vars at lowest model level to netcdf file. + """ + + # Open output NC file + # ------------------- + nc = Dataset(options.outFile,'a',format=options.format) + + for v in ['NH4','so4_a1','so4_a2','so4_a3','pom_a4','soa1_a1','soa1_a2','soa2_a1','soa2_a2', + 'soa3_a1','soa3_a2','soa4_a1','soa4_a2','soa5_a1','soa5_a2','bc_a1','bc_a4','dst_a1', + 'dst_a2','dst_a3','ncl_a1','ncl_a2','ncl_a3','CO','NO2','NO','O3','CO01','SO2','rho']: + this = nc.createVariable(v+'_lml','f4',('time','lat','lon'),zlib=zlib) + var = ncin.variables[v][:,:,:,:] + this.long_name = '' + this.missing_value = UNDEF # out of domain + this.units = '' + nt, nz, ny, nx = var.shapee + for n in range(nt) + this[n,:,:] = var[n,87,:,:] + + nc.close() + +#--- +def append_vars(ncin, options, zlib=False): + """ + Append total column OC, CO to output file. + """ + # Open output NC file + # ------------------- + nc = Dataset(options.outFile,'a',format=options.format) + + g = 9.80665 + co = ncin.variables['CO'][:,:,:,:]*28.0/28.97 # kg kg-1 + nt, nz, ny, nx = co.shape + oc = npy.zeros((nt,nz,ny,nx)) + + for v in ['pom_a4','soa1_a1','soa1_a2','soa2_a1','soa2_a2', + 'soa3_a1','soa3_a2','soa4_a1','soa4_a2','soa5_a1','soa5_a2']: + oc = oc + ncin.variables[v][:,:,:,:] + + delp = npy.zeros((nt,nz,ny,nx)) + for n in range(nt): + cPi = get_cPi(n,ncin) + for k in range(nz): + delp[n,k,:,:]= cPi[k+1,:,:]-cPi[k,:,:] # hPa + + + # total column CO + # --------------- + this = nc.createVariable('tcco','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name = 'total column CO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + for n in range(nt): + tcco = npy.sum(co[n,:,:,:]*delp[n,:,:,:]*100.0/g, axis=0) + this[n,:,:] = tcco[:,:] + + # total column OC + # --------------- + this = nc.createVariable('tcoc','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name = 'total column OC' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + for n in range(nt): + tcoc = npy.sum(oc[n,:,:,:]*delp[n,:,:,:]*100.0/g, axis=0) + this[n,:,:] = tcoc[:,:] + + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + rP = '925,850,700,600' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] cam_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with .cam. replaced with .camp.)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + cam_File = args[0] + else: + parser.error("must have 1 argument: cam_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + options.outFile = cam_File.replace('.cam.','.camp.') + if options.outFile == cam_File: + options.outFile = 'camp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['lon', 'lat', 'p', 'time'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # copy original file + # ------------------ + os.system("cp "+cam_File+" interm.nc") + + # Open the input file + # ------------------- + nc0 = Dataset(cam_File, "r", format=options.format) + nc = Dataset("interm.nc", 'a', format=options.format) + # Air density + # ----------- + append_density(nc, zlib=False) + + # Time range + # ---------- + tyme = getTyme(nc0) + print(tyme) + + + # Coordinates + # ----------- + lon = nc.variables['lon'][:] + lat = nc.variables['lat'][:] + + # Instantiate regridding class + # ---------------------------- + r = myCurv2LLP(lon,lat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + + # append variables at the lowest model level + append_lml(nc, options, zlib=False) + + # append other vars + append_vars(nc, options, zlib=False) diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/cam_waccm2p.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/cam_waccm2p.py new file mode 100755 index 0000000..bfc844c --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/cam_waccm2p.py @@ -0,0 +1,314 @@ +#!/usr/bin/env python +# +# Convert CAM output to COARDS compliant file on pressure coordinates. +# The input grid is already regular lat/lon. +# +# Arlindo da Silva, March 2019. + +from dateutil.parser import parse as isoparser +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset, num2date +import numpy as npy +import os + +from curv2llp import * + +def get_cP(n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + lon = nc.variables['lon'] + lat = nc.variables['lat'] + a = ncin.variables['hyam'][:] + b = ncin.variables['hybm'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = nc.variables['PS'][n,:,:] + cP = npy.zeros((nz,ny,nx)) + for k in range(nz): + cP[k,:,:] = (a[k] + b[k]*ps[:,:])/100.0 # hPa + return cP + +#--- +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + lon = nc.variables['lon'] + lat = nc.variables['lat'] + a = ncin.variables['hyam'][:] + b = ncin.variables['hybm'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = nc.variables['PS'][n,:,:] + cP = npy.zeros((nz,ny,nx)) + for k in range(nz): + cP[k,:,:] = ( a[k] + b[k]*ps[:,:] )/100.0 # hPa + return cP + +def get_cPi(n,ncin): + """ + Given time level "n", return 3D pressure (at model interfaces) for this time. + """ + lon = nc.variables['lon'] + lat = nc.variables['lat'] + a = ncin.variables['hyai'][:] + b = ncin.variables['hybi'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = nc.variables['PS'][n,:,:] + cPi = npy.zeros((nz,ny,nx)) + for k in range(nz): + cPi[k,:,:] = (a[k] + b[k]*ps[:,:])/100.0 # hPa + return cPi + +#--- +def getTyme(ncin): + T = ncin.variables['time'] + # days since 2018-08-07 00:00:00 + # datetime = num2date(T[:],units=T.units, calendar=T.calendar) + # print(datetime) + units = T.units + isoT0 = units.split(' since ')[1].replace(' ','T') + cDT = units.split(' ')[0] + sec = timedelta(seconds=1) + if cDT == "days": + DT = 24*60*60 + else: + raise ValueError, "fix me, can only handle days as unit of time" + t0 = isoparser(isoT0) + tyme = npy.array([t0 + int(t * DT)*sec for t in T ]) + return tyme + + +#--- +def append_density( ncin, zlib=False): + this = ncin.createVariable('rho','f4',('time', 'lev', 'lat', 'lon'),zlib=zlib) + this.long_name = 'air density' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-3' + print "added" + + tk = ncin.variables['T'][:,:,:,:] + nt, nz, ny, nx = tk.shape + + for n in range(nt): + cP = get_cP(n,ncin) + rho = cP # to conserve memory + Rd = 287.05 + for k in range(nz): + rho[k,:,:] = cP[k,:,:]*100.0/Rd/tk[n,k,:,:] + this[n,:,:,:] = rho[:,:,:] + + +#--- +def append_lml(ncin, options, zlib=False): + """ + Append vars at lowest model level to netcdf file. + """ + + # Open output NC file + # ------------------- + nc = Dataset(options.outFile,'a',format=options.format) + + #for v in ['NH4','so4_a1','so4_a2','so4_a3','pom_a4','soa1_a1','soa1_a2','soa2_a1','soa2_a2', + # 'soa3_a1','soa3_a2','soa4_a1','soa4_a2','soa5_a1','soa5_a2','bc_a1','bc_a4','dst_a1', + # 'dst_a2','dst_a3','ncl_a1','ncl_a2','ncl_a3','CO','NO2','NO','O3','CO01','SO2','rho']: + for v in ['NH4','so4_a1','so4_a2','so4_a3','pom_a4', + 'soa_a1','soa_a2','bc_a1','bc_a4','dst_a1', + 'dst_a2','dst_a3','ncl_a1','ncl_a2','ncl_a3','CO','NO2','NO','O3','SO2','rho']: + #'dst_a2','dst_a3','ncl_a1','ncl_a2','ncl_a3','CO','CO01','NO2','NO','O3','SO2','rho']: + this = nc.createVariable(v+'_lml','f4',('time','lat','lon'),zlib=zlib) + var = ncin.variables[v][:,:,:,:] + this.long_name = '' + this.missing_value = UNDEF # out of domain + this.units = '' + nt, nz, ny, nx = var.shape + for n in range(nt): + this[n,:,:] = var[n,87,:,:] + + nc.close() + +#--- +def append_vars(ncin, options, zlib=False): + """ + Append total column OC, CO to output file. + """ + # Open output NC file + # ------------------- + nc = Dataset(options.outFile,'a',format=options.format) + + g = 9.80665 + co = ncin.variables['CO'][:,:,:,:]*28.0/28.97 # kg kg-1 + no2 = ncin.variables['NO2'][:,:,:,:]*46.0/28.97 + rho = ncin.variables['rho'][:,:,:,:] # kg m-3 + nt, nz, ny, nx = co.shape + nt, nz, ny, nx = no2.shape + oc = npy.zeros((nt,nz,ny,nx)) + for v in ['pom_a1','pom_a4','soa_a1','soa_a2']: + oc = oc + ncin.variables[v][:,:,:,:]/1.4 # 1.4 is the ratio of pom emissions vs co emissions + + delp = npy.zeros((nt,nz,ny,nx)) + for n in range(nt): + cPi = get_cPi(n,ncin) + for k in range(nz): + delp[n,k,:,:]= cPi[k+1,:,:]-cPi[k,:,:] # hPa + + + # total column CO + # --------------- + this = nc.createVariable('tcco','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name = 'total column CO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + for n in range(nt): + tcco = npy.sum(co[n,:,:,:]*delp[n,:,:,:]*100.0/g, axis=0) + this[n,:,:] = tcco[:,:] + + # total column NO2 + # --------------- + this = nc.createVariable('tcno2','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name = 'total column NO2' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + for n in range(nt): + tcno2 = npy.sum(no2[n,:,:,:]*delp[n,:,:,:]*100.0/g, axis=0) + this[n,:,:] = tcno2[:,:] + + + # total column pm2.5 + # --------------- + pm25 = ncin.variables['PM25'][:,:,:,:] # kg m-3 + this = nc.createVariable('tcpm25','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name = 'total column PM2.5' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + for n in range(nt): + tc = npy.sum(pm25[n,:,:,:]*delp[n,:,:,:]*100.0/rho[n,:,:,:]/g, axis=0) + this[n,:,:] = tc[:,:] + + # total column OC + # --------------- + oc = ncin.variables['oc'][:,:,:,:] + this = nc.createVariable('tcoc','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name = 'total column OC' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + for n in range(nt): + tcoc = npy.sum(oc[n,:,:,:]*delp[n,:,:,:]*100.0/g, axis=0) + this[n,:,:] = tcoc[:,:] + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + #rP = '925,850,700,600' + rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,450,400,350,300,250,200,150,100' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] cam_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with .cam. replaced with .camp.)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + cam_File = args[0] + else: + parser.error("must have 1 argument: cam_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + options.outFile = cam_File.replace('.cam.','.camp.') + if options.outFile == cam_File: + options.outFile = 'camp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['lon', 'lat', 'p', 'time'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # copy original file + # ------------------ + os.system("cp "+cam_File+" "+cam_File+".interm.nc") + + # Open the input file + # ------------------- + nc0 = Dataset(cam_File, "r", format=options.format) + nc = Dataset( cam_File+".interm.nc", 'a', format=options.format) + + # Time range + # ---------- + tyme = getTyme(nc0) + print(tyme) + + # Air density + # ----------- + append_density(nc, zlib=False) + + # Coordinates + # ----------- + lon = nc.variables['lon'][:] + lat = nc.variables['lat'][:] + + # Instantiate regridding class + # ---------------------------- + r = myCurv2LLP(lon,lat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + + # append variables at the lowest model level + append_lml(nc, options, zlib=False) + + # append other vars + append_vars(nc, options, zlib=False) + + os.system("rm "+cam_File+".interm.nc") + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/cam_waccm2p.py.last b/projects/MissionSupport/applications/WxModel/asia-aq/bin/cam_waccm2p.py.last new file mode 100755 index 0000000..9dfe4d1 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/cam_waccm2p.py.last @@ -0,0 +1,298 @@ +#!/usr/bin/env python +# +# Convert CAM output to COARDS compliant file on pressure coordinates. +# The input grid is already regular lat/lon. +# +# Arlindo da Silva, March 2019. + +from dateutil.parser import parse as isoparser +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset, num2date +import numpy as npy +import os + +from curv2llp import * + +def get_cP(n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + lon = nc.variables['lon'] + lat = nc.variables['lat'] + a = ncin.variables['hyam'][:] + b = ncin.variables['hybm'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = nc.variables['PS'][n,:,:] + cP = npy.zeros((nz,ny,nx)) + for k in range(nz): + cP[k,:,:] = (a[k] + b[k]*ps[:,:])/100.0 # hPa + return cP + +#--- +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + lon = nc.variables['lon'] + lat = nc.variables['lat'] + a = ncin.variables['hyam'][:] + b = ncin.variables['hybm'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = nc.variables['PS'][n,:,:] + cP = npy.zeros((nz,ny,nx)) + for k in range(nz): + cP[k,:,:] = ( a[k] + b[k]*ps[:,:] )/100.0 # hPa + return cP + +def get_cPi(n,ncin): + """ + Given time level "n", return 3D pressure (at model interfaces) for this time. + """ + lon = nc.variables['lon'] + lat = nc.variables['lat'] + a = ncin.variables['hyai'][:] + b = ncin.variables['hybi'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = nc.variables['PS'][n,:,:] + cPi = npy.zeros((nz,ny,nx)) + for k in range(nz): + cPi[k,:,:] = (a[k] + b[k]*ps[:,:])/100.0 # hPa + return cPi + +#--- +def getTyme(ncin): + T = ncin.variables['time'] + # days since 2018-08-07 00:00:00 + # datetime = num2date(T[:],units=T.units, calendar=T.calendar) + # print(datetime) + units = T.units + isoT0 = units.split(' since ')[1].replace(' ','T') + cDT = units.split(' ')[0] + sec = timedelta(seconds=1) + if cDT == "days": + DT = 24*60*60 + else: + raise ValueError, "fix me, can only handle days as unit of time" + t0 = isoparser(isoT0) + tyme = npy.array([t0 + int(t * DT)*sec for t in T ]) + return tyme + + +#--- +def append_density( ncin, zlib=False): + this = ncin.createVariable('rho','f4',('time', 'lev', 'lat', 'lon'),zlib=zlib) + this.long_name = 'air density' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-3' + tk = ncin.variables['T'][:,:,:,:] + nt, nz, ny, nx = tk.shape + + for n in range(nt): + cP = get_cP(n,ncin) + rho = cP # to conserve memory + Rd = 287.05 + for k in range(nz): + rho[k,:,:] = cP[k,:,:]*100.0/Rd/tk[n,k,:,:] + this[n,:,:,:] = rho[:,:,:] + + +#--- +def append_lml(ncin, options, zlib=False): + """ + Append vars at lowest model level to netcdf file. + """ + + # Open output NC file + # ------------------- + nc = Dataset(options.outFile,'a',format=options.format) + + #for v in ['NH4','so4_a1','so4_a2','so4_a3','pom_a4','soa1_a1','soa1_a2','soa2_a1','soa2_a2', + # 'soa3_a1','soa3_a2','soa4_a1','soa4_a2','soa5_a1','soa5_a2','bc_a1','bc_a4','dst_a1', + # 'dst_a2','dst_a3','ncl_a1','ncl_a2','ncl_a3','CO','NO2','NO','O3','CO01','SO2','rho']: + for v in ['NH4','so4_a1','so4_a2','so4_a3','pom_a4', + 'soa_a1','soa_a2','bc_a1','bc_a4','dst_a1', + 'dst_a2','dst_a3','ncl_a1','ncl_a2','ncl_a3','CO','C001','NO2','NO','O3','SO2','rho']: + this = nc.createVariable(v+'_lml','f4',('time','lat','lon'),zlib=zlib) + var = ncin.variables[v][:,:,:,:] + this.long_name = '' + this.missing_value = UNDEF # out of domain + this.units = '' + nt, nz, ny, nx = var.shape + for n in range(nt): + this[n,:,:] = var[n,87,:,:] + + nc.close() + +#--- +def append_vars(ncin, options, zlib=False): + """ + Append total column OC, CO to output file. + """ + # Open output NC file + # ------------------- + nc = Dataset(options.outFile,'a',format=options.format) + + g = 9.80665 + co = ncin.variables['CO'][:,:,:,:]*28.0/28.97 # kg kg-1 + rho = ncin.variables['rho'][:,:,:,:] # kg m-3 + nt, nz, ny, nx = co.shape + oc = npy.zeros((nt,nz,ny,nx)) + + for v in ['pom_a4','soa_a1','soa_a2']: + oc = oc + ncin.variables[v][:,:,:,:]/1.4 # 1.4 is the ratio of pom emissions vs co emissions + + delp = npy.zeros((nt,nz,ny,nx)) + for n in range(nt): + cPi = get_cPi(n,ncin) + for k in range(nz): + delp[n,k,:,:]= cPi[k+1,:,:]-cPi[k,:,:] # hPa + + + # total column CO + # --------------- + this = nc.createVariable('tcco','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name = 'total column CO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + for n in range(nt): + tcco = npy.sum(co[n,:,:,:]*delp[n,:,:,:]*100.0/g, axis=0) + this[n,:,:] = tcco[:,:] + + # total column pm2.5 + # --------------- + pm25 = ncin.variables['PM25'][:,:,:,:] # kg m-3 + this = nc.createVariable('tcpm25','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name = 'total column PM2.5' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + for n in range(nt): + tc = npy.sum(pm25[n,:,:,:]*delp[n,:,:,:]*100.0/rho[n,:,:,:]/g, axis=0) + this[n,:,:] = tc[:,:] + + # total column OC + # --------------- + this = nc.createVariable('tcoc','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name = 'total column OC' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + for n in range(nt): + tcoc = npy.sum(oc[n,:,:,:]*delp[n,:,:,:]*100.0/g, axis=0) + this[n,:,:] = tcoc[:,:] + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + #rP = '925,850,700,600' + rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,450,400,350,300,250,200,150,100' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] cam_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with .cam. replaced with .camp.)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + cam_File = args[0] + else: + parser.error("must have 1 argument: cam_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + options.outFile = cam_File.replace('.cam.','.camp.') + if options.outFile == cam_File: + options.outFile = 'camp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['lon', 'lat', 'p', 'time'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # copy original file + # ------------------ + interm = name + '.tmp.nc' + os.system("cp "+cam_File+" " + interm) + + # Open the input file + # ------------------- + nc0 = Dataset(cam_File, "r", format=options.format) + nc = Dataset(interm, 'a', format=options.format) + # Air density + # ----------- + append_density(nc, zlib=False) + + # Time range + # ---------- + tyme = getTyme(nc0) + print(tyme) + + + # Coordinates + # ----------- + lon = nc.variables['lon'][:] + lat = nc.variables['lat'][:] + + # Instantiate regridding class + # ---------------------------- + r = myCurv2LLP(lon,lat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + + # append variables at the lowest model level + append_lml(nc, options, zlib=False) + + # append other vars + append_vars(nc, options, zlib=False) + + os.remove(interm) diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/cam_waccm2p_beta.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/cam_waccm2p_beta.py new file mode 100755 index 0000000..4208978 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/cam_waccm2p_beta.py @@ -0,0 +1,307 @@ +#!/usr/bin/env python +# +# Convert CAM output to COARDS compliant file on pressure coordinates. +# The input grid is already regular lat/lon. +# +# Arlindo da Silva, March 2019. + +from dateutil.parser import parse as isoparser +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset, num2date +import numpy as npy +import os +import collections + +from curv2llp import * + +def get_cP(n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + lon = ncin.variables['lon'] + lat = ncin.variables['lat'] + a = ncin.variables['hyam'][:] + b = ncin.variables['hybm'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = ncin.variables['PS'][n,:,:] + cP = npy.zeros((nz,ny,nx)) + for k in range(nz): + cP[k,:,:] = (a[k] + b[k]*ps[:,:])/100.0 # hPa + return cP + +#--- +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + lon = ncin.variables['lon'] + lat = ncin.variables['lat'] + a = ncin.variables['hyam'][:] + b = ncin.variables['hybm'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = ncin.variables['PS'][n,:,:] + cP = npy.zeros((nz,ny,nx)) + for k in range(nz): + cP[k,:,:] = ( a[k] + b[k]*ps[:,:] )/100.0 # hPa + return cP + +def get_cPi(n,ncin): + """ + Given time level "n", return 3D pressure (at model interfaces) for this time. + """ + lon = ncin.variables['lon'] + lat = ncin.variables['lat'] + a = ncin.variables['hyai'][:] + b = ncin.variables['hybi'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = ncin.variables['PS'][n,:,:] + cPi = npy.zeros((nz,ny,nx)) + for k in range(nz): + cPi[k,:,:] = (a[k] + b[k]*ps[:,:])/100.0 # hPa + return cPi + +#--- +def getTyme(ncin): + T = ncin.variables['time'] + # days since 2018-08-07 00:00:00 + # datetime = num2date(T[:],units=T.units, calendar=T.calendar) + # print(datetime) + units = T.units + isoT0 = units.split(' since ')[1].replace(' ','T') + cDT = units.split(' ')[0] + sec = timedelta(seconds=1) + if cDT == "days": + DT = 24*60*60 + else: + raise ValueError, "fix me, can only handle days as unit of time" + t0 = isoparser(isoT0) + tyme = npy.array([t0 + int(t * DT)*sec for t in T ]) + return tyme + + +#--- +def append_density( ncin, zlib=False): + + tk = ncin.variables['T'][:,:,:,:] + rho = tk + nt, nz, ny, nx = tk.shape + + for n in range(nt): + print n + cP = get_cP(n,ncin) + Rd = 287.05 + for k in range(nz): + rho[n,k,:,:] = cP[k,:,:]*100.0/Rd/tk[n,k,:,:] + + return rho +#--- +def append_lml(ncin, options, rho, zlib=False): + """ + Append vars at lowest model level to netcdf file. + """ + + # Open output NC file + # ------------------- + nc = Dataset(options.outFile,'a',format=options.format) + + for v in ['NH4','so4_a1','so4_a2','so4_a3','pom_a4', + 'soa_a1','soa_a2','bc_a1','bc_a4','dst_a1', + 'dst_a2','dst_a3','ncl_a1','ncl_a2','ncl_a3','CO','NO2','NO','O3','SO2']: + this = nc.createVariable(v+'_lml','f4',('time','lat','lon'),zlib=zlib) + var = ncin.variables[v][:,:,:,:] + this.long_name = '' + this.missing_value = UNDEF # out of domain + this.units = '' + nt, nz, ny, nx = var.shape + for n in range(nt): + this[n,:,:] = var[n,87,:,:] + + v = 'rho' + this = nc.createVariable(v+'_lml','f4',('time','lat','lon'),zlib=zlib) + this.long_name = '' + this.missing_value = UNDEF # out of domain + this.units = '' + nt, nz, ny, nx = rho.shape + for n in range(nt): + this[n,:,:] = rho[n,87,:,:] + +# v = 'rho' +# this = nc.createVariable(v,'f4',('time','lev','lat','lon'),zlib=zlib) +# this.long_name = '' +# this.missing_value = UNDEF # out of domain +# this.units = '' +# nt, nz, ny, nx = rho.shape +# print this.shape, rho.shape +# for n in range(nt): +# this[n,:,:,:] = rho[n,:,:,:] + + + nc.close() + +#--- +def append_vars(ncin, options, rho, zlib=False): + """ + Append total column OC, CO to output file. + """ + # Open output NC file + # ------------------- + nc = Dataset(options.outFile,'a',format=options.format) + + g = 9.80665 + co = ncin.variables['CO'][:,:,:,:]*28.0/28.97 # kg kg-1 + nt, nz, ny, nx = co.shape + oc = npy.zeros((nt,nz,ny,nx)) + + for v in ['pom_a4','soa_a1','soa_a2']: + oc = oc + ncin.variables[v][:,:,:,:]/1.4 # 1.4 is the ratio of pom emissions vs oc emissions + + delp = npy.zeros((nt,nz,ny,nx)) + for n in range(nt): + cPi = get_cPi(n,ncin) + for k in range(nz): + delp[n,k,:,:]= cPi[k+1,:,:]-cPi[k,:,:] # hPa + + + # total column CO + # --------------- + this = nc.createVariable('tcco','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name = 'total column CO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + for n in range(nt): + tcco = npy.sum(co[n,:,:,:]*delp[n,:,:,:]*100.0/g, axis=0) + this[n,:,:] = tcco[:,:] + + # total column pm2.5 + # --------------- + pm25 = ncin.variables['PM25'][:,:,:,:] # kg m-3 + this = nc.createVariable('tcpm25','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name = 'total column PM2.5' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + for n in range(nt): + tc = npy.sum(pm25[n,:,:,:]*delp[n,:,:,:]*100.0/rho[n,:,:,:]/g, axis=0) + this[n,:,:] = tc[:,:] + + # total column OC + # --------------- + this = nc.createVariable('tcoc','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name = 'total column OC' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + for n in range(nt): + tcoc = npy.sum(oc[n,:,:,:]*delp[n,:,:,:]*100.0/g, axis=0) + this[n,:,:] = tcoc[:,:] + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,450,400,350,300,250,200,150,100' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] cam_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with .cam. replaced with .camp.)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + cam_File = args[0] + else: + parser.error("must have 1 argument: cam_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + options.outFile = cam_File.replace('.cam.','.camp.') + if options.outFile == cam_File: + options.outFile = 'camp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['lon', 'lat', 'p', 'time'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + + # Open the input file + # ------------------- + nc0 = Dataset(cam_File, "r", format=options.format) + + # Air density + # ----------- + rho = append_density(nc0, zlib=False) + + # Time range + # ---------- + tyme = getTyme(nc0) + print(tyme) + + + # Coordinates + # ----------- + lon = nc0.variables['lon'][:] + lat = nc0.variables['lat'][:] + + # Instantiate regridding class + # ---------------------------- + print 'Start regridding' + r = myCurv2LLP(lon,lat,options.rP) + print 'FInished regridding' + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc0, zlib=False ) + + # append variables at the lowest model level + append_lml(nc0, options, rho, zlib=False) + + # append other vars + append_vars(nc0, options, rho, zlib=False) diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/cam_waccm2p_h3.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/cam_waccm2p_h3.py new file mode 100755 index 0000000..3386ec9 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/cam_waccm2p_h3.py @@ -0,0 +1,297 @@ +#!/usr/bin/env python +# +# Convert CAM output to COARDS compliant file on pressure coordinates. +# The input grid is already regular lat/lon. +# +# Arlindo da Silva, March 2019. + +from dateutil.parser import parse as isoparser +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset, num2date +import numpy as npy +import os +import collections + +from curv2llp import * + +def get_cP(n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + lon = ncin.variables['lon'] + lat = ncin.variables['lat'] + a = ncin.variables['hyam'][:] + b = ncin.variables['hybm'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = ncin.variables['PS'][n,:,:] + cP = npy.zeros((nz,ny,nx)) + for k in range(nz): + cP[k,:,:] = (a[k] + b[k]*ps[:,:])/100.0 # hPa + return cP + +#--- +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + lon = ncin.variables['lon'] + lat = ncin.variables['lat'] + a = ncin.variables['hyam'][:] + b = ncin.variables['hybm'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = ncin.variables['PS'][n,:,:] + cP = npy.zeros((nz,ny,nx)) + for k in range(nz): + cP[k,:,:] = ( a[k] + b[k]*ps[:,:] )/100.0 # hPa + return cP + +def get_cPi(n,ncin): + """ + Given time level "n", return 3D pressure (at model interfaces) for this time. + """ + lon = ncin.variables['lon'] + lat = ncin.variables['lat'] + a = ncin.variables['hyai'][:] + b = ncin.variables['hybi'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = ncin.variables['PS'][n,:,:] + cPi = npy.zeros((nz,ny,nx)) + for k in range(nz): + cPi[k,:,:] = (a[k] + b[k]*ps[:,:])/100.0 # hPa + return cPi + +#--- +def getTyme(ncin): + T = ncin.variables['time'] + # days since 2018-08-07 00:00:00 + # datetime = num2date(T[:],units=T.units, calendar=T.calendar) + # print(datetime) + units = T.units + isoT0 = units.split(' since ')[1].replace(' ','T') + cDT = units.split(' ')[0] + sec = timedelta(seconds=1) + if cDT == "days": + DT = 24*60*60 + else: + raise ValueError, "fix me, can only handle days as unit of time" + t0 = isoparser(isoT0) + tyme = npy.array([t0 + int(t * DT)*sec for t in T ]) + return tyme + + +#--- +def append_density( ncin, zlib=False): + + tk = ncin.variables['T'][:,:,:,:] + rho = tk + nt, nz, ny, nx = tk.shape + + for n in range(nt): + print n + cP = get_cP(n,ncin) + Rd = 287.05 + for k in range(nz): + rho[n,k,:,:] = cP[k,:,:]*100.0/Rd/tk[n,k,:,:] + + return rho +#--- +def append_lml(ncin, options, rho, zlib=False): + """ + Append vars at lowest model level to netcdf file. + """ + + # Open output NC file + # ------------------- + nc = Dataset(options.outFile,'a',format=options.format) + + for v in ['NH4','so4_a1','so4_a2','so4_a3','pom_a4','soa1_a1','soa1_a2','soa2_a1','soa2_a2', + 'soa3_a1','soa3_a2','soa4_a1','soa4_a2','soa5_a1','soa5_a2','bc_a1','bc_a4','dst_a1', + 'dst_a2','dst_a3','ncl_a1','ncl_a2','ncl_a3','CO','NO2','NO','O3','CO01','SO2']: + this = nc.createVariable(v+'_lml','f4',('time','lat','lon'),zlib=zlib) + var = ncin.variables[v][:,:,:,:] + this.long_name = '' + this.missing_value = UNDEF # out of domain + this.units = '' + nt, nz, ny, nx = var.shape + for n in range(nt): + this[n,:,:] = var[n,87,:,:] + + v = 'rho' + this = nc.createVariable(v+'_lml','f4',('time','lat','lon'),zlib=zlib) + this.long_name = '' + this.missing_value = UNDEF # out of domain + this.units = '' + nt, nz, ny, nx = rho.shape + for n in range(nt): + this[n,:,:] = rho[n,87,:,:] + + nc.close() + +#--- +def append_vars(ncin, options, rho, zlib=False): + """ + Append total column OC, CO to output file. + """ + # Open output NC file + # ------------------- + nc = Dataset(options.outFile,'a',format=options.format) + + g = 9.80665 + co = ncin.variables['CO'][:,:,:,:]*28.0/28.97 # kg kg-1 + nt, nz, ny, nx = co.shape + oc = npy.zeros((nt,nz,ny,nx)) + + for v in ['pom_a4','soa1_a1','soa1_a2','soa2_a1','soa2_a2', + 'soa3_a1','soa3_a2','soa4_a1','soa4_a2','soa5_a1','soa5_a2']: + oc = oc + ncin.variables[v][:,:,:,:] + + delp = npy.zeros((nt,nz,ny,nx)) + for n in range(nt): + cPi = get_cPi(n,ncin) + for k in range(nz): + delp[n,k,:,:]= cPi[k+1,:,:]-cPi[k,:,:] # hPa + + + # total column CO + # --------------- + this = nc.createVariable('tcco','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name = 'total column CO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + for n in range(nt): + tcco = npy.sum(co[n,:,:,:]*delp[n,:,:,:]*100.0/g, axis=0) + this[n,:,:] = tcco[:,:] + + # total column pm2.5 + # --------------- + pm25 = ncin.variables['PM25'][:,:,:,:] # kg m-3 + this = nc.createVariable('tcpm25','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name = 'total column PM2.5' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + for n in range(nt): + tc = npy.sum(pm25[n,:,:,:]*delp[n,:,:,:]*100.0/rho[n,:,:,:]/g, axis=0) + this[n,:,:] = tc[:,:] + + # total column OC + # --------------- + this = nc.createVariable('tcoc','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name = 'total column OC' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + for n in range(nt): + tcoc = npy.sum(oc[n,:,:,:]*delp[n,:,:,:]*100.0/g, axis=0) + this[n,:,:] = tcoc[:,:] + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + rP = '925,850,700,600' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] cam_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with .cam. replaced with .camp.)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + cam_File = args[0] + else: + parser.error("must have 1 argument: cam_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + options.outFile = cam_File.replace('.cam.','.camp.') + if options.outFile == cam_File: + options.outFile = 'camp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['lon', 'lat', 'p', 'time'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + + # Open the input file + # ------------------- + nc0 = Dataset(cam_File, "r", format=options.format) + + # Air density + # ----------- + rho = append_density(nc0, zlib=False) + + # Time range + # ---------- + tyme = getTyme(nc0) + print(tyme) + + + # Coordinates + # ----------- + lon = nc0.variables['lon'][:] + lat = nc0.variables['lat'][:] + + # Instantiate regridding class + # ---------------------------- + print 'Start regridding' + r = myCurv2LLP(lon,lat,options.rP) + print 'FInished regridding' + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc0, zlib=False ) + + # append variables at the lowest model level + append_lml(nc0, options, rho, zlib=False) + + # append other vars + append_vars(nc0, options, rho, zlib=False) diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/cam_waccm2p_h4.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/cam_waccm2p_h4.py new file mode 100755 index 0000000..e39de1b --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/cam_waccm2p_h4.py @@ -0,0 +1,292 @@ +#!/usr/bin/env python +# +# Convert CAM output to COARDS compliant file on pressure coordinates. +# The input grid is already regular lat/lon. +# +# Arlindo da Silva, March 2019. + +from dateutil.parser import parse as isoparser +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset, num2date +import numpy as npy +import os +import collections + +from curv2llp import * + +def get_cP(n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + lon = ncin.variables['lon'] + lat = ncin.variables['lat'] + a = ncin.variables['hyam'][:] + b = ncin.variables['hybm'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = ncin.variables['PS'][n,:,:] + cP = npy.zeros((nz,ny,nx)) + for k in range(nz): + cP[k,:,:] = (a[k] + b[k]*ps[:,:])/100.0 # hPa + return cP + +#--- +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + lon = ncin.variables['lon'] + lat = ncin.variables['lat'] + a = ncin.variables['hyam'][:] + b = ncin.variables['hybm'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = ncin.variables['PS'][n,:,:] + cP = npy.zeros((nz,ny,nx)) + for k in range(nz): + cP[k,:,:] = ( a[k] + b[k]*ps[:,:] )/100.0 # hPa + return cP + +def get_cPi(n,ncin): + """ + Given time level "n", return 3D pressure (at model interfaces) for this time. + """ + lon = ncin.variables['lon'] + lat = ncin.variables['lat'] + a = ncin.variables['hyai'][:] + b = ncin.variables['hybi'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = ncin.variables['PS'][n,:,:] + cPi = npy.zeros((nz,ny,nx)) + for k in range(nz): + cPi[k,:,:] = (a[k] + b[k]*ps[:,:])/100.0 # hPa + return cPi + +#--- +def getTyme(ncin): + T = ncin.variables['time'] + units = T.units + isoT0 = units.split(' since ')[1].replace(' ','T') + cDT = units.split(' ')[0] + sec = timedelta(seconds=1) + if cDT == "days": + DT = 24*60*60 + else: + raise ValueError, "fix me, can only handle days as unit of time" + t0 = isoparser(isoT0) + tyme = npy.array([t0 + int(t * DT)*sec for t in T ]) + return tyme + + +#--- +def append_density( ncin, zlib=False): + + tk = ncin.variables['T'][:,:,:,:] + rho = tk + nt, nz, ny, nx = tk.shape + + for n in range(nt): + cP = get_cP(n,ncin) + Rd = 287.05 + for k in range(nz): + rho[n,k,:,:] = cP[k,:,:]*100.0/Rd/tk[n,k,:,:] + + return rho +#--- +def append_lml(ncin, options, rho, zlib=False): + """ + Append vars at lowest model level to netcdf file. + """ + + # Open output NC file + # ------------------- + nc = Dataset(options.outFile,'a',format=options.format) + + for v in ['NH4','so4_a1','so4_a2','so4_a3','pom_a4', + 'soa_a1','soa_a2','bc_a1','bc_a4','dst_a1', + 'dst_a2','dst_a3','ncl_a1','ncl_a2','ncl_a3','CO','NO2','NO','O3','SO2']: + this = nc.createVariable(v+'_lml','f4',('time','lat','lon'),zlib=zlib) + var = ncin.variables[v][:,:,:,:] + this.long_name = '' + this.missing_value = UNDEF # out of domain + this.units = '' + nt, nz, ny, nx = var.shape + for n in range(nt): + this[n,:,:] = var[n,87,:,:] + + v = 'rho' + this = nc.createVariable(v+'_lml','f4',('time','lat','lon'),zlib=zlib) + this.long_name = '' + this.missing_value = UNDEF # out of domain + this.units = '' + nt, nz, ny, nx = rho.shape + for n in range(nt): + this[n,:,:] = rho[n,87,:,:] + + nc.close() + +#--- +def append_vars(ncin, options, rho, zlib=False): + """ + Append total column OC, CO to output file. + """ + # Open output NC file + # ------------------- + nc = Dataset(options.outFile,'a',format=options.format) + + g = 9.80665 + co = ncin.variables['CO'][:,:,:,:]*28.0/28.97 # kg kg-1 + nt, nz, ny, nx = co.shape + oc = npy.zeros((nt,nz,ny,nx)) + + for v in ['pom_a4','soa_a1','soa_a2']: + oc = oc + ncin.variables[v][:,:,:,:]/1.4 # 1.4 is the ratio of pom emissions vs oc emissions + + delp = npy.zeros((nt,nz,ny,nx)) + for n in range(nt): + cPi = get_cPi(n,ncin) + for k in range(nz): + delp[n,k,:,:]= cPi[k+1,:,:]-cPi[k,:,:] # hPa + + + # total column CO + # --------------- + this = nc.createVariable('tcco','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name = 'total column CO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + for n in range(nt): + tcco = npy.sum(co[n,:,:,:]*delp[n,:,:,:]*100.0/g, axis=0) + this[n,:,:] = tcco[:,:] + + # total column pm2.5 + # --------------- + pm25 = ncin.variables['PM25'][:,:,:,:] # kg m-3 + this = nc.createVariable('tcpm25','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name = 'total column PM2.5' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + for n in range(nt): + tc = npy.sum(pm25[n,:,:,:]*delp[n,:,:,:]*100.0/rho[n,:,:,:]/g, axis=0) + this[n,:,:] = tc[:,:] + + # total column OC + # --------------- + this = nc.createVariable('tcoc','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name = 'total column OC' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + for n in range(nt): + tcoc = npy.sum(oc[n,:,:,:]*delp[n,:,:,:]*100.0/g, axis=0) + this[n,:,:] = tcoc[:,:] + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + rP = '925,850,700,600' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] cam_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with .cam. replaced with .camp.)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + cam_File = args[0] + else: + parser.error("must have 1 argument: cam_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + options.outFile = cam_File.replace('.cam.','.camp.') + if options.outFile == cam_File: + options.outFile = 'camp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['lon', 'lat', 'p', 'time'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + + # Open the input file + # ------------------- + nc0 = Dataset(cam_File, "r", format=options.format) + + # Air density + # ----------- + rho = append_density(nc0, zlib=False) + + # Time range + # ---------- + tyme = getTyme(nc0) + print(tyme) + + + # Coordinates + # ----------- + lon = nc0.variables['lon'][:] + lat = nc0.variables['lat'][:] + + # Instantiate regridding class + # ---------------------------- + print 'Start regridding' + r = myCurv2LLP(lon,lat,options.rP) + print 'FInished regridding' + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc0, zlib=False ) + + # append variables at the lowest model level + append_lml(nc0, options, rho, zlib=False) + + # append other vars + append_vars(nc0, options, rho, zlib=False) diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/cams.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/cams.py new file mode 100755 index 0000000..92967b5 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/cams.py @@ -0,0 +1,135 @@ +#!/usr/bin/env python +# +# Append 3D PM2.5, total column PM2.5, total column OC +# can only handle 1 time step per file for now + + +from dateutil.parser import parse as isoparser +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +def append_vars(ncin, options, zlib=False): + """ + Append 3-d PM2.5, total column PM2.5, OC + """ + + g = 9.80665 + + nc = Dataset(options.outFile,'a',format=options.format) + rho = ncin.variables['p3089'][0,:,:,:] # air density in kg m-3 + ps = npy.exp(ncin.variables['lnsp'][0,:,:]) # surface pressure + p = ncin.variables['level'][:] # pressure levels, top to bottom in Pa + nz, ny, nx = rho.shape + dp = npy.zeros((nz,ny,nx)) + dp[0,:,:]=(p[0]+p[1])/2. + for k in range(1,nz-1): + dp[k,:,:] = (p[k+1]-p[k-1])/2. + dp[nz-1,:,:] = ps - (p[nz-1]+p[nz-2])/2. + + + # PM2.5 = RHO * ( 1 * SS1 / 4.3 + 0.5 * SS2 / 4.3 + 1 * DD1 + 1 * DD2 + 0.7 * OM1 + 0.7 * OM2 + O.7 * SU1 + 1 * BC1 + 1 * BC2 ) + ss1 = ncin.variables['aermr01'][0,:,:,:] +# ss2 = ncin.variables['aermr02'][0,:,:,:] + dd1 = ncin.variables['aermr04'][0,:,:,:] + dd2 = ncin.variables['aermr05'][0,:,:,:] + om1 = ncin.variables['aermr07'][0,:,:,:] + om2 = ncin.variables['aermr08'][0,:,:,:] + su1 = ncin.variables['aermr11'][0,:,:,:] + bc1 = ncin.variables['aermr09'][0,:,:,:] + bc2 = ncin.variables['aermr10'][0,:,:,:] + pm2p5_3d = rho*(ss1/4.3 + dd1 + dd2 + 0.7*om1 + 0.7*om2 + 0.7*su1 + bc1 + bc2 ) + tcpm2p5 = npy.sum( pm2p5_3d[:,:,:]*dp/rho/g, axis=0) + tcom = npy.sum( (om1[:,:,:]+om2[:,:,:])*dp/g, axis=0) + + this = nc.createVariable('pm2p5_3d','f4',('time', 'level', 'latitude', 'longitude'),zlib=zlib) + this.long_name = 'pm 2.5' + # this.missing_value = UNDEF # out of domain + this.units = 'kg m**-3' + this[0,:,:,:] = pm2p5_3d[:,:,:] + + this = nc.createVariable('tcpm2p5','f4',('time','latitude', 'longitude'),zlib=zlib) + this.long_name = 'total column pm 2.5' + # this.missing_value = UNDEF # out of domain + this.units = 'kg m**-2' + this[0,:,:] = tcpm2p5[:,:] + + this = nc.createVariable('tcom','f4',('time','latitude', 'longitude'),zlib=zlib) + this.long_name = 'total column organic matter' + # this.missing_value = UNDEF # out of domain + this.units = 'kg m**-2' + this[0,:,:] = tcom[:,:] + + nc.close() + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] cams_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same as input but replace merged with prep)") + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + cams_File = args[0] + else: + parser.error("must have 1 argument: cams_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + options.outFile = cams_File.replace('merged_','prep_') + + + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # copy original file + # ------------------ + os.system("cp "+cams_File+" "+options.outFile) + + # Open the input file + # ------------------- + nc = Dataset(cams_File) + + append_vars(nc, options, zlib=False) + + + + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/cams.sh b/projects/MissionSupport/applications/WxModel/asia-aq/bin/cams.sh new file mode 100755 index 0000000..fe77ba4 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/cams.sh @@ -0,0 +1,62 @@ +#!/bin/bash +# Post-processing of model forecasts +# Usage: cams.sh [ccyymmdd] [hhmmss] [tau] [input dir] [output dir] +# ccyymmdd: initial date +# hhmmss: initial time +# tau: forecast hour +# input dir: data storage dir +# output dir +# --------------------------------------------------------------------------- + +export PATH=/gpfsm/dnb04/projects/p109/FIREX-AQ/sample_forecasts2/scripts:$PATH + +idate=$1 +itime=$2 +tau=`seq -w $3 120 120` + +y1=`echo $idate | cut -c1-4` +m1=`echo $idate | cut -c5-6` +d1=`echo $idate | cut -c7-8` +h1=`echo $itime | cut -c1-2` +m1=`echo $itime | cut -c3-4` + +fh=`expr $3 \* 100 | cut -c1-3` +dir_in=$4 +dir_out=$5 + +if [ ! -d $dir_out ]; then + mkdir $dir_out +fi + +# append the files to a single file + i=0 + cd $dir_in + + for fname in `ls *sfc_${fh}*` + do + let i+=1 + if [ $i -eq '1' ];then + ss=${fname/sfc/merged} + fmerged=${ss/_aod1240/} + ncks -O -d latitude,15.0,70.0 -d longitude,190.0,310.0 $fname $fmerged + else + ncks -h -A -O -d latitude,15.0,70.0 -d longitude,190.0,310.0 $fname $fmerged + fi + done + + for fname in `ls *pl_${fh}*` + do + ncks -h -A -O -d latitude,15.0,70.0 -d longitude,190.0,310.0 $fname $fmerged + done + + for fname in `ls *ml_${fh}*` + do + ncks -h -A -O -d latitude,15.0,70.0 -d longitude,190.0,310.0 $fname $fmerged + done + +# interpolate to llp coordinate + fout=${fmerged/merged/prep} + cams.py -v -o $dir_out/$fout $dir_in/$fmerged + + + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/cmaq_regrid.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/cmaq_regrid.py new file mode 100644 index 0000000..91b3422 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/cmaq_regrid.py @@ -0,0 +1,19 @@ +import xarray as xr + +# Open the curvilinear grid file +curvilinear_ds = xr.open_dataset('uiowa_asiaaq_fcst_2024020800_000.nc') + +# Open the grid constants file +grid_constants_ds = xr.open_dataset('uiowa_asiaaq_fcst_constants.nc') + +# Extract latitude and longitude arrays from the grid constants +lat = grid_constants_ds['lat'].values +lon = grid_constants_ds['lon'].values + +# Assign latitude and longitude coordinates to the curvilinear dataset +curvilinear_ds['lat'] = (('lat', 'lon'), lat) +curvilinear_ds['lon'] = (('lat', 'lon'), lon) + +# Save the updated dataset +curvilinear_ds.to_netcdf('curvilinear_with_coords.nc') + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/curv2llp.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/curv2llp.py new file mode 100755 index 0000000..5fb94c9 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/curv2llp.py @@ -0,0 +1,394 @@ +# +# Regridding curvilinear to regular lat-lon-pressure grid. +# + +from netCDF4 import Dataset +from scipy import interpolate +import numpy as npy +from sys import stdout + +UNDEF = -999.0 # undefined value (outside of domain, or from file) +MISSING = -888.0 # will be filed in by interpolation + +def getMinMax(Mask,I,J,cX,axis): + rX = Mask.copy() + rX[J,I] = cX + rX = npy.ma.masked_array(rX,rX==MISSING) + xmin, xmax = rX.min(axis=axis), rX.max(axis=axis) + return (xmin,xmax) + +def _varList(f): + from grads import GrADS + if isinstance(f,Dataset): + return f.variables.keys() + elif isinstance(f,GrADS): + fh = f.query('file') + return fh.vars + else: + raise NotImplementedError, 'Only NetCDF or GrADS supported for now' + +def _varGet(f,name): + from grads import GrADS, numtypes + if isinstance(f,Dataset): + return f.variables[name] + elif isinstance(f,GrADS): + fh = f.query('file') + qh = f.query('ctlinfo') + nz = fh.var_levs[fh.vars.index(name)] + if nz==0: + f('set z 1') + shp = (fh.nt,fh.ny,fh.nx) + else: + shp = (fh.nt,nz,fh.ny,fh.nx) + var = numtypes.GaField(npy.zeros(shp)) + var.name = name + var.long_name = fh.Vars[name].long_name + var.missing_value = qh.undef + return var + else: + raise NotImplementedError, 'Only NetCDF or GrADS supported for now' + +def _varGetData(f,n,name): + from grads import GrADS + if isinstance(f,Dataset): + return f.variables[name][n] + elif isinstance(f,GrADS): + fh = f.query('file') + qh = f.query('ctlinfo') + f('set t %d'%(n+1)) + f('set x 1 %d'%fh.nx) + f('set y 1 %d'%fh.ny) + nz = fh.var_levs[fh.vars.index(name)] + if nz==0: + f('set z 1') + else: + f('set z 1 %d'%nz) + f.flush() + var = f.expr(name) + var[var.mask] = UNDEF + # print '\n ', name, ' --- ', var.shape, var.min(), var.max() + return var + else: + raise NotImplementedError, 'Only NetCDF or GrADS supported for now' + +class Curv2LLP(object): + + def __init__(self,xLon,xLat,rP=None): + """ + This class implements a somewhat generic regridding capability from + a generic lat-lon curvilinear grid on model vertical levels to a regular + lat-lon-pressure grid. + + On input: + xLon --- 2D array of longitudes on curvlinear grid (deg E), OR + 1D array of longitudes on regular grid (deg E) + xLat --- 2D array of latitudes on curvlinear grid (deg N), OR + 1D array of latitudes on regular grid (deg N) + cP --- 3D array of pressures (hPa) + + Arrays are assumed to have shape (y,x) and (z,y,x) + + """ + + # Curvilinear grid + # ---------------- + if len(xLon.shape) == 2: + + cLon, cLat = xLon, xLat + ny, nx = cLon.shape + self.curv = True # curvilinear grid + + # Regular grid coordinates + # ------------------------- + self.lon = npy.linspace(cLon.min(),cLon.max(),nx) + self.lat = npy.linspace(cLat.min(),cLat.max(),ny) + + # Indices of curvilinear grid on lat-lon grid + # ------------------------------------------- + self.I = (0.5+(cLon-self.lon[0])/(self.lon[1]-self.lon[0])).astype('int') + self.J = (0.5+(cLat-self.lat[0])/(self.lat[1]-self.lat[0])).astype('int') + + # Mask region outside of domain + # ----------------------------- + Mask = MISSING * npy.ones((ny,nx)) + xmin, xmax = getMinMax(Mask,self.I,self.J,cLon,axis=1) + ymin, ymax = getMinMax(Mask,self.I,self.J,cLat,axis=0) + for j in range(ny): + M = (self.lon[:]xmax[j]) + Mask[j,M] = UNDEF + for i in range(nx): + M = (self.lat[:]ymax[i]) + Mask[M,i] = UNDEF + self.Mask = Mask + + # Regular lat/lon grid + # -------------------- + elif len(xLon.shape) == 1: + ny, nx = len(xLat), len(xLon) + self.lon, self.lat = xLon, xLat + self.curv = False # Not a curvilinear grid + + else: + raise ValueError, 'Invalid dimensionality of xLon: %d'%len(xLon.shape) + + # Horizontal grid: destination size same as source grid + # ----------------------------------------------------- + self.ny, self.nx = ny, nx + + # Vertical aspects + # ---------------- + self.k1, self.alpha = [], [] + self.rP = rP + if rP is not None: + self.np = len(rP) + else: + self.np = 0 + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + This is an abstract method, it needs to be re-defined + when subclassing this class. + """ + raise NotImplementedError, 'Method get_cP not implemented in Curv2LLP' + + def set_pInterp(self,n,ncin): + """ + Retrieve vertical pressure and compute + vertical interpolation weights for time step "n". + """ + cP = self.get_cP(n,ncin) + self.k1, self.alpha = [], [] + if self.rP is not None: + bot_top = (cP[0,0,0]>cP[1,0,0]) # bottom-top or top-bottom? + self.nz = cP.shape[0] + for p in self.rP: + k1 = UNDEF*npy.ones((self.ny,self.nx)).astype('int') + a = UNDEF*npy.ones((self.ny,self.nx)) + if bot_top: + self.kdel = 1 + for k in range(self.nz-1): + k1 = npy.where( (cP[k+1]<=p)&(p=2: + f = interpolate.interp1d(self.lon[G],z[G],kind='linear', + bounds_error=False,fill_value=UNDEF) + rV[j,B] = f(self.lon[B]) + + # Fill missing latitude bands. + # ---------------------------- + for j in range(1,ny-1): # 1D interpolation in lat + + z = rV[j,:] + G = (z!=MISSING)&(z!=UNDEF) + if any(G): # This is not a missing latitude band. + continue + + zs = rV[j-1,:] + GS = (zs!=MISSING)&(zs!=UNDEF) + if not any(GS): # No data in adjacent latitude band + continue + + zn = rV[j+1,:] + GN = (zn!=MISSING)&(zn!=UNDEF) + if not any(GN): # No data in adjacent latitude band + continue + + G = GS & GN + rV[j,G] = (zs[G] + zn[G]) / 2.0 + + return rV + + def regrid3d(self,cV): + """ + Regrid a 3D variable from a curvlinear to a regular lat-lon grid. + """ + + rV = UNDEF * npy.ones((self.np,self.ny,self.nx)) + + # Interpolate to every desired vertical pressure level + # ---------------------------------------------------- + for k in range(self.np): + k1, a = self.k1[k], self.alpha[k] + I = k1!=UNDEF + kmin, kmax = int(k1[I].min()), int(k1[I].max()) + cU = UNDEF * npy.ones((self.ny,self.nx)) + for k_ in range(kmin,kmax+1): + cU = npy.where(k1==k_, + (1-a)*cV[k_,:,:]+a*cV[k_+self.kdel,:,:], cU) + rV[k,:,:] = self.regrid(cU) + + return rV + + def writeNC ( self, tyme, options, ncin, zlib=False ): + """ + Write a NetCDF file with sampled GEOS-5 variables at the station locations + described by (lon,lat). + + On input: + + tyme --- array of time levels to write to file (usually 1) + options - Command line options: + outFile --- output filenane + format --- file format + dryrun --- writes out file with zeros + verbose + + """ + + # Open output NC file + # ------------------- + nc = Dataset(options.outFile,'w',format=options.format) + + # Set global attributes, borrow from input file + # --------------------------------------------- + if isinstance(ncin,Dataset): + for att in ncin.__dict__.keys(): + nc.__setattr__(att,ncin.__dict__[att]) + nc.History = 'Converted to pressure-lat-lon using curv2llp' + nc.Conventions = 'CF' + + # Create dimensions + # ----------------- + nx = nc.createDimension('lon', self.nx ) + ny = nc.createDimension('lat', self.ny ) + if self.np>0: + np = nc.createDimension('lev', self.np ) + nt = nc.createDimension('time', len(tyme)) + + # Coordinate variables + # -------------------- + lon = nc.createVariable('lon','f4',('lon',),zlib=zlib) + lon.long_name = 'Longitude' + lon.units = 'degrees_east' + lon[:] = self.lon[:] + + lat = nc.createVariable('lat','f4',('lat',),zlib=zlib) + lat.long_name = 'Latitude' + lat.units = 'degrees_north' + lat[:] = self.lat[:] + + if self.np > 0: + lev = nc.createVariable('lev','f4',('lev',),zlib=zlib) + lev.long_name = 'Pressure' + lev.units = 'hPa' + lev.positive = 'down' + lev.axis = 'z' + lev[:] = self.rP + + time = nc.createVariable('time','i4',('time',),zlib=zlib) + time.long_name = 'Time' + t0 = tyme[0] + time.units = 'seconds since %s'%t0.isoformat(' ') + time[:] = npy.array([(t-t0).total_seconds() for t in tyme]) + + # Create variables on NetCDF file. + # ------------------------------- + ncVar = dict() + # Vars = options.Vars or ncin.variables.keys() + Vars = options.Vars or _varList(ncin) + for v in Vars: + if v in options.ignore: continue + if options.verbose: stdout.write("[] Creating <%s> ... "%v) + # var = ncin.variables[v] + var = _varGet(ncin,v) + if len(var.shape) == 3: # 2D variable + dim = ('time','lat','lon') + if options.verbose: stdout.write("2d ... ") + elif len(var.shape) == 4: # 3D variable + if self.np == 0: + if options.verbose: stdout.write("ignored\n") + continue + dim = ('time', 'lev','lat','lon') + if options.verbose: stdout.write("3d ... ") + else: + if options.verbose: + stdout.write("ignored\n") + continue + this = nc.createVariable(var.name,'f4',dim,zlib=zlib) + try: + this.long_name = var.__dict__[u'long_name'] + except: + this.long_name = v + this.missing_value = UNDEF # out of domain + try: + this.units = var.__dict__[u'units'] + except: + this.units = 'unknown' + ncVar[v] = this + if options.verbose: stdout.write("ok\n") + + # Write variables for each time + # ----------------------------- + for n in range(len(tyme)): + if options.verbose: + stdout.write("[] Writing on %s ... "%tyme[0].isoformat()) + self.set_pInterp(n,ncin) # set interpolation weights + for v in Vars: + if v in options.ignore: continue + var = _varGetData(ncin,n,v) + if len(var.shape) == 2: # 2D variable + shp = ( self.ny, self.nx ) + elif len(var.shape) == 3: # 3D variable + if self.np == 0: continue + shp = ( self.np, self.ny, self.nx ) + else: continue + this = ncVar[v] + if options .dryrun: + this[n,:] = npy.zeros(shp)[:] + else: + this[n,:] = self.regrid(var)[:] + if options.verbose: stdout.write("%s ... "%v) + if options.verbose: stdout.write("done\n") + + # Close the file + # -------------- + nc.close() + + if options.verbose: + print("<> wrote %s file %s"%(options.format,options.outFile)) + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/curv2llp.py.fix1 b/projects/MissionSupport/applications/WxModel/asia-aq/bin/curv2llp.py.fix1 new file mode 100755 index 0000000..0548c9e --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/curv2llp.py.fix1 @@ -0,0 +1,384 @@ +# +# Regridding curvilinear to regular lat-lon-pressure grid. +# + +from netCDF4 import Dataset +from scipy import interpolate +import numpy as npy +from sys import stdout + +UNDEF = -999.0 # undefined value (outside of domain, or from file) +MISSING = -888.0 # will be filed in by interpolation + +def getMinMax(Mask,I,J,cX,axis): + rX = Mask.copy() + rX[J,I] = cX + rX = npy.ma.masked_array(rX,rX==MISSING) + xmin, xmax = rX.min(axis=axis), rX.max(axis=axis) + return (xmin,xmax) + +def _varList(f): + from grads import GrADS + if isinstance(f,Dataset): + return f.variables.keys() + elif isinstance(f,GrADS): + fh = f.query('file') + return fh.vars + else: + raise NotImplementedError, 'Only NetCDF or GrADS supported for now' + +def _varGet(f,name): + from grads import GrADS, numtypes + if isinstance(f,Dataset): + return f.variables[name] + elif isinstance(f,GrADS): + fh = f.query('file') + qh = f.query('ctlinfo') + nz = fh.var_levs[fh.vars.index(name)] + if nz==0: + f('set z 1') + shp = (fh.nt,fh.ny,fh.nx) + else: + shp = (fh.nt,nz,fh.ny,fh.nx) + var = numtypes.GaField(npy.zeros(shp)) + var.name = name + var.long_name = fh.Vars[name].long_name + var.missing_value = qh.undef + return var + else: + raise NotImplementedError, 'Only NetCDF or GrADS supported for now' + +def _varGetData(f,n,name): + from grads import GrADS + if isinstance(f,Dataset): + return f.variables[name][n] + elif isinstance(f,GrADS): + fh = f.query('file') + qh = f.query('ctlinfo') + f('set t %d'%(n+1)) + f('set x 1 %d'%fh.nx) + f('set y 1 %d'%fh.ny) + nz = fh.var_levs[fh.vars.index(name)] + if nz==0: + f('set z 1') + else: + f('set z 1 %d'%nz) + f.flush() + var = f.expr(name) + var[var.mask] = UNDEF + # print '\n ', name, ' --- ', var.shape, var.min(), var.max() + return var + else: + raise NotImplementedError, 'Only NetCDF or GrADS supported for now' + +class Curv2LLP(object): + + def __init__(self,xLon,xLat,rP=None): + """ + This class implements a somewhat generic regridding capability from + a generic lat-lon curvilinear grid on model vertical levels to a regular + lat-lon-pressure grid. + + On input: + xLon --- 2D array of longitudes on curvlinear grid (deg E), OR + 1D array of longitudes on regular grid (deg E) + xLat --- 2D array of latitudes on curvlinear grid (deg N), OR + 1D array of latitudes on regular grid (deg N) + cP --- 3D array of pressures (hPa) + + Arrays are assumed to have shape (y,x) and (z,y,x) + + """ + + # Curvilinear grid + # ---------------- + if len(xLon.shape) == 2: + + cLon, cLat = xLon, xLat + ny, nx = cLon.shape + self.curv = True # curvilinear grid + + # Regular grid coordinates + # ------------------------- + self.lon = npy.linspace(cLon.min(),cLon.max(),nx) + self.lat = npy.linspace(cLat.min(),cLat.max(),ny) + + # Indices of curvilinear grid on lat-lon grid + # ------------------------------------------- + self.I = (0.5+(cLon-self.lon[0])/(self.lon[1]-self.lon[0])).astype('int') + self.J = (0.5+(cLat-self.lat[0])/(self.lat[1]-self.lat[0])).astype('int') + + # Mask region outside of domain + # ----------------------------- + Mask = MISSING * npy.ones((ny,nx)) + xmin, xmax = getMinMax(Mask,self.I,self.J,cLon,axis=1) + ymin, ymax = getMinMax(Mask,self.I,self.J,cLat,axis=0) + for j in range(ny): + M = (self.lon[:]xmax[j]) + Mask[j,M] = UNDEF + for i in range(nx): + M = (self.lat[:]ymax[i]) + Mask[M,i] = UNDEF + self.Mask = Mask + + # Regular lat/lon grid + # -------------------- + elif len(xLon.shape) == 1: + ny, nx = len(xLat), len(xLon) + self.lon, self.lat = xLon, xLat + self.curv = False # Not a curvilinear grid + + else: + raise ValueError, 'Invalid dimensionality of xLon: %d'%len(xLon.shape) + + # Horizontal grid: destination size same as source grid + # ----------------------------------------------------- + self.ny, self.nx = ny, nx + + # Vertical aspects + # ---------------- + self.k1, self.alpha = [], [] + self.rP = rP + if rP is not None: + self.np = len(rP) + else: + self.np = 0 + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + This is an abstract method, it needs to be re-defined + when subclassing this class. + """ + raise NotImplementedError, 'Method get_cP not implemented in Curv2LLP' + + def set_pInterp(self,n,ncin): + """ + Retrieve vertical pressure and compute + vertical interpolation weights for time step "n". + """ + cP = self.get_cP(n,ncin) + self.k1, self.alpha = [], [] + if self.rP is not None: + bot_top = (cP[0,0,0]>cP[1,0,0]) # bottom-top or top-bottom? + self.nz = cP.shape[0] + for p in self.rP: + k1 = UNDEF*npy.ones((self.ny,self.nx)).astype('int') + a = UNDEF*npy.ones((self.ny,self.nx)) + if bot_top: + self.kdel = 1 + for k in range(self.nz-1): + k1 = npy.where( (cP[k+1]<=p)&(p=2: + f = interpolate.interp1d(self.lon[G],z[G],kind='linear', + bounds_error=False,fill_value=UNDEF) + rV[j,B] = f(self.lon[B]) + + # Fill missing values in middle of domain + # --------------------------------------- + for i in range(nx): # 1D interpolation in lat + z = rV[:,i] + B = (z==MISSING)|(z==UNDEF) + if any(B): + G = (z!=UNDEF)&(z!=MISSING) + if sum(G)>=2: + f = interpolate.interp1d(self.lat[G],z[G],kind='linear', + bounds_error=False,fill_value=UNDEF) + rV[B,i] = f(self.lat[B]) + + return rV + + def regrid3d(self,cV): + """ + Regrid a 3D variable from a curvlinear to a regular lat-lon grid. + """ + + rV = UNDEF * npy.ones((self.np,self.ny,self.nx)) + + # Interpolate to every desired vertical pressure level + # ---------------------------------------------------- + for k in range(self.np): + k1, a = self.k1[k], self.alpha[k] + I = k1!=UNDEF + kmin, kmax = int(k1[I].min()), int(k1[I].max()) + cU = UNDEF * npy.ones((self.ny,self.nx)) + for k_ in range(kmin,kmax+1): + cU = npy.where(k1==k_, + (1-a)*cV[k_,:,:]+a*cV[k_+self.kdel,:,:], cU) + rV[k,:,:] = self.regrid(cU) + + return rV + + def writeNC ( self, tyme, options, ncin, zlib=False ): + """ + Write a NetCDF file with sampled GEOS-5 variables at the station locations + described by (lon,lat). + + On input: + + tyme --- array of time levels to write to file (usually 1) + options - Command line options: + outFile --- output filenane + format --- file format + dryrun --- writes out file with zeros + verbose + + """ + + # Open output NC file + # ------------------- + nc = Dataset(options.outFile,'w',format=options.format) + + # Set global attributes, borrow from input file + # --------------------------------------------- + if isinstance(ncin,Dataset): + for att in ncin.__dict__.keys(): + nc.__setattr__(att,ncin.__dict__[att]) + nc.History = 'Converted to pressure-lat-lon using curv2llp' + nc.Conventions = 'CF' + + # Create dimensions + # ----------------- + nx = nc.createDimension('lon', self.nx ) + ny = nc.createDimension('lat', self.ny ) + if self.np>0: + np = nc.createDimension('lev', self.np ) + nt = nc.createDimension('time', len(tyme)) + + # Coordinate variables + # -------------------- + lon = nc.createVariable('lon','f4',('lon',),zlib=zlib) + lon.long_name = 'Longitude' + lon.units = 'degrees_east' + lon[:] = self.lon[:] + + lat = nc.createVariable('lat','f4',('lat',),zlib=zlib) + lat.long_name = 'Latitude' + lat.units = 'degrees_north' + lat[:] = self.lat[:] + + if self.np > 0: + lev = nc.createVariable('lev','f4',('lev',),zlib=zlib) + lev.long_name = 'Pressure' + lev.units = 'hPa' + lev.positive = 'down' + lev.axis = 'z' + lev[:] = self.rP + + time = nc.createVariable('time','i4',('time',),zlib=zlib) + time.long_name = 'Time' + t0 = tyme[0] + time.units = 'seconds since %s'%t0.isoformat(' ') + time[:] = npy.array([(t-t0).total_seconds() for t in tyme]) + + # Create variables on NetCDF file. + # ------------------------------- + ncVar = dict() + # Vars = options.Vars or ncin.variables.keys() + Vars = options.Vars or _varList(ncin) + for v in Vars: + if v in options.ignore: continue + if options.verbose: stdout.write("[] Creating <%s> ... "%v) + # var = ncin.variables[v] + var = _varGet(ncin,v) + if len(var.shape) == 3: # 2D variable + dim = ('time','lat','lon') + if options.verbose: stdout.write("2d ... ") + elif len(var.shape) == 4: # 3D variable + if self.np == 0: + if options.verbose: stdout.write("ignored\n") + continue + dim = ('time', 'lev','lat','lon') + if options.verbose: stdout.write("3d ... ") + else: + if options.verbose: + stdout.write("ignored\n") + continue + this = nc.createVariable(var.name,'f4',dim,zlib=zlib) + try: + this.long_name = var.__dict__[u'long_name'] + except: + this.long_name = v + this.missing_value = UNDEF # out of domain + try: + this.units = var.__dict__[u'units'] + except: + this.units = 'unknown' + ncVar[v] = this + if options.verbose: stdout.write("ok\n") + + # Write variables for each time + # ----------------------------- + for n in range(len(tyme)): + if options.verbose: + stdout.write("[] Writing on %s ... "%tyme[0].isoformat()) + self.set_pInterp(n,ncin) # set interpolation weights + for v in Vars: + if v in options.ignore: continue + var = _varGetData(ncin,n,v) + if len(var.shape) == 2: # 2D variable + shp = ( self.ny, self.nx ) + elif len(var.shape) == 3: # 3D variable + if self.np == 0: continue + shp = ( self.np, self.ny, self.nx ) + else: continue + this = ncVar[v] + if options .dryrun: + this[n,:] = npy.zeros(shp)[:] + else: + this[n,:] = self.regrid(var)[:] + if options.verbose: stdout.write("%s ... "%v) + if options.verbose: stdout.write("done\n") + + # Close the file + # -------------- + nc.close() + + if options.verbose: + print("<> wrote %s file %s"%(options.format,options.outFile)) + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/curv2llp.py.fix2 b/projects/MissionSupport/applications/WxModel/asia-aq/bin/curv2llp.py.fix2 new file mode 100755 index 0000000..bb34606 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/curv2llp.py.fix2 @@ -0,0 +1,396 @@ +# +# Regridding curvilinear to regular lat-lon-pressure grid. +# + +from netCDF4 import Dataset +from scipy import interpolate +import numpy as npy +from sys import stdout + +UNDEF = -999.0 # undefined value (outside of domain, or from file) +MISSING = -888.0 # will be filed in by interpolation + +def getMinMax(Mask,I,J,cX,axis): + rX = Mask.copy() + rX[J,I] = cX + rX = npy.ma.masked_array(rX,rX==MISSING) + xmin, xmax = rX.min(axis=axis), rX.max(axis=axis) + return (xmin,xmax) + +def _varList(f): + from grads import GrADS + if isinstance(f,Dataset): + return f.variables.keys() + elif isinstance(f,GrADS): + fh = f.query('file') + return fh.vars + else: + raise NotImplementedError, 'Only NetCDF or GrADS supported for now' + +def _varGet(f,name): + from grads import GrADS, numtypes + if isinstance(f,Dataset): + return f.variables[name] + elif isinstance(f,GrADS): + fh = f.query('file') + qh = f.query('ctlinfo') + nz = fh.var_levs[fh.vars.index(name)] + if nz==0: + f('set z 1') + shp = (fh.nt,fh.ny,fh.nx) + else: + shp = (fh.nt,nz,fh.ny,fh.nx) + var = numtypes.GaField(npy.zeros(shp)) + var.name = name + var.long_name = fh.Vars[name].long_name + var.missing_value = qh.undef + return var + else: + raise NotImplementedError, 'Only NetCDF or GrADS supported for now' + +def _varGetData(f,n,name): + from grads import GrADS + if isinstance(f,Dataset): + return f.variables[name][n] + elif isinstance(f,GrADS): + fh = f.query('file') + qh = f.query('ctlinfo') + f('set t %d'%(n+1)) + f('set x 1 %d'%fh.nx) + f('set y 1 %d'%fh.ny) + nz = fh.var_levs[fh.vars.index(name)] + if nz==0: + f('set z 1') + else: + f('set z 1 %d'%nz) + f.flush() + var = f.expr(name) + var[var.mask] = UNDEF + # print '\n ', name, ' --- ', var.shape, var.min(), var.max() + return var + else: + raise NotImplementedError, 'Only NetCDF or GrADS supported for now' + +class Curv2LLP(object): + + def __init__(self,xLon,xLat,rP=None): + """ + This class implements a somewhat generic regridding capability from + a generic lat-lon curvilinear grid on model vertical levels to a regular + lat-lon-pressure grid. + + On input: + xLon --- 2D array of longitudes on curvlinear grid (deg E), OR + 1D array of longitudes on regular grid (deg E) + xLat --- 2D array of latitudes on curvlinear grid (deg N), OR + 1D array of latitudes on regular grid (deg N) + cP --- 3D array of pressures (hPa) + + Arrays are assumed to have shape (y,x) and (z,y,x) + + """ + + # Curvilinear grid + # ---------------- + if len(xLon.shape) == 2: + + cLon, cLat = xLon, xLat + ny, nx = cLon.shape + self.curv = True # curvilinear grid + + # Regular grid coordinates + # ------------------------- + self.lon = npy.linspace(cLon.min(),cLon.max(),nx) + self.lat = npy.linspace(cLat.min(),cLat.max(),ny) + + # Indices of curvilinear grid on lat-lon grid + # ------------------------------------------- + self.I = (0.5+(cLon-self.lon[0])/(self.lon[1]-self.lon[0])).astype('int') + self.J = (0.5+(cLat-self.lat[0])/(self.lat[1]-self.lat[0])).astype('int') + + # Mask region outside of domain + # ----------------------------- + Mask = MISSING * npy.ones((ny,nx)) + xmin, xmax = getMinMax(Mask,self.I,self.J,cLon,axis=1) + ymin, ymax = getMinMax(Mask,self.I,self.J,cLat,axis=0) + for j in range(ny): + M = (self.lon[:]xmax[j]) + Mask[j,M] = UNDEF + for i in range(nx): + M = (self.lat[:]ymax[i]) + Mask[M,i] = UNDEF + self.Mask = Mask + + # Regular lat/lon grid + # -------------------- + elif len(xLon.shape) == 1: + ny, nx = len(xLat), len(xLon) + self.lon, self.lat = xLon, xLat + self.curv = False # Not a curvilinear grid + + else: + raise ValueError, 'Invalid dimensionality of xLon: %d'%len(xLon.shape) + + # Horizontal grid: destination size same as source grid + # ----------------------------------------------------- + self.ny, self.nx = ny, nx + + # Vertical aspects + # ---------------- + self.k1, self.alpha = [], [] + self.rP = rP + if rP is not None: + self.np = len(rP) + else: + self.np = 0 + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + This is an abstract method, it needs to be re-defined + when subclassing this class. + """ + raise NotImplementedError, 'Method get_cP not implemented in Curv2LLP' + + def set_pInterp(self,n,ncin): + """ + Retrieve vertical pressure and compute + vertical interpolation weights for time step "n". + """ + cP = self.get_cP(n,ncin) + self.k1, self.alpha = [], [] + if self.rP is not None: + bot_top = (cP[0,0,0]>cP[1,0,0]) # bottom-top or top-bottom? + self.nz = cP.shape[0] + for p in self.rP: + k1 = UNDEF*npy.ones((self.ny,self.nx)).astype('int') + a = UNDEF*npy.ones((self.ny,self.nx)) + if bot_top: + self.kdel = 1 + for k in range(self.nz-1): + k1 = npy.where( (cP[k+1]<=p)&(p=2: + f = interpolate.interp1d(self.lon[G],z[G],kind='linear', + bounds_error=False,fill_value=UNDEF) + rV[j,B] = f(self.lon[B]) + else: + jmissing.append(j) + + # Fill missing latitude bands. + # ---------------------------- + for j+1 in range(ny-1): # 1D interpolation in lat + + z = rV[j,:] + G = (z!=MISSING)&(z!=UNDEF) + if any(G): # This is not a missing latitude band. + continue + + zs = rV[j-1,:] + GS = (zs!=MISSING)&(zs!=UNDEF) + if not any(GS): # No data in adjacent latitude band + continue + + zn = rV[j+1,:] + GN = (zn!=MISSING)&(zn!=UNDEF) + if not any(GN): # No data in adjacent latitude band + continue + + G = GS & GN + rV[j,G] = (zs[G] + zn[G]) / 2.0 + + return rV + + def regrid3d(self,cV): + """ + Regrid a 3D variable from a curvlinear to a regular lat-lon grid. + """ + + rV = UNDEF * npy.ones((self.np,self.ny,self.nx)) + + # Interpolate to every desired vertical pressure level + # ---------------------------------------------------- + for k in range(self.np): + k1, a = self.k1[k], self.alpha[k] + I = k1!=UNDEF + kmin, kmax = int(k1[I].min()), int(k1[I].max()) + cU = UNDEF * npy.ones((self.ny,self.nx)) + for k_ in range(kmin,kmax+1): + cU = npy.where(k1==k_, + (1-a)*cV[k_,:,:]+a*cV[k_+self.kdel,:,:], cU) + rV[k,:,:] = self.regrid(cU) + + return rV + + def writeNC ( self, tyme, options, ncin, zlib=False ): + """ + Write a NetCDF file with sampled GEOS-5 variables at the station locations + described by (lon,lat). + + On input: + + tyme --- array of time levels to write to file (usually 1) + options - Command line options: + outFile --- output filenane + format --- file format + dryrun --- writes out file with zeros + verbose + + """ + + # Open output NC file + # ------------------- + nc = Dataset(options.outFile,'w',format=options.format) + + # Set global attributes, borrow from input file + # --------------------------------------------- + if isinstance(ncin,Dataset): + for att in ncin.__dict__.keys(): + nc.__setattr__(att,ncin.__dict__[att]) + nc.History = 'Converted to pressure-lat-lon using curv2llp' + nc.Conventions = 'CF' + + # Create dimensions + # ----------------- + nx = nc.createDimension('lon', self.nx ) + ny = nc.createDimension('lat', self.ny ) + if self.np>0: + np = nc.createDimension('lev', self.np ) + nt = nc.createDimension('time', len(tyme)) + + # Coordinate variables + # -------------------- + lon = nc.createVariable('lon','f4',('lon',),zlib=zlib) + lon.long_name = 'Longitude' + lon.units = 'degrees_east' + lon[:] = self.lon[:] + + lat = nc.createVariable('lat','f4',('lat',),zlib=zlib) + lat.long_name = 'Latitude' + lat.units = 'degrees_north' + lat[:] = self.lat[:] + + if self.np > 0: + lev = nc.createVariable('lev','f4',('lev',),zlib=zlib) + lev.long_name = 'Pressure' + lev.units = 'hPa' + lev.positive = 'down' + lev.axis = 'z' + lev[:] = self.rP + + time = nc.createVariable('time','i4',('time',),zlib=zlib) + time.long_name = 'Time' + t0 = tyme[0] + time.units = 'seconds since %s'%t0.isoformat(' ') + time[:] = npy.array([(t-t0).total_seconds() for t in tyme]) + + # Create variables on NetCDF file. + # ------------------------------- + ncVar = dict() + # Vars = options.Vars or ncin.variables.keys() + Vars = options.Vars or _varList(ncin) + for v in Vars: + if v in options.ignore: continue + if options.verbose: stdout.write("[] Creating <%s> ... "%v) + # var = ncin.variables[v] + var = _varGet(ncin,v) + if len(var.shape) == 3: # 2D variable + dim = ('time','lat','lon') + if options.verbose: stdout.write("2d ... ") + elif len(var.shape) == 4: # 3D variable + if self.np == 0: + if options.verbose: stdout.write("ignored\n") + continue + dim = ('time', 'lev','lat','lon') + if options.verbose: stdout.write("3d ... ") + else: + if options.verbose: + stdout.write("ignored\n") + continue + this = nc.createVariable(var.name,'f4',dim,zlib=zlib) + try: + this.long_name = var.__dict__[u'long_name'] + except: + this.long_name = v + this.missing_value = UNDEF # out of domain + try: + this.units = var.__dict__[u'units'] + except: + this.units = 'unknown' + ncVar[v] = this + if options.verbose: stdout.write("ok\n") + + # Write variables for each time + # ----------------------------- + for n in range(len(tyme)): + if options.verbose: + stdout.write("[] Writing on %s ... "%tyme[0].isoformat()) + self.set_pInterp(n,ncin) # set interpolation weights + for v in Vars: + if v in options.ignore: continue + var = _varGetData(ncin,n,v) + if len(var.shape) == 2: # 2D variable + shp = ( self.ny, self.nx ) + elif len(var.shape) == 3: # 3D variable + if self.np == 0: continue + shp = ( self.np, self.ny, self.nx ) + else: continue + this = ncVar[v] + if options .dryrun: + this[n,:] = npy.zeros(shp)[:] + else: + this[n,:] = self.regrid(var)[:] + if options.verbose: stdout.write("%s ... "%v) + if options.verbose: stdout.write("done\n") + + # Close the file + # -------------- + nc.close() + + if options.verbose: + print("<> wrote %s file %s"%(options.format,options.outFile)) + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/curv2llp.py.keep b/projects/MissionSupport/applications/WxModel/asia-aq/bin/curv2llp.py.keep new file mode 100755 index 0000000..135ead8 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/curv2llp.py.keep @@ -0,0 +1,371 @@ +# +# Regridding curvilinear to regular lat-lon-pressure grid. +# + +from netCDF4 import Dataset +from scipy import interpolate +import numpy as npy +from sys import stdout + +UNDEF = -999.0 # undefined value (outside of domain, or from file) +MISSING = -888.0 # will be filed in by interpolation + +def getMinMax(Mask,I,J,cX,axis): + rX = Mask.copy() + rX[J,I] = cX + rX = npy.ma.masked_array(rX,rX==MISSING) + xmin, xmax = rX.min(axis=axis), rX.max(axis=axis) + return (xmin,xmax) + +def _varList(f): + from grads import GrADS + if isinstance(f,Dataset): + return f.variables.keys() + elif isinstance(f,GrADS): + fh = f.query('file') + return fh.vars + else: + raise NotImplementedError, 'Only NetCDF or GrADS supported for now' + +def _varGet(f,name): + from grads import GrADS, numtypes + if isinstance(f,Dataset): + return f.variables[name] + elif isinstance(f,GrADS): + fh = f.query('file') + qh = f.query('ctlinfo') + nz = fh.var_levs[fh.vars.index(name)] + if nz==0: + f('set z 1') + shp = (fh.nt,fh.ny,fh.nx) + else: + shp = (fh.nt,nz,fh.ny,fh.nx) + var = numtypes.GaField(npy.zeros(shp)) + var.name = name + var.long_name = fh.Vars[name].long_name + var.missing_value = qh.undef + return var + else: + raise NotImplementedError, 'Only NetCDF or GrADS supported for now' + +def _varGetData(f,n,name): + from grads import GrADS + if isinstance(f,Dataset): + return f.variables[name][n] + elif isinstance(f,GrADS): + fh = f.query('file') + qh = f.query('ctlinfo') + f('set t %d'%(n+1)) + f('set x 1 %d'%fh.nx) + f('set y 1 %d'%fh.ny) + nz = fh.var_levs[fh.vars.index(name)] + if nz==0: + f('set z 1') + else: + f('set z 1 %d'%nz) + f.flush() + var = f.expr(name) + var[var.mask] = UNDEF + # print '\n ', name, ' --- ', var.shape, var.min(), var.max() + return var + else: + raise NotImplementedError, 'Only NetCDF or GrADS supported for now' + +class Curv2LLP(object): + + def __init__(self,xLon,xLat,rP=None): + """ + This class implements a somewhat generic regridding capability from + a generic lat-lon curvilinear grid on model vertical levels to a regular + lat-lon-pressure grid. + + On input: + xLon --- 2D array of longitudes on curvlinear grid (deg E), OR + 1D array of longitudes on regular grid (deg E) + xLat --- 2D array of latitudes on curvlinear grid (deg N), OR + 1D array of latitudes on regular grid (deg N) + cP --- 3D array of pressures (hPa) + + Arrays are assumed to have shape (y,x) and (z,y,x) + + """ + + # Curvilinear grid + # ---------------- + if len(xLon.shape) == 2: + + cLon, cLat = xLon, xLat + ny, nx = cLon.shape + self.curv = True # curvilinear grid + + # Regular grid coordinates + # ------------------------- + self.lon = npy.linspace(cLon.min(),cLon.max(),nx) + self.lat = npy.linspace(cLat.min(),cLat.max(),ny) + + # Indices of curvilinear grid on lat-lon grid + # ------------------------------------------- + self.I = (0.5+(cLon-self.lon[0])/(self.lon[1]-self.lon[0])).astype('int') + self.J = (0.5+(cLat-self.lat[0])/(self.lat[1]-self.lat[0])).astype('int') + + # Mask region outside of domain + # ----------------------------- + Mask = MISSING * npy.ones((ny,nx)) + xmin, xmax = getMinMax(Mask,self.I,self.J,cLon,axis=1) + ymin, ymax = getMinMax(Mask,self.I,self.J,cLat,axis=0) + for j in range(ny): + M = (self.lon[:]xmax[j]) + Mask[j,M] = UNDEF + for i in range(nx): + M = (self.lat[:]ymax[i]) + Mask[M,i] = UNDEF + self.Mask = Mask + + # Regular lat/lon grid + # -------------------- + elif len(xLon.shape) == 1: + ny, nx = len(xLat), len(xLon) + self.lon, self.lat = xLon, xLat + self.curv = False # Not a curvilinear grid + + else: + raise ValueError, 'Invalid dimensionality of xLon: %d'%len(xLon.shape) + + # Horizontal grid: destination size same as source grid + # ----------------------------------------------------- + self.ny, self.nx = ny, nx + + # Vertical aspects + # ---------------- + self.k1, self.alpha = [], [] + self.rP = rP + if rP is not None: + self.np = len(rP) + else: + self.np = 0 + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + This is an abstract method, it needs to be re-defined + when subclassing this class. + """ + raise NotImplementedError, 'Method get_cP not implemented in Curv2LLP' + + def set_pInterp(self,n,ncin): + """ + Retrieve vertical pressure and compute + vertical interpolation weights for time step "n". + """ + cP = self.get_cP(n,ncin) + self.k1, self.alpha = [], [] + if self.rP is not None: + bot_top = (cP[0,0,0]>cP[1,0,0]) # bottom-top or top-bottom? + self.nz = cP.shape[0] + for p in self.rP: + k1 = UNDEF*npy.ones((self.ny,self.nx)).astype('int') + a = UNDEF*npy.ones((self.ny,self.nx)) + if bot_top: + self.kdel = 1 + for k in range(self.nz-1): + k1 = npy.where( (cP[k+1]<=p)&(p0: + np = nc.createDimension('lev', self.np ) + nt = nc.createDimension('time', len(tyme)) + + # Coordinate variables + # -------------------- + lon = nc.createVariable('lon','f4',('lon',),zlib=zlib) + lon.long_name = 'Longitude' + lon.units = 'degrees_east' + lon[:] = self.lon[:] + + lat = nc.createVariable('lat','f4',('lat',),zlib=zlib) + lat.long_name = 'Latitude' + lat.units = 'degrees_north' + lat[:] = self.lat[:] + + if self.np > 0: + lev = nc.createVariable('lev','f4',('lev',),zlib=zlib) + lev.long_name = 'Pressure' + lev.units = 'hPa' + lev.positive = 'down' + lev.axis = 'z' + lev[:] = self.rP + + time = nc.createVariable('time','i4',('time',),zlib=zlib) + time.long_name = 'Time' + t0 = tyme[0] + time.units = 'seconds since %s'%t0.isoformat(' ') + time[:] = npy.array([(t-t0).total_seconds() for t in tyme]) + + # Create variables on NetCDF file. + # ------------------------------- + ncVar = dict() + # Vars = options.Vars or ncin.variables.keys() + Vars = options.Vars or _varList(ncin) + for v in Vars: + if v in options.ignore: continue + if options.verbose: stdout.write("[] Creating <%s> ... "%v) + # var = ncin.variables[v] + var = _varGet(ncin,v) + if len(var.shape) == 3: # 2D variable + dim = ('time','lat','lon') + if options.verbose: stdout.write("2d ... ") + elif len(var.shape) == 4: # 3D variable + if self.np == 0: + if options.verbose: stdout.write("ignored\n") + continue + dim = ('time', 'lev','lat','lon') + if options.verbose: stdout.write("3d ... ") + else: + if options.verbose: + stdout.write("ignored\n") + continue + this = nc.createVariable(var.name,'f4',dim,zlib=zlib) + try: + this.long_name = var.__dict__[u'long_name'] + except: + this.long_name = v + this.missing_value = UNDEF # out of domain + try: + this.units = var.__dict__[u'units'] + except: + this.units = 'unknown' + ncVar[v] = this + if options.verbose: stdout.write("ok\n") + + # Write variables for each time + # ----------------------------- + for n in range(len(tyme)): + if options.verbose: + stdout.write("[] Writing on %s ... "%tyme[0].isoformat()) + self.set_pInterp(n,ncin) # set interpolation weights + for v in Vars: + if v in options.ignore: continue + var = _varGetData(ncin,n,v) + if len(var.shape) == 2: # 2D variable + shp = ( self.ny, self.nx ) + elif len(var.shape) == 3: # 3D variable + if self.np == 0: continue + shp = ( self.np, self.ny, self.nx ) + else: continue + this = ncVar[v] + if options .dryrun: + this[n,:] = npy.zeros(shp)[:] + else: + this[n,:] = self.regrid(var)[:] + if options.verbose: stdout.write("%s ... "%v) + if options.verbose: stdout.write("done\n") + + # Close the file + # -------------- + nc.close() + + if options.verbose: + print("<> wrote %s file %s"%(options.format,options.outFile)) + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/curv2llp.py.orig b/projects/MissionSupport/applications/WxModel/asia-aq/bin/curv2llp.py.orig new file mode 100755 index 0000000..3c1a85f --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/curv2llp.py.orig @@ -0,0 +1,372 @@ +# +# Regridding curvilinear to regular lat-lon-pressure grid. +# + +from netCDF4 import Dataset +from scipy import interpolate +import numpy as npy +from sys import stdout + +UNDEF = -999.0 # undefined value (outside of domain, or from file) +MISSING = -888.0 # will be filed in by interpolation + +def getMinMax(Mask,I,J,cX,axis): + rX = Mask.copy() + rX[J,I] = cX + rX = npy.ma.masked_array(rX,rX==MISSING) + xmin, xmax = rX.min(axis=axis), rX.max(axis=axis) + return (xmin,xmax) + +def _varList(f): + from grads import GrADS + if isinstance(f,Dataset): + return f.variables.keys() + elif isinstance(f,GrADS): + fh = f.query('file') + return fh.vars + else: + raise NotImplementedError, 'Only NetCDF or GrADS supported for now' + +def _varGet(f,name): + from grads import GrADS, numtypes + if isinstance(f,Dataset): + return f.variables[name] + elif isinstance(f,GrADS): + fh = f.query('file') + qh = f.query('ctlinfo') + nz = fh.var_levs[fh.vars.index(name)] + if nz==0: + f('set z 1') + shp = (fh.nt,fh.ny,fh.nx) + else: + shp = (fh.nt,nz,fh.ny,fh.nx) + var = numtypes.GaField(npy.zeros(shp)) + var.name = name + var.long_name = fh.Vars[name].long_name + var.missing_value = qh.undef + return var + else: + raise NotImplementedError, 'Only NetCDF or GrADS supported for now' + +def _varGetData(f,n,name): + from grads import GrADS + if isinstance(f,Dataset): + return f.variables[name][n] + elif isinstance(f,GrADS): + fh = f.query('file') + qh = f.query('ctlinfo') + f('set t %d'%(n+1)) + f('set x 1 %d'%fh.nx) + f('set y 1 %d'%fh.ny) + nz = fh.var_levs[fh.vars.index(name)] + if nz==0: + f('set z 1') + else: + f('set z 1 %d'%nz) + f.flush() + var = f.expr(name) + var[var.mask] = UNDEF + # print '\n ', name, ' --- ', var.shape, var.min(), var.max() + return var + else: + raise NotImplementedError, 'Only NetCDF or GrADS supported for now' + +class Curv2LLP(object): + + def __init__(self,xLon,xLat,rP=None): + """ + This class implements a somewhat generic regridding capability from + a generic lat-lon curvilinear grid on model vertical levels to a regular + lat-lon-pressure grid. + + On input: + xLon --- 2D array of longitudes on curvlinear grid (deg E), OR + 1D array of longitudes on regular grid (deg E) + xLat --- 2D array of latitudes on curvlinear grid (deg N), OR + 1D array of latitudes on regular grid (deg N) + cP --- 3D array of pressures (hPa) + + Arrays are assumed to have shape (y,x) and (z,y,x) + + """ + + # Curvilinear grid + # ---------------- + if len(xLon.shape) == 2: + + cLon, cLat = xLon, xLat + ny, nx = cLon.shape + self.curv = True # curvilinear grid + + # Regular grid coordinates + # ------------------------- + self.lon = npy.linspace(cLon.min(),cLon.max(),nx) + self.lat = npy.linspace(cLat.min(),cLat.max(),ny) + + # Indices of curvilinear grid on lat-lon grid + # ------------------------------------------- + self.I = (0.5+(cLon-self.lon[0])/(self.lon[1]-self.lon[0])).astype('int') + self.J = (0.5+(cLat-self.lat[0])/(self.lat[1]-self.lat[0])).astype('int') + + # Mask region outside of domain + # ----------------------------- + Mask = MISSING * npy.ones((ny,nx)) + xmin, xmax = getMinMax(Mask,self.I,self.J,cLon,axis=1) + ymin, ymax = getMinMax(Mask,self.I,self.J,cLat,axis=0) + for j in range(ny): + M = (self.lon[:]xmax[j]) + Mask[j,M] = UNDEF + for i in range(nx): + M = (self.lat[:]ymax[i]) + Mask[M,i] = UNDEF + self.Mask = Mask + + # Regular lat/lon grid + # -------------------- + elif len(xLon.shape) == 1: + ny, nx = len(xLat), len(xLon) + self.lon, self.lat = xLon, xLat + self.curv = False # Not a curvilinear grid + + else: + raise ValueError, 'Invalid dimensionality of xLon: %d'%len(xLon.shape) + + # Horizontal grid: destination size same as source grid + # ----------------------------------------------------- + self.ny, self.nx = ny, nx + + # Vertical aspects + # ---------------- + self.k1, self.alpha = [], [] + self.rP = rP + if rP is not None: + self.np = len(rP) + else: + self.np = 0 + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + This is an abstract method, it needs to be re-defined + when subclassing this class. + """ + raise NotImplementedError, 'Method get_cP not implemented in Curv2LLP' + + def set_pInterp(self,n,ncin): + """ + Retrieve vertical pressure and compute + vertical interpolation weights for time step "n". + """ + cP = self.get_cP(n,ncin) + self.k1, self.alpha = [], [] + if self.rP is not None: + bot_top = (cP[0,0,0]>cP[1,0,0]) # bottom-top or top-bottom? + self.nz = cP.shape[0] + for p in self.rP: + k1 = UNDEF*npy.ones((self.ny,self.nx)).astype('int') + a = UNDEF*npy.ones((self.ny,self.nx)) + if bot_top: + self.kdel = 1 + for k in range(self.nz-1): + k1 = npy.where( (cP[k+1]<=p)&(p=2: + f = interpolate.interp1d(self.lon[G],z[G],kind='linear', + bounds_error=False,fill_value=UNDEF) + rV[j,B] = f(self.lon[B]) + + return rV + + def regrid3d(self,cV): + """ + Regrid a 3D variable from a curvlinear to a regular lat-lon grid. + """ + + rV = UNDEF * npy.ones((self.np,self.ny,self.nx)) + + # Interpolate to every desired vertical pressure level + # ---------------------------------------------------- + for k in range(self.np): + k1, a = self.k1[k], self.alpha[k] + I = k1!=UNDEF + kmin, kmax = int(k1[I].min()), int(k1[I].max()) + cU = UNDEF * npy.ones((self.ny,self.nx)) + for k_ in range(kmin,kmax+1): + cU = npy.where(k1==k_, + (1-a)*cV[k_,:,:]+a*cV[k_+self.kdel,:,:], cU) + rV[k,:,:] = self.regrid(cU) + + return rV + + def writeNC ( self, tyme, options, ncin, zlib=False ): + """ + Write a NetCDF file with sampled GEOS-5 variables at the station locations + described by (lon,lat). + + On input: + + tyme --- array of time levels to write to file (usually 1) + options - Command line options: + outFile --- output filenane + format --- file format + dryrun --- writes out file with zeros + verbose + + """ + + # Open output NC file + # ------------------- + nc = Dataset(options.outFile,'w',format=options.format) + + # Set global attributes, borrow from input file + # --------------------------------------------- + if isinstance(ncin,Dataset): + for att in ncin.__dict__.keys(): + nc.__setattr__(att,ncin.__dict__[att]) + nc.History = 'Converted to pressure-lat-lon using curv2llp' + nc.Conventions = 'CF' + + # Create dimensions + # ----------------- + nx = nc.createDimension('lon', self.nx ) + ny = nc.createDimension('lat', self.ny ) + if self.np>0: + np = nc.createDimension('lev', self.np ) + nt = nc.createDimension('time', len(tyme)) + + # Coordinate variables + # -------------------- + lon = nc.createVariable('lon','f4',('lon',),zlib=zlib) + lon.long_name = 'Longitude' + lon.units = 'degrees_east' + lon[:] = self.lon[:] + + lat = nc.createVariable('lat','f4',('lat',),zlib=zlib) + lat.long_name = 'Latitude' + lat.units = 'degrees_north' + lat[:] = self.lat[:] + + if self.np > 0: + lev = nc.createVariable('lev','f4',('lev',),zlib=zlib) + lev.long_name = 'Pressure' + lev.units = 'hPa' + lev.positive = 'down' + lev.axis = 'z' + lev[:] = self.rP + + time = nc.createVariable('time','i4',('time',),zlib=zlib) + time.long_name = 'Time' + t0 = tyme[0] + time.units = 'seconds since %s'%t0.isoformat(' ') + time[:] = npy.array([(t-t0).total_seconds() for t in tyme]) + + # Create variables on NetCDF file. + # ------------------------------- + ncVar = dict() + # Vars = options.Vars or ncin.variables.keys() + Vars = options.Vars or _varList(ncin) + for v in Vars: + if v in options.ignore: continue + if options.verbose: stdout.write("[] Creating <%s> ... "%v) + # var = ncin.variables[v] + var = _varGet(ncin,v) + if len(var.shape) == 3: # 2D variable + dim = ('time','lat','lon') + if options.verbose: stdout.write("2d ... ") + elif len(var.shape) == 4: # 3D variable + if self.np == 0: + if options.verbose: stdout.write("ignored\n") + continue + dim = ('time', 'lev','lat','lon') + if options.verbose: stdout.write("3d ... ") + else: + if options.verbose: + stdout.write("ignored\n") + continue + this = nc.createVariable(var.name,'f4',dim,zlib=zlib) + try: + this.long_name = var.__dict__[u'long_name'] + except: + this.long_name = v + this.missing_value = UNDEF # out of domain + try: + this.units = var.__dict__[u'units'] + except: + this.units = 'unknown' + ncVar[v] = this + if options.verbose: stdout.write("ok\n") + + # Write variables for each time + # ----------------------------- + for n in range(len(tyme)): + if options.verbose: + stdout.write("[] Writing on %s ... "%tyme[0].isoformat()) + self.set_pInterp(n,ncin) # set interpolation weights + for v in Vars: + if v in options.ignore: continue + var = _varGetData(ncin,n,v) + if len(var.shape) == 2: # 2D variable + shp = ( self.ny, self.nx ) + elif len(var.shape) == 3: # 3D variable + if self.np == 0: continue + shp = ( self.np, self.ny, self.nx ) + else: continue + this = ncVar[v] + if options .dryrun: + this[n,:] = npy.zeros(shp)[:] + else: + this[n,:] = self.regrid(var)[:] + if options.verbose: stdout.write("%s ... "%v) + if options.verbose: stdout.write("done\n") + + # Close the file + # -------------- + nc.close() + + if options.verbose: + print("<> wrote %s file %s"%(options.format,options.outFile)) + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/firework_lv1_2llp.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/firework_lv1_2llp.py new file mode 100755 index 0000000..7ca78f6 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/firework_lv1_2llp.py @@ -0,0 +1,219 @@ +#!/usr/bin/env python +# +# Convert FireWork output to COARDS compliant file on a regular lat-lon-pressure grid. +# +# Arlindo da Silva, March 2019. + +from dateutil.parser import parse as isoparser +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + lon = nc.variables['rlon1'] + lat = nc.variables['rlat1'] + pref = nc.variables['pref'] + a = ncin.variables['a_1'][:] + b = ncin.variables['b_1'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = nc.variables['P0'][n,:,:]*100.0 # Pa + cP = npy.zeros((nz,ny,nx)) + for k in range(nz): + cP[k,:,:] = npy.exp(a[k] + b[k]*npy.log(ps[:,:]/pref))/100. #hPa + return cP + + +#--- +def getTyme(ncin): + T = ncin.variables['time'] + # hourss since 2018-08-07 00:00:00 + units = T.units + isoT0 = units.split(' since ')[1].replace(' ','T') + cDT = units.split(' ')[0] + sec = timedelta(seconds=1) + if cDT == "hours": + DT = 60 + else: + raise ValueError, "fix me, can only handle hours as unit of time" + t0 = isoparser(isoT0) + tyme = npy.array([t0 + int(t * DT)*sec for t in T]) + return tyme + +#--- +def append_vars(nc, zlib=False): + """ + Append total column PM2.5,CO to original file + """ + gz = nc.variables['GZ_vgrid5'][0,:,:,:] # geopotential height, units: dam, level3 (169 levels) + gz = gz*10.0 # dam -> m + pm25 = nc.variables['AF'][0,39::,:,:] # ug m-3 level1 = 85, use lowest 46 levels + co = nc.variables['CO'][0,:,:,:] # ppbv level2 = 46 + rho = nc.variables['RHO'][0,:,:,:] # kg m-3 level2 = 46 + + nz, ny, nx = pm25.shape + dz = npy.zeros((nz,ny,nx)) + for k in range(nz): # top to bottom + if k == nz-1: + dz[k,:,:] = 0.0 + else: + dz[k,:,:] = gz[2*(k+39),:,:]-gz[2*(k+39)+2,:,:] + + + # total cloumn PM2.5 + #---------------- + this = nc.createVariable('tcpm25','f4',('time', 'rlat1', 'rlon1'),zlib=zlib) + this.description = 'total column PM2.5' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(pm25*dz/1e9, axis=0) # kg m-2 + + # total cloumn CO + #---------------- + this = nc.createVariable('tcco','f4',('time', 'rlat1', 'rlon1'),zlib=zlib) + this.description = 'total column CO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(co/1e9*28.00/28.97*rho*dz, axis=0) # kg m-2 + + +#--- +def append_lml( nc, zlib=False): + """ + Append vars at lowest model level to the oroginal file. + """ + + for v in ['AF','AC','C3H8','CO','HCHO','ISOP','N2','NH3','NO','O3','OH','S2','PAN']: + this = nc.createVariable(v+'_lml','f4',('time','rlat1', 'rlon1'),zlib=zlib) + this.long_name = '' + this.missing_value = UNDEF # out of domain + this.units = '' + + nz, ny, nx = nc.variables[v][0,:,:,:].shape + this[0,:,:] = nc.variables[v][0,nz-1,:,:] # top to bottom + + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + # rP = '925,850,700,600' + rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,400,300,200' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] firew_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with firewout replaced with firewllp)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + firew_File = args[0] + else: + parser.error("must have 1 argument: firew_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + dirn = os.path.dirname(firew_File) + base = os.path.basename(firew_File) + options.outFile = dirn + '/firew.llp.' + base.replace('_uconversion_particles.netcdf4.compressed','.nc4') + if options.outFile == firew_File: + options.outFile = 'firew_llp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['rlon1', 'rlat1', 'pref', + 'a_1', 'b_1','lon_1', 'lat_1', 'level1', + 'a_2', 'b_2','level2', + 'a_3', 'b_3','level3', + 'a_5', 'b_5','level5', + 'time', 'GZ_vgrid5'] + + # options.Vars = ['AF', 'AC', 'N2', 'NO', 'O3', 'S2', 'H','TT_vgrid5'] + options.ignore += ['CO','NH3','C3H8','HCHO','ISOP', 'OH', + 'PAN','RHO','UU_vgrid5','VV_vgrid5'] + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # copy original file + # ------------------ + os.system("cp "+firew_File+" "+firew_File+".interm.nc") + + # Open the input file + # ------------------- + nc = Dataset(firew_File+".interm.nc",'a',format=options.format) + + # Time range + # ---------- + tyme = getTyme(nc) + + # Append lml vars + # --------------- + append_lml(nc, zlib=False) + append_vars(nc, zlib=False) + + + # Instantiate regridding class + # ---------------------------- + cLon = nc.variables['lon_1'][:,:] + cLat = nc.variables['lat_1'][:,:] + r = myCurv2LLP(cLon,cLat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + + os.system("rm "+firew_File+".interm.nc") + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/firework_lv1_2p.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/firework_lv1_2p.py new file mode 100755 index 0000000..087b165 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/firework_lv1_2p.py @@ -0,0 +1,219 @@ +#!/usr/bin/env python +# +# Convert FireWork output to COARDS compliant file on a regular lat-lon-pressure grid. +# +# Arlindo da Silva, March 2019. + +from dateutil.parser import parse as isoparser +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + lon = nc.variables['lon'] + lat = nc.variables['lat'] + pref = nc.variables['pref'] + a = ncin.variables['a_1'][:] + b = ncin.variables['b_1'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = nc.variables['P0'][n,:,:]*100.0 # Pa + cP = npy.zeros((nz,ny,nx)) + for k in range(nz): + cP[k,:,:] = npy.exp(a[k] + b[k]*npy.log(ps[:,:]/pref))/100. #hPa + return cP + + +#--- +def getTyme(ncin): + T = ncin.variables['time'] + # hourss since 2018-08-07 00:00:00 + units = T.units + isoT0 = units.split(' since ')[1].replace(' ','T') + cDT = units.split(' ')[0] + sec = timedelta(seconds=1) + if cDT == "hours": + DT = 60 + else: + raise ValueError, "fix me, can only handle hours as unit of time" + t0 = isoparser(isoT0) + tyme = npy.array([t0 + int(t * DT)*sec for t in T]) + return tyme + +#--- +def append_vars(nc, zlib=False): + """ + Append total column PM2.5,CO to original file + """ + gz = nc.variables['GZ_vgrid5'][0,:,:,:] # geopotential height, units: dam, level3 (169 levels) + gz = gz*10.0 # dam -> m + pm25 = nc.variables['AF'][0,39::,:,:] # ug m-3 level1 = 85, use lowest 46 levels + co = nc.variables['CO'][0,:,:,:] # ppbv level2 = 46 + rho = nc.variables['RHO'][0,:,:,:] # kg m-3 level2 = 46 + + nz, ny, nx = pm25.shape + dz = npy.zeros((nz,ny,nx)) + for k in range(nz): # top to bottom + if k == nz-1: + dz[k,:,:] = 0.0 + else: + dz[k,:,:] = gz[2*(k+39),:,:]-gz[2*(k+39)+2,:,:] + + + # total cloumn PM2.5 + #---------------- + this = nc.createVariable('tcpm25','f4',('time', 'lat', 'lon'),zlib=zlib) + this.description = 'total column PM2.5' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(pm25*dz/1e9, axis=0) # kg m-2 + + # total cloumn CO + #---------------- + this = nc.createVariable('tcco','f4',('time', 'lat', 'lon'),zlib=zlib) + this.description = 'total column CO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(co/1e9*28.00/28.97*rho*dz, axis=0) # kg m-2 + + +#--- +def append_lml( nc, zlib=False): + """ + Append vars at lowest model level to the oroginal file. + """ + + for v in ['AF','AC','C3H8','CO','HCHO','ISOP','N2','NH3','NO','O3','OH','S2','PAN']: + this = nc.createVariable(v+'_lml','f4',('time','lat', 'lon'),zlib=zlib) + this.long_name = '' + this.missing_value = UNDEF # out of domain + this.units = '' + + nz, ny, nx = nc.variables[v][0,:,:,:].shape + this[0,:,:] = nc.variables[v][0,nz-1,:,:] # top to bottom + + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + # rP = '925,850,700,600' + rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,400,300,200' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] firew_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with firewout replaced with firewllp)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + firew_File = args[0] + else: + parser.error("must have 1 argument: firew_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + dirn = os.path.dirname(firew_File) + base = os.path.basename(firew_File) + options.outFile = dirn + '/firew.llp.' + base.replace('_uconversion_particles.netcdf4.compressed','.nc4') + if options.outFile == firew_File: + options.outFile = 'firew_llp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['lon', 'lat', 'pref', + 'a_1', 'b_1','lon_1', 'lat_1', 'level1', + 'a_2', 'b_2','level2', + 'a_3', 'b_3','level3', + 'a_5', 'b_5','level5', + 'time', 'GZ_vgrid5'] + + # options.Vars = ['AF', 'AC', 'N2', 'NO', 'O3', 'S2', 'H','TT_vgrid5'] + options.ignore += ['CO','NH3','C3H8','HCHO','ISOP', 'OH', + 'PAN','RHO','UU_vgrid5','VV_vgrid5'] + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # copy original file + # ------------------ + os.system("cp "+firew_File+" "+firew_File+".interm.nc") + + # Open the input file + # ------------------- + nc = Dataset(firew_File+".interm.nc",'a',format=options.format) + + # Time range + # ---------- + tyme = getTyme(nc) + + # Append lml vars + # --------------- + append_lml(nc, zlib=False) + append_vars(nc, zlib=False) + + + # Instantiate regridding class + # ---------------------------- + cLon = nc.variables['lon'][:] + cLat = nc.variables['lat'][:] + r = myCurv2LLP(cLon,cLat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + + os.system("rm "+firew_File+".interm.nc") + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/firework_lv2_2llp.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/firework_lv2_2llp.py new file mode 100755 index 0000000..8892ca0 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/firework_lv2_2llp.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python +# +# Convert FireWork output to COARDS compliant file on a regular lat-lon-pressure grid. +# +# Arlindo da Silva, March 2019. + +from dateutil.parser import parse as isoparser +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + lon = nc.variables['rlon1'] + lat = nc.variables['rlat1'] + pref = nc.variables['pref'] + a = ncin.variables['a_2'][:] + b = ncin.variables['b_2'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = nc.variables['P0'][n,:,:]*100.0 # Pa + cP = npy.zeros((nz,ny,nx)) + for k in range(nz): + cP[k,:,:] = npy.exp(a[k] + b[k]*npy.log(ps[:,:]/pref))/100. #hPa + print cP.min() + return cP + + +#--- +def getTyme(ncin): + T = ncin.variables['time'] + # e.g. hourss since 2018-08-07 00:00:00 + units = T.units + isoT0 = units.split(' since ')[1].replace(' ','T') + cDT = units.split(' ')[0] + sec = timedelta(seconds=1) + if cDT == "hours": + DT = 60 + else: + raise ValueError, "fix me, can only handle hours as unit of time" + t0 = isoparser(isoT0) + tyme = npy.array([t0 + int(t * DT)*sec for t in T]) + return tyme + + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + # rP = '925,850,700,600' + rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,400,300,200' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] firew_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with firewout replaced with firewllp)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + firew_File = args[0] + else: + parser.error("must have 1 argument: firew_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + dirn = os.path.dirname(firew_File) + base = os.path.basename(firew_File) + options.outFile = dirn + '/firew.llp.' + base.replace('_uconversion_particles.netcdf4.compressed','.nc4') + if options.outFile == firew_File: + options.outFile = 'firew_llp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['rlon1', 'rlat1', 'pref', + 'a_1', 'b_1','lon_1', 'lat_1', 'level1', + 'a_2', 'b_2','level2', + 'a_3', 'b_3','level3', + 'a_5', 'b_5','level5', + 'time', 'GZ_vgrid5'] + + options.Vars = ['NH3','C3H8','HCHO','ISOP','CO', 'OH', 'PAN','RHO'] + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + + # Open the input file + # ------------------- + nc = Dataset(firew_File,format=options.format) + + # Time range + # ---------- + tyme = getTyme(nc) + + + # Instantiate regridding class + # ---------------------------- + cLon = nc.variables['lon_1'][:,:] + cLat = nc.variables['lat_1'][:,:] + r = myCurv2LLP(cLon,cLat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/firework_lv2_2p.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/firework_lv2_2p.py new file mode 100755 index 0000000..3fc6563 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/firework_lv2_2p.py @@ -0,0 +1,157 @@ +#!/usr/bin/env python +# +# Convert FireWork output to COARDS compliant file on a regular lat-lon-pressure grid. +# +# Arlindo da Silva, March 2019. + +from dateutil.parser import parse as isoparser +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + lon = nc.variables['lon'] + lat = nc.variables['lat'] + pref = nc.variables['pref'] + a = ncin.variables['a_2'][:] + b = ncin.variables['b_2'][:] + nx, ny, nz = lon.shape[0], lat.shape[0], len(a) + ps = nc.variables['P0'][n,:,:]*100.0 # Pa + cP = npy.zeros((nz,ny,nx)) + for k in range(nz): + cP[k,:,:] = npy.exp(a[k] + b[k]*npy.log(ps[:,:]/pref))/100. #hPa + print cP.min() + return cP + + +#--- +def getTyme(ncin): + T = ncin.variables['time'] + # e.g. hourss since 2018-08-07 00:00:00 + units = T.units + isoT0 = units.split(' since ')[1].replace(' ','T') + cDT = units.split(' ')[0] + sec = timedelta(seconds=1) + if cDT == "hours": + DT = 60 + else: + raise ValueError, "fix me, can only handle hours as unit of time" + t0 = isoparser(isoT0) + tyme = npy.array([t0 + int(t * DT)*sec for t in T]) + return tyme + + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + # rP = '925,850,700,600' + rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,400,300,200' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] firew_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with firewout replaced with firewllp)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + firew_File = args[0] + else: + parser.error("must have 1 argument: firew_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + dirn = os.path.dirname(firew_File) + base = os.path.basename(firew_File) + options.outFile = dirn + '/firew.llp.' + base.replace('_uconversion_particles.netcdf4.compressed','.nc4') + if options.outFile == firew_File: + options.outFile = 'firew_llp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['lon', 'lat', 'pref', + 'a_1', 'b_1','lon_1', 'lat_1', 'level1', + 'a_2', 'b_2','level2', + 'a_3', 'b_3','level3', + 'a_5', 'b_5','level5', + 'time', 'GZ_vgrid5'] + + options.Vars = ['NH3','C3H8','HCHO','ISOP','CO', 'OH', 'PAN','RHO'] + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + + # Open the input file + # ------------------- + nc = Dataset(firew_File,format=options.format) + + # Time range + # ---------- + tyme = getTyme(nc) + + + # Instantiate regridding class + # ---------------------------- + cLon = nc.variables['lon'][:] + cLat = nc.variables['lat'][:] + r = myCurv2LLP(cLon,cLat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/firework_regrid_latlon.ncl b/projects/MissionSupport/applications/WxModel/asia-aq/bin/firework_regrid_latlon.ncl new file mode 100755 index 0000000..1a32cf3 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/firework_regrid_latlon.ncl @@ -0,0 +1,134 @@ +; extract variables from original wrfout files +; Usage: ncl 'file_in="inname.nc"' 'file_out="outname.nc"' firework_regrid.ncl +;---------------------------------------------------------------------------- + +; load in the libraries +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/esmf/ESMF_regridding.ncl" + + + ; default values for file_in, dir_in, and file_out, if not specified + if (.not.isvar("file_in")) then + file_in = "../FireWork/2019070900_000" + end if + if (.not.isvar("file_out")) then + file_out = "../FireWork/2019070900_000_grid1.nc" + end if + + f=addfile(file_in, "r") + setfileoption("nc","Format","NetCDF4Classic") + setfileoption("nc","CompressionLevel",5) ; 0 ~ 9 + system("rm -f "+file_out) ;-- delete file + fo = addfile(file_out,"c") + + latlon_file="/gpfsm/dnb04/projects/p109/FIREX-AQ/sample_forecasts2/scripts/firework.lat_lon_1d.nc" + f_ll=addfile(latlon_file, "r") + lat_1d = f_ll->lat + lon_1d = f_ll->lon + +;-------------------read and write ------------------------------------------ + ; global attributes + global_attnames = getvaratts(f) + att=True + do i=0,dimsizes(global_attnames)-1 + ; print(f@$global_attnames(i)$) + att@$global_attnames(i)$ = f@$global_attnames(i)$ + end do + fileattdef(fo, att) + filedimdef(fo,"time",-1,True) + + vars = getfilevarnames(f) + ; vars_skip = (/"lat_2", "lon_2", "rlat2", "rlon2"/) + vars_subset = (/"time", "pref", \ + "a_1","b_1","level1", \ + "a_2","b_2","level2", \ + "a_3","b_3","level3", \ + "a_5","b_5","level5", \ + "AF","AC","CO","N2","NO","O3","S2","C3H8","GZ_vgrid5", \ + "HCHO","ISOP", "PAN","NH3","OH", "P0", \ + "H","RHO","TT_vgrid5","UU_vgrid5","VV_vgrid5" /) + + lat_1 = f->lat_1 + lon_1 = f->lon_1 + lat_2 = f->lat_2 + lon_2 = f->lon_2 + rlat1 = f->rlat1 + rlon1 = f->rlon1 + + + do i=0,dimsizes(vars)-1 + + if (.not.ismissing(ind( vars_subset.eq. vars(i) ))) then + print("processing: "+ vars(i)) + v := f->$vars(i)$ + dims := getvardims(v) + diml := dimsizes(v) + + if ( (.not.ismissing(str_match(dims,"rlat1")) .and. .not.ismissing(str_match(dims,"rlon1"))) \ + .or. (.not.ismissing(str_match(dims,"rlat2")) .and. .not.ismissing(str_match(dims,"rlon2"))) ) then + ; re-grid to lat lon + + ;---Set up options for regridding + if (.not.ismissing(str_match(dims,"rlat1"))) then + wgt_file="/gpfsm/dnb04/projects/p109/FIREX-AQ/sample_forecasts2/scripts/firework_regrid_wgt1.nc" + Opt = True + Opt@WgtFileName = wgt_file + Opt@SrcGridLat := lat_1 ; source grid + Opt@SrcGridLon := lon_1 + + else + wgt_file="/gpfsm/dnb04/projects/p109/FIREX-AQ/sample_forecasts2/scripts/firework_regrid_wgt2.nc" + Opt = True + Opt@WgtFileName = wgt_file + Opt@SrcGridLat := lat_2 ; source grid + Opt@SrcGridLon := lon_2 + end if + + Opt@DstGridLat = lat_1d ; destination grid + Opt@DstGridLon = lon_1d + + Opt@SrcRegional = True ; Necessary if grids + Opt@DstRegional = True ; are regional + + Opt@InterpMethod = "bilinear" ; "patch", "conserve" + Opt@ForceOverwrite = True ; Optional, but recommended. + Opt@PrintTimings = True ; Optional + Opt@Debug = False ; Optional + + ;---Do the regridding + if (.not.fileexists(wgt_file)) then + v_regrid := ESMF_regrid(v, Opt) + else + v_regrid := ESMF_regrid_with_weights(v, wgt_file, Opt) + end if + + ;delete(v_regrid@lat2d) + ;delete(v_regrid@lon2d) + nd = dimsizes(diml) + v_regrid!(nd-1)="lon" + v_regrid!(nd-2)="lat" + v_regrid&lat = lat_1d + v_regrid&lon = lon_1d + + ; printVarSummary(v) + ; printVarSummary(v_regrid) + + ; write output + fo->$vars(i)$ = v_regrid + + else + + fo->$vars(i)$ = v + + + end if + end if + end do + + + + + + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/musica.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/musica.py new file mode 100755 index 0000000..fb0321f --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/musica.py @@ -0,0 +1,266 @@ +#!/usr/bin/env python +# +# Convert CAM output to COARDS compliant file on pressure coordinates. +# The input grid is already regular lat/lon. +# +# Arlindo da Silva, March 2019. + +from dateutil.parser import parse as isoparser +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset, num2date +import numpy as npy +import os + +from curv2llp import * + +def get_cP(n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + cP = nc.variables['PMID'][n,:,:,:] + +#--- +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + + cP = nc.variables['PMID'][n,:,:,:] + +#--- +def getTyme(ncin): + T = ncin.variables['time'] + # days since 2018-08-07 00:00:00 + # datetime = num2date(T[:],units=T.units, calendar=T.calendar) + # print(datetime) + units = T.units + isoT0 = units.split(' since ')[1].replace(' ','T') + cDT = units.split(' ')[0] + sec = timedelta(seconds=1) + if cDT == "days": + DT = 24*60*60 + else: + raise ValueError, "fix me, can only handle days as unit of time" + t0 = isoparser(isoT0) + tyme = npy.array([t0 + int(t * DT)*sec for t in T ]) + return tyme + + +#--- +def append_density( ncin, zlib=False): + this = ncin.createVariable('rho','f4',('time', 'lev', 'lat', 'lon'),zlib=zlib) + this.long_name = 'air density' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-3' + print "added" + + tk = ncin.variables['T'][:,:,:,:] + nt, nz, ny, nx = tk.shape + + for n in range(nt): + cP = get_cP(n,ncin) + rho = cP # to conserve memory + Rd = 287.05 + for k in range(nz): + rho[k,:,:] = cP[k,:,:]*100.0/Rd/tk[n,k,:,:] + this[n,:,:,:] = rho[:,:,:] + + +#--- +def append_lml(ncin, options, zlib=False): + """ + Append vars at lowest model level to netcdf file. + """ + + # Open output NC file + # ------------------- + nc = Dataset(options.outFile,'a',format=options.format) + + for v + 'soa_a1','soa_a2','bc_a1','bc_a4','dst_a1', + 'dst_a2','dst_a3','ncl_a1','ncl_a2','ncl_a3','CO','NO2','NO','O3','SO2','rho']: + #'dst_a2','dst_a3','ncl_a1','ncl_a2','ncl_a3','CO','CO01','NO2','NO','O3','SO2','rho']: + this = nc.createVariable(v+'_lml','f4',('time','lat','lon'),zlib=zlib) + var = ncin.variables[v][:,:,:,:] + this.long_name = '' + this.missing_value = UNDEF # out of domain + this.units = '' + nt, nz, ny, nx = var.shape + for n in range(nt): + this[n,:,:] = var[n,87,:,:] + + nc.close() + +#--- +def append_vars(ncin, options, zlib=False): + """ + Append total column OC, CO to output file. + """ + # Open output NC file + # ------------------- + nc = Dataset(options.outFile,'a',format=options.format) + + g = 9.80665 + co = ncin.variables['CO'][:,:,:,:]*28.0/28.97 # kg kg-1 + rho = ncin.variables['rho'][:,:,:,:] # kg m-3 + nt, nz, ny, nx = co.shape + oc = npy.zeros((nt,nz,ny,nx)) + + for v in ['pom_a1','pom_a4','soa_a1','soa_a2']: + oc = oc + ncin.variables[v][:,:,:,:]/1.4 # 1.4 is the ratio of pom emissions vs co emissions + + delp = npy.zeros((nt,nz,ny,nx)) + for n in range(nt): + cPi = get_cPi(n,ncin) + for k in range(nz): + delp[n,k,:,:]= cPi[k+1,:,:]-cPi[k,:,:] # hPa + + + # total column CO + # --------------- + this = nc.createVariable('tcco','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name = 'total column CO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + for n in range(nt): + tcco = npy.sum(co[n,:,:,:]*delp[n,:,:,:]*100.0/g, axis=0) + this[n,:,:] = tcco[:,:] + + # total column pm2.5 + # --------------- + pm25 = ncin.variables['PM25'][:,:,:,:] # kg m-3 + this = nc.createVariable('tcpm25','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name = 'total column PM2.5' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + for n in range(nt): + tc = npy.sum(pm25[n,:,:,:]*delp[n,:,:,:]*100.0/rho[n,:,:,:]/g, axis=0) + this[n,:,:] = tc[:,:] + + # total column OC + # --------------- + this = nc.createVariable('tcoc','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name = 'total column OC' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + for n in range(nt): + tcoc = npy.sum(oc[n,:,:,:]*delp[n,:,:,:]*100.0/g, axis=0) + this[n,:,:] = tcoc[:,:] + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + #rP = '925,850,700,600' + rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,450,400,350,300,250,200,150,100' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] cam_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with .cam. replaced with .camp.)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + cam_File = args[0] + else: + parser.error("must have 1 argument: cam_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + options.outFile = cam_File.replace('.cam.','.camp.') + if options.outFile == cam_File: + options.outFile = 'camp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['lon', 'lat', 'p', 'time'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # copy original file + # ------------------ + os.system("cp "+cam_File+" "+cam_File+".interm.nc") + + # Open the input file + # ------------------- + nc0 = Dataset(cam_File, "r", format=options.format) + nc = Dataset( cam_File+".interm.nc", 'a', format=options.format) + + # Time range + # ---------- + tyme = getTyme(nc0) + print(tyme) + + # Air density + # ----------- + append_density(nc, zlib=False) + + # Coordinates + # ----------- + lon = nc.variables['lon'][:] + lat = nc.variables['lat'][:] + + # Instantiate regridding class + # ---------------------------- + r = myCurv2LLP(lon,lat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + + # append variables at the lowest model level + append_lml(nc, options, zlib=False) + + # append other vars + append_vars(nc, options, zlib=False) + + os.system("rm "+cam_File+".interm.nc") + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/musica2llp.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/musica2llp.py new file mode 100755 index 0000000..ad2d0d3 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/musica2llp.py @@ -0,0 +1,225 @@ +#!/usr/bin/env python +# +# Convert NAQFC-CMAQ output to COARDS compliant file on a regular lat-lon-pressure grid. +# + +from dateutil.parser import parse as isoparser +from optparse import OptionParser +from datetime import datetime, timedelta +from grads import GrADS +from netCDF4 import Dataset, MFDataset +import numpy as npy +import os + +from curv2llp import * + +#--- +#def getTyme(ncin): +# t = ncin.variables['time'][:,0,:] #TFLAG:units = "" ; +# nt, ns = t.shape +# day = timedelta(hours=2) +# tyme = npy.zeros(nt,dtype=datetime) + +# for i in range(nt): +# dstr = str(t[i,0]).zfill(7)+str(t[i,1]).zfill(6) +# tyme[i] = datetime(int(dstr[0:4]),1,1,int(dstr[7:9])) + (int(dstr[4:7])-1)*day +# return tyme + +def getTyme(ncin): + t = ncin.variables['time'][:] # TFLAG:units = "" ; + nt, ns = t.shape + day = timedelta(hours=2) + tyme = np.zeros(nt, dtype='datetime64[s]') + for i in range(nt): + dstr = str(t[i, 0]).zfill(7) + str(t[i, 1]).zfill(6) + date_str = "{}-{}-{}T{}:{}:{}".format(dstr[0:4], dstr[4:6], dstr[6:8], dstr[8:10], dstr[10:12], dstr[12:14]) + tyme[i] = np.datetime64(date_str) + + return tyme +#--- +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ga): + """ + Given time level "n", return 3D pressure for this time. + """ + ga('set t %d'%n) + fh = ga.query('file') + nz, ny, nx = fh.nz, fh.ny, fh.nx + ga('set z 1 %d'%fh.nz) + ga('set y 1 %d'%fh.ny) + ga('set x 1 %d'%fh.nx) + p = ga.expr('pres') + p = p/100.0 # in hPa + print(p.shape) + return p + #def get_cP(self,n,ncin): + # return ncin.variables['PRES'][n,:,:,:]/100. # in hPa + +#--- +def getCoords(ga): + + fh = ga.query('file') + + ga('set x 1 %d'%fh.nx) + ga('set y 1') + lon = ga.expr('lon') + + ga('set x 1') + ga('set y 1 %d'%fh.ny) + lat = ga.expr('lat') + + return (lat,lon) + +#--- +def append_vars(ncin, options, zlib=False): + """ + Append total column vars to output file + """ + # Open output NC file + # ------------------- + nc = Dataset(options.outFile,'a',format=options.format) + +# p = ncin.variables['PRES'][0,:,:,:] # Pa +# nz, ny, nx = p.shape +# oc1 = ncin.variables['AOLGAJ'][0,:,:,:] # ug m-3 +# oc2 = ncin.variables['AOLGBJ'][0,:,:,:] +# oc3 = ncin.variables['AORGCJ'][0,:,:,:] +# co = ncin.variables['CO'][0,:,:,:]*1e-6*28.0/28.97 # ppm -> kg kg-1 +# z = ncin.variables['ZF'][0,:,:,:] # full layer height above ground in m +# dz = npy.zeros((nz,ny,nx)) + +# for n in range(nz): +# if n==0: +# dz[n,:,:] = z[n,:,:] +# else: +# dz[n,:,:] = z[n,:,:] - z[n-1,:,:] + +# tk = ncin.variables['TA'][0,:,:,:] +# rho = npy.zeros((nz,ny,nx)) +# Rd = 287.05 +# rho[:,:,:] = p[:,:,:]/Rd/tk[:,:,:] + + + # total column OC + # --------------- +# this = nc.createVariable('tcoc','f4',('time', 'lat', 'lon'),zlib=zlib) +# this.long_name ='total cloumn OC' +# this.missing_value = UNDEF # out of domain +# this.units = 'kg m-2' +# this[0,:,:] =npy.sum((oc1 + oc2 + oc3)*1e-9*dz, axis=0) + + # total column CO + # --------------- +# this = nc.createVariable('tcco','f4',('time', 'lat', 'lon'),zlib=zlib) +# this.long_name ='total cloumn CO' +# this.missing_value = UNDEF # out of domain +# this.units = 'kg m-2' +# this[0,:,:] =npy.sum( co*rho*dz, axis=0) + + +##--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + rP = '925,850,700,600' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] cmaq_file", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same as input, end with .llp.nc4)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + cmaq_file = args[0] + else: + parser.error("must have 1 argument: cmaq_file") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + dirn = os.path.dirname(cmaq_file) + base = os.path.basename(cmaq_file) + options.outFile = dirn + '/' + base.replace('.ncf','.llp.nc4') + if options.outFile == cmaq_file: + options.outFile = 'cmaq_llp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['pres'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # Open the input file + # ------------------- + nc = Dataset(cmaq_file) + + # Time range + # ---------- + tyme = getTyme(nc) + + # Get lat lon + # ---------- + ga = GrADS(Window=False,Echo=False) + cmaq_ctl = cmaq_file.replace('.nc', '.ctl') + fh = ga.open(cmaq_ctl) + lat, lon = getCoords(ga) + + # Instantiate regridding class + # ---------------------------- + r = myCurv2LLP(lon,lat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, ga, zlib=False ) + + # Append vars + # ----------- + append_vars(nc, options, zlib=False) + + + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/naaps.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/naaps.py new file mode 100644 index 0000000..e69de29 diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/naqfc_cmaq2llp.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/naqfc_cmaq2llp.py new file mode 100755 index 0000000..887a412 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/naqfc_cmaq2llp.py @@ -0,0 +1,214 @@ +#!/usr/bin/env python +# +# Convert NAQFC-CMAQ output to COARDS compliant file on a regular lat-lon-pressure grid. +# + +from dateutil.parser import parse as isoparser +from optparse import OptionParser +from datetime import datetime, timedelta +from grads import GrADS +from netCDF4 import Dataset, MFDataset +import numpy as npy +import os + +from curv2llp import * + +#--- +def getTyme(ncin): + t = ncin.variables['TFLAG'][:,0,:] #TFLAG:units = "" ; + nt, ns = t.shape + day = timedelta(days=1) + tyme = npy.zeros(nt,dtype=datetime) + + for i in range(nt): + dstr = str(t[i,0]).zfill(7)+str(t[i,1]).zfill(6) + tyme[i] = datetime(int(dstr[0:4]),1,1,int(dstr[7:9])) + (int(dstr[4:7])-1)*day + return tyme + +#--- +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ga): + """ + Given time level "n", return 3D pressure for this time. + """ + ga('set t %d'%n) + fh = ga.query('file') + nz, ny, nx = fh.nz, fh.ny, fh.nx + ga('set z 1 %d'%fh.nz) + ga('set y 1 %d'%fh.ny) + ga('set x 1 %d'%fh.nx) + p = ga.expr('pres') + p = p/100.0 # in hPa + print(p.shape) + return p + #def get_cP(self,n,ncin): + # return ncin.variables['PRES'][n,:,:,:]/100. # in hPa + +#--- +def getCoords(ga): + + fh = ga.query('file') + + ga('set x 1 %d'%fh.nx) + ga('set y 1') + lon = ga.expr('lon') + + ga('set x 1') + ga('set y 1 %d'%fh.ny) + lat = ga.expr('lat') + + return (lat,lon) + +#--- +def append_vars(ncin, options, zlib=False): + """ + Append total column vars to output file + """ + # Open output NC file + # ------------------- + nc = Dataset(options.outFile,'a',format=options.format) + + p = ncin.variables['PRES'][0,:,:,:] # Pa + nz, ny, nx = p.shape + oc1 = ncin.variables['AOLGAJ'][0,:,:,:] # ug m-3 + oc2 = ncin.variables['AOLGBJ'][0,:,:,:] + oc3 = ncin.variables['AORGCJ'][0,:,:,:] + co = ncin.variables['CO'][0,:,:,:]*1e-6*28.0/28.97 # ppm -> kg kg-1 + z = ncin.variables['ZF'][0,:,:,:] # full layer height above ground in m + dz = npy.zeros((nz,ny,nx)) + + for n in range(nz): + if n==0: + dz[n,:,:] = z[n,:,:] + else: + dz[n,:,:] = z[n,:,:] - z[n-1,:,:] + + tk = ncin.variables['TA'][0,:,:,:] + rho = npy.zeros((nz,ny,nx)) + Rd = 287.05 + rho[:,:,:] = p[:,:,:]/Rd/tk[:,:,:] + + + # total column OC + # --------------- + this = nc.createVariable('tcoc','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name ='total cloumn OC' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] =npy.sum((oc1 + oc2 + oc3)*1e-9*dz, axis=0) + + # total column CO + # --------------- + this = nc.createVariable('tcco','f4',('time', 'lat', 'lon'),zlib=zlib) + this.long_name ='total cloumn CO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] =npy.sum( co*rho*dz, axis=0) + + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + rP = '925,850,700,600' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] cmaq_file", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same as input, end with .llp.nc4)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + cmaq_file = args[0] + else: + parser.error("must have 1 argument: cmaq_file") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + dirn = os.path.dirname(cmaq_file) + base = os.path.basename(cmaq_file) + options.outFile = dirn + '/' + base.replace('.ncf','.llp.nc4') + if options.outFile == cmaq_file: + options.outFile = 'cmaq_llp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['pres'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # Open the input file + # ------------------- + nc = Dataset(cmaq_file) + + # Time range + # ---------- + tyme = getTyme(nc) + + # Get lat lon + # ---------- + ga = GrADS(Window=False,Echo=False) + cmaq_ctl = cmaq_file.replace('.nc', '.ctl') + fh = ga.open(cmaq_ctl) + lat, lon = getCoords(ga) + + # Instantiate regridding class + # ---------------------------- + r = myCurv2LLP(lon,lat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, ga, zlib=False ) + + # Append vars + # ----------- + append_vars(nc, options, zlib=False) + + + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/naqfc_split_hourly.sh b/projects/MissionSupport/applications/WxModel/asia-aq/bin/naqfc_split_hourly.sh new file mode 100755 index 0000000..79c9d5e --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/naqfc_split_hourly.sh @@ -0,0 +1,27 @@ +#!/bin/sh +# split the full outputs for all forecast hours to hourly files +# append 3-D pressure to the chemical files +# Usage : yyyymmdd path_data +# ------------------------------------------------------------- + + +runtime=$1 +y4=`echo $runtime | cut -c1-4` +y2=`echo $runtime | cut -c3-4` +m2=`echo $runtime | cut -c5-6` +d2=`echo $runtime | cut -c7-8` +h2=12 + +path_store=$2 + +cd $path_store + +for dh in `seq 0 1 72` +do + dtime=`date -d "$y4$m2$d2 $h2 $dh hour" +"%Y%m%d_%Hz"` + ncks -O -d TSTEP,$dh,$dh ./aqm.$runtime.t12z.conc-select.ncf ./aqm.$runtime.t12z.conc-select.$dtime.nc + ncks -A -d TSTEP,$dh,$dh -d LAY,0,19 -v PRES,QV,QC,ZF,TA ./aqm.$runtime.t12z.metcro3d-select.ncf ./aqm.$runtime.t12z.conc-select.$dtime.nc + #ncks -A -d TSTEP,$dh,$dh -d LAY,0,19 -v UWIND,VWIND ./aqm.$runtime.t12z.metdot3d-select.ncf ./aqm.$runtime.t12z.conc-select.$dtime.nc + ncks -A -d TSTEP,$dh,$dh -d LAY,0 -v PBL2 ./aqm.$runtime.t12z.metcro2d-select.ncf ./aqm.$runtime.t12z.conc-select.$dtime.nc +done + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/ncar_wrfchem_subset.ncl b/projects/MissionSupport/applications/WxModel/asia-aq/bin/ncar_wrfchem_subset.ncl new file mode 100755 index 0000000..51df3a2 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/ncar_wrfchem_subset.ncl @@ -0,0 +1,93 @@ +; extract variables from original wrfout files +; Usage: ncl 'file_in="name_in.nc"' 'file_out="name_out.nc"' naaps_subset.ncl +;---------------------------------------------------------------------------- + +; load in the libraries +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRF_contributed.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRFUserARW.ncl" + +; set default values for file_in, dir_in, and file_out, if not specified + if (.not.isvar("file_in")) then + file_in = "../NCAR-WRFchem/wrfout_hourly_d01_2019-08-13_00:00:00" + end if + if (.not.isvar("file_out")) then + file_out = "../NCAR-WRFchem/wrfout_hourly_d01_2019-08-13_00:00:00.subsetted.nc" + end if + + f=addfile(file_in, "r") + global_attnames = getvaratts(f) + system("rm -f "+file_out) ;-- delete file + setfileoption("nc","Format","NetCDF4") + fo = addfile(file_out,"c") ;-- create new + + ; global attributes + att=True + do i=0,dimsizes(global_attnames)-1 + ; print(f@$global_attnames(i)$) + att@$global_attnames(i)$ = f@$global_attnames(i)$ + end do + + ;setfileoption(fo,"DefineMode",True) + fileattdef(fo, att) + filedimdef(fo,"time",-1,True) + + + vars = (/"Times","XLAT", "XLONG", "PSFC", "T", "U", "V", "W", "p", \ + "QVAPOR", "QCLOUD", "CLDFRA", "PBLH", "EXTCOF55",\ + "o3", "no", "no2", "no3", "PM2_5_DRY", \ + "so2", "sulf", "co", "ch4"/) + + + + + ; write variables + do i=0,dimsizes(vars)-1 + print("varname: "+ vars(i)) + + if (vars(i).eq."p") then + va := wrf_user_getvar(f,"p",-1) ; Pa + ; printVarSummary(va) + else + v := f->$vars(i)$ + if (.not.ismissing(v@stagger) .and. strlen(v@stagger).gt.0) then + va := wrf_user_unstagger(v, v@stagger) + else + va:=v + end if + end if + + ;output + fo->$vars(i)$=va + end do + + + ext=flt2dble(f->EXTCOF55) ; unit: km-1 + ph=f->PH ;"perturbation geopotential" (Time, bottom_top_stag, south_north, west_east) + phb=f->PHB ; "base state geopotential" unit: m2 s-2 + d=dimsizes(ph) + g=9.80665 + gph = flt2dble(ph+phb)/g + dz= gph(:,1:d(1)-1,:,:)-gph(:,0:d(1)-2,:,:) + + + copy_VarMeta(ext,dz) + dz@description="model layer thickness" + dz@units = "m" + + Rd=287.05 + p = wrf_user_getvar(f,"p",-1) + tk = wrf_user_getvar(f,"tk",-1) + rho = p/Rd/tk + copy_VarMeta(ext,rho) + rho@description="dry air density" + rho@units = "kg m-3" + + + + ; append rho and dz + fo->dz=dz + fo->rho=rho + + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/ncarwrfchem2llp.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/ncarwrfchem2llp.py new file mode 100755 index 0000000..28154ed --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/ncarwrfchem2llp.py @@ -0,0 +1,205 @@ +#!/usr/bin/env python +# +# Convert WRFchem output to COARDS compliant file on a regular lat-lon-pressure grid. +# +# Arlindo da Silva, March 2019. + +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + press = ncin.variables['p'][n,:,:,:]/100.0 # hPa + return press[:,:,:] + +#--- +def getTyme(ncin): + t = ncin.variables['Times'] + + if len(t[:,0]) != 1: + raise ValueError, 'Fix me, I can only handle 1 step per file for now' + tstr=''.join(t[0,:]) + print(tstr[0:4]) # 2018-08-07_06:00:00 + tyme = datetime(int(tstr[0:4]), + int(tstr[5:7]), + int(tstr[8:10]), + int(tstr[11:13])) + return npy.array([tyme,]) + +#--- +def append_lml(nc, zlib=False): + """ + Append vars at lowest model level to the oroginal file. + """ + for v in ['o3', 'no', 'no2', 'no3', + 'so2', 'sulf', 'co', 'PM2_5_DRY', 'orgpai', 'orgpaj', 'dz', 'rho']: +# 'BC1', 'BC2', 'OC1', 'OC2', 'DUST_1', 'DUST_2', 'DUST_3', +# 'DUST_4', 'DUST_5', 'SEAS_1', 'SEAS_2', 'SEAS_3', 'SEAS_4','rho']: + var = nc.variables[v] + this = nc.createVariable(v+'_lml','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = var.description+' at lowest model level' + this.missing_value = UNDEF # out of domain + this.units = var.units + this[0,:,:] = var[0,0,:,:] + + +#--- +def append_vars(nc, zlib=False): + """ + Append total column vars + """ + + co = nc.variables['co'][0,:,:,:] # ppmv + co = co/1e6*28.0/28.97 # kg kg-1 + nz, ny, nx = co.shape + oc = nc.variables['orgpai'][0,:,:,:] + nc.variables['orgpaj'][0,:,:,:] # ug kg-1 + dz = nc.variables['dz'][0,:,:,:] # m + rho = nc.variables['rho'][0,:,:,:] # kg m-3 + pm25 = nc.variables['PM2_5_DRY'][0,:,:,:] # ug m-3 + ext = nc.variables['EXTCOF55'][0,:,:,:] # ug kg-1 + + # total cloumn OC + #---------------- + this = nc.createVariable('tcoc','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column OC' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(oc*rho*dz/1e9, axis=0) # kg m-2 + + # total AOD + #---------------- + this = nc.createVariable('aod', 'f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'aod' + this.missing_value = UNDEF + this.units = '' + this[0,:,:] = npy.sum(ext*dz/1000, axis=0) + + # total cloumn CO + #---------------- + this = nc.createVariable('tcco','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column CO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(co*rho*dz, axis=0) # kg m-2 + + # total cloumn PM2.5 + #---------------- + this = nc.createVariable('tcpm25','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column PM2.5' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(pm25*dz/1e9, axis=0) # kg m-2 + + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + # rP = '925,850,700,600' + rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,450,400,350,300,250,200,150,100' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] wrf_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with wrfout replaced with wrfllp)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + wrf_File = args[0] + else: + parser.error("must have 1 argument: wrf_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + options.outFile = wrf_File.replace('wrfout_','wrfllp_') + if options.outFile == wrf_File: + options.outFile = 'wrfllp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['XLONG', 'XLAT', 'p', 'time','lon','lat'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # copy original file + # ------------------ + os.system("cp "+wrf_File+" interm.nc") + + # Open the input file + # ------------------- + nc = Dataset( "interm.nc", 'a', format=options.format) + + # Append vars + # ----------- + append_lml(nc,zlib=False) + append_vars(nc,zlib=False) + + # Time range + # ---------- + tyme = getTyme(nc) + + + # Instantiate regridding class + # ---------------------------- + cLon = npy.squeeze(nc.variables['XLONG'][:,:,:]) + cLat = npy.squeeze(nc.variables['XLAT'][:,:,:]) + r = myCurv2LLP(cLon,cLat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/ncarwrfchemtracer2llp.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/ncarwrfchemtracer2llp.py new file mode 100755 index 0000000..4bfca7c --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/ncarwrfchemtracer2llp.py @@ -0,0 +1,190 @@ +#!/usr/bin/env python +# +# Convert WRFchem output to COARDS compliant file on a regular lat-lon-pressure grid. +# +# Arlindo da Silva, March 2019. + +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + press = ncin.variables['p'][n,:,:,:]/100.0 # hPa + return press[:,:,:] + +#--- +def getTyme(ncin): + t = ncin.variables['Times'] + + if len(t[:,0]) != 1: + raise ValueError, 'Fix me, I can only handle 1 step per file for now' + tstr=''.join(t[0,:]) + print(tstr[0:4]) # 2018-08-07_06:00:00 + tyme = datetime(int(tstr[0:4]), + int(tstr[5:7]), + int(tstr[8:10]), + int(tstr[11:13])) + return npy.array([tyme,]) + +#--- +def append_lml(nc, zlib=False): + """ + Append vars at lowest model level to the oroginal file. + """ + for v in ['tr17_r01', 'tr17_r02', 'tr17_r03', 'tr17_r04', 'tr17_r05', 'tr17_r06', + 'tr17_r07', 'tr17_r08', 'tr17_r09', 'tr17_r10', 'tr17_point', 'tr17_shp', 'rho']: + var = nc.variables[v] + this = nc.createVariable(v+'_lml','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = var.description+' at lowest model level' + this.missing_value = UNDEF # out of domain + this.units = var.units + this[0,:,:] = var[0,0,:,:] + + +#--- +def append_vars(nc, zlib=False): + """ + Append total column vars + """ + + co = nc.variables['tr17_r01'][0,:,:,:] # ppmv + for v in ['tr17_r02', 'tr17_r03', 'tr17_r04', 'tr17_r05', 'tr17_r06', 'tr17_r07', 'tr17_r08', 'tr17_r09', 'tr17_r10']: + co = co + nc.variables[v][0,:,:,:] + co = co/1e6*28.0/28.97 # kg kg-1 + nz, ny, nx = co.shape + + no = nc.variables['tr17_point'][0,:,:,:] + for i in ['tr17_shp']: + no = no + nc.variables[i][0,:,:,:] + no = no/1e6*30.0/28.97 + nz, ny, nx = no.shape + dz = nc.variables['dz'][0,:,:,:] # m + rho = nc.variables['rho'][0,:,:,:] # kg m-3 + + # total cloumn CO + #---------------- + this = nc.createVariable('tcco','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column CO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(co*rho*dz, axis=0) # kg m-2 + + # total cloumn NO + #---------------- + this = nc.createVariable('tcpm25','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column NO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(no*rho*dz, axis=0) # kg m-2 + + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + # rP = '925,850,700,600' + rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,450,400,350,300,250,200,150,100' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] wrf_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with wrfout replaced with wrfllp)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + wrf_File = args[0] + else: + parser.error("must have 1 argument: wrf_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + options.outFile = wrf_File.replace('wrfout_','wrfllp_') + if options.outFile == wrf_File: + options.outFile = 'wrfllp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['XLONG', 'XLAT', 'p', 'time','lon','lat'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # copy original file + # ------------------ + os.system("cp "+wrf_File+" "+wrf_File+".interm.nc") + # Open the input file + # ------------------- + nc = Dataset( wrf_File+".interm.nc", 'a', format=options.format) + # Append vars + # ----------- + append_lml(nc,zlib=False) + append_vars(nc,zlib=False) + + # Time range + # ---------- + tyme = getTyme(nc) + + + # Instantiate regridding class + # ---------------------------- + cLon = npy.squeeze(nc.variables['XLONG'][:,:,:]) + cLat = npy.squeeze(nc.variables['XLAT'][:,:,:]) + r = myCurv2LLP(cLon,cLat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + os.system("rm "+wrf_File+".interm.nc") diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/prep_data.sh b/projects/MissionSupport/applications/WxModel/asia-aq/bin/prep_data.sh new file mode 100755 index 0000000..366d582 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/prep_data.sh @@ -0,0 +1,42 @@ +#!/bin/bash +# example commands to run the data preprocessing scripts +# + + export PATH=/gpfsm/dnb04/projects/p109/FIREX-AQ/sample_forecasts2/scripts:$PATH + dirn=/gpfsm/dnb04/projects/p109/FIREX-AQ/sample_forecasts2/PrsLatLon + +# CAMS +# ---- + cams.py -v CAMS/20190501/z_cams_c_ecmf_20190501000000_prod_fc_merged_006.nc + +# RAQMS +# ----- + raqms2p.py -v -o $dirn/raqms.llp.20180807_12z.nc4 RAQMS/uwhyb_08_07_2018_12Z.chem.assim.firex.nc +#arqi2llp.py -v -o $dirn/arqi.llp.2018093012_036.nc4 ARQI/2018093012_036_uconversion_particles.netcdf4.compressed +#cam2p.py -v -o $dirn/cam.llp.20180808.nc4 CAM-Chem/forecast.cam.na.2018-08-08-00000.nc +#cam_waccm2p.py -v -o $dirn/cam.llp.20190508.nc4 CAM-Chem/20190503/forecast.cam.na.2019-05-08-00000.nc +#wrf2llp.py -v -o $dirn/wrfchem.llp.20190331_12z.nc4 WRFChem-GOCART/wrfout_d01_2019-03-31_12.conus.subsetted.nc + +#alt_g2ctl 1907019000600 >hrrrx.ctl +#alt_gmp hrrrx.ctl +#lats4d.sh -v -o $dirn/hrrrx.llp.20190312_01z.nc4 -i ./HRRRX/hrrrx.ctl -format netcdf4 # 3D + + +#ncl 'file_in="RAP-Chem/wrfout_d01_2018-08-07_06:00:00"' 'file_out="RAP-Chem/wrfout_d01_2018-08-07_06:00:00.subsetted.nc"' scripts/rapchem_subset.ncl +#rapchem2llp.py -v -o $dirn/rapchem.llp.20180807_06z.nc4 RAP-Chem/wrfout_d01_2018-08-07_06:00:00.subsetted.nc + +#ncl 'file_in="NAAPS/2019031200_006_000_nap043o_000.nc"' 'file_out="PrsLatLon/naaps.llp.2019031200_006.nc"' scripts/naaps_subset.ncl + +#ncl 'file_in="NCAR-WRFchem/20190422/wrfout_d01_2019-04-22_06:00:00"' 'file_out="NCAR-WRFchem/20190422/wrfout_d01_2019-04-22_06:00:00.subsetted.nc"' scripts/ncar_wrfchem_subset.ncl +#ncarwrfchem2llp.py -v -o $dirn/ncarwrfchem.llp.20190422_06z.nc4 NCAR-WRFchem/20190422/wrfout_d01_2019-04-22_06:00:00.subsetted.nc + + +#naqfc_split_hourly.sh 20190507 NAQFC-CMAQ/20190507 +#naqfc_cmaq2llp.py -v -o $dirn/cmaq.llp.20190507_12z.nc4 NAQFC-CMAQ/20190507/aqm.20190507.t12z.conc-select.20190507_12z.nc + + + +##lats4d.sh -v -o $dirn/cmaq.sfc.2080707_13z -i NAQFC-CMAQ/cmaq-aot.ctl -format netcdf4 # 2D +##lats4d.sh -v -o $dirn/hrrr.sfc.2080707_07z -i HRRR-Smoke/hrrr.ctl -format netcdf4 # 2D + + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/rapchem2llp.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/rapchem2llp.py new file mode 100755 index 0000000..2c049b0 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/rapchem2llp.py @@ -0,0 +1,198 @@ +#!/usr/bin/env python +# +# Convert WRFchem output to COARDS compliant file on a regular lat-lon-pressure grid. +# +# Arlindo da Silva, March 2019. + +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + press = (ncin.variables['p'][n,:,:,:])/100. # in hPa + return press[:,:,:] + +#--- +def getTyme(ncin): + t = ncin.variables['Times'] + + if len(t[:,0]) != 1: + raise ValueError, 'Fix me, I can only handle 1 step per file for now' + tstr=''.join(t[0,:]) + print(tstr[0:4]) # 2018-08-07_06:00:00 + tyme = datetime(int(tstr[0:4]), + int(tstr[5:7]), + int(tstr[8:10]), + int(tstr[11:13])) + return npy.array([tyme,]) + +#--- +def append_lml(nc, zlib=False): + """ + Append vars at lowest model level to the oroginal file. + """ + for v in ['PM2_5_DRY', 'nh4aj', 'nh4ai','no3aj', 'no3ai','sulf', 'so4aj', 'so4ai', + 'orgpai', 'orgpaj','ecj', 'eci','seas','asoa1j', 'asoa1i','asoa2j', 'asoa2i','asoa3j', + 'asoa3i','asoa4j', 'asoa4i','bsoa1j', 'bsoa1i','bsoa2j', 'bsoa2i','bsoa3j', 'bsoa3i', + 'bsoa4j', 'bsoa4i','soila','smoke','co','no2','no','o3','so2','ALT']: + var = nc.variables[v] + this = nc.createVariable(v+'_lml','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = var.description+' at lowest model level' + this.missing_value = UNDEF # out of domain + this.units = var.units + this[0,:,:] = var[0,0,:,:] + +#--- +def append_vars(nc, zlib=False): + """ + Append total column vars + """ + + co = nc.variables['co'][0,:,:,:] # ppmv + co = co/1e6*28.0/28.97 # kg kg-1 + nz, ny, nx = co.shape + oc = npy.zeros((nz,ny,nx)) + for v in ['asoa1j', 'asoa1i','asoa2j', 'asoa2i','asoa3j', + 'asoa3i','asoa4j', 'asoa4i','bsoa1j', 'bsoa1i','bsoa2j', 'bsoa2i','bsoa3j', 'bsoa3i', + 'bsoa4j', 'bsoa4i','orgpai', 'orgpaj']: + oc = oc + nc.variables[v][0,:,:,:] # ug kg-1 + rho = 1.0/nc.variables['ALT'][0,:,:,:] # kg m-3 + dz = nc.variables['dz'][0,:,:,:] # m + pm25 = nc.variables['PM2_5_DRY'][0,:,:,:] # ug m-3 + + # total cloumn OC + #---------------- + this = nc.createVariable('tcoc','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column OC' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(oc*rho*dz/1e9, axis=0) # kg m-2 + + # total cloumn CO + #---------------- + this = nc.createVariable('tcco','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column CO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(co*rho*dz, axis=0) # kg m-2 + + # total cloumn PM2.5 + #---------------- + this = nc.createVariable('tcpm25','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column CO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(pm25*dz/1e9, axis=0) # kg m-2 + + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + rP = '925,850,700,600' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] wrf_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with wrfout replaced with wrfllp)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + wrf_File = args[0] + else: + parser.error("must have 1 argument: wrf_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + options.outFile = wrf_File.replace('wrfout_','wrfllp_') + if options.outFile == wrf_File: + options.outFile = 'wrfllp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['XLONG', 'XLAT', 'p', 'time','lon','lat'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # copy original file + # ------------------ + os.system("cp "+wrf_File+" interm.nc") + + # Open the input file + # ------------------- + nc = Dataset( "interm.nc", 'a', format=options.format) + + # Append vars + # ----------- + append_lml(nc,zlib=False) + append_vars(nc,zlib=False) + + # Time range + # ---------- + tyme = getTyme(nc) + + + # Instantiate regridding class + # ---------------------------- + cLon = npy.squeeze(nc.variables['XLONG'][:,:,:]) + cLat = npy.squeeze(nc.variables['XLAT'][:,:,:]) + r = myCurv2LLP(cLon,cLat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/raqms2p.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/raqms2p.py new file mode 100755 index 0000000..a7d9197 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/raqms2p.py @@ -0,0 +1,324 @@ +#!/usr/bin/env python +# +# Convert RAQMS output to COARDS compliant file on pressure coordinates. +# The input grid is already regular lat/lon. +# +# Arlindo da Silva, March 2019. + +from dateutil.parser import parse as isoparser +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +#--- +def getTyme(ncin): + t = ncin.variables['time'] + if len(t) != 1: + raise ValueError, 'Fix me, I can only handle 1 step per file for now' + yyyymmddhh = t.units + tyme = datetime(int(yyyymmddhh[0:4]), + int(yyyymmddhh[4:6]), + int(yyyymmddhh[6:8]), + int(yyyymmddhh[8:10]), + ) + return npy.array([tyme,]) + +#--- +def get_cP(n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + delp = nc.variables['delp'][n,:,:,:] + nz, ny, nx = delp.shape + + pe = npy.zeros((nz+1,ny,nx)) + pe[0,:,:] = 0.4 # derived from comparison with ps. + for k in range(nz): + pe[k+1,:,:] = pe[k,:,:] + delp[k,:,:] + + cP = delp # to conserve memory + for k in range(nz): + cP[k,:,:] = (pe[k,:,:]+pe[k+1,:,:])/2. + + return cP + + +#--- +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + delp = nc.variables['delp'][n,:,:,:] + nz, ny, nx = delp.shape + + pe = npy.zeros((nz+1,ny,nx)) + pe[0,:,:] = 0.4 # derived from comparison with ps. + for k in range(nz): + pe[k+1,:,:] = pe[k,:,:] + delp[k,:,:] + + cP = delp # to conserve memory + for k in range(nz): + cP[k,:,:] = (pe[k,:,:]+pe[k+1,:,:])/2. + + return cP + +def append_vars(ncin, zlib=False): + """ + Append AOD, total column PM2.5, OC, CO to original file. + """ + + # Need this for getting AOD + # ------------------------- + delp = 100*ncin.variables['delp'][0,:,:,:] # in Pa + g = 9.80665 + + # AOD + # --- + rho = ncin.variables['rho'][0,:,:,:] + for v in ['ext_tot', 'ext_sulf', 'ext_bcoc', 'ext_dust', 'ext_salt']: + s = v.replace('ext_','') + aod = npy.sum(ncin.variables[v][0,:,:,:]*delp[:,:,:]/rho[:,:,:],axis=0)/g + this = ncin.createVariable('aod_'+s,'f4',('time', 'south_north', 'west_east'),zlib=zlib) + this.long_name = u'%s Aerosol Optical Depth'%s.capitalize() + this.missing_value = UNDEF # out of domain + this.units = '1' + this[0,:,:] = aod[:,:] + + # PM2.5 + # ----- + oc1 = ncin.variables['ioc1'][0,:,:,:] + so4aer = ncin.variables['iso4aer'][0,:,:,:] + oc1 = ncin.variables['ioc1'][0,:,:,:] + oc2 = ncin.variables['ioc2'][0,:,:,:] + bc1 = ncin.variables['ibc1'][0,:,:,:] + bc2 = ncin.variables['ibc2'][0,:,:,:] + du1 = ncin.variables['idu1'][0,:,:,:] + du2 = ncin.variables['idu2'][0,:,:,:] + ss1 = ncin.variables['iss1'][0,:,:,:] + ss2 = ncin.variables['iss2'][0,:,:,:] + + bcoc=bc1+bc2+oc1+oc2 + ssalt=ss1+0.942*ss2 + dust=du1+0.286*du2 + + # Assume all sulfate is ammonium sulfate + amo = 132. + amd = 28.9644 + vmmr = amo/amd + so4aer=1e9*rho*so4aer*vmmr + # carbon aerosols + amo = 16.8 + amd = 28.9644 + vmmr = amo/amd + bcoc=1e9*rho*bcoc*vmmr + # dust + dust=1e9*rho*dust + # ssalt + ssalt=1e9*rho*ssalt + + pm25=so4aer+bcoc+ssalt+dust + this = ncin.createVariable('pm25','f4',('time','top_bottom', 'south_north', 'west_east'),zlib=zlib) + this.long_name = 'pm2.5' + this.missing_value = UNDEF # out of domain + this.units = 'ug m**-3' + this[0,:,:,:] = pm25[:,:,:] + + + # total cloumn PM2.5 + # ------------------ + nz, ny, nx = pm25.shape + var = npy.zeros((ny,nx)) + var = npy.sum(pm25[:,:,:]/1e9*delp[:,:,:]/g/rho, axis=0) + this = ncin.createVariable('tcpm25','f4',('time', 'south_north', 'west_east'),zlib=zlib) + this.long_name = 'total column pm2.5' + this.missing_value = UNDEF # out of domain + this.units = 'kg m**-2' + this[0,:,:] = var[:,:] + + # total cloumn OC and CO + # ---------------------- + co = ncin.variables['ico'][0,:,:,:]*28.0/28.97 # kg/kg + var = npy.zeros((ny,nx)) + var = npy.sum(co[:,:,:]*delp[:,:,:]/g, axis=0) + this = ncin.createVariable('tcco','f4',('time', 'south_north', 'west_east'),zlib=zlib) + this.long_name = 'total column co' + this.missing_value = UNDEF # out of domain + this.units = 'kg m**-2' + this[0,:,:] = var[:,:] + + oc =( ncin.variables['ioc1'][0,:,:,:] + ncin.variables['ioc2'][0,:,:,:] )*12.0/28.97 # kg/kg + var = npy.zeros((ny,nx)) + var = npy.sum(oc[:,:,:]*delp[:,:,:]/g, axis=0) + this = ncin.createVariable('tcoc','f4',('time', 'south_north', 'west_east'),zlib=zlib) + this.long_name = 'total column oc' + this.missing_value = UNDEF # out of domain + this.units = 'kg m**-2' + this[0,:,:] = var[:,:] + + + +def append_lml(ncin, options, zlib=False): + """ + Append vars at lowest model level to netcdf file. + """ + + # Open output NC file + # ------------------- + nc = Dataset(options.outFile,'a',format=options.format) + + for v in ['iso4aer','ioc1','ioc2','ibc1','ibc2','idu1','idu2','idu3','idu4','idu5', + 'iss1','iss2','iss3','iss4','iss5','ico','no','ino2','iso2','o3vmr','rho','pm25']: + this = nc.createVariable(v+'_lml','f4',('time','lat','lon'),zlib=zlib) + this.long_name = '' + this.missing_value = UNDEF # out of domain + this.units = '' + this[0,:,:] = ncin.variables[v][0,34,:,:] + + nc.close() + +def append_density(ncin, zlib=False): + + # append air density to input file + + cP = get_cP(0,ncin) + psfc = ncin.variables['psfc'][0,:,:] # in hPa + a = 0.286 + theta = ncin.variables['ttheta'][0,:,:,:] + nz, ny, nx = theta.shape + rho = theta # to conserve memory + Rd = 287.05 + for k in range(nz): + T = theta[k,:,:]/pow((psfc/cP[k,:,:]),a) + rho[k,:,:] = cP[k,:,:]*100.0/Rd/T + + this = ncin.createVariable('rho','f4',('time', 'top_bottom', 'south_north', 'west_east'),zlib=zlib) + this.long_name = 'air density' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-3' + this[0,:,:,:] = rho[:,:,:] + + + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' +# rP = '925,850,700,600' + rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,450,400,350,300,250,200,150,100' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] raqms_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with uwhyb replaced with uwllp)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + raqms_File = args[0] + else: + parser.error("must have 1 argument: raqms_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + options.outFile = raqms_File.replace('uwhyb_','uwllp_') + if options.outFile == raqms_File: + options.outFile = 'raqms_llp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['lon', 'lat', 'p', 'time'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # copy original file + # ------------------ + + interm = name + '.tmp.nc' + os.system("cp "+raqms_File+" "+interm) + print "cp "+raqms_File+" "+interm + + + # Open the input file + # ------------------- + # nc = Dataset(raqms_File) + nc = Dataset(interm,'a',format=options.format) + + # Time range + # ---------- + tyme = getTyme(nc) + + # calculate air density + # --------------------- + append_density(nc, zlib=False) + + # append pm2.5, aod, total column OC and CO + # ----------------------------------------- + append_vars(nc, zlib=False) + + # Coordinates + # ----------- + lon = nc.variables['lon'][:] + lat = nc.variables['lat'][:] + + # Instantiate regridding class + # ---------------------------- + r = myCurv2LLP(lon,lat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + + # append variables at the lowest model level + append_lml(nc, options, zlib=False) + + os.remove(interm) diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/regrid_musica.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/regrid_musica.py new file mode 100644 index 0000000..6aaef16 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/regrid_musica.py @@ -0,0 +1,82 @@ +import xarray as xr +import numpy as np +import os +from optparse import OptionParser + +def append_density(ds): + # Assuming you have a function to calculate air density and append it to the dataset + # You can replace this with your actual function + pass + +def append_lml(nc, zlib=False): + """ + Append vars at lowest model level to the oroginal file. + """ + for v in ['bc_tot', 'dst_tot', 'pom_tot', 'pm25']: + var = nc.variables[v] + this = nc.createVariable(v+'_lml','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = var.description+' at lowest model level' + this.missing_value = UNDEF # out of domain + this.units = var.units + this[0,:,:] = var[0,0,:,:] + + +def append_vars(ds): + # Assuming you have a function to append other variables + # You can replace this with your actual function + p = ncin.variables['level'][:] # pressure levels, top to bottom in Pa + nz, ny, nx = rho.shape + dp = npy.zeros((nz,ny,nx)) + dp[0,:,:]=(p[0]+p[1])/2. + for k in range(1,nz-1): + dp[k,:,:] = (p[k+1]-p[k-1])/2. + dp[nz-1,:,:] = ps - (p[nz-1]+p[nz-2])/2. + + pass + +def main(): + # Parse command line options + parser = OptionParser(usage="Usage: %prog [OPTIONS] input_file output_file", + version='1.0.0' ) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-f", "--format", dest="format", default='NETCDF4', + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=NETCDF4)") + + parser.add_option("-v", "--verbose", action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + (options, args) = parser.parse_args() + + if len(args) == 2: + input_File, output_File = args + else: + parser.error("must have 2 arguments: input_file output_file") + + # Open the input dataset + ds = xr.open_dataset(input_File) + + # Define the target pressure levels + target_pressure_levels = [975, 950, 925, 900, 875, 850, 825, 800, 775, 750, 725, 700, 650, 600, 550, 500, 450, 400, 350, 300, 250, 200, 150, 100] + + # Interpolate the dataset to the target pressure levels + ds_interpolated = ds.interp(lev=target_pressure_levels, method='linear', kwargs={'fill_value': 'extrapolate'}) + + # Provide latitude and longitude details + ds_interpolated['lat'] = ds['lat'] + ds_interpolated['lon'] = ds['lon'] + # Save the interpolated dataset to a new NetCDF file + ds_interpolated.to_netcdf(output_File, format=options.format) + + # Close the datasets + ds.close() + ds_interpolated.close() + +if __name__ == "__main__": + main() + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/regrid_uiowa.ncl b/projects/MissionSupport/applications/WxModel/asia-aq/bin/regrid_uiowa.ncl new file mode 100644 index 0000000..1049746 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/regrid_uiowa.ncl @@ -0,0 +1,52 @@ +; extract variables from original wrfout files +; Usage: ncl 'file_in="name_in.nc"' 'file_out="name_out.nc"' regrid_uiowa.ncl +;---------------------------------------------------------------------------- + +; load in the libraries +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" + + f=addfile(file_in, "r") + global_attnames = getvaratts(f) + system("rm -f "+file_out) ;-- delete file + setfileoption("nc","Format","NetCDF4") + fo = addfile(file_out,"c") ;-- create new + +; fc = file_constants having the lat lon +fc = addfile("/discover/nobackup/mmohanty/Asia-AQ/bin/uiowa_asiaaq_fcst_constants.nc","r") +lat = fc->lat +lon = fc->lon +lev = f->lev + minlat = min(lat) + maxlat = max(lat) + minlon = 88.7 + maxlon = 139.2 + +vars = (/"PBLH", "AOD550", "COL_OC", "COL_EC", "COL_PM25", "COL_CO", "U", "V", "T", "RH",\ + "PM25", "EC", "OC", "SO4", "NO3", "NH4", "CO", "SO2", "O3", "CH2O",\ + "NO", "NO2"/) + +;---Set up options for regridding to 0.2 degree grid + Opt = True + + Opt@SrcGridLat = lat + Opt@SrcGridLon = lon + +;---If you don't set these two, the regridding will be VERY slow + Opt@DstLLCorner = (/floor(minlat)-0.2,floor(minlon)+0.2/) + Opt@DstURCorner = (/ ceil(maxlat)-0.2, ceil(maxlon)+0.2/) + Opt@DstGridType = "0.2deg" ; destination grid + + Opt@ForceOverwrite = True + Opt@Debug = True + +;---Do two types of regridding: bilinear and patch + Opt@InterpMethod = "neareststod" + +do i = 0, dimsizes(vars)-1 + print("varname: " + vars(i)) + v := f->$vars(i)$ + print(dimsizes(v)) + va := ESMF_regrid(v, Opt) + fo->$vars(i)$ = va +end do diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/regrid_uiowa.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/regrid_uiowa.py new file mode 100644 index 0000000..62abc5c --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/regrid_uiowa.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python +# +# Convert WRFchem output to COARDS compliant file on a regular lat-lon-pressure grid. +# +# Added lines for UIOWA CMAQ outputs, Feb. 2024. +# Arlindo da Silva, March 2019. + +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + press = ncin.variables['p'][n,:,:,:]/100.0 # hPa + return press[:,:,:] + +def getTyme_cmaq(cmaq_File): + date_str = str(cmaq_File)[-17:-13]+str(cmaq_File)[-13:-11]+str(cmaq_File)[-11:-9] + print(date_str) + hour_str = str(cmaq_File)[-6:-3] + print(hour_str) + hour = int(hour_str) + print(hour) + + date = datetime.strptime(date_str, "%Y%m%d") + print(date) + if hour >= 24: + ndays = hour // 24 + date += timedelta(days=ndays) + new_hour = hour - 24*ndays + else: + new_hour = hour + + print(new_hour) + new_date_str = date.strftime("%Y%m%d") + print(new_date_str) + new_hour_str = '0'+str(new_hour).zfill(2) + tyme = datetime(int(new_date_str[0:4]), + int(new_date_str[4:6]), + int(new_date_str[6:8]), + int(new_hour_str)) + print(tyme) + # Append vars + # ----------- +# append_lml(nc,zlib=False) + + # Time range + # ---------- +# tyme = getTyme(nc) + tyme = getTyme_cmaq(wrf_File) + + + # Instantiate regridding class + # ---------------------------- + cLon = npy.squeeze(nc_cord.variables['lon'][:,:]) + cLat = npy.squeeze(nc_cord.variables['lat'][:,:]) + r = myCurv2LLP(cLon,cLat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + + os.system("rm "+wrf_File+".interm.nc") + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/subset.sh b/projects/MissionSupport/applications/WxModel/asia-aq/bin/subset.sh new file mode 100755 index 0000000..128e925 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/subset.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +fname=$1 +ncks=$BASEDIR/Linux/bin/ncks + +$ncks -O -d latitude,15.0,70.0 -d longitude,190.0,310.0 $fname $fname.tmp +#/bin/mv -f $fname.tmp $fname + +exit 0 diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/ucla_wrfchem_subset.ncl b/projects/MissionSupport/applications/WxModel/asia-aq/bin/ucla_wrfchem_subset.ncl new file mode 100755 index 0000000..7ee7275 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/ucla_wrfchem_subset.ncl @@ -0,0 +1,93 @@ +; extract variables from original wrfout files +; Usage: ncl 'file_in="name_in.nc"' 'file_out="name_out.nc"' naaps_subset.ncl +;---------------------------------------------------------------------------- + +; load in the libraries +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRF_contributed.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRFUserARW.ncl" + +; set default values for file_in, dir_in, and file_out, if not specified + if (.not.isvar("file_in")) then + file_in = "../NCAR-WRFchem/wrfout_hourly_d01_2019-08-13_00:00:00" + end if + if (.not.isvar("file_out")) then + file_out = "../NCAR-WRFchem/wrfout_hourly_d01_2019-08-13_00:00:00.subsetted.nc" + end if + + f=addfile(file_in, "r") + global_attnames = getvaratts(f) + system("rm -f "+file_out) ;-- delete file + setfileoption("nc","Format","NetCDF4") + fo = addfile(file_out,"c") ;-- create new + + ; global attributes + att=True + do i=0,dimsizes(global_attnames)-1 + ; print(f@$global_attnames(i)$) + att@$global_attnames(i)$ = f@$global_attnames(i)$ + end do + + ;setfileoption(fo,"DefineMode",True) + fileattdef(fo, att) + filedimdef(fo,"time",-1,True) + + + vars = (/"Times","XLAT", "XLONG", "PSFC", "T", "U", "V", "W", "p", \ + "QVAPOR", "QCLOUD", "CLDFRA", "PBLH", "EXTCOF55", "TAUAER1", "TAUAER2", "TAUAER3", "TAUAER4",\ + "o3", "no", "no2", "no3", "PM2_5_DRY", "seas", "so4ai", "so4aj", "orgpai", "orgpaj", "eci", "ecj", \ + "so2", "hcho", "co", "ch4", "iso", "soila", "lnox_total"/) + + + + + ; write variables + do i=0,dimsizes(vars)-1 + print("varname: "+ vars(i)) + + if (vars(i).eq."p") then + va := wrf_user_getvar(f,"p",-1) ; Pa + ; printVarSummary(va) + else + v := f->$vars(i)$ + if (.not.ismissing(v@stagger) .and. strlen(v@stagger).gt.0) then + va := wrf_user_unstagger(v, v@stagger) + else + va:=v + end if + end if + + ;output + fo->$vars(i)$=va + end do + + + ext=flt2dble(f->EXTCOF55) ; unit: km-1 + ph=f->PH ;"perturbation geopotential" (Time, bottom_top_stag, south_north, west_east) + phb=f->PHB ; "base state geopotential" unit: m2 s-2 + d=dimsizes(ph) + g=9.80665 + gph = flt2dble(ph+phb)/g + dz= gph(:,1:d(1)-1,:,:)-gph(:,0:d(1)-2,:,:) + + + copy_VarMeta(ext,dz) + dz@description="model layer thickness" + dz@units = "m" + + Rd=287.05 + p = wrf_user_getvar(f,"p",-1) + tk = wrf_user_getvar(f,"tk",-1) + rho = p/Rd/tk + copy_VarMeta(ext,rho) + rho@description="dry air density" + rho@units = "kg m-3" + + + + ; append rho and dz + fo->dz=dz + fo->rho=rho + + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/uclawrf.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/uclawrf.py new file mode 100755 index 0000000..241e037 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/uclawrf.py @@ -0,0 +1,200 @@ +#!/usr/bin/env python +# +# Convert WRFchem output to COARDS compliant file on a regular lat-lon-pressure grid. +# +# Arlindo da Silva, March 2019. + +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + press = ncin.variables['p'][n,:,:,:]/100.0 # hPa + return press[:,:,:] + +#--- +def getTyme(ncin): + t = ncin.variables['Times'] + + if len(t[:,0]) != 1: + raise ValueError, 'Fix me, I can only handle 1 step per file for now' + tstr=''.join(t[0,:]) + print(tstr[0:4]) # 2018-08-07_06:00:00 + tyme = datetime(int(tstr[0:4]), + int(tstr[5:7]), + int(tstr[8:10]), + int(tstr[11:13])) + return npy.array([tyme,]) + +#--- +def append_lml(nc, zlib=False): + """ + Append vars at lowest model level to the oroginal file. + """ + for v in [ 'no', 'no2', 'no3']: + var = nc.variables[v] + this = nc.createVariable(v+'_lml','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = var.description+' at lowest model level' + this.missing_value = UNDEF # out of domain + this.units = var.units + this[0,:,:] = var[0,0,:,:] + + +#--- +def append_vars(nc, zlib=False): + """ + Append total column vars + """ + + no = nc.variables['no'][0,:,:,:] # ppmv + no = no/1e6*30.01/28.97 # kg kg-1 + nz, ny, nx = no.shape + + no2 = nc.variables['no2'][0,:,:,:] # ppmv + no2 = no2/1e6*46.0/28.97 # kg kg-1 + nz, ny, nx = no2.shape + + no3 = nc.variables['no3'][0,:,:,:] # ppmv + no3 = no3/1e6*30.01/28.97 # kg kg-1 + nz, ny, nx = no3.shape + + dz = nc.variables['dz'][0,:,:,:] # m + rho = nc.variables['rho'][0,:,:,:] # kg m-3 + + # total cloumn NO + #---------------- + this = nc.createVariable('tcno','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column NO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(no*rho*dz/1e9, axis=0) # kg m-2 + + # total cloumn NO2 + #---------------- + this = nc.createVariable('tcno2','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column NO2' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(no2*rho*dz, axis=0) # kg m-2 + + # total cloumn NO3 + #---------------- + this = nc.createVariable('tcno3','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column NO3' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(no3*dz/1e9, axis=0) # kg m-2 + + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + # rP = '925,850,700,600' + rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,450,400,350,300,250,200,150,100' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] wrf_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with wrfout replaced with wrfllp)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + wrf_File = args[0] + else: + parser.error("must have 1 argument: wrf_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + options.outFile = wrf_File.replace('wrfout_','wrfllp_') + if options.outFile == wrf_File: + options.outFile = 'wrfllp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['XLONG', 'XLAT', 'p', 'time','lon','lat'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # copy original file + # ------------------ + os.system("cp "+wrf_File+" interm.nc") + + # Open the input file + # ------------------- + nc = Dataset( "interm.nc", 'a', format=options.format) + + # Append vars + # ----------- + append_lml(nc,zlib=False) + append_vars(nc,zlib=False) + + # Time range + # ---------- + tyme = getTyme(nc) + + + # Instantiate regridding class + # ---------------------------- + cLon = npy.squeeze(nc.variables['XLONG'][:,:,:]) + cLat = npy.squeeze(nc.variables['XLAT'][:,:,:]) + r = myCurv2LLP(cLon,cLat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/uclawrfchem2llp.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/uclawrfchem2llp.py new file mode 100755 index 0000000..ac99b5e --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/uclawrfchem2llp.py @@ -0,0 +1,234 @@ +#!/usr/bin/env python +# +# Convert WRFchem output to COARDS compliant file on a regular lat-lon-pressure grid. +# +# Arlindo da Silva, March 2019. + +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + press = ncin.variables['p'][n,:,:,:]/100.0 # hPa + return press[:,:,:] + +#--- +def getTyme(ncin): + t = ncin.variables['Times'] + + if len(t[:,0]) != 1: + raise ValueError, 'Fix me, I can only handle 1 step per file for now' + tstr=''.join(t[0,:]) + print(tstr[0:4]) # 2018-08-07_06:00:00 + tyme = datetime(int(tstr[0:4]), + int(tstr[5:7]), + int(tstr[8:10]), + int(tstr[11:13])) + return npy.array([tyme,]) + +#--- +def append_lml(nc, zlib=False): + """ + Append vars at lowest model level to the oroginal file. + """ + for v in ['o3', 'so2', 'hcho','no', 'no3', 'soila', 'no2', 'so4ai', 'so4aj', 'co', 'PM2_5_DRY', 'seas', + 'orgpai', 'orgpaj', 'eci', 'ecj', 'iso', 'rho']: + var = nc.variables[v] + this = nc.createVariable(v+'_lml','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = var.description+' at lowest model level' + this.missing_value = UNDEF # out of domain + this.units = var.units + this[0,:,:] = var[0,0,:,:] + + +#--- +def append_vars(nc, zlib=False): + """ + Append total column vars + """ + + co = nc.variables['co'][0,:,:,:] # ppmv + co = co/1e6*28.0/28.97 # kg kg-1 + nz, ny, nx = co.shape + oc = nc.variables['orgpai'][0,:,:,:] + nc.variables['orgpaj'][0,:,:,:] # ug kg-1 + bc = nc.variables['eci'][0,:,:,:] + nc.variables['ecj'][0,:,:,:] # ug kg-1 + dz = nc.variables['dz'][0,:,:,:] # m + no2 = nc.variables['no2'][0,:,:,:] + no2 = no2/1e6*46.0/28.97 + no2 = no2*6.022*10e23/460 + hcho = nc.variables['hcho'][0,:,:,:] + hcho = hcho/1e6*30.03/28.97 + nz, ny, nx = no2.shape + nz, ny, nx = hcho.shape + rho = nc.variables['rho'][0,:,:,:] # kg m-3 + pm25 = nc.variables['PM2_5_DRY'][0,:,:,:] # ug m-3 + ext = nc.variables['EXTCOF55'][0,:,:,:] + + #AOD + #--------------- + this = nc.createVariable('aod', 'f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'aod' + this.missing_value = UNDEF + this.units = '' + this[0,:,:] = npy.sum(ext*dz/1000, axis=0) + + # total cloumn OC + #---------------- + this = nc.createVariable('tcoc','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column OC' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(oc*rho*dz/1e9, axis=0) # kg m-2 + + # total cloumn BC + #---------------- + this = nc.createVariable('tcbc','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column BC' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(bc*rho*dz/1e9, axis=0) # kg m-2 + + # total cloumn CO + #---------------- + this = nc.createVariable('tcco','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column CO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(co*rho*dz, axis=0) # kg m-2 + + # total cloumn NO2 + #---------------- + this = nc.createVariable('tcno2','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column NO2' + this.missing_value = UNDEF # out of domain + this.units = 'molecules cm-2' + this[0,:,:] = npy.sum(no2*rho*dz, axis=0) # molecules cm-2 + + # total cloumn NO2 + #---------------- + this = nc.createVariable('tchcho','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column HCHO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(hcho*rho*dz, axis=0) # molecules cm-2 + + # total cloumn PM2.5 + #---------------- + this = nc.createVariable('tcpm25','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column PM2.5' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(pm25*dz/1e9, axis=0) # kg m-2 + + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + # rP = '925,850,700,600' + rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,450,400,350,300,250,200,150,100' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] wrf_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with wrfout replaced with wrfllp)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + wrf_File = args[0] + else: + parser.error("must have 1 argument: wrf_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + options.outFile = wrf_File.replace('wrfout_','wrfllp_') + if options.outFile == wrf_File: + options.outFile = 'wrfllp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['XLONG', 'XLAT', 'p', 'time','lon','lat'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # copy original file + # ------------------ + os.system("cp "+wrf_File+" "+wrf_File+".interm.nc") + # Open the input file + # ------------------- + nc = Dataset( wrf_File+".interm.nc", 'a', format=options.format) + # Append vars + # ----------- + append_lml(nc,zlib=False) + append_vars(nc,zlib=False) + + # Time range + # ---------- + tyme = getTyme(nc) + + + # Instantiate regridding class + # ---------------------------- + cLon = npy.squeeze(nc.variables['XLONG'][:,:,:]) + cLat = npy.squeeze(nc.variables['XLAT'][:,:,:]) + r = myCurv2LLP(cLon,cLat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + + os.system("rm "+wrf_File+".interm.nc") diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/uiowa_cmaq2llp.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/uiowa_cmaq2llp.py new file mode 100755 index 0000000..e67f4d1 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/uiowa_cmaq2llp.py @@ -0,0 +1,151 @@ +#!/usr/bin/env python +# +# Convert WRFchem output to COARDS compliant file on a regular lat-lon-pressure grid. +# +# Arlindo da Silva, March 2019. + +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + pres = ncin.variables['lev'] # hPa + press = npy.tile(pres[:, npy.newaxis, npy.newaxis], (1, 5, 5)) + #press = npy.broadcast_to(pres, (5, 3)) + print(press) + return press[:,:,:] + +def getTyme_cmaq(cmaq_File): + date_str = str(cmaq_File)[-17:-13]+str(cmaq_File)[-13:-11]+str(cmaq_File)[-11:-9] + print(date_str) + hour_str = str(cmaq_File)[-6:-3] + print(hour_str) + hour = int(hour_str) + print(hour) + + date = datetime.strptime(date_str, "%Y%m%d") + print(date) + if hour >= 24: + ndays = hour // 24 + date += timedelta(days=ndays) + new_hour = hour - 24*ndays + else: + new_hour = hour + + print(new_hour) + new_date_str = date.strftime("%Y%m%d") + print(new_date_str) + new_hour_str = '0'+str(new_hour).zfill(2) + tyme = datetime(int(new_date_str[0:4]), + int(new_date_str[4:6]), + int(new_date_str[6:8]), + int(new_hour_str)) + print(tyme) + return npy.array([tyme,]) + +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + # rP = '925,850,700,600' + rP = '1000, 925, 850, 700, 600' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] wrf_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with wrfout replaced with wrfllp)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 2 : + cord_File = args[0] + wrf_File = args[1] + else: + parser.error("must have 2 argument: cord_File, wrf_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + options.outFile = wrf_File.replace('wrfout_','wrfllp_') + if options.outFile == wrf_File: + options.outFile = 'wrfllp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['XLONG', 'XLAT', 'p', 'time','lon','lat'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # copy original file + # ------------------ + os.system("cp "+wrf_File+" "+wrf_File+".interm.nc") + # Open the input file + # ------------------- + nc_cord = Dataset( cord_File) + nc = Dataset( wrf_File+".interm.nc", 'a', format=options.format) + # Time range + # ---------- + tyme = getTyme_cmaq(wrf_File) + + # Instantiate regridding class + # ---------------------------- + cLon = npy.squeeze(nc_cord.variables['lon'][:,:]) + cLat = npy.squeeze(nc_cord.variables['lat'][:,:]) + r = myCurv2LLP(cLon,cLat,options.rP) + + # Write output file + # ----------------- + r.writeNC (tyme, options, nc, zlib=False ) + + os.system("rm "+wrf_File+".interm.nc") diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/uiowawrfchem2llp.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/uiowawrfchem2llp.py new file mode 100755 index 0000000..c7c0da4 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/uiowawrfchem2llp.py @@ -0,0 +1,208 @@ +#!/usr/bin/env python +# +# Convert UIOWA WRFchem output to COARDS compliant file on a regular lat-lon-pressure grid. +# +# Arlindo da Silva, March 2019. + +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + return ncin.variables['P'][0,:,:,:]/100. # in hPa + +#--- +def getTyme(wrf_File): + # input e.g.: WRFCHEM_UIOWA_2019-07-22_12.nc + base = os.path.basename(wrf_File) + tyme = datetime(int(base[14:18]), + int(base[19:21]), + int(base[22:24]), + int(base[25:27])) + return npy.array([tyme,]) + +#--- +def append_lml(nc, zlib=False): + """ + Append vars at lowest model level to the oroginal file. + """ + for v in ['TEMP', 'RHO', 'RH', 'CLDFRA', 'U', 'V', + 'QVAPOR', 'CO', 'HCHO', 'NO', 'NO2', 'NH3', 'O3', 'SO2', + 'PM25', 'NITRATE', 'OC', 'BC', 'SULF', 'OIN', 'AMMONIUM', 'NA', 'CL']: + var = nc.variables[v] + this = nc.createVariable(v+'_lml','f4',('Time', 'lat', 'lon'),zlib=zlib) + this.description = v +' at lowest model level' + this.missing_value = UNDEF # out of domain + if 'units' in var.ncattrs(): + this.units = var.units + this[0,:,:] = var[0,0,:,:] + +#--- +def append_vars(nc, zlib=False): + """ + Append total column vars + """ + g = 9.80665 + rho = nc.variables['RHO'][0,:,:,:] # kg m-3 + psfc = nc.variables['PSFC'][0,:,:] # Pa + p = nc.variables['P'][0,:,:,:] # Pa + nz, ny, nx = p.shape + dz = npy.zeros((nz,ny,nx)) + for k in range(nz): # bottom to top + if k == 0: + dz[k,:,:]= (psfc-p[0,:,:])/rho[0,:,:]/g + else: + dz[k,:,:]= (p[k-1,:,:]-p[k,:,:])/rho[k,:,:]/g + + # total cloumn OC + #---------------- + tcoc = npy.zeros((ny, nx)) + tcoc = npy.sum(nc.variables['OC'][0,:,:,:]*dz/1e9, axis=0) # in kg m-2 + this = nc.createVariable('tcoc','f4',('Time', 'lat', 'lon'),zlib=zlib) + this.description = 'total column OC' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = tcoc[:,:] + + + # total cloumn pm2.5 + #---------------- + tc = npy.zeros((ny,nx)) + tc = npy.sum(nc.variables['PM25'][0,:,:,:]*dz/1e9, axis=0 ) + this = nc.createVariable('tcpm25','f4',('Time', 'lat', 'lon'),zlib=zlib) + this.description = 'total column PM2.5' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = tc[:,:] + + + # total cloumn CO + #---------------- + tc = npy.zeros((ny,nx)) + tc = npy.sum(nc.variables['CO'][0,:,:,:]*28.0/28.97*rho*dz/1e6, axis=0 ) + this = nc.createVariable('tcco','f4',('Time', 'lat', 'lon'),zlib=zlib) + this.description = 'total column CO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = tc[:,:] + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + #rP = '925,850,700,600' + rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,400,300,200,100' + #rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,450,400,350,300,250,200,150,100' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] wrf_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with wrfout replaced with wrfllp)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + wrf_File = args[0] + else: + parser.error("must have 1 argument: wrf_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + options.outFile = wrf_File.replace('wrfout_','wrfllp_') + if options.outFile == wrf_File: + options.outFile = 'wrfllp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['lon', 'lat', 'P', 'lev'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + + # copy original file + # ------------------ + os.system("cp "+wrf_File+" "+wrf_File+".interm.nc") + + # Open the input file + # ------------------- + nc = Dataset(wrf_File+".interm.nc",'a',format=options.format) + + # Time range + # ---------- + tyme = getTyme(wrf_File) + + + # Append vars + # ----------- + print("append vars ... ") + append_lml(nc,zlib=False) + append_vars(nc,zlib=False) + + + # Instantiate regridding class + # ---------------------------- + print("regridding ... ") + cLon = npy.squeeze(nc.variables['lon'][:,:]) + cLat = npy.squeeze(nc.variables['lat'][:,:]) + r = myCurv2LLP(cLon,cLat,options.rP) + + # Write output file + # ----------------- + print("write output ... ") + r.writeNC ( tyme, options, nc, zlib=False ) + os.system("rm "+wrf_File+".interm.nc") + + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/wgrib2 b/projects/MissionSupport/applications/WxModel/asia-aq/bin/wgrib2 new file mode 100755 index 0000000..76dea92 Binary files /dev/null and b/projects/MissionSupport/applications/WxModel/asia-aq/bin/wgrib2 differ diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/wrf2llp.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/wrf2llp.py new file mode 100755 index 0000000..b160c11 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/wrf2llp.py @@ -0,0 +1,187 @@ +#!/usr/bin/env python +# +# Convert WRFchem output to COARDS compliant file on a regular lat-lon-pressure grid. +# +# Arlindo da Silva, March 2019. + +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + return ncin.variables['p'][n,:,:,:]/100. # in hPa + +#--- +def getTyme(ncin): + t = ncin.variables['Times'] + units = t.units + hh = units.split('Z')[0] + yyyymmdd = units.split(' ')[1] + tyme = datetime(int(yyyymmdd[0:4]), + int(yyyymmdd[4:6]), + int(yyyymmdd[6:8]), + int(hh)) + return npy.array([tyme,]) + +#--- +def append_lml(nc, zlib=False): + """ + Append vars at lowest model level to the oroginal file. + """ + for v in ['oc', 'bc', 'pm25']: + var = nc.variables[v] + this = nc.createVariable(v+'_lml','f4',('time', 'south_north', 'west_east'),zlib=zlib) + this.long_name = var.long_name+' at lowest model level' + this.missing_value = UNDEF # out of domain + this.units = var.units + this[0,:,:] = var[0,0,:,:] + +#--- +def append_vars(nc, zlib=False): + """ + Append total column vars + """ + # total cloumn OC + #---------------- + dz = nc.variables['dz'][0,:,:,:] # in m + nz, ny, nx = dz.shape + tcoc = npy.zeros((ny, nx)) + tcoc = npy.sum(nc.variables['oc'][0,:,:,:]*dz/1e9, axis=0) # in kg m-2 + this = nc.createVariable('tcoc','f4',('time', 'south_north', 'west_east'),zlib=zlib) + this.long_name = 'total column OC' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = tcoc[:,:] + + + # total cloumn pm2.5 + #---------------- + tc = npy.zeros((ny,nx)) + tc = npy.sum(nc.variables['pm25'][0,:,:,:]*dz/1e9, axis=0 ) + this = nc.createVariable('tcpm25','f4',('time', 'south_north', 'west_east'),zlib=zlib) + this.long_name = 'total column PM2.5' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = tc[:,:] + + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + #rP = '925,850,700,600' + rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500' + #rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,450,400,350,300,250,200,150,100' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] wrf_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with wrfout replaced with wrfllp)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + wrf_File = args[0] + else: + parser.error("must have 1 argument: wrf_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + options.outFile = wrf_File.replace('wrfout_','wrfllp_') + if options.outFile == wrf_File: + options.outFile = 'wrfllp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['lon', 'lat', 'p', 'time'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + + # copy original file + # ------------------ + os.system("cp "+wrf_File+" "+wrf_File+".interm.nc") + + # Open the input file + # ------------------- + nc = Dataset(wrf_File+".interm.nc",'a',format=options.format) + + # Time range + # ---------- + tyme = getTyme(nc) + + # Append vars + # ----------- + print("append vars ... ") + append_lml(nc,zlib=False) + append_vars(nc,zlib=False) + print("finished append vars ... ") + + + # Instantiate regridding class + # ---------------------------- + print("regridding ... ") + cLon = npy.squeeze(nc.variables['lon'][:,:,:]) + cLat = npy.squeeze(nc.variables['lat'][:,:,:]) + r = myCurv2LLP(cLon,cLat,options.rP) + + # Write output file + # ----------------- + print("write output ... ") + r.writeNC ( tyme, options, nc, zlib=False ) + os.system("rm "+wrf_File+".interm.nc") + + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/wrf2llp.py.keep b/projects/MissionSupport/applications/WxModel/asia-aq/bin/wrf2llp.py.keep new file mode 100755 index 0000000..6730ef6 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/wrf2llp.py.keep @@ -0,0 +1,184 @@ +#!/usr/bin/env python +# +# Convert WRFchem output to COARDS compliant file on a regular lat-lon-pressure grid. +# +# Arlindo da Silva, March 2019. + +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + return ncin.variables['p'][n,:,:,:]/100. # in hPa + +#--- +def getTyme(ncin): + t = ncin.variables['time'] + if len(t) != 1: + raise ValueError, 'Fix me, I can only handle 1 step per file for now' + units = t.units + hh = units.split('Z')[0] + yyyymmdd = units.split(' ')[1] + tyme = datetime(int(yyyymmdd[0:4]), + int(yyyymmdd[4:6]), + int(yyyymmdd[6:8]), + int(hh)) + return npy.array([tyme,]) + +#--- +def append_lml(nc, zlib=False): + """ + Append vars at lowest model level to the oroginal file. + """ + for v in ['oc', 'bc', 'pm25']: + var = nc.variables[v] + this = nc.createVariable(v+'_lml','f4',('time', 'south_north', 'west_east'),zlib=zlib) + this.long_name = var.long_name+' at lowest model level' + this.missing_value = UNDEF # out of domain + this.units = var.units + this[0,:,:] = var[0,0,:,:] + +#--- +def append_vars(nc, zlib=False): + """ + Append total column vars + """ + # total cloumn OC + #---------------- + dz = nc.variables['dz'][0,:,:,:] # in m + nz, ny, nx = dz.shape + tcoc = npy.zeros((ny, nx)) + tcoc = npy.sum(nc.variables['oc'][0,:,:,:]*dz/1e9, axis=0) # in kg m-2 + this = nc.createVariable('tcoc','f4',('time', 'south_north', 'west_east'),zlib=zlib) + this.long_name = 'total column OC' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = tcoc[:,:] + + + # total cloumn pm2.5 + #---------------- + tc = npy.zeros((ny,nx)) + tc = npy.sum(nc.variables['pm25'][0,:,:,:]*dz/1e9, axis=0 ) + this = nc.createVariable('tcpm25','f4',('time', 'south_north', 'west_east'),zlib=zlib) + this.long_name = 'total column PM2.5' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = tc[:,:] + + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + rP = '925,850,700,600' +# rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,450,400,350,300,250,200,150,100' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] wrf_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with wrfout replaced with wrfllp)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + wrf_File = args[0] + else: + parser.error("must have 1 argument: wrf_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + options.outFile = wrf_File.replace('wrfout_','wrfllp_') + if options.outFile == wrf_File: + options.outFile = 'wrfllp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['lon', 'lat', 'p', 'time'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # copy original file + # ------------------ + + interm = name + '.tmp.nc' + os.system("cp "+wrf_File+" "+interm) + + # Open the input file + # ------------------- + nc = Dataset(interm,'a',format=options.format) + + # Time range + # ---------- + tyme = getTyme(nc) + + # Append vars + # ----------- + append_lml(nc,zlib=False) + append_vars(nc,zlib=False) + + + # Instantiate regridding class + # ---------------------------- + cLon = npy.squeeze(nc.variables['lon'][:,:,:]) + cLat = npy.squeeze(nc.variables['lat'][:,:,:]) + r = myCurv2LLP(cLon,cLat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + + os.remove(interm) diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/ysuncar_wrftracer.ncl b/projects/MissionSupport/applications/WxModel/asia-aq/bin/ysuncar_wrftracer.ncl new file mode 100755 index 0000000..51df3a2 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/ysuncar_wrftracer.ncl @@ -0,0 +1,93 @@ +; extract variables from original wrfout files +; Usage: ncl 'file_in="name_in.nc"' 'file_out="name_out.nc"' naaps_subset.ncl +;---------------------------------------------------------------------------- + +; load in the libraries +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRF_contributed.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRFUserARW.ncl" + +; set default values for file_in, dir_in, and file_out, if not specified + if (.not.isvar("file_in")) then + file_in = "../NCAR-WRFchem/wrfout_hourly_d01_2019-08-13_00:00:00" + end if + if (.not.isvar("file_out")) then + file_out = "../NCAR-WRFchem/wrfout_hourly_d01_2019-08-13_00:00:00.subsetted.nc" + end if + + f=addfile(file_in, "r") + global_attnames = getvaratts(f) + system("rm -f "+file_out) ;-- delete file + setfileoption("nc","Format","NetCDF4") + fo = addfile(file_out,"c") ;-- create new + + ; global attributes + att=True + do i=0,dimsizes(global_attnames)-1 + ; print(f@$global_attnames(i)$) + att@$global_attnames(i)$ = f@$global_attnames(i)$ + end do + + ;setfileoption(fo,"DefineMode",True) + fileattdef(fo, att) + filedimdef(fo,"time",-1,True) + + + vars = (/"Times","XLAT", "XLONG", "PSFC", "T", "U", "V", "W", "p", \ + "QVAPOR", "QCLOUD", "CLDFRA", "PBLH", "EXTCOF55",\ + "o3", "no", "no2", "no3", "PM2_5_DRY", \ + "so2", "sulf", "co", "ch4"/) + + + + + ; write variables + do i=0,dimsizes(vars)-1 + print("varname: "+ vars(i)) + + if (vars(i).eq."p") then + va := wrf_user_getvar(f,"p",-1) ; Pa + ; printVarSummary(va) + else + v := f->$vars(i)$ + if (.not.ismissing(v@stagger) .and. strlen(v@stagger).gt.0) then + va := wrf_user_unstagger(v, v@stagger) + else + va:=v + end if + end if + + ;output + fo->$vars(i)$=va + end do + + + ext=flt2dble(f->EXTCOF55) ; unit: km-1 + ph=f->PH ;"perturbation geopotential" (Time, bottom_top_stag, south_north, west_east) + phb=f->PHB ; "base state geopotential" unit: m2 s-2 + d=dimsizes(ph) + g=9.80665 + gph = flt2dble(ph+phb)/g + dz= gph(:,1:d(1)-1,:,:)-gph(:,0:d(1)-2,:,:) + + + copy_VarMeta(ext,dz) + dz@description="model layer thickness" + dz@units = "m" + + Rd=287.05 + p = wrf_user_getvar(f,"p",-1) + tk = wrf_user_getvar(f,"tk",-1) + rho = p/Rd/tk + copy_VarMeta(ext,rho) + rho@description="dry air density" + rho@units = "kg m-3" + + + + ; append rho and dz + fo->dz=dz + fo->rho=rho + + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/bin/ysuncarwrfchem2llp.py b/projects/MissionSupport/applications/WxModel/asia-aq/bin/ysuncarwrfchem2llp.py new file mode 100755 index 0000000..28dcd26 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/bin/ysuncarwrfchem2llp.py @@ -0,0 +1,235 @@ +#!/usr/bin/env python +# +# Convert WRFchem output to COARDS compliant file on a regular lat-lon-pressure grid. +# +# Arlindo da Silva, March 2019. + +from optparse import OptionParser +from datetime import datetime, timedelta +from netCDF4 import Dataset +import numpy as npy +import os + +from curv2llp import * + +class myCurv2LLP(Curv2LLP): + + def get_cP(self,n,ncin): + """ + Given time level "n", return 3D pressure for this time. + """ + press = ncin.variables['p'][n,:,:,:]/100.0 # hPa + return press[:,:,:] + +#--- +def getTyme(ncin): + t = ncin.variables['Times'] + + if len(t[:,0]) != 1: + raise ValueError, 'Fix me, I can only handle 1 step per file for now' + tstr=''.join(t[0,:]) + print(tstr[0:4]) # 2018-08-07_06:00:00 + tyme = datetime(int(tstr[0:4]), + int(tstr[5:7]), + int(tstr[8:10]), + int(tstr[11:13])) + return npy.array([tyme,]) + +#--- +def append_lml(nc, zlib=False): + """ + Append vars at lowest model level to the oroginal file. + """ + for v in ['o3', 'hcho', 'co', 'no2', 'so2', 'bc', 'oc', 'dust', 'seas', 'so4a', 'rho', + 'PM2_5_DRY' ]: + var = nc.variables[v] + this = nc.createVariable(v+'_lml','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = var.description+' at lowest model level' + this.missing_value = UNDEF # out of domain + this.units = var.units + this[0,:,:] = var[0,0,:,:] + + +#--- +def append_vars(nc, zlib=False): + """ + Append total column vars + """ + + co = nc.variables['co'][0,:,:,:] # ppmv + co = co/1e6*28.0/28.97 # kg kg-1 + nz, ny, nx = co.shape + oc = nc.variables['oc'][0,:,:,:] # ug kg-1 + bc = nc.variables['bc'][0,:,:,:] # ug kg-1 + dz = nc.variables['dz'][0,:,:,:] # m + no2 = nc.variables['no2'][0,:,:,:] + no2 = no2/1e6*46.0/28.97 +# no2 = no2*6.022*10e23/460 #molecules/cm2 + nz, ny, nx = no2.shape + hcho = nc.variables['hcho'][0,:,:,:] + hcho = hcho/1e6*30.03/28.97 + nz, ny, nx = hcho.shape + + rho = nc.variables['rho'][0,:,:,:] # kg m-3 + pm25 = nc.variables['PM2_5_DRY'][0,:,:,:] # ug m-3 + ext = nc.variables['EXTCOF55'][0,:,:,:] + + #AOD + #--------------- + this = nc.createVariable('aod', 'f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'aod' + this.missing_value = UNDEF + this.units = '' + this[0,:,:] = npy.sum(ext*dz/1000, axis=0) + + # total cloumn OC + #---------------- + this = nc.createVariable('tcoc','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column OC' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(oc*rho*dz/1e9, axis=0) # kg m-2 + + # total cloumn BC + #---------------- + this = nc.createVariable('tcbc','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column BC' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(bc*rho*dz/1e9, axis=0) # kg m-2 + + # total cloumn CO + #---------------- + this = nc.createVariable('tcco','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column CO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(co*rho*dz, axis=0) # kg m-2 + + # total cloumn NO2 + #---------------- + this = nc.createVariable('tcno2','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column NO2' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(no2*rho*dz, axis=0) # molecules cm-2 + + # total cloumn HCHO + #---------------- + this = nc.createVariable('tchcho','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column HCHO' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(hcho*rho*dz, axis=0) # molecules cm-2 + + # total cloumn PM2.5 + #---------------- + this = nc.createVariable('tcpm25','f4',('Time', 'south_north', 'west_east'),zlib=zlib) + this.description = 'total column PM2.5' + this.missing_value = UNDEF # out of domain + this.units = 'kg m-2' + this[0,:,:] = npy.sum(pm25*dz/1e9, axis=0) # kg m-2 + + +#--- +if __name__ == "__main__": + + format = 'NETCDF4' + algo = 'linear' + # rP = '925,850,700,600' + rP = '1000,975,950,925,900,875,850,825,800,775,750,725,700,650,600,550,500,450,400,350,300,250,200,150,100' + +# Parse command line options +# -------------------------- + parser = OptionParser(usage="Usage: %prog [OPTIONS] wrf_File", + version='1.0.0' ) + + parser.add_option("-o", "--output", dest="outFile", default=None, + help="Output NetCDF file (default: same was input with wrfout replaced with wrfllp)") + + parser.add_option("-a", "--algorithm", dest="algo", default=algo, + help="Interpolation algorithm, one of linear, cubic (default=%s)"\ + %algo) + + parser.add_option("-V", "--vars", dest="Vars", default=None, + help="Variables to sample (default=All)") + + parser.add_option("-x", "--exclude", dest="ignore", default=None, + help="Variables to ignore (default=None)") + + parser.add_option("-f", "--format", dest="format", default=format, + help="Output file format: one of NETCDF4, NETCDF4_CLASSIC, NETCDF3_CLASSIC or NETCDF3_64BIT (default=%s)"%format ) + + parser.add_option("-p", "--levels", dest="rP", default=rP, + help="Levels to sample (default=%s)"%rP) + + parser.add_option("-v", "--verbose", + action="store_true", dest="verbose", + help="Verbose mode.") + + parser.add_option("-n", "--dryrun", + action="store_true", dest="dryrun", + help="Dry-run mode: fill variables with zeros.") + + + (options, args) = parser.parse_args() + + if len(args) == 1 : + wrf_File = args[0] + else: + parser.error("must have 1 argument: wrf_File") + + if options.Vars is not None: + options.Vars = options.Vars.split(',') + + if options.outFile is None: + options.outFile = wrf_File.replace('wrfout_','wrfllp_') + if options.outFile == wrf_File: + options.outFile = 'wrfllp.nc4' # do not overwite input + + options.rP = [ float(p) for p in options.rP.split(',') ] + + if options.ignore is not None: + options.ignore = options.ignore.split(',') + else: + options.ignore = [] + + options.ignore += ['XLONG', 'XLAT', 'p', 'time','lon','lat'] # these are coordinates + + # Create consistent file name extension + # ------------------------------------- + name, ext = os.path.splitext(options.outFile) + if 'NETCDF4' in options.format: + options.outFile = name + '.nc4' + elif 'NETCDF3' in options.format: + options.outFile = name + '.nc' + else: + raise ValueError, 'invalid extension <%s>'%ext + + # copy original file + # ------------------ + os.system("cp "+wrf_File+" "+wrf_File+".interm.nc") + # Open the input file + # ------------------- + nc = Dataset( wrf_File+".interm.nc", 'a', format=options.format) + # Append vars + # ----------- + append_lml(nc,zlib=False) + append_vars(nc,zlib=False) + + # Time range + # ---------- + tyme = getTyme(nc) + + + # Instantiate regridding class + # ---------------------------- + cLon = npy.squeeze(nc.variables['XLONG'][:,:,:]) + cLat = npy.squeeze(nc.variables['XLAT'][:,:,:]) + r = myCurv2LLP(cLon,cLat,options.rP) + + # Write output file + # ----------------- + r.writeNC ( tyme, options, nc, zlib=False ) + + os.system("rm "+wrf_File+".interm.nc") diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/models.yml b/projects/MissionSupport/applications/WxModel/asia-aq/models.yml new file mode 100644 index 0000000..3f09e8f --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/models.yml @@ -0,0 +1,7 @@ +#WXMODEL_NATIVE_DIR: /discover/nobackup/projects/gmao/merra2/data/pub/supplemental/ASIA-AQ/native +#WXMODEL_DATA_DIR: /discover/nobackup/projects/gmao/merra2/data/pub/supplemental/ASIA-AQ/data +#WXMODEL_OPENDAP_DIR: /discover/nobackup/projects/gmao/merra2/data/pub/supplemental/ASIA-AQ/opendap + +WXMODEL_NATIVE_DIR: /discover/nobackup/projects/gmao/asia_aq/native +WXMODEL_DATA_DIR: /discover/nobackup/projects/gmao/asia_aq/pub/data +WXMODEL_OPENDAP_DIR: /discover/nobackup/projects/gmao/asia_aq/pub/opendap diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/models/ARUNWRFchem.yml b/projects/MissionSupport/applications/WxModel/asia-aq/models/ARUNWRFchem.yml new file mode 100755 index 0000000..e071250 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/models/ARUNWRFchem.yml @@ -0,0 +1,46 @@ +handlers: 'copy:arunwrfchem' + +tau_start: 0 +tau_end: 96 +tau_inc: 1 + +copy: + + machine: + login: + password: + remote_dir: /discover/nobackup/projects/firechem/ASIA-AQ/ARUN_WRF_forecast/%iy4%im2%id2 + local_dir: $WXMODEL_NATIVE_DIR/ARUNWRFchem/Y%iy4/M%im2/D%id2/H%ih2 + + sockets: 4 + + tau_start: 0 + tau_end: 96 + tau_inc: 1 + + remote_files: &FILENAMES + + - arun_wrf_%h3.nc + +arunwrfchem: + + tau_start: 0 + tau_end: 96 + tau_inc: 1 + + tasks: 4 + + input_dir: $WXMODEL_NATIVE_DIR/ARUNWRFchem/Y%iy4/M%im2/D%id2/H%ih2 + output_dir: $WXMODEL_DATA_DIR/ARUNWRFchem/Y%iy4/M%im2/D%id2/H%ih2 + output_file: arunwrfchem.llp.%iy4%im2%id2_%f3z.nc4 + + grads_dir: $WXMODEL_OPENDAP_DIR/ARUNWRFchem + grads_file: ARUNWRFchem.%iy4%im2%id2_%ih2.ddf + grads_latest: ARUNWRFchem.latest.ddf + dummy_file: $WXMODEL_DATA_DIR/dummy.ddf + files: *FILENAMES + + grads_records: + - DSET $output_dir/$output_file + - OPTIONS template + - TDEF time 96 linear %ih2:00z%id2%imc%iy4 1hr diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/models/CAM-Chem.yml b/projects/MissionSupport/applications/WxModel/asia-aq/models/CAM-Chem.yml new file mode 100755 index 0000000..4586ab5 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/models/CAM-Chem.yml @@ -0,0 +1,48 @@ +handlers: 'wget:cam_chem' +model: CAMchem + +tau_start: 0 +tau_end: 120 +tau_inc: 3 + +wget: + + url: https://www.acom.ucar.edu + remote_dir: waccm/DATA/ + local_dir: $WXMODEL_NATIVE_DIR/CAM-Chem/Y%iy4/M%im2/D%id2/H%ih2 + + sockets: 5 + + tau_start: 0 + tau_end: 120 + tau_inc: 24 + + remote_files: &FILENAMES + +# - f.e21.FWSD.f09_f09_mg17.forecast.001.cam.h4.%y4-%m2-%d2-00000.nc +# - f.e21.FWSD.f09_f09_mg17.forecast.002.cam.h3.%y4-%m2-%d2-00000.nc + - f.e22.beta02.FWSD.f09_f09_mg17.cesm2_2_beta02.forecast.001.cam.h3.%y4-%m2-%d2-00000.nc + +cam_chem: + + tau_start: 0 + tau_end: 120 + tau_inc: 24 + + tasks: 6 + + input_dir: $WXMODEL_NATIVE_DIR/CAM-Chem/Y%iy4/M%im2/D%id2/H%ih2 + output_dir: $WXMODEL_DATA_DIR/CAM-Chem/Y%iy4/M%im2/D%id2/H%ih2 + output_file: forecast.cam.na.%y4-%m2-%d2-00000.nc4 + + grads_dir: $WXMODEL_OPENDAP_DIR/CAM-Chem + grads_file: CAM-Chem.%iy4%im2%id2_%ih2.ddf + grads_latest: CAM-Chem.latest.ddf + dummy_file: $WXMODEL_DATA_DIR/dummy.ddf + files: *FILENAMES + + grads_records: + - DSET $output_dir/$output_file + - OPTIONS template + - TDEF time 24 linear %ih2:00z%id2%imc%iy4 6hr + diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/models/CAMS.yml b/projects/MissionSupport/applications/WxModel/asia-aq/models/CAMS.yml new file mode 100644 index 0000000..364010e --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/models/CAMS.yml @@ -0,0 +1,82 @@ +handlers: 'ftp:cams' + +tau_start: 0 +tau_end: 120 +tau_inc: 3 + +ftp: + + machine: aux.ecmwf.int + login: manas.mohanty + password: bduSbEkq + remote_dir: DATA/CAMS_GLOBAL/%iy4%im2%id2%ih2 + local_dir: $WXMODEL_NATIVE_DIR/CAMS/Y%iy4/M%im2/D%id2/H%ih2 + + sockets: 4 + + tau_start: 0 + tau_end: 120 + tau_inc: 3 + + remote_files: &FILENAMES + + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_sfc_%h3_aod550.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_sfc_%h3_pm2p5.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_sfc_%h3_bcaod550.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_sfc_%h3_duaod550.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_sfc_%h3_omaod550.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_sfc_%h3_pm1.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_sfc_%h3_pm10.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_sfc_%h3_ssaod550.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_sfc_%h3_suaod550.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_sfc_%h3_tc_no.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_sfc_%h3_tc_pan.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_sfc_%h3_tcco.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_sfc_%h3_tcno2.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_sfc_%h3_tchcho.nc + + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_pl_%h3_aermr01.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_pl_%h3_aermr02.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_pl_%h3_aermr03.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_pl_%h3_aermr04.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_pl_%h3_aermr05.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_pl_%h3_aermr06.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_pl_%h3_aermr07.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_pl_%h3_aermr08.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_pl_%h3_aermr09.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_pl_%h3_aermr10.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_pl_%h3_aermr11.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_pl_%h3_co.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_pl_%h3_den.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_pl_%h3_no.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_pl_%h3_no2.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_pl_%h3_so2.nc + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_pl_%h3_go3.nc + + - z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_ml_%h3_lnsp.nc + + +cams: + + tasks: 4 + + tau_start: 0 + tau_end: 120 + tau_inc: 3 + + input_dir: $WXMODEL_NATIVE_DIR/CAMS/Y%iy4/M%im2/D%id2/H%ih2 + output_dir: $WXMODEL_DATA_DIR/CAMS/Y%iy4/M%im2/D%id2/H%ih2 +# output_dir: ^../../data/CAMS/Y%iy4/M%im2/D%id2/H%ih2 + + merged_file: z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_merged_%h3.nc + prep_file: z_cams_c_ecmf_%iy4%im2%id2%ih20000_prod_fc_prep_%f3.nc4 + grads_dir: $WXMODEL_OPENDAP_DIR/CAMS + grads_file: CAMS.%iy4%im2%id2_%ih2.ddf + grads_latest: CAMS.latest.ddf + dummy_file: $WXMODEL_DATA_DIR/dummy.ddf + files: *FILENAMES + + grads_records: + - DSET $output_dir/$prep_file + - OPTIONS template + - TDEF time 41 linear %ih2:00z%id2%imc%iy4 3hr diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/models/GEOS-CF.yml b/projects/MissionSupport/applications/WxModel/asia-aq/models/GEOS-CF.yml new file mode 100755 index 0000000..7fbec34 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/models/GEOS-CF.yml @@ -0,0 +1,63 @@ +handlers: 'copy:geoscf' + +#PRIVATE=../../../../../.internal/forecast/Y%iy4/M%im2/D%id2/H%ih2 + +shift_dt: -12 + +tau_start: 0 +tau_end: 120 +tau_inc: 3 + +copy: + + machine: + login: + password: + remote_dir: /discover/nobackup/projects/gmao/geos_cf/pub/GEOS-CF_NRT/forecast/Y%iy4/M%im2/D%id2/H%ih2 + local_dir: $WXMODEL_DATA_DIR/GEOS-CF/Y%iy4/M%im2/D%id2/H%ih2 + + sockets: 4 + + inst1: + + tau_start: 0 + tau_end: 120 + tau_inc: 1 + + remote_files: + + - GEOS-CF.v01.fcst.htf_inst_15mn_g1440x721_x1.%iy4%im2%id2_%ih2z+%y4%m2%d2_%h2%n2z.nc4 + - GEOS-CF.v01.fcst.chm_inst_1hr_g1440x721_p23.%iy4%im2%id2_%ih2z+%y4%m2%d2_%h2%n2z.nc4 + # - GEOS-CF.v01.fcst.aaq_inst_1hr_r461x361_x1.%iy4%im2%id2_%ih2z+%y4%m2%d2_%h2%n2z.nc4 + + tavg1: + + tau_start: 0 + tau_end: 119 + tau_inc: 1 + + remote_files: + + - GEOS-CF.v01.fcst.xgc_tavg_1hr_g1440x721_x1.%iy4%im2%id2_%ih2z+%y4%m2%d2_%h230z.nc4 + - GEOS-CF.v01.fcst.chm_tavg_1hr_g1440x721_v1.%iy4%im2%id2_%ih2z+%y4%m2%d2_%h230z.nc4 + +geoscf: + + tasks: 1 + + tau_start: 0 + tau_end: 0 + tau_inc: 3 + + data_dir: $WXMODEL_DATA_DIR/GEOS-CF/Y%iy4/M%im2/D%id2/H%ih2 + input_dir: /discover/nobackup/projects/gmao/geos_cf/pub/GEOS-CF_NRT/opendap/fcast + output_dir: $WXMODEL_OPENDAP_DIR/GEOS-CF + dummy_file: $WXMODEL_DATA_DIR/dummy.ctl + + collections: + + - htf_inst_15mn_g1440x721_x1 + - chm_inst_1hr_g1440x721_p23 + - xgc_tavg_1hr_g1440x721_x1 + - chm_tavg_1hr_g1440x721_v1 + # - aaq_inst_1hr_r461x361_x1 diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/models/GEOS-CF_private.yml b/projects/MissionSupport/applications/WxModel/asia-aq/models/GEOS-CF_private.yml new file mode 100755 index 0000000..2d83ba8 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/models/GEOS-CF_private.yml @@ -0,0 +1,44 @@ +handlers: 'copy:geoscf' + +shift_dt: -12 + +tau_start: 0 +tau_end: 120 +tau_inc: 3 + +copy: + + machine: + login: + password: + remote_dir: /discover/nobackup/projects/gmao/geos_cf/pub/GEOS-CF_NRT/.internal/forecast/Y%iy4/M%im2/D%id2/H%ih2 + local_dir: $WXMODEL_DATA_DIR/GEOS-CF/Y%iy4/M%im2/D%id2/H%ih2 + + sockets: 4 + + inst1: + + tau_start: 0 + tau_end: 120 + tau_inc: 1 + + remote_files: + + - GEOS-CF.v01.fcst.aaq_inst_1hr_r461x361_x1.%iy4%im2%id2_%ih2z+%y4%m2%d2_%h2%n2z.nc4 + +geoscf: + + tasks: 1 + + tau_start: 0 + tau_end: 0 + tau_inc: 3 + + data_dir: $WXMODEL_DATA_DIR/GEOS-CF/Y%iy4/M%im2/D%id2/H%ih2 + input_dir: /discover/nobackup/projects/gmao/geos_cf/pub/GEOS-CF_NRT/.internal/opendap/fcast + output_dir: $WXMODEL_OPENDAP_DIR/GEOS-CF + dummy_file: $WXMODEL_DATA_DIR/dummy.ctl + + collections: + + - aaq_inst_1hr_r461x361_x1 diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/models/GEOS-FP.yml b/projects/MissionSupport/applications/WxModel/asia-aq/models/GEOS-FP.yml new file mode 100755 index 0000000..eb45b84 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/models/GEOS-FP.yml @@ -0,0 +1,93 @@ +handlers: 'copy:geosfp' +model: GEOS + +tau_start: 0 +tau_end: 120 +tau_inc: 3 + +copy: + + machine: + login: + password: + remote_dir: /discover/nobackup/projects/gmao/gmao_ops/pub/fp/forecast/Y%iy4/M%im2/D%id2/H%ih2 + local_dir: $WXMODEL_DATA_DIR/GEOS-FP/Y%iy4/M%im2/D%id2/H%ih2 + + sockets: 4 + + inst1: + + tau_start: -2 + tau_end: 120 + tau_inc: 1 + + remote_files: + + - GEOS.fp.fcst.inst1_2d_hwl_Nx.%iy4%im2%id2_%ih2+%y4%m2%d2_%h2%n2.V01.nc4 + + tavg1: + + tau_start: 0 + tau_end: 119 + tau_inc: 1 + + remote_files: + + - GEOS.fp.fcst.tavg1_2d_flx_Nx.%iy4%im2%id2_%ih2+%y4%m2%d2_%h230.V01.nc4 + - GEOS.fp.fcst.tavg1_2d_rad_Nx.%iy4%im2%id2_%ih2+%y4%m2%d2_%h230.V01.nc4 + - GEOS.fp.fcst.tavg1_2d_slv_Nx.%iy4%im2%id2_%ih2+%y4%m2%d2_%h230.V01.nc4 + + inst3: + + tau_start: 0 + tau_end: 120 + tau_inc: 3 + + remote_files: + + - GEOS.fp.fcst.inst3_2d_met_Nx.%iy4%im2%id2_%ih2+%y4%m2%d2_%h2%n2.V01.nc4 + - GEOS.fp.fcst.inst3_3d_aer_Np.%iy4%im2%id2_%ih2+%y4%m2%d2_%h2%n2.V01.nc4 + - GEOS.fp.fcst.inst3_3d_asm_Np.%iy4%im2%id2_%ih2+%y4%m2%d2_%h2%n2.V01.nc4 + - GEOS.fp.fcst.inst3_3d_chm_Np.%iy4%im2%id2_%ih2+%y4%m2%d2_%h2%n2.V01.nc4 + - GEOS.fp.fcst.inst3_3d_tag_Np.%iy4%im2%id2_%ih2+%y4%m2%d2_%h2%n2.V01.nc4 +# - GEOS.fp.fcst.inst3_3d_aer_Nv.%iy4%im2%id2_%ih2+%y4%m2%d2_%h2%n2.V01.nc4 + + tavg3: + + tau_start: -2 + tau_end: 118 + tau_inc: 3 + + remote_files: + + - GEOS.fp.fcst.tavg3_2d_smp_Nx.%iy4%im2%id2_%ih2+%y4%m2%d2_%h230.V01.nc4 + - GEOS.fp.fcst.tavg3_2d_adg_Nx.%iy4%im2%id2_%ih2+%y4%m2%d2_%h230.V01.nc4 + - GEOS.fp.fcst.tavg3_2d_aer_Nx.%iy4%im2%id2_%ih2+%y4%m2%d2_%h230.V01.nc4 + +geosfp: + + tasks: 1 + + tau_start: 0 + tau_end: 0 + tau_inc: 3 + + data_dir: $WXMODEL_DATA_DIR/GEOS-FP/Y%iy4/M%im2/D%id2/H%ih2 + input_dir: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast + output_dir: $WXMODEL_OPENDAP_DIR/GEOS-FP + dummy_file: $WXMODEL_DATA_DIR/dummy.ctl + + collections: + + - inst1_2d_hwl_Nx + - tavg1_2d_flx_Nx + - tavg1_2d_rad_Nx + - tavg1_2d_slv_Nx + - inst3_2d_met_Nx + - inst3_3d_aer_Np + - inst3_3d_asm_Np + - inst3_3d_chm_Np + - inst3_3d_tag_Np +# - inst3_3d_aer_Nv +# - tavg3_2d_adg_Nx + - tavg3_2d_aer_Nx diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/models/GEOS-FP_private.yml b/projects/MissionSupport/applications/WxModel/asia-aq/models/GEOS-FP_private.yml new file mode 100755 index 0000000..5e269a6 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/models/GEOS-FP_private.yml @@ -0,0 +1,43 @@ +handlers: 'copy:geosfp' +model: GEOS + +tau_start: 0 +tau_end: 120 +tau_inc: 3 + +copy: + + machine: + login: + password: + remote_dir: /discover/nobackup/projects/gmao/merra2/data/pub/supplemental/fp_Np/forecast/Y%iy4/M%im2/D%id2/H%ih2 + local_dir: $WXMODEL_DATA_DIR/GEOS-FP_private/Y%iy4/M%im2/D%id2/H%ih2 + + sockets: 4 + + inst3: + + tau_start: 0 + tau_end: 120 + tau_inc: 3 + + remote_files: + + - GEOS.fp.fcst.inst3_3d_aer_Np.%iy4%im2%id2_%ih2+%y4%m2%d2_%h2%n2.V01.nc4 + +geosfp: + + tasks: 1 + + tau_start: 0 + tau_end: 0 + tau_inc: 3 + + data_dir: $WXMODEL_DATA_DIR/GEOS-FP_private/Y%iy4/M%im2/D%id2/H%ih2 + input_dir: /discover/nobackup/projects/gmao/merra2/data/pub/supplemental/fp_Np/opendap/fcast + output_dir: $WXMODEL_OPENDAP_DIR/GEOS-FP_private + dummy_file: $WXMODEL_DATA_DIR/dummy.ctl + + collections: + + - inst3_3d_aer_Np diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/models/MUSICA.yml b/projects/MissionSupport/applications/WxModel/asia-aq/models/MUSICA.yml new file mode 100644 index 0000000..86af975 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/models/MUSICA.yml @@ -0,0 +1,42 @@ +handlers: 'wget:musica' + +wget: + + url: https://g-a4619f.7a577b.6fbd.data.globus.org/ + remote_dir: MUSICAv0_forecasts/ + local_dir: $WXMODEL_NATIVE_DIR/MUSICA/Y%iy4/M%im2/D%id2/H%ih2 + + sockets: 4 + + tau_start: 0 + tau_end: 96 + tau_inc: 1 + + remote_files: &FILENAMES + - f.e22_asd0822.FHIST.nudged.f01_3D.fcst.cam.h2.%y4-%m2-%d2-%s5.nc + +musica: + + tau_start: 0 + tau_end: 96 + tau_inc: 1 + + tasks: 4 + + input_dir: $WXMODEL_NATIVE_DIR/MUSICA/Y%iy4/M%im2/D%id2/H%ih2 + output_dir: $WXMODEL_DATA_DIR/MUSICA/Y%iy4/M%im2/D%id2/H%ih2 + output_file: musica.llp.%y4%m2%d2_%h2z.nc4 + + grads_dir: $WXMODEL_OPENDAP_DIR/MUSICA + grads_file: MUSICA.%iy4%im2%id2_%ih2.ddf + grads_latest: MUSICA.latest.ddf + dummy_file: $WXMODEL_DATA_DIR/dummy.ddf + files: *FILENAMES + + grads_records: + - DSET $output_dir/$output_file + - OPTIONS template + - TDEF time 97 linear %ih2:00z%id2%imc%iy4 1hr + - XDEF lon 500 linear 90.05 0.1 + - YDEF lat 450 linear 0.05 0.1 + - ZDEF lev 25 levels 990 975 950 925 900 875 850 825 800 775 750 725 700 650 600 550 500 450 400 350 300 250 200 150 100 diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/models/MUSICA2d.yml b/projects/MissionSupport/applications/WxModel/asia-aq/models/MUSICA2d.yml new file mode 100644 index 0000000..7ba0b98 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/models/MUSICA2d.yml @@ -0,0 +1,40 @@ +handlers: 'wget:musica2d' + +wget: + + url: https://g-a4619f.7a577b.6fbd.data.globus.org/ + remote_dir: MUSICAv0_forecasts/ + local_dir: $WXMODEL_NATIVE_DIR/MUSICA/Y%iy4/M%im2/D%id2/H%ih2 + + sockets: 4 + + tau_start: 0 + tau_end: 96 + tau_inc: 1 + + remote_files: &FILENAMES + - f.e22_asd0822.FHIST.nudged.f01_2D.fcst.cam.h2.%y4-%m2-%d2-%s5.nc + +musica2d: + tau_start: 0 + tau_end: 96 + tau_inc: 1 + + tasks: 4 + + input_dir: $WXMODEL_NATIVE_DIR/MUSICA/Y%iy4/M%im2/D%id2/H%ih2 + output_dir: $WXMODEL_DATA_DIR/MUSICA/Y%iy4/M%im2/D%id2/H%ih2 + output_file: musica.2d.%y4%m2%d2_%h2z.nc4 + + grads_dir: $WXMODEL_OPENDAP_DIR/MUSICA + grads_file: MUSICA2d.%iy4%im2%id2_%ih2.ddf + grads_latest: MUSICA2d.latest.ddf + dummy_file: $WXMODEL_DATA_DIR/dummy.ddf + files: *FILENAMES + + grads_records: + - DSET $output_dir/$output_file + - OPTIONS template + - TDEF time 97 linear %ih2:00z%id2%imc%iy4 1hr + - XDEF lon 500 linear 90.05 0.1 + - YDEF lat 450 linear 0.05 0.1 diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/models/MUSICA_ALL.yml b/projects/MissionSupport/applications/WxModel/asia-aq/models/MUSICA_ALL.yml new file mode 100644 index 0000000..057b4df --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/models/MUSICA_ALL.yml @@ -0,0 +1,77 @@ +handlers: 'wget:musica:musica2d' + +3d_files: &3D_FILES + - f.e22_asd0822.FHIST.nudged.f01_3D.fcst.cam.h2.%y4-%m2-%d2-%s5.nc + +2d_files: &2D_FILES + - f.e22_asd0822.FHIST.nudged.f01_2D.fcst.cam.h2.%y4-%m2-%d2-%s5.nc + +wget: + + url: https://g-a4619f.7a577b.6fbd.data.globus.org/ + remote_dir: MUSICAv0_forecasts/ + local_dir: $WXMODEL_NATIVE_DIR/MUSICA/Y%iy4/M%im2/D%id2/H%ih2 + + sockets: 4 + + tau_start: 0 + tau_end: 95 + tau_inc: 1 + + 3DFiles: + + remote_files: *3D_FILES + + 2DFiles: + + remote_files: *2D_FILES + +musica: + + tau_start: 0 + tau_end: 95 + tau_inc: 1 + + tasks: 4 + + input_dir: $WXMODEL_NATIVE_DIR/MUSICA/Y%iy4/M%im2/D%id2/H%ih2 + output_dir: $WXMODEL_DATA_DIR/MUSICA/Y%iy4/M%im2/D%id2/H%ih2 + output_file: musica.llp.%y4%m2%d2_%h2z.nc4 + + grads_dir: $WXMODEL_OPENDAP_DIR/MUSICA + grads_file: MUSICA.%iy4%im2%id2_%ih2.ddf + grads_latest: MUSICA.latest.ddf + dummy_file: $WXMODEL_DATA_DIR/dummy.ddf + files: *3D_FILES + + grads_records: + - DSET $output_dir/$output_file + - OPTIONS template + - TDEF time 97 linear %ih2:00z%id2%imc%iy4 1hr + - XDEF lon 500 linear 90.05 0.1 + - YDEF lat 450 linear 0.05 0.1 + - ZDEF lev 25 levels 990 975 950 925 900 875 850 825 800 775 750 725 700 650 600 550 500 450 400 350 300 250 200 150 100 + +musica2d: + tau_start: 0 + tau_end: 95 + tau_inc: 1 + + tasks: 4 + + input_dir: $WXMODEL_NATIVE_DIR/MUSICA/Y%iy4/M%im2/D%id2/H%ih2 + output_dir: $WXMODEL_DATA_DIR/MUSICA/Y%iy4/M%im2/D%id2/H%ih2 + output_file: musica.2d.%y4%m2%d2_%h2z.nc4 + + grads_dir: $WXMODEL_OPENDAP_DIR/MUSICA + grads_file: MUSICA2d.%iy4%im2%id2_%ih2.ddf + grads_latest: MUSICA2d.latest.ddf + dummy_file: $WXMODEL_DATA_DIR/dummy.ddf + files: *2D_FILES + + grads_records: + - DSET $output_dir/$output_file + - OPTIONS template + - TDEF time 96 linear %ih2:00z%id2%imc%iy4 1hr + - XDEF lon 500 linear 90.05 0.1 + - YDEF lat 450 linear 0.05 0.1 diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/models/NAAPS.yml b/projects/MissionSupport/applications/WxModel/asia-aq/models/NAAPS.yml new file mode 100755 index 0000000..acc9f83 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/models/NAAPS.yml @@ -0,0 +1,48 @@ +handlers: 'sftp:naaps' + +tau_start: 0 +tau_end: 150 +tau_inc: 6 + +sftp: + + machine: portal.nrlmry.navy.mil + login: ftp + password: none + remote_dir: /pub/receive/hyer/naaps_verify_examples/%iy4%im2/%iy4%im2%id2%ih2 +# remote_dir: /ftp/receive/lambert/naaps_verify_asia_aq/%iy4%im2/%iy4%im2%id2%ih2 + local_dir: $WXMODEL_NATIVE_DIR/NAAPS/Y%iy4/M%im2/D%id2/H%ih2 + + sockets: 4 + + tau_start: 0 + tau_end: 150 + tau_inc: 6 + + remote_files: &FILENAMES + + - '%iy4%im2%id2%ih2_%h3_000_nap044o_000_verify.nc' + +naaps: + + tasks: 4 + + tau_start: 0 + tau_end: 150 + tau_inc: 6 + + input_dir: $WXMODEL_NATIVE_DIR/NAAPS/Y%iy4/M%im2/D%id2/H%ih2 + output_dir: $WXMODEL_DATA_DIR/NAAPS/Y%iy4/M%im2/D%id2/H%ih2 + + grads_dir: $WXMODEL_OPENDAP_DIR/NAAPS + grads_file: NAAPS.%iy4%im2%id2_%ih2.ddf + grads_latest: NAAPS.latest.ddf + dummy_file: $WXMODEL_DATA_DIR/dummy.ddf + files: *FILENAMES + + grads_records: + + - dset $output_dir/%iy4%im2%id2%ih2_%f3_000_nap044o_000_verify.nc + - options template + - tdef time 26 linear %ih2z%id2%imc%iy4 6hr + - edef species 5 names so2 abf dust smoke salt diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/models/UCLAWRFchem.yml b/projects/MissionSupport/applications/WxModel/asia-aq/models/UCLAWRFchem.yml new file mode 100644 index 0000000..81db305 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/models/UCLAWRFchem.yml @@ -0,0 +1,48 @@ +handlers: 'copy:uclawrf' + +shift_dt: 6 +tau_start: 0 +tau_end: 72 +tau_inc: 1 + +copy: + + machine: + login: + password: + remote_dir: /discover/nobackup/projects/firechem/ASIA-AQ/UCLA_forecast/%iy4%im2%id2 + local_dir: $WXMODEL_NATIVE_DIR/UCLAWRFchem/Y%iy4/M%im2/D%id2/H%ih2 + + sockets: 3 + + tau_start: 0 + tau_end: 72 + tau_inc: 1 + + remote_files: &FILENAMES + + - wrfout_d01_%y4-%m2-%d2_%h2:00:00 + +uclawrf: + + tau_start: 0 + tau_end: 72 + tau_inc: 1 + + tasks: 4 + + input_dir: $WXMODEL_NATIVE_DIR/UCLAWRFchem/Y%iy4/M%im2/D%id2/H%ih2 + output_dir: $WXMODEL_DATA_DIR/UCLAWRFchem/Y%iy4/M%im2/D%id2/H%ih2 + output_file: uclawrfchem.llp.%y4%m2%d2_%h2z.nc4 + ncl_script: $WXMODEL_BIN_DIR/ucla_wrfchem_subset.ncl + + grads_dir: $WXMODEL_OPENDAP_DIR/UCLAWRFchem + grads_file: UCLAWRFchem.%iy4%im2%id2_%ih2.ddf + grads_latest: UCLAWRFchem.latest.ddf + dummy_file: $WXMODEL_DATA_DIR/dummy.ddf + files: *FILENAMES + + grads_records: + - DSET $output_dir/$output_file + - OPTIONS template + - TDEF time 73 linear %ih2:00z%id2%imc%iy4 1hr diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/models/UCLAWRFchem_d2.yml b/projects/MissionSupport/applications/WxModel/asia-aq/models/UCLAWRFchem_d2.yml new file mode 100644 index 0000000..7e5bbce --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/models/UCLAWRFchem_d2.yml @@ -0,0 +1,48 @@ +handlers: 'copy:uclad2wrf' + +shift_dt: 6 +tau_start: 0 +tau_end: 72 +tau_inc: 1 + +copy: + + machine: + login: + password: + remote_dir: /discover/nobackup/projects/firechem/ASIA-AQ/UCLA_forecast/%iy4%im2%id2 + local_dir: $WXMODEL_NATIVE_DIR/UCLAWRFchem_d2/Y%iy4/M%im2/D%id2/H%ih2 + + sockets: 3 + + tau_start: 0 + tau_end: 72 + tau_inc: 1 + + remote_files: &FILENAMES + + - wrfout_d02_%y4-%m2-%d2_%h2:00:00 + +uclad2wrf: + + tau_start: 0 + tau_end: 72 + tau_inc: 1 + + tasks: 4 + + input_dir: $WXMODEL_NATIVE_DIR/UCLAWRFchem_d2/Y%iy4/M%im2/D%id2/H%ih2 + output_dir: $WXMODEL_DATA_DIR/UCLAWRFchem_d2/Y%iy4/M%im2/D%id2/H%ih2 + output_file: uclawrfchem.llp.%y4%m2%d2_%h2z.nc4 + ncl_script: $WXMODEL_BIN_DIR/ucla_wrfchem_subset.ncl + + grads_dir: $WXMODEL_OPENDAP_DIR/UCLAWRFchem_d2 + grads_file: UCLAWRFchem_d2.%iy4%im2%id2_%ih2.ddf + grads_latest: UCLAWRFchem_d2.latest.ddf + dummy_file: $WXMODEL_DATA_DIR/dummy.ddf + files: *FILENAMES + + grads_records: + - DSET $output_dir/$output_file + - OPTIONS template + - TDEF time 73 linear %ih2:00z%id2%imc%iy4 1hr diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/models/UIOWACMAQ.yml b/projects/MissionSupport/applications/WxModel/asia-aq/models/UIOWACMAQ.yml new file mode 100755 index 0000000..dc77110 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/models/UIOWACMAQ.yml @@ -0,0 +1,43 @@ +handlers: 'wget:uiowacmaq' + +tau_start: 0 +tau_end: 72 +tau_inc: 1 + +wget: + + url: https://bio.cgrer.uiowa.edu/ASIA-AQ/FLUID/ + remote_dir: '%iy4%im2%id2' + local_dir: $WXMODEL_DATA_DIR/UIOWACMAQ/Y%iy4/M%im2/D%id2/H%ih2 + + sockets: 4 + + tau_start: 0 + tau_end: 72 + tau_inc: 1 + + remote_files: &FILENAMES + + - uiowa_asiaaq_fcst_%iy4%im2%id2%ih2_%h3.nc + +uiowacmaq: + + tasks: 4 + + tau_start: 0 + tau_end: 72 + tau_inc: 1 + + input_dir: $WXMODEL_DATA_DIR/UIOWACMAQ/Y%iy4/M%im2/D%id2/H%ih2 + output_dir: $WXMODEL_DATA_DIR/UIOWACMAQ/Y%iy4/M%im2/D%id2/H%ih2 + + grads_dir: $WXMODEL_OPENDAP_DIR/UIOWACMAQ + grads_file: UIOWACMAQ.%iy4%im2%id2_%ih2.ddf + grads_latest: UIOWACMAQ.latest.ddf + dummy_file: $WXMODEL_DATA_DIR/dummy.ddf + files: *FILENAMES + + grads_records: + - DSET $output_dir/uiowa_asiaaq_fcst_%iy4%im2%id2%ih2_%f3.nc + - OPTIONS template + - TDEF time 73 linear %ih2:00z%id2%imc%iy4 1hr diff --git a/projects/MissionSupport/applications/WxModel/asia-aq/models/YSUNCARWRFchem.yml b/projects/MissionSupport/applications/WxModel/asia-aq/models/YSUNCARWRFchem.yml new file mode 100755 index 0000000..2d0e759 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/asia-aq/models/YSUNCARWRFchem.yml @@ -0,0 +1,44 @@ +handlers: 'wget:ysuncarwrfchem' + +tau_start: 0 +tau_end: 84 +tau_inc: 1 + +wget: + + url: https://g-0fc08a.7a577b.6fbd.data.globus.org/ + remote_dir: '' + local_dir: $WXMODEL_NATIVE_DIR/YSUNCARWRFchem/Y%iy4/M%im2/D%id2/H%ih2 + + sockets: 1 + + tau_start: 0 + tau_end: 84 + tau_inc: 1 + + remote_files: &FILENAMES + + - wrfout_d01_%y4-%m2-%d2_%h2:00:00_subset.nc + +ysuncarwrfchem: + + tau_start: 0 + tau_end: 84 + tau_inc: 1 + + tasks: 4 + + input_dir: $WXMODEL_NATIVE_DIR/YSUNCARWRFchem/Y%iy4/M%im2/D%id2/H%ih2 + output_dir: $WXMODEL_DATA_DIR/YSUNCARWRFchem/Y%iy4/M%im2/D%id2/H%ih2 + output_file: ysuncarwrfchem.llp.%y4%m2%d2_%h2z.nc4 + + grads_dir: $WXMODEL_OPENDAP_DIR/YSUNCARWRFchem + grads_file: YSUNCARWRFchem.%iy4%im2%id2_%ih2.ddf + grads_latest: YSUNCARWRFchem.latest.ddf + dummy_file: $WXMODEL_DATA_DIR/dummy.ddf + files: *FILENAMES + + grads_records: + - DSET $output_dir/$output_file + - OPTIONS template + - TDEF time 85 linear %ih2:00z%id2%imc%iy4 1hr diff --git a/projects/MissionSupport/applications/WxModel/default b/projects/MissionSupport/applications/WxModel/default new file mode 120000 index 0000000..eecb6c0 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/default @@ -0,0 +1 @@ +asia-aq \ No newline at end of file diff --git a/projects/MissionSupport/applications/WxModel/src/gradstime.py b/projects/MissionSupport/applications/WxModel/src/gradstime.py new file mode 100644 index 0000000..5d59a0e --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/src/gradstime.py @@ -0,0 +1,63 @@ +import datetime as dt + +class GradsTime(object): + + def __init__(self, idate, itime, shift_dt=0): + + idate = str(idate) + itime = '%06d'%(itime,) + + self.idt = dt.datetime.strptime(idate+itime,'%Y%m%d%H%M%S') + self.idt += dt.timedelta(hours=shift_dt) + + def strftime(self, s, tau): + + return self.strvtime(self.stritime(s), tau) + + def strvtime(self, s, tau): + + vdt = self.idt + dt.timedelta(hours=tau) + seconds = vdt.hour * 3600 + vdt.minute*60 + vdt.second + + tokens = { '%y2' : vdt.strftime('%y'), + '%y4' : vdt.strftime('%Y'), + '%m1' : str(vdt.month), + '%m2' : vdt.strftime('%m'), + '%mc' : vdt.strftime('%b'), + '%d1' : str(vdt.day), + '%d2' : vdt.strftime('%d'), + '%d2' : vdt.strftime('%d'), + '%h1' : str(vdt.hour), + '%h2' : vdt.strftime('%H'), + '%h3' : '%03d'%(tau,), + '%s5' : '%05d'%(seconds,), + '%f2' : '%02d'%(tau,), + '%f3' : '%03d'%(tau,), + '%n2' : vdt.strftime('%M'), + '%j3' : vdt.strftime('%j') + } + + for k,v in tokens.iteritems(): s = s.replace(k,v) + + return s + + def stritime(self, s, tau=None): + + tokens = { '%iy2' : self.idt.strftime('%y'), + '%iy4' : self.idt.strftime('%Y'), + '%im1' : str(self.idt.month), + '%im2' : self.idt.strftime('%m'), + '%imc' : self.idt.strftime('%b'), + '%id1' : str(self.idt.day), + '%id2' : self.idt.strftime('%d'), + '%id2' : self.idt.strftime('%d'), + '%ih1' : str(self.idt.hour), + '%ih2' : self.idt.strftime('%H'), + '%ih3' : '%03d'%(self.idt.hour,), + '%in2' : self.idt.strftime('%M'), + '%ij3' : self.idt.strftime('%j') + } + + for k,v in tokens.iteritems(): s = s.replace(k,v) + + return s diff --git a/projects/MissionSupport/applications/WxModel/src/modules.csh b/projects/MissionSupport/applications/WxModel/src/modules.csh new file mode 100644 index 0000000..d0fb297 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/src/modules.csh @@ -0,0 +1,17 @@ +source /usr/share/lmod/lmod/init/csh + +module purge + +module use -a /discover/swdev/gmao_SIteam/modulefiles-SLES12 + +module load GEOSenv +module load python/GEOSpyD/Ana2019.10_py2.7 +module load nco +module load ncl + +setenv GAVERSION 2.1.0.oga.1 +setenv PYTHONPATH /home/dao_ops/gmao_packages/WxModel/asia-aq/lib:/home/dao_ops/gmao_packages/lib/python2.7/site-packages:/home/adasilva/src/pygrads/build/lib + +setenv PATH "${PATH}:/home/dao_ops/gmao_packages/WxModel/src:/home/dao_ops/gmao_packages/WxModel/asia-aq/bin:$SHARE/dasilva/opengrads/Contents" + +umask 022 diff --git a/projects/MissionSupport/applications/WxModel/src/myutils.py b/projects/MissionSupport/applications/WxModel/src/myutils.py new file mode 100644 index 0000000..27abc36 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/src/myutils.py @@ -0,0 +1,102 @@ +import os +import re +import yaml +from string import Template +from datetime import timedelta + +def str_replace(s, **defs): + """ Recursive variable substitution. Shell-style variables ($var, ${var}) + are recursively substituted with definitions from ``defs``. + + :param s: input string containing variables. + :param defs: input dict (kwargs) containing variable definitions. + :return: string with variable substitutions where defined. + """ + + s_interp = Template(s).safe_substitute(defs) + + if s_interp != s: + s_interp = str_replace(s_interp, **defs) + + return s_interp + +#------------------------------------------------------------------------------ + +def dict_merge(dct, merge_dct): + """ Recursive dict merge. Inspired by :meth:``dict.update()``, instead of + updating only top-level keys, dict_merge recurses down into dicts nested + to an arbitrary depth, updating keys. The ``merge_dct`` is merged into + ``dct``. + + :param dct: dict onto which the merge is executed + :param merge_dct: merge_dct merged into dct + :return: None + """ + for k in merge_dct: + if (k in dct and isinstance(dct[k], dict) and isinstance(merge_dct[k], dict)): #noqa + dict_merge(dct[k], merge_dct[k]) + else: + dct[k] = merge_dct[k] + +#------------------------------------------------------------------------------ + +def read_yaml(filename): + + with open(filename, 'r') as handle: + buf = handle.read() + + cfg = yaml.safe_load(buf) + + defs = {k:str(v) for k, v in iter(os.environ.items())} + defs.update({k:str(v) for k, v in iter(cfg.items()) if not isinstance(v, dict)}) + + buf = str_replace(buf, **defs) + + cfg = yaml.safe_load(buf) + + return cfg + +#------------------------------------------------------------------------------ + +def parse_duration(iso_duration): + """Parses an ISO 8601 duration string into a datetime.timedelta instance. + Args: + iso_duration: an ISO 8601 duration string. + Returns: + a datetime.timedelta instance + """ + + factor = 1 + if iso_duration[0] == '-': + factor = -1 + iso_duration = iso_duration[1:] + + if 'T' not in iso_duration: + iso_duration += 'T0H' + + m = re.match(r'^P(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)D)?T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:.\d+)?)S)?$', + iso_duration) + if m is None: + raise ValueError("invalid ISO 8601 duration string") + + days = 0 + hours = 0 + minutes = 0 + seconds = 0.0 + + # Years and months are not being utilized here, as there is not enough + # information provided to determine which year and which month. + # Python's time_delta class stores durations as days, seconds and + # microseconds internally, and therefore we'd have to + # convert parsed years and months to specific number of days. + + if m[3]: + days = int(m[3]) + if m[4]: + hours = int(m[4]) + if m[5]: + minutes = int(m[5]) + if m[6]: + seconds = float(m[6]) + + return factor * timedelta(days=days, hours=hours, minutes=minutes, seconds=seconds) diff --git a/projects/MissionSupport/applications/WxModel/src/taskmanager.py b/projects/MissionSupport/applications/WxModel/src/taskmanager.py new file mode 100755 index 0000000..0cc2139 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/src/taskmanager.py @@ -0,0 +1,113 @@ +"""Defines classes and methods for managing multiple tasks in parallel. + +**See Also:** + Modules: subprocess, multiprocessing +""" + +from __future__ import print_function +# should move print statements outside of module + +import time +import shlex +import subprocess +import multiprocessing + +class TaskManager(object): + """Provides methods for managing multiple tasks in parallel. + + **Args:** + none + + **Raises:** + none + """ + + def __init__(self, ntask=4): # bad default + + assert ntask > 0, "Bad request for number of processors" + self.max_task = min(ntask, multiprocessing.cpu_count()) + print('Using ' + str(self.max_task) + ' processors.') + self.task = {} + self.command = {} + + def spawn(self, command): + """Executes the specified command as a new task. + + **Args:** + command : string : input + Command to be executed. + + **Returns:** + none + + **Raises:** + none + + **Notes:** + 1. This method will wait for a processor to become available. There + is currently no option to specify the wait time or query + interval. + """ + + while self.load() >= self.max_task: + time.sleep(1) + + cmd = shlex.split(command) + + p = subprocess.Popen( + cmd, stdout=None, stderr=None, shell=False + ) + process = str(p.pid) + self.task[process] = p + self.command[process] = command + + def load(self): + """Determines the number of tasks (load) currently executing. + + **Args:** + none + + **Returns:** + ntasks : integer + Number of tasks currently executing. + + **Raises:** + none + + **Notes:** + none + """ + + ntask = len(self.task) + processes = self.task.keys() + + for process in processes: + p = self.task[process] + + if p.poll() == None: + continue + + if p.returncode != 0: + print(str(self.command[process]) + 'ended with rc=' + str(p.returncode)) + del self.task[process] + del self.command[process] + + ntask -= 1 + + return ntask + + def wait(self): + """Waits for all tasks to complete. + + **Args:** + none + + **Returns:** + none + + **Raises:** + none + """ + + while self.load() > 0: + time.sleep(1) diff --git a/projects/MissionSupport/applications/WxModel/src/wxmodel.py b/projects/MissionSupport/applications/WxModel/src/wxmodel.py new file mode 100755 index 0000000..b142c49 --- /dev/null +++ b/projects/MissionSupport/applications/WxModel/src/wxmodel.py @@ -0,0 +1,98 @@ +#! /usr/bin/env python + +import os +import re +import sys +import yaml +import argparse + +from myutils import read_yaml + +# Get command-line arguments + +parser = argparse.ArgumentParser(description='Weather Model Manager') + +parser.add_argument('datetime', metavar='datetime', type=str, + help='ISO datetime as ccyy-mm-ddThh:mm:ss') +parser.add_argument('model', metavar='model', type=str, + help='model name') +parser.add_argument('-f', '--force', action='store_true', + help='force processing') + +args = parser.parse_args() + +dattim = re.sub('[^0-9]', '', args.datetime+'000000')[0:14] +idate = int(dattim[0:8]) +itime = int(dattim[8:14]) + +time_params = { 'idate' : idate, 'itime' : itime } + +# Set up environment based on field campaign + +campaign_name = os.environ.get('WXMODEL_CAMPAIGN', 'default') +src_path = os.path.abspath(os.path.dirname(sys.argv[0])) +root_path = os.path.dirname(src_path) +campaign_path = os.path.join(root_path, campaign_name) +resource = os.path.join(campaign_path, 'models.yml') +config_file = os.path.join(campaign_path, 'models', args.model+'.yml') +lib_path = os.path.join(campaign_path, 'lib') +bin_path = os.path.join(campaign_path, 'bin') +os.environ['WXMODEL_BIN_DIR'] = bin_path +#sys.path.append(lib_path) +#sys.path.append(bin_path) + +import filehandler + +environ = read_yaml(resource) +params = {k:v for k,v in environ.iteritems() if k not in os.environ} +os.environ.update(params) + +# Read in model configuration + +config = read_yaml(config_file) +time_params['shift_dt'] = int(config.get('shift_dt', 0)) + +status = 0 +handlers = config.get('handlers',None) + +if handlers: + handlers = handlers.split(':') +else: + handlers = [k for k,v in config.iteritems() if isinstance(v,dict)] + +# Execute handlers for acquiring and/or processing the model. + +for name in handlers: + + # Retrieve the handler method. + + fh = filehandler.get_handler(name, config, status) + if not fh: continue + + # Retrieve configured groups for handler to execute. + + cfg = config[name] + groups = [v for k,v in cfg.iteritems() if isinstance(v,dict)] + if not groups: groups = [cfg] + + # Process all groups. Record bad return codes + + for group in groups: + + request = dict(cfg) + request.update(group) + request.update(time_params) + + iret = fh.handler(request) + if iret != 0: status = 2 + + print name, ': status = ', status + + # Stop processing if a handler fails (unless forced). + + if not args.force and status != 0: break + +if args.force: + sys.exit(0) +else: + sys.exit(status) diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/AVAILABLE b/projects/MissionSupport/applications/WxTraj/asia-aq/AVAILABLE new file mode 100644 index 0000000..bee26be --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/AVAILABLE @@ -0,0 +1,28 @@ +DATE TIME FILENAME SPECIFICATIONS +YYYYMMDD HHMISS +________ ______ __________ __________ +20230130 000000 Y2023/M01/D30/GEOS.fp.asm.inst3_3d_asm_Nv.20230130_0000.V01.nc4 +20230130 030000 Y2023/M01/D30/GEOS.fp.asm.inst3_3d_asm_Nv.20230130_0300.V01.nc4 +20230130 060000 Y2023/M01/D30/GEOS.fp.asm.inst3_3d_asm_Nv.20230130_0600.V01.nc4 +20230130 090000 Y2023/M01/D30/GEOS.fp.asm.inst3_3d_asm_Nv.20230130_0900.V01.nc4 +20230130 120000 Y2023/M01/D30/GEOS.fp.asm.inst3_3d_asm_Nv.20230130_1200.V01.nc4 +20230130 150000 Y2023/M01/D30/GEOS.fp.asm.inst3_3d_asm_Nv.20230130_1500.V01.nc4 +20230130 180000 Y2023/M01/D30/GEOS.fp.asm.inst3_3d_asm_Nv.20230130_1800.V01.nc4 +20230130 210000 Y2023/M01/D30/GEOS.fp.asm.inst3_3d_asm_Nv.20230130_2100.V01.nc4 +20230131 000000 Y2023/M01/D31/GEOS.fp.asm.inst3_3d_asm_Nv.20230131_0000.V01.nc4 +20230131 030000 Y2023/M01/D31/GEOS.fp.asm.inst3_3d_asm_Nv.20230131_0300.V01.nc4 +20230131 060000 Y2023/M01/D31/GEOS.fp.asm.inst3_3d_asm_Nv.20230131_0600.V01.nc4 +20230131 090000 Y2023/M01/D31/GEOS.fp.asm.inst3_3d_asm_Nv.20230131_0900.V01.nc4 +20230131 120000 Y2023/M01/D31/GEOS.fp.asm.inst3_3d_asm_Nv.20230131_1200.V01.nc4 +20230131 150000 Y2023/M01/D31/GEOS.fp.asm.inst3_3d_asm_Nv.20230131_1500.V01.nc4 +20230131 180000 Y2023/M01/D31/GEOS.fp.asm.inst3_3d_asm_Nv.20230131_1800.V01.nc4 +20230131 210000 Y2023/M01/D31/GEOS.fp.asm.inst3_3d_asm_Nv.20230131_2100.V01.nc4 +20230201 000000 Y2023/M02/D01/GEOS.fp.asm.inst3_3d_asm_Nv.20230201_0000.V01.nc4 +20230201 030000 Y2023/M02/D01/GEOS.fp.asm.inst3_3d_asm_Nv.20230201_0300.V01.nc4 +20230201 060000 Y2023/M02/D01/GEOS.fp.asm.inst3_3d_asm_Nv.20230201_0600.V01.nc4 +20230201 090000 Y2023/M02/D01/GEOS.fp.asm.inst3_3d_asm_Nv.20230201_0900.V01.nc4 +20230201 120000 Y2023/M02/D01/GEOS.fp.asm.inst3_3d_asm_Nv.20230201_1200.V01.nc4 +20230201 150000 Y2023/M02/D01/GEOS.fp.asm.inst3_3d_asm_Nv.20230201_1500.V01.nc4 +20230201 180000 Y2023/M02/D01/GEOS.fp.asm.inst3_3d_asm_Nv.20230201_1800.V01.nc4 +20230201 210000 Y2023/M02/D01/GEOS.fp.asm.inst3_3d_asm_Nv.20230201_2100.V01.nc4 +20230202 000000 Y2023/M02/D02/GEOS.fp.asm.inst3_3d_asm_Nv.20230202_0000.V01.nc4 diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/Bangkok_20240305_00_100_f/AVAILABLE b/projects/MissionSupport/applications/WxTraj/asia-aq/Bangkok_20240305_00_100_f/AVAILABLE new file mode 100644 index 0000000..a6903d0 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/Bangkok_20240305_00_100_f/AVAILABLE @@ -0,0 +1,44 @@ +DATE TIME FILENAME SPECIFICATIONS +YYYYMMDD HHMISS +________ ______ __________ __________ +20240304 000000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_0000.V01.nc4 +20240304 030000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_0300.V01.nc4 +20240304 060000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_0600.V01.nc4 +20240304 090000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_0900.V01.nc4 +20240304 120000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_1200.V01.nc4 +20240304 150000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_1500.V01.nc4 +20240304 180000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_1800.V01.nc4 +20240304 210000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_2100.V01.nc4 +20240305 000000 das/Y2024/M03/D05/GEOS.fp.asm.inst3_3d_asm_Nv.20240305_0000.V01.nc4 +20240305 030000 das/Y2024/M03/D05/GEOS.fp.asm.inst3_3d_asm_Nv.20240305_0300.V01.nc4 +20240305 060000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_0600.V01.nc4 +20240305 090000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_0900.V01.nc4 +20240305 120000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_1200.V01.nc4 +20240305 150000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_1500.V01.nc4 +20240305 180000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_1800.V01.nc4 +20240305 210000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_2100.V01.nc4 +20240306 000000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_0000.V01.nc4 +20240306 030000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_0300.V01.nc4 +20240306 060000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_0600.V01.nc4 +20240306 090000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_0900.V01.nc4 +20240306 120000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_1200.V01.nc4 +20240306 150000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_1500.V01.nc4 +20240306 180000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_1800.V01.nc4 +20240306 210000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_2100.V01.nc4 +20240307 000000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_0000.V01.nc4 +20240307 030000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_0300.V01.nc4 +20240307 060000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_0600.V01.nc4 +20240307 090000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_0900.V01.nc4 +20240307 120000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_1200.V01.nc4 +20240307 150000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_1500.V01.nc4 +20240307 180000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_1800.V01.nc4 +20240307 210000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_2100.V01.nc4 +20240308 000000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_0000.V01.nc4 +20240308 030000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_0300.V01.nc4 +20240308 060000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_0600.V01.nc4 +20240308 090000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_0900.V01.nc4 +20240308 120000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_1200.V01.nc4 +20240308 150000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_1500.V01.nc4 +20240308 180000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_1800.V01.nc4 +20240308 210000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_2100.V01.nc4 +20240309 000000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240309_0000.V01.nc4 diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/Bangkok_20240305_00_100_f/COMMAND b/projects/MissionSupport/applications/WxTraj/asia-aq/Bangkok_20240305_00_100_f/COMMAND new file mode 100644 index 0000000..8934684 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/Bangkok_20240305_00_100_f/COMMAND @@ -0,0 +1,126 @@ +******************************************************************************** +* * +* Input file for the trajectory model FLEXTRA: Please select your options * +* * +******************************************************************************** + +1. __________________________________________________ 3X, A50 + Test run #1 + LABEL FOR THE MODEL RUN + +2. __ 3X, I2 + 1 + DIRECTION 1 FORWARD, -1 BACKWARD TRAJECTORIES + +3. _______ 3X, I7 + 0720000 + HHHMISS LENGTH OF AN INDIVIDUAL TRAJECTORY + +4. ________ ______ 3X, I8, 1X, I6 + 20240305 000000 + YYYYMMDD HHMISS BEGINNING DATE + +5. ________ ______ 3X, I8, 1X, I6 + 20240305 000000 + YYYYMMDD HHMISS ENDING DATE + +6. _______ 3X, I7 + 0030000 + HHHMISS TIME INTERVAL BETWEEN STARTING TIMES OF TRAJECTORIES + +7. _ _____ 3X, I1, 2X, I5 + 1 10800 + i SSSSS i>0: INTERPOLATED OUTPUT OF TRAJECTORY EVERY SSSSS SECONDS + +8. _____ ___.___ _.___ _.___ _.___ _.___ 3X, I5, 2X, F7.3 4(2X,F5.3) + 00000 000.500 2.000 0.080 0.080 0.200 + NUMBER NUMBER, DISTANCE (GRID UNITS), TIME CONSTANT (WIND FIELD INTERVAL UNITS) AND INTERPOLATION ERRORS (IN U, V AND W) OF UNCERTAINTY TRAJECT. + +9. _ 3X, I1 + 1 + INTERPOLATION 1 = IDEAL INTERPOLATION >1 = LINEAR INTERPOLATION + +10. ---.-- 4X, F6.4 + 5.0 + CFL TIMESTEP CRITERION HORIZONTAL AND VERTICAL + +11. ---.-- 4X, F6.4 + 5.0 + CFLT TIMESTEP CRITERION TIME GAP BETWEEN INPUT WIND FIELDS + +12. - 4X, I1 + 1 + MODE 1 NORMAL MODE, 2 CET MODE, 3 FLIGHT MODE +=================================================================== +1. Comment to identify the current model run + +2. Direction of trajectories (1 means forward trajectories, -1 backward) + +3. Temporal lengths of the trajectories in the format HHHMISS, where HHH is + HOUR, MI is MINUTE and SS is SECOND + +4. Beginning date and time of trajectory calculation. Must be given in format + YYYYMMDD HHMISS, where YYYY is YEAR, MM is MONTH, DD is DAY, HH is HOUR, + MI is MINUTE and SS is SECOND. All times are in UTC. + +5. Ending date and time of trajectory calculation. Same format as 4. + +6. Time interval between two trajectory calculations. Same format as 3. + +7. Options for the trajectory output: + 0 = original data in irregular time intervals + 1 = constant time intervals, interpolated output every SSSSS seconds + 2 = 0 plus 1 + +8. Six parameters have to be inputted. The first is the number of + uncertainty trajectories. They are starting in a distance from + the starting point of the reference trajectory as given by the + second parameter (in grid units). + Additionally, random errors may be added at each time step of the + trajectory calculation. Using a Langevin equation, they are relaxed + with a time constant (in units of the wind field interval, third + parameter) specified by the user. These random errors are + thought to reflect typical wind errors caused, for instance, by + interpolation. The magnitude of these errors (in relative units, + relative to the wind velocity) must be specified by the user for + the three wind components u, v and w (last three parameters). + +9. Kind of interpolation + 1 - horizontal interpolation bicubic + vertical interpolation polynomial + temporal interpolation linear + >1 - horizontal interpolation bilinear + vertical interpolation linear + temporal interpolation linear + +10.cfl criterion horizontal/vertical + factor by which time step must be shorter than that determined + from the CFL criterion, i.e. + + delta_t1=delta x/u/cfl + delta_t2=delta y/v/cfl + delta_t3=delta z/w/cfl + + delta_t(space) = min(delta_t1,delta_t2,delta_t3) + +11. cfl criterion time + factor by wich time is shorter than time interval of the wind + fields + + delta_t(time) = delta_T(input wind)/cflt + + The time step used for trajectory calculation is the minimum of + delta_t(space) and delta_t(time) + + cfl and cflt must not be less than 1! + +12. 1 NORMAL mode -> read file STARTPOINTS and calculate a time + series of trajectories starting all from the same starting + points + 2 CET mode -> read file STARTCET and calculate trajectories + starting uniformly spaced from a user-defined domain + (for a single starting time) + 3 FLIGHT mode -> read file STARTFLIGHT and calculate + trajectories starting neither uniformly spaced nor with + constant time intervals (as needed, for instance, to start + trajectories along an aircraft leg) diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/Bangkok_20240305_00_100_f/STARTPOINTS b/projects/MissionSupport/applications/WxTraj/asia-aq/Bangkok_20240305_00_100_f/STARTPOINTS new file mode 100644 index 0000000..56e5322 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/Bangkok_20240305_00_100_f/STARTPOINTS @@ -0,0 +1,44 @@ +********************************************************************** +* * +* TRAJECTORY MODEL * +* DEFINITION OF STARTING/ENDING POINTS * +* * +* The first 7 characters of the comment are also used as filenames. * +* Therefore, they cannot be blank and they must be different for * +* each starting point. * +* * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = mixing layer * +* 4 = isobaric * +* 5 = isentropic * +* * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* For mixing layer trajectories (kind 3), the z coordinate must be * +* given in m.a.g.l. (option 2) * +* * +********************************************************************** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 100.5018 +____.____ f9.4 Longitude [DEG] + + 13.7563 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 100.000 +_____.___ f10.3 z-coordinate (see file header) + +Bangkok_20240305_00_100_f +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/Bangkok_20240305_00_100_f/pathnames b/projects/MissionSupport/applications/WxTraj/asia-aq/Bangkok_20240305_00_100_f/pathnames new file mode 100644 index 0000000..b605bac --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/Bangkok_20240305_00_100_f/pathnames @@ -0,0 +1,9 @@ +/gpfsm/dhome/dao_ops/gmao_packages/WxTraj/asia-aq/Bangkok_20240305_00_100_f/ +/discover/nobackup/projects/gmao/asia_aq/pub/trajectories/GEOS-FP/Y2024/M03/D05/H00/ +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/ +/gpfsm/dhome/dao_ops/gmao_packages/WxTraj/asia-aq/Bangkok_20240305_00_100_f/AVAILABLE +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/ +/gpfsm/dhome/dao_ops/gmao_packages/WxTraj/asia-aq/Bangkok_20240305_00_100_f/AVAILABLE +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/ +/gpfsm/dhome/dao_ops/gmao_packages/WxTraj/asia-aq/Bangkok_20240305_00_100_f/AVAILABLE +============================================ diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/Kuala_Lampur_20240305_00_100_f/AVAILABLE b/projects/MissionSupport/applications/WxTraj/asia-aq/Kuala_Lampur_20240305_00_100_f/AVAILABLE new file mode 100644 index 0000000..a6903d0 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/Kuala_Lampur_20240305_00_100_f/AVAILABLE @@ -0,0 +1,44 @@ +DATE TIME FILENAME SPECIFICATIONS +YYYYMMDD HHMISS +________ ______ __________ __________ +20240304 000000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_0000.V01.nc4 +20240304 030000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_0300.V01.nc4 +20240304 060000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_0600.V01.nc4 +20240304 090000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_0900.V01.nc4 +20240304 120000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_1200.V01.nc4 +20240304 150000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_1500.V01.nc4 +20240304 180000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_1800.V01.nc4 +20240304 210000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_2100.V01.nc4 +20240305 000000 das/Y2024/M03/D05/GEOS.fp.asm.inst3_3d_asm_Nv.20240305_0000.V01.nc4 +20240305 030000 das/Y2024/M03/D05/GEOS.fp.asm.inst3_3d_asm_Nv.20240305_0300.V01.nc4 +20240305 060000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_0600.V01.nc4 +20240305 090000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_0900.V01.nc4 +20240305 120000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_1200.V01.nc4 +20240305 150000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_1500.V01.nc4 +20240305 180000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_1800.V01.nc4 +20240305 210000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_2100.V01.nc4 +20240306 000000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_0000.V01.nc4 +20240306 030000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_0300.V01.nc4 +20240306 060000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_0600.V01.nc4 +20240306 090000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_0900.V01.nc4 +20240306 120000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_1200.V01.nc4 +20240306 150000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_1500.V01.nc4 +20240306 180000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_1800.V01.nc4 +20240306 210000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_2100.V01.nc4 +20240307 000000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_0000.V01.nc4 +20240307 030000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_0300.V01.nc4 +20240307 060000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_0600.V01.nc4 +20240307 090000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_0900.V01.nc4 +20240307 120000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_1200.V01.nc4 +20240307 150000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_1500.V01.nc4 +20240307 180000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_1800.V01.nc4 +20240307 210000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_2100.V01.nc4 +20240308 000000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_0000.V01.nc4 +20240308 030000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_0300.V01.nc4 +20240308 060000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_0600.V01.nc4 +20240308 090000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_0900.V01.nc4 +20240308 120000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_1200.V01.nc4 +20240308 150000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_1500.V01.nc4 +20240308 180000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_1800.V01.nc4 +20240308 210000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_2100.V01.nc4 +20240309 000000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240309_0000.V01.nc4 diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/Kuala_Lampur_20240305_00_100_f/COMMAND b/projects/MissionSupport/applications/WxTraj/asia-aq/Kuala_Lampur_20240305_00_100_f/COMMAND new file mode 100644 index 0000000..8934684 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/Kuala_Lampur_20240305_00_100_f/COMMAND @@ -0,0 +1,126 @@ +******************************************************************************** +* * +* Input file for the trajectory model FLEXTRA: Please select your options * +* * +******************************************************************************** + +1. __________________________________________________ 3X, A50 + Test run #1 + LABEL FOR THE MODEL RUN + +2. __ 3X, I2 + 1 + DIRECTION 1 FORWARD, -1 BACKWARD TRAJECTORIES + +3. _______ 3X, I7 + 0720000 + HHHMISS LENGTH OF AN INDIVIDUAL TRAJECTORY + +4. ________ ______ 3X, I8, 1X, I6 + 20240305 000000 + YYYYMMDD HHMISS BEGINNING DATE + +5. ________ ______ 3X, I8, 1X, I6 + 20240305 000000 + YYYYMMDD HHMISS ENDING DATE + +6. _______ 3X, I7 + 0030000 + HHHMISS TIME INTERVAL BETWEEN STARTING TIMES OF TRAJECTORIES + +7. _ _____ 3X, I1, 2X, I5 + 1 10800 + i SSSSS i>0: INTERPOLATED OUTPUT OF TRAJECTORY EVERY SSSSS SECONDS + +8. _____ ___.___ _.___ _.___ _.___ _.___ 3X, I5, 2X, F7.3 4(2X,F5.3) + 00000 000.500 2.000 0.080 0.080 0.200 + NUMBER NUMBER, DISTANCE (GRID UNITS), TIME CONSTANT (WIND FIELD INTERVAL UNITS) AND INTERPOLATION ERRORS (IN U, V AND W) OF UNCERTAINTY TRAJECT. + +9. _ 3X, I1 + 1 + INTERPOLATION 1 = IDEAL INTERPOLATION >1 = LINEAR INTERPOLATION + +10. ---.-- 4X, F6.4 + 5.0 + CFL TIMESTEP CRITERION HORIZONTAL AND VERTICAL + +11. ---.-- 4X, F6.4 + 5.0 + CFLT TIMESTEP CRITERION TIME GAP BETWEEN INPUT WIND FIELDS + +12. - 4X, I1 + 1 + MODE 1 NORMAL MODE, 2 CET MODE, 3 FLIGHT MODE +=================================================================== +1. Comment to identify the current model run + +2. Direction of trajectories (1 means forward trajectories, -1 backward) + +3. Temporal lengths of the trajectories in the format HHHMISS, where HHH is + HOUR, MI is MINUTE and SS is SECOND + +4. Beginning date and time of trajectory calculation. Must be given in format + YYYYMMDD HHMISS, where YYYY is YEAR, MM is MONTH, DD is DAY, HH is HOUR, + MI is MINUTE and SS is SECOND. All times are in UTC. + +5. Ending date and time of trajectory calculation. Same format as 4. + +6. Time interval between two trajectory calculations. Same format as 3. + +7. Options for the trajectory output: + 0 = original data in irregular time intervals + 1 = constant time intervals, interpolated output every SSSSS seconds + 2 = 0 plus 1 + +8. Six parameters have to be inputted. The first is the number of + uncertainty trajectories. They are starting in a distance from + the starting point of the reference trajectory as given by the + second parameter (in grid units). + Additionally, random errors may be added at each time step of the + trajectory calculation. Using a Langevin equation, they are relaxed + with a time constant (in units of the wind field interval, third + parameter) specified by the user. These random errors are + thought to reflect typical wind errors caused, for instance, by + interpolation. The magnitude of these errors (in relative units, + relative to the wind velocity) must be specified by the user for + the three wind components u, v and w (last three parameters). + +9. Kind of interpolation + 1 - horizontal interpolation bicubic + vertical interpolation polynomial + temporal interpolation linear + >1 - horizontal interpolation bilinear + vertical interpolation linear + temporal interpolation linear + +10.cfl criterion horizontal/vertical + factor by which time step must be shorter than that determined + from the CFL criterion, i.e. + + delta_t1=delta x/u/cfl + delta_t2=delta y/v/cfl + delta_t3=delta z/w/cfl + + delta_t(space) = min(delta_t1,delta_t2,delta_t3) + +11. cfl criterion time + factor by wich time is shorter than time interval of the wind + fields + + delta_t(time) = delta_T(input wind)/cflt + + The time step used for trajectory calculation is the minimum of + delta_t(space) and delta_t(time) + + cfl and cflt must not be less than 1! + +12. 1 NORMAL mode -> read file STARTPOINTS and calculate a time + series of trajectories starting all from the same starting + points + 2 CET mode -> read file STARTCET and calculate trajectories + starting uniformly spaced from a user-defined domain + (for a single starting time) + 3 FLIGHT mode -> read file STARTFLIGHT and calculate + trajectories starting neither uniformly spaced nor with + constant time intervals (as needed, for instance, to start + trajectories along an aircraft leg) diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/Kuala_Lampur_20240305_00_100_f/STARTPOINTS b/projects/MissionSupport/applications/WxTraj/asia-aq/Kuala_Lampur_20240305_00_100_f/STARTPOINTS new file mode 100644 index 0000000..abfdf68 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/Kuala_Lampur_20240305_00_100_f/STARTPOINTS @@ -0,0 +1,44 @@ +********************************************************************** +* * +* TRAJECTORY MODEL * +* DEFINITION OF STARTING/ENDING POINTS * +* * +* The first 7 characters of the comment are also used as filenames. * +* Therefore, they cannot be blank and they must be different for * +* each starting point. * +* * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = mixing layer * +* 4 = isobaric * +* 5 = isentropic * +* * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* For mixing layer trajectories (kind 3), the z coordinate must be * +* given in m.a.g.l. (option 2) * +* * +********************************************************************** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 101.6841 +____.____ f9.4 Longitude [DEG] + + 3.1319 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 100.000 +_____.___ f10.3 z-coordinate (see file header) + +Kuala_Lampur_20240305_00_100_f +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/Kuala_Lampur_20240305_00_100_f/pathnames b/projects/MissionSupport/applications/WxTraj/asia-aq/Kuala_Lampur_20240305_00_100_f/pathnames new file mode 100644 index 0000000..95d526f --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/Kuala_Lampur_20240305_00_100_f/pathnames @@ -0,0 +1,9 @@ +/gpfsm/dhome/dao_ops/gmao_packages/WxTraj/asia-aq/Kuala_Lampur_20240305_00_100_f/ +/discover/nobackup/projects/gmao/asia_aq/pub/trajectories/GEOS-FP/Y2024/M03/D05/H00/ +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/ +/gpfsm/dhome/dao_ops/gmao_packages/WxTraj/asia-aq/Kuala_Lampur_20240305_00_100_f/AVAILABLE +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/ +/gpfsm/dhome/dao_ops/gmao_packages/WxTraj/asia-aq/Kuala_Lampur_20240305_00_100_f/AVAILABLE +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/ +/gpfsm/dhome/dao_ops/gmao_packages/WxTraj/asia-aq/Kuala_Lampur_20240305_00_100_f/AVAILABLE +============================================ diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/Manila_20240305_00_100_f/AVAILABLE b/projects/MissionSupport/applications/WxTraj/asia-aq/Manila_20240305_00_100_f/AVAILABLE new file mode 100644 index 0000000..a6903d0 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/Manila_20240305_00_100_f/AVAILABLE @@ -0,0 +1,44 @@ +DATE TIME FILENAME SPECIFICATIONS +YYYYMMDD HHMISS +________ ______ __________ __________ +20240304 000000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_0000.V01.nc4 +20240304 030000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_0300.V01.nc4 +20240304 060000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_0600.V01.nc4 +20240304 090000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_0900.V01.nc4 +20240304 120000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_1200.V01.nc4 +20240304 150000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_1500.V01.nc4 +20240304 180000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_1800.V01.nc4 +20240304 210000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_2100.V01.nc4 +20240305 000000 das/Y2024/M03/D05/GEOS.fp.asm.inst3_3d_asm_Nv.20240305_0000.V01.nc4 +20240305 030000 das/Y2024/M03/D05/GEOS.fp.asm.inst3_3d_asm_Nv.20240305_0300.V01.nc4 +20240305 060000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_0600.V01.nc4 +20240305 090000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_0900.V01.nc4 +20240305 120000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_1200.V01.nc4 +20240305 150000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_1500.V01.nc4 +20240305 180000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_1800.V01.nc4 +20240305 210000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_2100.V01.nc4 +20240306 000000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_0000.V01.nc4 +20240306 030000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_0300.V01.nc4 +20240306 060000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_0600.V01.nc4 +20240306 090000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_0900.V01.nc4 +20240306 120000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_1200.V01.nc4 +20240306 150000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_1500.V01.nc4 +20240306 180000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_1800.V01.nc4 +20240306 210000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_2100.V01.nc4 +20240307 000000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_0000.V01.nc4 +20240307 030000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_0300.V01.nc4 +20240307 060000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_0600.V01.nc4 +20240307 090000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_0900.V01.nc4 +20240307 120000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_1200.V01.nc4 +20240307 150000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_1500.V01.nc4 +20240307 180000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_1800.V01.nc4 +20240307 210000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_2100.V01.nc4 +20240308 000000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_0000.V01.nc4 +20240308 030000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_0300.V01.nc4 +20240308 060000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_0600.V01.nc4 +20240308 090000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_0900.V01.nc4 +20240308 120000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_1200.V01.nc4 +20240308 150000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_1500.V01.nc4 +20240308 180000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_1800.V01.nc4 +20240308 210000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_2100.V01.nc4 +20240309 000000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240309_0000.V01.nc4 diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/Manila_20240305_00_100_f/COMMAND b/projects/MissionSupport/applications/WxTraj/asia-aq/Manila_20240305_00_100_f/COMMAND new file mode 100644 index 0000000..8934684 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/Manila_20240305_00_100_f/COMMAND @@ -0,0 +1,126 @@ +******************************************************************************** +* * +* Input file for the trajectory model FLEXTRA: Please select your options * +* * +******************************************************************************** + +1. __________________________________________________ 3X, A50 + Test run #1 + LABEL FOR THE MODEL RUN + +2. __ 3X, I2 + 1 + DIRECTION 1 FORWARD, -1 BACKWARD TRAJECTORIES + +3. _______ 3X, I7 + 0720000 + HHHMISS LENGTH OF AN INDIVIDUAL TRAJECTORY + +4. ________ ______ 3X, I8, 1X, I6 + 20240305 000000 + YYYYMMDD HHMISS BEGINNING DATE + +5. ________ ______ 3X, I8, 1X, I6 + 20240305 000000 + YYYYMMDD HHMISS ENDING DATE + +6. _______ 3X, I7 + 0030000 + HHHMISS TIME INTERVAL BETWEEN STARTING TIMES OF TRAJECTORIES + +7. _ _____ 3X, I1, 2X, I5 + 1 10800 + i SSSSS i>0: INTERPOLATED OUTPUT OF TRAJECTORY EVERY SSSSS SECONDS + +8. _____ ___.___ _.___ _.___ _.___ _.___ 3X, I5, 2X, F7.3 4(2X,F5.3) + 00000 000.500 2.000 0.080 0.080 0.200 + NUMBER NUMBER, DISTANCE (GRID UNITS), TIME CONSTANT (WIND FIELD INTERVAL UNITS) AND INTERPOLATION ERRORS (IN U, V AND W) OF UNCERTAINTY TRAJECT. + +9. _ 3X, I1 + 1 + INTERPOLATION 1 = IDEAL INTERPOLATION >1 = LINEAR INTERPOLATION + +10. ---.-- 4X, F6.4 + 5.0 + CFL TIMESTEP CRITERION HORIZONTAL AND VERTICAL + +11. ---.-- 4X, F6.4 + 5.0 + CFLT TIMESTEP CRITERION TIME GAP BETWEEN INPUT WIND FIELDS + +12. - 4X, I1 + 1 + MODE 1 NORMAL MODE, 2 CET MODE, 3 FLIGHT MODE +=================================================================== +1. Comment to identify the current model run + +2. Direction of trajectories (1 means forward trajectories, -1 backward) + +3. Temporal lengths of the trajectories in the format HHHMISS, where HHH is + HOUR, MI is MINUTE and SS is SECOND + +4. Beginning date and time of trajectory calculation. Must be given in format + YYYYMMDD HHMISS, where YYYY is YEAR, MM is MONTH, DD is DAY, HH is HOUR, + MI is MINUTE and SS is SECOND. All times are in UTC. + +5. Ending date and time of trajectory calculation. Same format as 4. + +6. Time interval between two trajectory calculations. Same format as 3. + +7. Options for the trajectory output: + 0 = original data in irregular time intervals + 1 = constant time intervals, interpolated output every SSSSS seconds + 2 = 0 plus 1 + +8. Six parameters have to be inputted. The first is the number of + uncertainty trajectories. They are starting in a distance from + the starting point of the reference trajectory as given by the + second parameter (in grid units). + Additionally, random errors may be added at each time step of the + trajectory calculation. Using a Langevin equation, they are relaxed + with a time constant (in units of the wind field interval, third + parameter) specified by the user. These random errors are + thought to reflect typical wind errors caused, for instance, by + interpolation. The magnitude of these errors (in relative units, + relative to the wind velocity) must be specified by the user for + the three wind components u, v and w (last three parameters). + +9. Kind of interpolation + 1 - horizontal interpolation bicubic + vertical interpolation polynomial + temporal interpolation linear + >1 - horizontal interpolation bilinear + vertical interpolation linear + temporal interpolation linear + +10.cfl criterion horizontal/vertical + factor by which time step must be shorter than that determined + from the CFL criterion, i.e. + + delta_t1=delta x/u/cfl + delta_t2=delta y/v/cfl + delta_t3=delta z/w/cfl + + delta_t(space) = min(delta_t1,delta_t2,delta_t3) + +11. cfl criterion time + factor by wich time is shorter than time interval of the wind + fields + + delta_t(time) = delta_T(input wind)/cflt + + The time step used for trajectory calculation is the minimum of + delta_t(space) and delta_t(time) + + cfl and cflt must not be less than 1! + +12. 1 NORMAL mode -> read file STARTPOINTS and calculate a time + series of trajectories starting all from the same starting + points + 2 CET mode -> read file STARTCET and calculate trajectories + starting uniformly spaced from a user-defined domain + (for a single starting time) + 3 FLIGHT mode -> read file STARTFLIGHT and calculate + trajectories starting neither uniformly spaced nor with + constant time intervals (as needed, for instance, to start + trajectories along an aircraft leg) diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/Manila_20240305_00_100_f/STARTPOINTS b/projects/MissionSupport/applications/WxTraj/asia-aq/Manila_20240305_00_100_f/STARTPOINTS new file mode 100644 index 0000000..18aaa9f --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/Manila_20240305_00_100_f/STARTPOINTS @@ -0,0 +1,44 @@ +********************************************************************** +* * +* TRAJECTORY MODEL * +* DEFINITION OF STARTING/ENDING POINTS * +* * +* The first 7 characters of the comment are also used as filenames. * +* Therefore, they cannot be blank and they must be different for * +* each starting point. * +* * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = mixing layer * +* 4 = isobaric * +* 5 = isentropic * +* * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* For mixing layer trajectories (kind 3), the z coordinate must be * +* given in m.a.g.l. (option 2) * +* * +********************************************************************** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 120.9800 +____.____ f9.4 Longitude [DEG] + + 14.5990 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 100.000 +_____.___ f10.3 z-coordinate (see file header) + +Manila_20240305_00_100_f +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/Manila_20240305_00_100_f/pathnames b/projects/MissionSupport/applications/WxTraj/asia-aq/Manila_20240305_00_100_f/pathnames new file mode 100644 index 0000000..a78008d --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/Manila_20240305_00_100_f/pathnames @@ -0,0 +1,9 @@ +/gpfsm/dhome/dao_ops/gmao_packages/WxTraj/asia-aq/Manila_20240305_00_100_f/ +/discover/nobackup/projects/gmao/asia_aq/pub/trajectories/GEOS-FP/Y2024/M03/D05/H00/ +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/ +/gpfsm/dhome/dao_ops/gmao_packages/WxTraj/asia-aq/Manila_20240305_00_100_f/AVAILABLE +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/ +/gpfsm/dhome/dao_ops/gmao_packages/WxTraj/asia-aq/Manila_20240305_00_100_f/AVAILABLE +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/ +/gpfsm/dhome/dao_ops/gmao_packages/WxTraj/asia-aq/Manila_20240305_00_100_f/AVAILABLE +============================================ diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/README b/projects/MissionSupport/applications/WxTraj/asia-aq/README new file mode 100644 index 0000000..96c2320 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/README @@ -0,0 +1 @@ +flextra_run_ops.py 2024-01-14T00 ~/cylc-run/ASIA-AQ/start_points/start_points_bangkok.csv --ctlFile /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/seamless/inst3_3d_asm_Nv/inst3_3d_asm_Nv.20240114_00 --outputs /discover/nobackup/projects/gmao/asia_aq/pub/trajectories/2024011400 --seamless diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/Seoul_20240305_00_100_f/AVAILABLE b/projects/MissionSupport/applications/WxTraj/asia-aq/Seoul_20240305_00_100_f/AVAILABLE new file mode 100644 index 0000000..a6903d0 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/Seoul_20240305_00_100_f/AVAILABLE @@ -0,0 +1,44 @@ +DATE TIME FILENAME SPECIFICATIONS +YYYYMMDD HHMISS +________ ______ __________ __________ +20240304 000000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_0000.V01.nc4 +20240304 030000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_0300.V01.nc4 +20240304 060000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_0600.V01.nc4 +20240304 090000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_0900.V01.nc4 +20240304 120000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_1200.V01.nc4 +20240304 150000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_1500.V01.nc4 +20240304 180000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_1800.V01.nc4 +20240304 210000 das/Y2024/M03/D04/GEOS.fp.asm.inst3_3d_asm_Nv.20240304_2100.V01.nc4 +20240305 000000 das/Y2024/M03/D05/GEOS.fp.asm.inst3_3d_asm_Nv.20240305_0000.V01.nc4 +20240305 030000 das/Y2024/M03/D05/GEOS.fp.asm.inst3_3d_asm_Nv.20240305_0300.V01.nc4 +20240305 060000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_0600.V01.nc4 +20240305 090000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_0900.V01.nc4 +20240305 120000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_1200.V01.nc4 +20240305 150000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_1500.V01.nc4 +20240305 180000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_1800.V01.nc4 +20240305 210000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240305_2100.V01.nc4 +20240306 000000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_0000.V01.nc4 +20240306 030000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_0300.V01.nc4 +20240306 060000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_0600.V01.nc4 +20240306 090000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_0900.V01.nc4 +20240306 120000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_1200.V01.nc4 +20240306 150000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_1500.V01.nc4 +20240306 180000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_1800.V01.nc4 +20240306 210000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240306_2100.V01.nc4 +20240307 000000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_0000.V01.nc4 +20240307 030000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_0300.V01.nc4 +20240307 060000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_0600.V01.nc4 +20240307 090000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_0900.V01.nc4 +20240307 120000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_1200.V01.nc4 +20240307 150000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_1500.V01.nc4 +20240307 180000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_1800.V01.nc4 +20240307 210000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240307_2100.V01.nc4 +20240308 000000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_0000.V01.nc4 +20240308 030000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_0300.V01.nc4 +20240308 060000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_0600.V01.nc4 +20240308 090000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_0900.V01.nc4 +20240308 120000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_1200.V01.nc4 +20240308 150000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_1500.V01.nc4 +20240308 180000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_1800.V01.nc4 +20240308 210000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240308_2100.V01.nc4 +20240309 000000 forecast/Y2024/M03/D05/H00/GEOS.fp.fcst.inst3_3d_asm_Nv.20240305_00+20240309_0000.V01.nc4 diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/Seoul_20240305_00_100_f/COMMAND b/projects/MissionSupport/applications/WxTraj/asia-aq/Seoul_20240305_00_100_f/COMMAND new file mode 100644 index 0000000..8934684 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/Seoul_20240305_00_100_f/COMMAND @@ -0,0 +1,126 @@ +******************************************************************************** +* * +* Input file for the trajectory model FLEXTRA: Please select your options * +* * +******************************************************************************** + +1. __________________________________________________ 3X, A50 + Test run #1 + LABEL FOR THE MODEL RUN + +2. __ 3X, I2 + 1 + DIRECTION 1 FORWARD, -1 BACKWARD TRAJECTORIES + +3. _______ 3X, I7 + 0720000 + HHHMISS LENGTH OF AN INDIVIDUAL TRAJECTORY + +4. ________ ______ 3X, I8, 1X, I6 + 20240305 000000 + YYYYMMDD HHMISS BEGINNING DATE + +5. ________ ______ 3X, I8, 1X, I6 + 20240305 000000 + YYYYMMDD HHMISS ENDING DATE + +6. _______ 3X, I7 + 0030000 + HHHMISS TIME INTERVAL BETWEEN STARTING TIMES OF TRAJECTORIES + +7. _ _____ 3X, I1, 2X, I5 + 1 10800 + i SSSSS i>0: INTERPOLATED OUTPUT OF TRAJECTORY EVERY SSSSS SECONDS + +8. _____ ___.___ _.___ _.___ _.___ _.___ 3X, I5, 2X, F7.3 4(2X,F5.3) + 00000 000.500 2.000 0.080 0.080 0.200 + NUMBER NUMBER, DISTANCE (GRID UNITS), TIME CONSTANT (WIND FIELD INTERVAL UNITS) AND INTERPOLATION ERRORS (IN U, V AND W) OF UNCERTAINTY TRAJECT. + +9. _ 3X, I1 + 1 + INTERPOLATION 1 = IDEAL INTERPOLATION >1 = LINEAR INTERPOLATION + +10. ---.-- 4X, F6.4 + 5.0 + CFL TIMESTEP CRITERION HORIZONTAL AND VERTICAL + +11. ---.-- 4X, F6.4 + 5.0 + CFLT TIMESTEP CRITERION TIME GAP BETWEEN INPUT WIND FIELDS + +12. - 4X, I1 + 1 + MODE 1 NORMAL MODE, 2 CET MODE, 3 FLIGHT MODE +=================================================================== +1. Comment to identify the current model run + +2. Direction of trajectories (1 means forward trajectories, -1 backward) + +3. Temporal lengths of the trajectories in the format HHHMISS, where HHH is + HOUR, MI is MINUTE and SS is SECOND + +4. Beginning date and time of trajectory calculation. Must be given in format + YYYYMMDD HHMISS, where YYYY is YEAR, MM is MONTH, DD is DAY, HH is HOUR, + MI is MINUTE and SS is SECOND. All times are in UTC. + +5. Ending date and time of trajectory calculation. Same format as 4. + +6. Time interval between two trajectory calculations. Same format as 3. + +7. Options for the trajectory output: + 0 = original data in irregular time intervals + 1 = constant time intervals, interpolated output every SSSSS seconds + 2 = 0 plus 1 + +8. Six parameters have to be inputted. The first is the number of + uncertainty trajectories. They are starting in a distance from + the starting point of the reference trajectory as given by the + second parameter (in grid units). + Additionally, random errors may be added at each time step of the + trajectory calculation. Using a Langevin equation, they are relaxed + with a time constant (in units of the wind field interval, third + parameter) specified by the user. These random errors are + thought to reflect typical wind errors caused, for instance, by + interpolation. The magnitude of these errors (in relative units, + relative to the wind velocity) must be specified by the user for + the three wind components u, v and w (last three parameters). + +9. Kind of interpolation + 1 - horizontal interpolation bicubic + vertical interpolation polynomial + temporal interpolation linear + >1 - horizontal interpolation bilinear + vertical interpolation linear + temporal interpolation linear + +10.cfl criterion horizontal/vertical + factor by which time step must be shorter than that determined + from the CFL criterion, i.e. + + delta_t1=delta x/u/cfl + delta_t2=delta y/v/cfl + delta_t3=delta z/w/cfl + + delta_t(space) = min(delta_t1,delta_t2,delta_t3) + +11. cfl criterion time + factor by wich time is shorter than time interval of the wind + fields + + delta_t(time) = delta_T(input wind)/cflt + + The time step used for trajectory calculation is the minimum of + delta_t(space) and delta_t(time) + + cfl and cflt must not be less than 1! + +12. 1 NORMAL mode -> read file STARTPOINTS and calculate a time + series of trajectories starting all from the same starting + points + 2 CET mode -> read file STARTCET and calculate trajectories + starting uniformly spaced from a user-defined domain + (for a single starting time) + 3 FLIGHT mode -> read file STARTFLIGHT and calculate + trajectories starting neither uniformly spaced nor with + constant time intervals (as needed, for instance, to start + trajectories along an aircraft leg) diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/Seoul_20240305_00_100_f/STARTPOINTS b/projects/MissionSupport/applications/WxTraj/asia-aq/Seoul_20240305_00_100_f/STARTPOINTS new file mode 100644 index 0000000..9c00232 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/Seoul_20240305_00_100_f/STARTPOINTS @@ -0,0 +1,44 @@ +********************************************************************** +* * +* TRAJECTORY MODEL * +* DEFINITION OF STARTING/ENDING POINTS * +* * +* The first 7 characters of the comment are also used as filenames. * +* Therefore, they cannot be blank and they must be different for * +* each starting point. * +* * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = mixing layer * +* 4 = isobaric * +* 5 = isentropic * +* * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* For mixing layer trajectories (kind 3), the z coordinate must be * +* given in m.a.g.l. (option 2) * +* * +********************************************************************** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 126.9900 +____.____ f9.4 Longitude [DEG] + + 37.5500 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 100.000 +_____.___ f10.3 z-coordinate (see file header) + +Seoul_20240305_00_100_f +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/Seoul_20240305_00_100_f/pathnames b/projects/MissionSupport/applications/WxTraj/asia-aq/Seoul_20240305_00_100_f/pathnames new file mode 100644 index 0000000..eb68d2b --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/Seoul_20240305_00_100_f/pathnames @@ -0,0 +1,9 @@ +/gpfsm/dhome/dao_ops/gmao_packages/WxTraj/asia-aq/Seoul_20240305_00_100_f/ +/discover/nobackup/projects/gmao/asia_aq/pub/trajectories/GEOS-FP/Y2024/M03/D05/H00/ +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/ +/gpfsm/dhome/dao_ops/gmao_packages/WxTraj/asia-aq/Seoul_20240305_00_100_f/AVAILABLE +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/ +/gpfsm/dhome/dao_ops/gmao_packages/WxTraj/asia-aq/Seoul_20240305_00_100_f/AVAILABLE +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/ +/gpfsm/dhome/dao_ops/gmao_packages/WxTraj/asia-aq/Seoul_20240305_00_100_f/AVAILABLE +============================================ diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/options/COMMAND b/projects/MissionSupport/applications/WxTraj/asia-aq/options/COMMAND new file mode 100644 index 0000000..2fb038b --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/options/COMMAND @@ -0,0 +1,126 @@ +******************************************************************************** +* * +* Input file for the trajectory model FLEXTRA: Please select your options * +* * +******************************************************************************** + +1. __________________________________________________ 3X, A50 + Test run #1 + LABEL FOR THE MODEL RUN + +2. __ 3X, I2 + -1 + DIRECTION 1 FORWARD, -1 BACKWARD TRAJECTORIES + +3. _______ 3X, I7 + 0240000 + HHHMISS LENGTH OF AN INDIVIDUAL TRAJECTORY + +4. ________ ______ 3X, I8, 1X, I6 + 20230201 000000 + YYYYMMDD HHMISS BEGINNING DATE + +5. ________ ______ 3X, I8, 1X, I6 + 20230201 000000 + YYYYMMDD HHMISS ENDING DATE + +6. _______ 3X, I7 + 0030000 + HHHMISS TIME INTERVAL BETWEEN STARTING TIMES OF TRAJECTORIES + +7. _ _____ 3X, I1, 2X, I5 + 1 10800 + i SSSSS i>0: INTERPOLATED OUTPUT OF TRAJECTORY EVERY SSSSS SECONDS + +8. _____ ___.___ _.___ _.___ _.___ _.___ 3X, I5, 2X, F7.3 4(2X,F5.3) + 00000 000.500 2.000 0.080 0.080 0.200 + NUMBER NUMBER, DISTANCE (GRID UNITS), TIME CONSTANT (WIND FIELD INTERVAL UNITS) AND INTERPOLATION ERRORS (IN U, V AND W) OF UNCERTAINTY TRAJECT. + +9. _ 3X, I1 + 1 + INTERPOLATION 1 = IDEAL INTERPOLATION >1 = LINEAR INTERPOLATION + +10. ---.-- 4X, F6.4 + 5.0 + CFL TIMESTEP CRITERION HORIZONTAL AND VERTICAL + +11. ---.-- 4X, F6.4 + 5.0 + CFLT TIMESTEP CRITERION TIME GAP BETWEEN INPUT WIND FIELDS + +12. - 4X, I1 + 1 + MODE 1 NORMAL MODE, 2 CET MODE, 3 FLIGHT MODE +=================================================================== +1. Comment to identify the current model run + +2. Direction of trajectories (1 means forward trajectories, -1 backward) + +3. Temporal lengths of the trajectories in the format HHHMISS, where HHH is + HOUR, MI is MINUTE and SS is SECOND + +4. Beginning date and time of trajectory calculation. Must be given in format + YYYYMMDD HHMISS, where YYYY is YEAR, MM is MONTH, DD is DAY, HH is HOUR, + MI is MINUTE and SS is SECOND. All times are in UTC. + +5. Ending date and time of trajectory calculation. Same format as 4. + +6. Time interval between two trajectory calculations. Same format as 3. + +7. Options for the trajectory output: + 0 = original data in irregular time intervals + 1 = constant time intervals, interpolated output every SSSSS seconds + 2 = 0 plus 1 + +8. Six parameters have to be inputted. The first is the number of + uncertainty trajectories. They are starting in a distance from + the starting point of the reference trajectory as given by the + second parameter (in grid units). + Additionally, random errors may be added at each time step of the + trajectory calculation. Using a Langevin equation, they are relaxed + with a time constant (in units of the wind field interval, third + parameter) specified by the user. These random errors are + thought to reflect typical wind errors caused, for instance, by + interpolation. The magnitude of these errors (in relative units, + relative to the wind velocity) must be specified by the user for + the three wind components u, v and w (last three parameters). + +9. Kind of interpolation + 1 - horizontal interpolation bicubic + vertical interpolation polynomial + temporal interpolation linear + >1 - horizontal interpolation bilinear + vertical interpolation linear + temporal interpolation linear + +10.cfl criterion horizontal/vertical + factor by which time step must be shorter than that determined + from the CFL criterion, i.e. + + delta_t1=delta x/u/cfl + delta_t2=delta y/v/cfl + delta_t3=delta z/w/cfl + + delta_t(space) = min(delta_t1,delta_t2,delta_t3) + +11. cfl criterion time + factor by wich time is shorter than time interval of the wind + fields + + delta_t(time) = delta_T(input wind)/cflt + + The time step used for trajectory calculation is the minimum of + delta_t(space) and delta_t(time) + + cfl and cflt must not be less than 1! + +12. 1 NORMAL mode -> read file STARTPOINTS and calculate a time + series of trajectories starting all from the same starting + points + 2 CET mode -> read file STARTCET and calculate trajectories + starting uniformly spaced from a user-defined domain + (for a single starting time) + 3 FLIGHT mode -> read file STARTFLIGHT and calculate + trajectories starting neither uniformly spaced nor with + constant time intervals (as needed, for instance, to start + trajectories along an aircraft leg) diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/options/COMMAND.alternative b/projects/MissionSupport/applications/WxTraj/asia-aq/options/COMMAND.alternative new file mode 100644 index 0000000..cd91bb7 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/options/COMMAND.alternative @@ -0,0 +1,91 @@ +******************************************************************************** +* * +* Input file for the trajectory model FLEXTRA: Please select your options * +* * +******************************************************************************** + +'Test run #1' LABEL FOR THE MODEL RUN + 1 DIRECTION (1 FORWARD, -1 BACKWARD TRAJECT.) + 480000 HHHMISS LENGTH OF AN INDIVIDUAL TRAJECTORY +19980402 120000 YYYYMMDD HHMISS BEGINNING DATE +19980406 150000 YYYYMMDD HHMISS ENDING DATE + 060000 HHHMISS TIME INTERVAL BETWEEN STARTING TIMES OF TRAJECTORIES +2 3600 i SSSSS i>0: INTERPOLATED OUTPUT OF TRAJECTORY EVERY SSSSS SECONDS +0 0.5 2.0 0.08 0.08 0.20 NUMBER, DISTANCE (GRID UNITS), TIME CONSTANT (WIND FIELD INTERVAL UNITS) AND INTERPOLATION ERRORS (IN U, V AND W) OF UNCERTAINTY TRAJECT. +1 INTERPOLATION 1 = IDEAL INTERPOLATION >1 = LINEAR INTERPOLATION +5.0 CFL TIMESTEP CRITERION HORIZONTAL AND VERTICAL +5.0 CFLT TIMESTEP CRITERION TIME GAP BETWEEN INPUT WIND FIELDS +3 MODE 1 NORMAL MODE, 2 CET MODE, 3 FLIGHT MODE +================================================================================== +1. Comment to identify the current model run + +2. Direction of trajectories (1 means forward trajectories, -1 backward) + +3. Temporal lengths of the trajectories in the format HHHMISS, where HHH is + HOUR, MI is MINUTE and SS is SECOND + +4. Beginning date and time of trajectory calculation. Must be given in format + YYYYMMDD HHMISS, where YYYY is YEAR, MM is MONTH, DD is DAY, HH is HOUR, + MI is MINUTE and SS is SECOND. All times are in UTC. + +5. Ending date and time of trajectory calculation. Same format as 4. + +6. Time interval between two trajectory calculations. Same format as 3. + +7. Options for the trajectory output: + 0 = original data in irregular time intervals + 1 = constant time intervals, interpolated output every SSSSS seconds + 2 = 0 plus 1 + +8. Six parameters have to be inputted. The first is the number of + uncertainty trajectories. They are starting in a distance from + the starting point of the reference trajectory as given by the + second parameter (in grid units). + Additionally, random errors may be added at each time step of the + trajectory calculation. Using a Langevin equation, they are relaxed + with a time constant (in units of the wind field interval, third + parameter) specified by the user. These random errors are + thought to reflect typical wind errors caused, for instance, by + interpolation. The magnitude of these errors (in relative units, + relative to the wind velocity) must be specified by the user for + the three wind components u, v and w (last three parameters). + +9. Kind of interpolation + 1 - horizontal interpolation bicubic + vertical interpolation polynomial + temporal interpolation linear + >1 - horizontal interpolation bilinear + vertical interpolation linear + temporal interpolation linear + +10.cfl criterion horizontal/vertical + factor by which time step must be shorter than that determined + from the CFL criterion, i.e. + + delta_t1=delta x/u/cfl + delta_t2=delta y/v/cfl + delta_t3=delta z/w/cfl + + delta_t(space) = min(delta_t1,delta_t2,delta_t3) + +11. cfl criterion time + factor by wich time is shorter than time interval of the wind + fields + + delta_t(time) = delta_T(input wind)/cflt + + The time step used for trajectory calculation is the minimum of + delta_t(space) and delta_t(time) + + cfl and cflt must not be less than 1! + +12. 1 NORMAL mode -> read file STARTPOINTS and calculate a time + series of trajectories starting all from the same starting + points + 2 CET mode -> read file STARTCET and calculate trajectories + starting uniformly spaced from a user-defined domain + (for a single starting time) + 3 FLIGHT mode -> read file STARTFLIGHT and calculate + trajectories starting neither uniformly spaced nor with + constant time intervals (as needed, for instance, to start + trajectories along an aircraft leg) diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/options/COMMAND.reference b/projects/MissionSupport/applications/WxTraj/asia-aq/options/COMMAND.reference new file mode 100644 index 0000000..d6e551f --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/options/COMMAND.reference @@ -0,0 +1,126 @@ +******************************************************************************** +* * +* Input file for the trajectory model FLEXTRA: Please select your options * +* * +******************************************************************************** + +1. __________________________________________________ 3X, A50 + Test run #1 + LABEL FOR THE MODEL RUN + +2. __ 3X, I2 + -1 + DIRECTION 1 FORWARD, -1 BACKWARD TRAJECTORIES + +3. _______ 3X, I7 + 960000 + HHHMISS LENGTH OF AN INDIVIDUAL TRAJECTORY + +4. ________ ______ 3X, I8, 1X, I6 + 19980402 150000 + YYYYMMDD HHMISS BEGINNING DATE + +5. ________ ______ 3X, I8, 1X, I6 + 19980405 120000 + YYYYMMDD HHMISS ENDING DATE + +6. _______ 3X, I7 + 0060000 + HHHMISS TIME INTERVAL BETWEEN STARTING TIMES OF TRAJECTORIES + +7. _ _____ 3X, I1, 2X, I5 + 1 10800 + i SSSSS i>0: INTERPOLATED OUTPUT OF TRAJECTORY EVERY SSSSS SECONDS + +8. _____ ___.___ _.___ _.___ _.___ _.___ 3X, I5, 2X, F7.3 4(2X,F5.3) + 00000 000.500 2.000 0.080 0.080 0.200 + NUMBER NUMBER, DISTANCE (GRID UNITS), TIME CONSTANT (WIND FIELD INTERVAL UNITS) AND INTERPOLATION ERRORS (IN U, V AND W) OF UNCERTAINTY TRAJECT. + +9. _ 3X, I1 + 1 + INTERPOLATION 1 = IDEAL INTERPOLATION >1 = LINEAR INTERPOLATION + +10. ---.-- 4X, F6.4 + 5.0 + CFL TIMESTEP CRITERION HORIZONTAL AND VERTICAL + +11. ---.-- 4X, F6.4 + 5.0 + CFLT TIMESTEP CRITERION TIME GAP BETWEEN INPUT WIND FIELDS + +12. - 4X, I1 + 1 + MODE 1 NORMAL MODE, 2 CET MODE, 3 FLIGHT MODE +=================================================================== +1. Comment to identify the current model run + +2. Direction of trajectories (1 means forward trajectories, -1 backward) + +3. Temporal lengths of the trajectories in the format HHHMISS, where HHH is + HOUR, MI is MINUTE and SS is SECOND + +4. Beginning date and time of trajectory calculation. Must be given in format + YYYYMMDD HHMISS, where YYYY is YEAR, MM is MONTH, DD is DAY, HH is HOUR, + MI is MINUTE and SS is SECOND. All times are in UTC. + +5. Ending date and time of trajectory calculation. Same format as 4. + +6. Time interval between two trajectory calculations. Same format as 3. + +7. Options for the trajectory output: + 0 = original data in irregular time intervals + 1 = constant time intervals, interpolated output every SSSSS seconds + 2 = 0 plus 1 + +8. Six parameters have to be inputted. The first is the number of + uncertainty trajectories. They are starting in a distance from + the starting point of the reference trajectory as given by the + second parameter (in grid units). + Additionally, random errors may be added at each time step of the + trajectory calculation. Using a Langevin equation, they are relaxed + with a time constant (in units of the wind field interval, third + parameter) specified by the user. These random errors are + thought to reflect typical wind errors caused, for instance, by + interpolation. The magnitude of these errors (in relative units, + relative to the wind velocity) must be specified by the user for + the three wind components u, v and w (last three parameters). + +9. Kind of interpolation + 1 - horizontal interpolation bicubic + vertical interpolation polynomial + temporal interpolation linear + >1 - horizontal interpolation bilinear + vertical interpolation linear + temporal interpolation linear + +10.cfl criterion horizontal/vertical + factor by which time step must be shorter than that determined + from the CFL criterion, i.e. + + delta_t1=delta x/u/cfl + delta_t2=delta y/v/cfl + delta_t3=delta z/w/cfl + + delta_t(space) = min(delta_t1,delta_t2,delta_t3) + +11. cfl criterion time + factor by wich time is shorter than time interval of the wind + fields + + delta_t(time) = delta_T(input wind)/cflt + + The time step used for trajectory calculation is the minimum of + delta_t(space) and delta_t(time) + + cfl and cflt must not be less than 1! + +12. 1 NORMAL mode -> read file STARTPOINTS and calculate a time + series of trajectories starting all from the same starting + points + 2 CET mode -> read file STARTCET and calculate trajectories + starting uniformly spaced from a user-defined domain + (for a single starting time) + 3 FLIGHT mode -> read file STARTFLIGHT and calculate + trajectories starting neither uniformly spaced nor with + constant time intervals (as needed, for instance, to start + trajectories along an aircraft leg) diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/options/COMMAND.save b/projects/MissionSupport/applications/WxTraj/asia-aq/options/COMMAND.save new file mode 100644 index 0000000..874a4d3 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/options/COMMAND.save @@ -0,0 +1,126 @@ +******************************************************************************** +* * +* Input file for the trajectory model FLEXTRA: Please select your options * +* * +******************************************************************************** + +1. __________________________________________________ 3X, A50 + Test run #1 + LABEL FOR THE MODEL RUN + +2. __ 3X, I2 + -1 + DIRECTION 1 FORWARD, -1 BACKWARD TRAJECTORIES + +3. _______ 3X, I7 + 0720000 + HHHMISS LENGTH OF AN INDIVIDUAL TRAJECTORY + +4. ________ ______ 3X, I8, 1X, I6 + 20230801 000000 + YYYYMMDD HHMISS BEGINNING DATE + +5. ________ ______ 3X, I8, 1X, I6 + 20230801 090000 + YYYYMMDD HHMISS ENDING DATE + +6. _______ 3X, I7 + 0030000 + HHHMISS TIME INTERVAL BETWEEN STARTING TIMES OF TRAJECTORIES + +7. _ _____ 3X, I1, 2X, I5 + 1 10800 + i SSSSS i>0: INTERPOLATED OUTPUT OF TRAJECTORY EVERY SSSSS SECONDS + +8. _____ ___.___ _.___ _.___ _.___ _.___ 3X, I5, 2X, F7.3 4(2X,F5.3) + 00000 000.500 2.000 0.080 0.080 0.200 + NUMBER NUMBER, DISTANCE (GRID UNITS), TIME CONSTANT (WIND FIELD INTERVAL UNITS) AND INTERPOLATION ERRORS (IN U, V AND W) OF UNCERTAINTY TRAJECT. + +9. _ 3X, I1 + 1 + INTERPOLATION 1 = IDEAL INTERPOLATION >1 = LINEAR INTERPOLATION + +10. ---.-- 4X, F6.4 + 5.0 + CFL TIMESTEP CRITERION HORIZONTAL AND VERTICAL + +11. ---.-- 4X, F6.4 + 5.0 + CFLT TIMESTEP CRITERION TIME GAP BETWEEN INPUT WIND FIELDS + +12. - 4X, I1 + 1 + MODE 1 NORMAL MODE, 2 CET MODE, 3 FLIGHT MODE +=================================================================== +1. Comment to identify the current model run + +2. Direction of trajectories (1 means forward trajectories, -1 backward) + +3. Temporal lengths of the trajectories in the format HHHMISS, where HHH is + HOUR, MI is MINUTE and SS is SECOND + +4. Beginning date and time of trajectory calculation. Must be given in format + YYYYMMDD HHMISS, where YYYY is YEAR, MM is MONTH, DD is DAY, HH is HOUR, + MI is MINUTE and SS is SECOND. All times are in UTC. + +5. Ending date and time of trajectory calculation. Same format as 4. + +6. Time interval between two trajectory calculations. Same format as 3. + +7. Options for the trajectory output: + 0 = original data in irregular time intervals + 1 = constant time intervals, interpolated output every SSSSS seconds + 2 = 0 plus 1 + +8. Six parameters have to be inputted. The first is the number of + uncertainty trajectories. They are starting in a distance from + the starting point of the reference trajectory as given by the + second parameter (in grid units). + Additionally, random errors may be added at each time step of the + trajectory calculation. Using a Langevin equation, they are relaxed + with a time constant (in units of the wind field interval, third + parameter) specified by the user. These random errors are + thought to reflect typical wind errors caused, for instance, by + interpolation. The magnitude of these errors (in relative units, + relative to the wind velocity) must be specified by the user for + the three wind components u, v and w (last three parameters). + +9. Kind of interpolation + 1 - horizontal interpolation bicubic + vertical interpolation polynomial + temporal interpolation linear + >1 - horizontal interpolation bilinear + vertical interpolation linear + temporal interpolation linear + +10.cfl criterion horizontal/vertical + factor by which time step must be shorter than that determined + from the CFL criterion, i.e. + + delta_t1=delta x/u/cfl + delta_t2=delta y/v/cfl + delta_t3=delta z/w/cfl + + delta_t(space) = min(delta_t1,delta_t2,delta_t3) + +11. cfl criterion time + factor by wich time is shorter than time interval of the wind + fields + + delta_t(time) = delta_T(input wind)/cflt + + The time step used for trajectory calculation is the minimum of + delta_t(space) and delta_t(time) + + cfl and cflt must not be less than 1! + +12. 1 NORMAL mode -> read file STARTPOINTS and calculate a time + series of trajectories starting all from the same starting + points + 2 CET mode -> read file STARTCET and calculate trajectories + starting uniformly spaced from a user-defined domain + (for a single starting time) + 3 FLIGHT mode -> read file STARTFLIGHT and calculate + trajectories starting neither uniformly spaced nor with + constant time intervals (as needed, for instance, to start + trajectories along an aircraft leg) diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTCET b/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTCET new file mode 100644 index 0000000..dc4aece --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTCET @@ -0,0 +1,39 @@ +********************************************************************** +* * +* TRAJECTORY MODEL * +* DEFINITION OF THE CET DOMAIN * +* A CET STARTING DOMAIN IS DEFINED BY THE LOWER LEFT AND UPPER RIGHT* +* CORNER IN A LATITUDE/LONGITUDE COORDINATE SYSTEM, AND BY A LOWER * +* AND UPPER LEVEL. TRAJECTORIES ARE STARTED AT DISTANCES DX, DY AND * +* DZ WITHIN THIS DOMAIN. * +* * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = not allowed in CET mode * +* 4 = isobaric * +* 5 = isentropic * +* * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* The vertical distance DZ between the trajectories must be * +* given in the same units. * +* * +********************************************************************** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -20.0 F Lower left longitude [DEG] + 20.0 F Lower left latitude [DEG] + 40.0 F Upper right longitude [DEG] + 70.0 F Upper right latitude [DEG] + 1.0 F DX: Longitudinal distance between trajectories [DEG] + 1.0 F DY: Latitudinal distance between trajectories [DEG] + 1 I Kind of trajectory (see file header) + 3 I Unit of z coordinate + 500.0 F Lower z-coordinate (see file header) + 500.0 F Upper z-coordinate (see file header) + 200.0 F DZ: Vertical interval of trajectories (see file header) +'TESTCET' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTCET.alternative b/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTCET.alternative new file mode 100644 index 0000000..159c43e --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTCET.alternative @@ -0,0 +1,39 @@ +********************************************************************** +* * +* TRAJECTORY MODEL * +* DEFINITION OF THE CET DOMAIN * +* A CET STARTING DOMAIN IS DEFINED BY THE LOWER LEFT AND UPPER RIGHT* +* CORNER IN A LATITUDE/LONGITUDE COORDINATE SYSTEM, AND BY A LOWER * +* AND UPPER LEVEL. TRAJECTORIES ARE STARTED AT DISTANCES DX, DY AND * +* DZ WITHIN THIS DOMAIN. * +* * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = not allowed in CET mode * +* 4 = isobaric * +* 5 = isentropic * +* * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* The vertical distance DZ between the trajectories must be * +* given in the same units. * +* * +********************************************************************** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 10.0 F Lower left longitude [DEG] + 48.0 F Lower left latitude [DEG] + 15.0 F Upper right longitude [DEG] + 50.0 F Upper right latitude [DEG] + 0.5 F DX: Longitudinal distance between trajectories [DEG] + 0.5 F DY: Latitudinal distance between trajectories [DEG] + 5 I Kind of trajectory (see file header) + 2 I Unit of z coordinate + 2000.0 F Lower z-coordinate (see file header) + 3000.0 F Upper z-coordinate (see file header) + 500.0 F DZ: Vertical interval of trajectories (see file header) +'TEST' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTCET.reference b/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTCET.reference new file mode 100644 index 0000000..7d857e4 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTCET.reference @@ -0,0 +1,62 @@ +********************************************************************** +* * +* TRAJECTORY MODEL * +* DEFINITION OF THE CET DOMAIN * +* A CET STARTING DOMAIN IS DEFINED BY THE LOWER LEFT AND UPPER RIGHT* +* CORNER IN A LATITUDE/LONGITUDE COORDINATE SYSTEM, AND BY A LOWER * +* AND UPPER LEVEL. TRAJECTORIES ARE STARTED AT DISTANCES DX, DY AND * +* DZ WITHIN THIS DOMAIN. * +* * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = not allowed in CET mode * +* 4 = isobaric * +* 5 = isentropic * +* * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* The vertical distance DZ between the trajectories must be * +* given in the same units. * +* * +********************************************************************** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 10.0 +____.____ f9.4 Lower left longitude [DEG] + + 48.0 +____.____ f9.4 Lower left latitude [DEG] + + 15.0 +____.____ f9.4 Upper right longitude [DEG] + + 50.0 +____.____ f9.4 Upper right latitude [DEG] + + 0.5 +____.____ f9.4 DX: Longitudinal distance between trajectories [DEG] + + 0.5 +____.____ f9.4 DY: Latitudinal distance between trajectories [DEG] + + 5 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 2000.0 +_____.___ f10.3 Lower z-coordinate (see file header) + + 3000.0 +_____.___ f10.3 Upper z-coordinate (see file header) + + 500.0 +_____.___ f10.3 DZ: Vertical interval of trajectories (see file header) + +TEST +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTFLIGHT b/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTFLIGHT new file mode 100644 index 0000000..380fe0e --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTFLIGHT @@ -0,0 +1,51 @@ +********************************************************************** +* TRAJECTORY MODEL * +* DEFINITION OF STARTING/ENDING POINTS IN FLIGHT MODE * +* This file defines starting points separated non-uniformly in * +* space as well as in time. Thus, both starting times AND starting * +* coordinates must be given. * +* The starting times must be strictly in temporal order. * +* For backward trajectories, the temporal order must be reversed. * +* In line #28 of this file, the name of the output file must be * +* indicated. Lines #29 and #30 must contain kind of trajectory and * +* the unit of the z coordinate to be used. Line #31 is arbitrary, * +* then follows a sequence of points. * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = mixing layer * +* 4 = isobaric * +* 5 = isentropic * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* For mixing layer trajectories (kind 3), the z coordinate must be * +* given in m.a.g.l. (option 2) * +* * +********************************************************************** +'Flight#7' +1 I Kind of trajectory (see file header) +1 I Unit of z coordinate +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +19980404 000000 2I Starting date and time + 34.0 F Longitude [DEG] + 72.0 F Latitude [DEG] +1000.0 F z-coordinate (see file header) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +19980404 140000 2I Starting date and time + -15.0 F Longitude [DEG] + 48.0 F Latitude [DEG] +2000.0 F z-coordinate (see file header) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +19980405 130000 2I Starting date and time + 10.0 F Longitude [DEG] + 48.0 F Latitude [DEG] +3500.0 F z-coordinate (see file header) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +19980406 130000 2I Starting date and time + 10.0 F Longitude [DEG] + 48.0 F Latitude [DEG] +3000.0 F z-coordinate (see file header) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTFLIGHT.reference b/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTFLIGHT.reference new file mode 100644 index 0000000..380fe0e --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTFLIGHT.reference @@ -0,0 +1,51 @@ +********************************************************************** +* TRAJECTORY MODEL * +* DEFINITION OF STARTING/ENDING POINTS IN FLIGHT MODE * +* This file defines starting points separated non-uniformly in * +* space as well as in time. Thus, both starting times AND starting * +* coordinates must be given. * +* The starting times must be strictly in temporal order. * +* For backward trajectories, the temporal order must be reversed. * +* In line #28 of this file, the name of the output file must be * +* indicated. Lines #29 and #30 must contain kind of trajectory and * +* the unit of the z coordinate to be used. Line #31 is arbitrary, * +* then follows a sequence of points. * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = mixing layer * +* 4 = isobaric * +* 5 = isentropic * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* For mixing layer trajectories (kind 3), the z coordinate must be * +* given in m.a.g.l. (option 2) * +* * +********************************************************************** +'Flight#7' +1 I Kind of trajectory (see file header) +1 I Unit of z coordinate +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +19980404 000000 2I Starting date and time + 34.0 F Longitude [DEG] + 72.0 F Latitude [DEG] +1000.0 F z-coordinate (see file header) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +19980404 140000 2I Starting date and time + -15.0 F Longitude [DEG] + 48.0 F Latitude [DEG] +2000.0 F z-coordinate (see file header) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +19980405 130000 2I Starting date and time + 10.0 F Longitude [DEG] + 48.0 F Latitude [DEG] +3500.0 F z-coordinate (see file header) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +19980406 130000 2I Starting date and time + 10.0 F Longitude [DEG] + 48.0 F Latitude [DEG] +3000.0 F z-coordinate (see file header) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTPOINTS b/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTPOINTS new file mode 100644 index 0000000..7934b7f --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTPOINTS @@ -0,0 +1,44 @@ +********************************************************************** +* * +* TRAJECTORY MODEL * +* DEFINITION OF STARTING/ENDING POINTS * +* * +* The first 7 characters of the comment are also used as filenames. * +* Therefore, they cannot be blank and they must be different for * +* each starting point. * +* * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = mixing layer * +* 4 = isobaric * +* 5 = isentropic * +* * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* For mixing layer trajectories (kind 3), the z coordinate must be * +* given in m.a.g.l. (option 2) * +* * +********************************************************************** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 126.9900 +____.____ f9.4 Longitude [DEG] + + 37.5500 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 100.000 +_____.___ f10.3 z-coordinate (see file header) + +Seoul_20230201_00_100_b +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTPOINTS.alternative b/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTPOINTS.alternative new file mode 100644 index 0000000..edf618f --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTPOINTS.alternative @@ -0,0 +1,40 @@ +********************************************************************** +* * +* TRAJECTORY MODEL * +* DEFINITION OF STARTING/ENDING POINTS * +* * +* The first 7 characters of the comment are also used as filenames. * +* Therefore, they cannot be blank and they must be different for * +* each starting point. * +* * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = mixing layer * +* 4 = isobaric * +* 5 = isentropic * +* * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* For mixing layer trajectories (kind 3), the z coordinate must be * +* given in m.a.g.l. (option 2) * +* * +********************************************************************** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 10.0 F Longitude [DEG] + 48.0 F Latitude [DEG] +1 I Kind of trajectory (see file header) +1 I Unit of z coordinate +3000.0 F z-coordinate (see file header) +'TEST1' A Name of starting point +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -15.0 F Longitude [DEG] + 48.0 F Latitude [DEG] +5 I Kind of trajectory (see file header) +2 I Unit of z coordinate +2000.0 F z-coordinate (see file header) +'TEST2' A Name of starting point +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTPOINTS.reference b/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTPOINTS.reference new file mode 100644 index 0000000..837b137 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTPOINTS.reference @@ -0,0 +1,62 @@ +********************************************************************** +* * +* TRAJECTORY MODEL * +* DEFINITION OF STARTING/ENDING POINTS * +* * +* The first 7 characters of the comment are also used as filenames. * +* Therefore, they cannot be blank and they must be different for * +* each starting point. * +* * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = mixing layer * +* 4 = isobaric * +* 5 = isentropic * +* * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* For mixing layer trajectories (kind 3), the z coordinate must be * +* given in m.a.g.l. (option 2) * +* * +********************************************************************** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 10.0 +____.____ f9.4 Longitude [DEG] + + 48.0 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 3000.0 +_____.___ f10.3 z-coordinate (see file header) + +TEST1 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -15.0 +____.____ f9.4 Longitude [DEG] + + 48.0 +____.____ f9.4 Latitude [DEG] + + 5 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 2000.0 +_____.___ f10.3 z-coordinate (see file header) + +TEST2 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTPOINTS.save b/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTPOINTS.save new file mode 100644 index 0000000..13019fa --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTPOINTS.save @@ -0,0 +1,44 @@ +********************************************************************** +* * +* TRAJECTORY MODEL * +* DEFINITION OF STARTING/ENDING POINTS * +* * +* The first 7 characters of the comment are also used as filenames. * +* Therefore, they cannot be blank and they must be different for * +* each starting point. * +* * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = mixing layer * +* 4 = isobaric * +* 5 = isentropic * +* * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* For mixing layer trajectories (kind 3), the z coordinate must be * +* given in m.a.g.l. (option 2) * +* * +********************************************************************** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 126.99 +____.____ f9.4 Longitude [DEG] + + 37.55 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 250.00 +_____.___ f10.3 z-coordinate (see file header) + +Seoul +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTPOINTS_backward b/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTPOINTS_backward new file mode 100644 index 0000000..2d7f0a0 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTPOINTS_backward @@ -0,0 +1,890 @@ +********************************************************************** +* * +* TRAJECTORY MODEL * +* DEFINITION OF STARTING/ENDING POINTS * +* * +* The first 7 characters of the comment are also used as filenames. * +* Therefore, they cannot be blank and they must be different for * +* each starting point. * +* * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = mixing layer * +* 4 = isobaric * +* 5 = isentropic * +* * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* For mixing layer trajectories (kind 3), the z coordinate must be * +* given in m.a.g.l. (option 2) * +* * +********************************************************************** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 500.0 +_____.___ f10.3 z-coordinate (see file header) + +1 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 1000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0001 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 1500.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0002 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 2000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0003 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 2500.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0004 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 3000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0005 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 3500.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0006 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 4000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0007 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 4500.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0008 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 5000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0009 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 5500.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0010 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 6000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0011 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 6500.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0012 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 7000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0013 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 7500.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0014 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 8000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0015 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 8500.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0016 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 9000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0017 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 9500.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0018 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + +10000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0019 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + +10500.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0020 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + +11000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0021 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + +11500.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0022 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + +12000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0023 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 500.0 +_____.___ f10.3 z-coordinate (see file header) + +2 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 1000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0001 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 1500.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0002 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 2000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0003 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 2500.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0004 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 3000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0005 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 3500.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0006 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 4000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0007 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 4500.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0008 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 5000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0009 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 5500.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0010 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 6000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0011 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 6500.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0012 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 7000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0013 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 7500.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0014 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 8000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0015 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 8500.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0016 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 9000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0017 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 9500.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0018 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +10000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0019 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +10500.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0020 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +11000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0021 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +11500.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0022 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +12000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0023 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTPOINTS_forward b/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTPOINTS_forward new file mode 100644 index 0000000..1a6f5c3 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/options/STARTPOINTS_forward @@ -0,0 +1,890 @@ +********************************************************************** +* * +* TRAJECTORY MODEL * +* DEFINITION OF STARTING/ENDING POINTS * +* * +* The first 7 characters of the comment are also used as filenames. * +* Therefore, they cannot be blank and they must be different for * +* each starting point. * +* * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = mixing layer * +* 4 = isobaric * +* 5 = isentropic * +* * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* For mixing layer trajectories (kind 3), the z coordinate must be * +* given in m.a.g.l. (option 2) * +* * +********************************************************************** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 500.0 +_____.___ f10.3 z-coordinate (see file header) + +3 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 1000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0001 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 1500.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0002 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 2000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0003 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 2500.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0004 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 3000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0005 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 3500.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0006 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 4000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0007 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 4500.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0008 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 5000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0009 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 5500.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0010 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 6000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0011 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 6500.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0012 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 7000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0013 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 7500.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0014 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 8000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0015 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 8500.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0016 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 9000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0017 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 9500.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0018 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +10000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0019 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +10500.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0020 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +11000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0021 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +11500.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0022 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +12000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0023 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 500.0 +_____.___ f10.3 z-coordinate (see file header) + +4 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 1000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0001 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 1500.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0002 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 2000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0003 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 2500.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0004 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 3000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0005 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 3500.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0006 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 4000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0007 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 4500.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0008 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 5000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0009 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 5500.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0010 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 6000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0011 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 6500.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0012 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 7000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0013 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 7500.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0014 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 8000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0015 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 8500.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0016 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 9000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0017 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 9500.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0018 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +10000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0019 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +10500.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0020 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +11000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0021 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +11500.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0022 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +12000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0023 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/pathnames b/projects/MissionSupport/applications/WxTraj/asia-aq/pathnames new file mode 100644 index 0000000..e6c6213 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/pathnames @@ -0,0 +1,9 @@ +/discover/nobackup/pcastell/workspace/flextra/flextra/options/ +/discover/nobackup/pcastell/workspace/flextra/flextra/output/ +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/das/ +/discover/nobackup/pcastell/workspace/flextra/flextra/AVAILABLE +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/das/ +/discover/nobackup/pcastell/workspace/flextra/flextra/AVAILABLE +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/das/ +/discover/nobackup/pcastell/workspace/flextra/flextra/AVAILABLE +============================================ diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/start_points/start_points_bangkok.csv b/projects/MissionSupport/applications/WxTraj/asia-aq/start_points/start_points_bangkok.csv new file mode 100644 index 0000000..bf9e6da --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/start_points/start_points_bangkok.csv @@ -0,0 +1,2 @@ +name,lon,lat +Bangkok,100.5018,13.7563 diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/start_points/start_points_kuala_lumpur.csv b/projects/MissionSupport/applications/WxTraj/asia-aq/start_points/start_points_kuala_lumpur.csv new file mode 100644 index 0000000..3deceb9 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/start_points/start_points_kuala_lumpur.csv @@ -0,0 +1,2 @@ +name,lon,lat +Kuala_Lampur,101.6841,3.1319 diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/start_points/start_points_manila.csv b/projects/MissionSupport/applications/WxTraj/asia-aq/start_points/start_points_manila.csv new file mode 100644 index 0000000..a76443f --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/start_points/start_points_manila.csv @@ -0,0 +1,2 @@ +name,lon,lat +Manila,120.98,14.599 diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/start_points/start_points_seoul.csv b/projects/MissionSupport/applications/WxTraj/asia-aq/start_points/start_points_seoul.csv new file mode 100644 index 0000000..f5e67b9 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/start_points/start_points_seoul.csv @@ -0,0 +1,2 @@ +name,lon,lat +Seoul,126.99,37.55 diff --git a/projects/MissionSupport/applications/WxTraj/asia-aq/trajectory.yml b/projects/MissionSupport/applications/WxTraj/asia-aq/trajectory.yml new file mode 100644 index 0000000..318fb17 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/asia-aq/trajectory.yml @@ -0,0 +1,7 @@ +WX_PATH: /discover/nobackup/projects/gmao/asia_aq + +GEOS-FP: + tmplFile: inst3_3d_asm_Nv.tmpl +# ctlFile: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/seamless/inst3_3d_asm_Nv/inst3_3d_asm_Nv.%Y%m%d_%H + outputs: $WX_PATH/pub/trajectories/GEOS-FP/Y%Y/M%m/D%d/H%H + seamless: diff --git a/projects/MissionSupport/applications/WxTraj/bin/FLEXTRA_GEOS.x b/projects/MissionSupport/applications/WxTraj/bin/FLEXTRA_GEOS.x new file mode 100755 index 0000000..532838a Binary files /dev/null and b/projects/MissionSupport/applications/WxTraj/bin/FLEXTRA_GEOS.x differ diff --git a/projects/MissionSupport/applications/WxTraj/bin/flextra_run_ops.py b/projects/MissionSupport/applications/WxTraj/bin/flextra_run_ops.py new file mode 100755 index 0000000..ce2a533 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/bin/flextra_run_ops.py @@ -0,0 +1,271 @@ +#!/usr/bin/env python3 +""" +Run flextra in NORMAL mode +""" + +import os,sys +from datetime import datetime, timedelta +from dateutil.parser import parse as isoparser +from glob import glob +import subprocess +import argparse +import csv +from normal import NORMAL +import shutil +import simplekml +import json + +if __name__ == "__main__": + + # defaults + alts = [100] + direction='both' + days = 3 + opendap = '/home/pcastell/opendap/fp/opendap/assim/' + ctlFile = opendap + 'inst3_3d_asm_Nv' + inputs = os.getcwd() + outputs = inputs + '/output' + # inputs arguments + parser = argparse.ArgumentParser() + + parser.add_argument("iso_startdate", + help="start date for trajectory is ISO format") + + parser.add_argument("start_points_file", + help="input CSV file with starting points name,lon,lat") + + parser.add_argument("--inputs",default=inputs, + help="inputs directory, default is the current working directory "\ + "(default=%s)"%inputs) + + parser.add_argument("--outputs",default=outputs, + help="outputs directory, default is the current working directory/output "\ + "(default=%s)"%outputs) + + parser.add_argument("--alts",default=alts,nargs='+',type=float, + help="list of altitudes (use spaces) to start trajectories from "\ + "(default=%s)"%alts) + + parser.add_argument("--direction",default=direction, + help="direction for trajectory, can be 'forward','backward', or 'both'" \ + "(default=%s)"%direction) + + parser.add_argument("--days",default=days,type=int, + help="number of days to calcuate for trajectory " \ + "(default=%i)"%days) + + parser.add_argument("--ctlFile",default=ctlFile, + help="control file of model wind fields " \ + "(default=%s)"%ctlFile) + + parser.add_argument("--seamless",action="store_true", + help="set this flag if you're using a seamless control file " \ + "(default=False)") + + parser.add_argument("--debug",action="store_true", + help="debugging, don't delete input and intermdiate files after FLEXTRA run " \ + "(default=False)") + + args = parser.parse_args() + + # get start date + sdate = isoparser(args.iso_startdate) + + if args.direction == "forward": + tdtf = args.days + tdtb = None + elif args.direction == "backward": + tdtf = None + tdtb = -1*args.days + else: + tdtf = args.days + tdtb = -1*args.days + + + # read start point CSV + # --------------------- + pointsFile = open(args.start_points_file,'r') + reader = csv.DictReader(pointsFile) + + # loop through start points, altitudes, and trajectory directions + # --------------------------------------------------------------- + for startp in reader: + for alt in args.alts: + for tdt in [tdtf, tdtb]: + if tdt is not None: + if tdt < 0: + direction = 'b' + else: + direction = 'f' + + ident = '{}_{}_{}_{}'.format(startp['name'],sdate.strftime('%Y%m%d_%H'),alt,direction) + if not os.path.exists(ident): + os.mkdir(ident) + + # Edit pathnames input File + # ----------------------------- + # get model filename template (control file) + if args.seamless: + f = open(args.ctlFile,'r') + dsetRoot = f.readline().split()[1][:-4] + ch, assim_s, assim_e, assim_path = f.readline().split() + ch, forec_s, forec_e, forec_path = f.readline().split() + for l in range(17): + f.readline() + + tdef,t_e,linear,ctl_start, dmin = f.readline().split() + ctlsdate = datetime.strptime(ctl_start,'%HZ%d%b%Y') + + assim_sdate = datetime.strptime(ctl_start,'%HZ%d%b%Y') + assim_edate = assim_sdate + timedelta(hours=(3*int(assim_e))) + + forec_sdate = assim_sdate + timedelta(hours=(3*int(forec_s))) + + f.close() + else: + f = open(args.ctlFile,'r') + dset = f.readline().split()[1] + f.close() + + dsetRoot = '/'.join(dset.split('/')[:-4]) + '/' + dsetPath = '/'.join(dset.split('/')[-4:]) + + f = open('pathnames','r') + data = f.readlines() + f.close() + + data[0] = args.inputs + '/{}/\n'.format(ident) + data[1] = args.outputs + '/\n' + data[2] = dsetRoot +'\n' + data[3] = args.inputs + '/{}/AVAILABLE\n'.format(ident) + data[4] = dsetRoot +'\n' + data[5] = args.inputs + '/{}/AVAILABLE\n'.format(ident) + data[6] = dsetRoot +'\n' + data[7] = args.inputs + '/{}/AVAILABLE\n'.format(ident) + + pathnames = '{}/pathnames'.format(ident) + f = open(pathnames,'w') + f.writelines(data) + f.close() + + + # Edit STARTPOINTS File + # --------------------- + f = open('options/STARTPOINTS','r') + data = f.readlines() + f.close() + + data[26] = '{lon:9.4f}\n'.format(lon=float(startp['lon'])) + data[29] = '{lat:9.4f}\n'.format(lat=float(startp['lat'])) + data[38] = '{alt:10.3f}\n'.format(alt=alt) + outFile = '{}_{}_{}_{}'.format(startp['name'],sdate.strftime('%Y%m%d_%H'),alt,direction) + data[41] = '{}\n'.format(outFile) + + f = open('{}/STARTPOINTS'.format(ident),'w') + f.writelines(data) + f.close() + + + # Edit COMMAND file + # ------------------ + f = open('options/COMMAND','r') + data = f.readlines() + f.close() + + if tdt < 0: + data[11] = ' -1\n' + else: + data[11] = ' 1\n' + + tdt_h = str(abs(tdt*24)).zfill(3) + data[15] = ' {}0000\n'.format(tdt_h) + + data[19] = sdate.strftime(' %Y%m%d 000000\n') + data[23] = sdate.strftime(' %Y%m%d 000000\n') + + f = open('{}/COMMAND'.format(ident),'w') + f.writelines(data) + f.close() + + # Edit AVAILABLE file + # --------------------- + dt = timedelta(hours=3) # model time step + sd = min(sdate,sdate+timedelta(days=tdt)) + timedelta(days=-1) + ed = max(sdate,sdate+timedelta(days=tdt)) + timedelta(days=1) + + f = open('{}/AVAILABLE'.format(ident),'w') + f.write('DATE TIME FILENAME SPECIFICATIONS\n') + f.write('YYYYMMDD HHMISS\n') + f.write('________ ______ __________ __________\n') + while sd <= ed: + yy = sd.strftime('%Y') + mm = sd.strftime('%m') + dd = sd.strftime('%d') + hh = sd.strftime('%H') + yyyymmdd_hh = sd.strftime('%Y%m%d %H0000 ') + + if args.seamless: + if sd <= assim_edate: + filename = assim_path.replace('%y4',yy).replace('%m2',mm).replace('%d2',dd).replace('%h2',hh).replace('%n2','00') + else: + filename = forec_path.replace('%y4',yy).replace('%m2',mm).replace('%d2',dd).replace('%h2',hh).replace('%n2','00') + else: + filename = dsetPath.replace('%y4',yy).replace('%m2',mm).replace('%d2',dd).replace('%h2',hh).replace('%n2','00') + + line = yyyymmdd_hh + filename + '\n' + f.write(line) + + sd += dt + f.close() + + + # run flexpart + # ------------- + p = subprocess.Popen(['FLEXTRA_GEOS.x','{}'.format(pathnames)]) + p.wait() + + # read formatted outfile, and rewrite output to simple csv & kml & json + # ---------------------------------------------------------------- + tdata = NORMAL('{}/TI_{}'.format(args.outputs,outFile)) + f = open('{}/TI_{}.csv'.format(args.outputs,outFile),'w') + writer = csv.writer(f) + fields = ['date','lat','lon','alt'] + writer.writerow(fields) + + rows = [] + urecords = [] + kml = simplekml.Kml(open=1) + linestring = kml.newlinestring(name="{} trajectory".format(direction)) + coords = [] + for date,lat,lon,altitude in zip(tdata.sdate[0,:],tdata.lat[0,:],tdata.lon[0,:],tdata.alt[0,:]): + rows.append([date,lat,lon,altitude]) + year,month,dd = date.split('-') + day, time = dd.split('T') + hour,minute,sec = time.split(':') + urecords.append((int(year),int(month),int(day),int(hour),'traj',lat,lon,altitude)) + coords.append((lon, lat, altitude)) + linestring.coords = coords + linestring.altitudemode = simplekml.AltitudeMode.relativetoground + linestring.extrude = 1 + linestring.style.linestyle.color = simplekml.Color.cyan + linestring.style.linestyle.width = 4 + + writer.writerows(rows) + f.close() + kml.save('{}/TI_{}.kml'.format(args.outputs,outFile)) + + f = open('{}/TI_{}.json'.format(args.outputs,outFile),'w') + tnew = {} + tnew[startp['name']] = urecords + tdata = json.dumps(tnew) + f.write(tdata) + f.close() + + # if not debug mode, remove input files and FLEXTRA formatted output + # ------------------------------------------------------------------ + if not args.debug: + shutil.rmtree(args.inputs + '/{}'.format(ident)) + os.remove('{}/TI_{}'.format(args.outputs,outFile)) + + + pointsFile.close() diff --git a/projects/MissionSupport/applications/WxTraj/bin/g5_modules b/projects/MissionSupport/applications/WxTraj/bin/g5_modules new file mode 100755 index 0000000..adeb315 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/bin/g5_modules @@ -0,0 +1,435 @@ +#!/bin/csh -f +######################################################################## +# +# Name: g5_modules +# +# Purposes - +# * provide single location for BASEDIR and module values +# * initialize the following: +# - set BASEDIR +# - update LD_LIBRARY_PATH with BASEDIR lib +# - load library modules +# * echo expected BASEDIR and library module values when queried +# +# Notes: +# 1. The script will not function correctly if the scriptname +# definition within the script is incorrect. +# 2. Type "g5_modules help" for usage information. +# +# Perl Notes: +# ========== +# 1. You cannot "source" this file from a perl script. +# 2. Instead use the following in your perl script: +# #-------------------------------- +# use Env; +# do "g5_modules_perl_wrapper"; +# #-------------------------------- +# 3. Use the g5_modules_perl_wrapper file located in the build's bin +# directory, where a copy of g5_modules also resides. This is important +# since g5_modules_perl_wrapper uses g5_modules and expects it to be in +# the same directory. +# +# Bash Notes: +# ========== +# If you are in a bash shell, then source the g5_modules.sh script. +# > source g5_modules.sh +# +# REVISION HISTORY +# 31Aug2007 Stassi Initial version of code +# 15Oct2007 Stassi Expand list of machines and include defaults +# 15Dec2007 Stassi Added LD_LIBRARY_PATH functionality +# 21Jul2008 Takacs New modules and BASEDIR on discover after OS upgrade +# 13Apr2009 Stassi Updated for pleiades +# 22Apr2010 Kokron Updated for Fortuna-2.1 on pleiades +# 21Jul2011 Kokron Overlay older MKL module as on discover to gain reproducible results from dgeev in GSI +# 24Aug2012 Stassi Added sh option to write bash source-able file +# 03Nov2016 Thompson Remove JIBB +######################################################################## + +# NOTE: Spell out scriptname--DO NOT SET EQUAL TO $0! +#---------------------------------------------------- +set scriptname = g5_modules +if ( $scriptname == "$0:t" ) then + set sourced = 0 +else + set sourced = 1 +endif + +# check for improper usage +#------------------------- +if (! $sourced && ! $#argv) goto usage # not sourced and no args +if ( $sourced && $#argv) goto usage # sourced with args + +# get architecture, machine, and node information +#------------------------------------------------ +set arch = `uname -s` +set mach = `uname -m` +set node = `uname -n` + +# Find site +# --------- + +if (($node =~ discover*) || ($node =~ borg*) || \ + ($node =~ dali*) || ($node =~ warp*)) then + + set site = "NCCS" + +else if (($node =~ pfe*) || ($node =~ tfe*) || \ + ($node =~ r[0-9]*i[0-9]*n[0-9]*) || \ + ($node =~ r[0-9]*c[0-9]*t[0-9]*n[0-9]*)) then + + # We are on NAS... + set site = "NAS" + + # Are we on TOSS4 + set LSB_RELEASE = `lsb_release -sr | cut -d'.' -f 1` + if ($LSB_RELEASE == '8') then + set nasos = "TOSS4" + else + set nasos = "TOSS3" + endif + +else if ( -d /ford1/share/gmao_SIteam/ && -d /ford1/local/ && $arch == Linux ) then + set site = "GMAO.desktop" + +else + set site = $node + +endif + +alias echo2 "echo \!* > /dev/stderr" + +# get values +#----------- +if ($mach == x86_64) goto X86_64 +if ($mach == arm64) goto ARM64 + +# ERROR -- unknown architecture/machine +#-------------------------------------- +echo2 "${scriptname}: >>>WARNING<<< unrecognizable arch/machine = $arch/$mach" +echo 0 # indicating error condition +exit 8 + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +# X86_64 values (Linux) +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +X86_64: + +#==================# +# X86_64 default # +#==================# + +set modinit = DUMMY + +set loadmodules = 0 +set usemodules = 0 + +#========# +# NCCS # +#========# +if ( $site == NCCS ) then + + set mod1 = GEOSenv + + set mod2 = comp/gcc/10.3.0 + set mod3 = comp/intel/2021.6.0 + + set mod4 = mpi/impi/2021.6.0 + + set mod5 = python/GEOSpyD/Min4.11.0_py3.9_AND_Min4.8.3_py2.7 + +# set basedir = /discover/swdev/gmao_SIteam/Baselibs/ESMA-Baselibs-7.7.0/x86_64-pc-linux-gnu/ifort_2021.6.0-intelmpi_2021.6.0 +# no mpi baselibs + set basedir = /discover/swdev/gmao_SIteam/Baselibs/ESMA-Baselibs-7.13.0/x86_64-pc-linux-gnu/gfortran_11.2.0-mpiuni + + set mods = ( $mod1 $mod2 $mod3 $mod4 $mod5 ) + set modinit = /usr/share/modules/init/csh + set loadmodules = 0 + + set usemod1 = /discover/swdev/gmao_SIteam/modulefiles-SLES12 + set usemods = ( $usemod1 ) + set usemodules = 1 + +#=======# +# NAS # +#=======# +else if ( $site == NAS ) then + + if ( $nasos == TOSS3 ) then + set basedir = /nobackup/gmao_SIteam/Baselibs/ESMA-Baselibs-7.7.0/x86_64-pc-linux-gnu/ifort_2022.1.0-mpt_2.25 + else + set basedir = /nobackup/gmao_SIteam/Baselibs/ESMA-Baselibs-7.7.0/x86_64-pc-linux-gnu/ifort_2022.1.0-mpt_2.25-TOSS4-BuiltOnRome + endif + + set mod1 = GEOSenv + set mod2 = gcc/10.2 + set mod3 = comp-intel/2022.1.0 + set mod4 = mpi-hpe/mpt.2.25 + set mod5 = python/GEOSpyD/Min4.11.0_py3.9_AND_Min4.8.3_py2.7 + + set mods = ( $mod1 $mod2 $mod3 $mod4 $mod5 ) + set modinit = /usr/share/modules/init/tcsh + set loadmodules = 0 + + set usemod1 = /u/scicon/tools/modulefiles + set usemod2 = /nobackup/gmao_SIteam/modulefiles + set usemod3 = /nasa/modulefiles/testing + set usemods = ( $usemod1 $usemod2 $usemod3 ) + set usemodules = 1 + +#=================# +# GMAO DESKTOP # +#=================# +else if ( $site == GMAO.desktop ) then + + set basedir=/ford1/share/gmao_SIteam/Baselibs/ESMA-Baselibs-7.7.0/x86_64-pc-linux-gnu/ifort_2022.1.0-intelmpi_2022.1.0 + + set mod1 = GEOSenv + + set mod2 = comp/gcc/11.2.0 + set mod3 = comp/intel/2022.1.0 + set mod4 = mpi/impi/2022.1.0 + set mod5 = other/python/GEOSpyD/Min4.11.0_py3.9_AND_Min4.8.3_py2.7 + + set mods = ( $mod1 $mod2 $mod3 $mod4 $mod5 ) + set modinit = /usr/share/Modules/init/tcsh + set loadmodules = 0 + + set usemod1 = /ford1/share/gmao_SIteam/modulefiles + set usemods = ( $usemod1 ) + set usemodules = 1 + +endif + +goto ACTION + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +# ARM64 values +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +ARM64: + +#=================# +# ARM64 default # +#=================# + +set modinit = DUMMY + +set loadmodules = 0 +set usemodules = 0 + +goto ACTION + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +# perform requested action +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +ACTION: + +#===================# +# ECHO VALUE(s) # +#===================# +set wrapper = 0 +if ( $#argv > 0 ) then + + if ( $1 == basedir ) then + echo $basedir + + else if ( $1 == modules ) then + echo $mods + + else if ( $1 == modinit ) then + echo $modinit + + else if ( $1 == loadmodules ) then + echo $loadmodules + + else if ( $1 == usemodules ) then + echo $usemods + + else if ( $1 == ESMA_FC ) then + echo $ESMA_FC + + else if ( $1 == site ) then + echo $site + + else if ( $1 == sh ) then + set wrapper = 1 + goto SETVALUES + + else if ( $1 == help ) then + goto usage + + else + echo2 "${scriptname}: >>>ERROR<<< unrecognizable option -- $1" + echo2 Type "$scriptname help" for usage information. + echo 0 # indicating error condition + exit 9 + endif + + exit +endif + +SETVALUES: +#================# +# SET VALUES # +#================# +#------------------------------------------------------------------------- +# set environment variables, BASEDIR and LD_LIBRARY_PATH; and load modules +#------------------------------------------------------------------------- + +# setenv BASEDIR +#--------------- +if ($?basedir) then + if (! $wrapper) echo -n "${scriptname}: Setting BASEDIR" + setenv BASEDIR $basedir +else if ($?BASEDIR) then + if (! $wrapper) echo -n "${scriptname}: BASEDIR found in environment" +else + echo + echo "BASEDIR not found in environment or set by ${scriptname}" + exit 3 +endif + +# add BASEDIR lib to LD_LIBRARY_PATH, if not already there +#--------------------------------------------------------- +if ($?LD_LIBRARY_PATH) then + echo $LD_LIBRARY_PATH | grep $BASEDIR/$arch/lib > /dev/null + if ($status) then # == 1, if not found + setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:$BASEDIR/$arch/lib + endif +else + setenv LD_LIBRARY_PATH $BASEDIR/$arch/lib +endif + +# add individual $ld_libraries to LD_LIBRARY_PATH, if not already there +#---------------------------------------------------------------------- +if ($?ld_libraries) then + foreach lib ( $ld_libraries ) + if ($LD_LIBRARY_PATH !~ *$lib*) then + setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:$lib + endif + end +endif + +if ($?LD_LIBRARY64_PATH) then + echo $LD_LIBRARY64_PATH | grep $BASEDIR/$arch/lib > /dev/null + if ($status) then # == 1, if not found + setenv LD_LIBRARY64_PATH ${LD_LIBRARY64_PATH}:$BASEDIR/$arch/lib + endif +endif + +# load library modules +#--------------------- +if (-e $modinit) then + + if (! $wrapper) echo -n " and modules" + source $modinit + module purge + + if ($loadmodules) module load modules + + if ($usemodules) then + foreach usemod ( $usemods ) + module use -a $usemod + end + endif + + foreach mod ( $mods ) + module load $mod + end + + if ($?XTRAMODS2LOAD) then + set xmods = (`echo $XTRAMODS2LOAD | cut -d: -f1- --output-delimiter=" "`) + foreach mod ( $xmods ) + module load $mod + end + endif + +endif +if (! $wrapper) echo " for $node" + +# write sh commands to a .g5_modules.sh file +#------------------------------------------- +if ($wrapper) then + set outfil = ".g5_modules.sh" + + if ($?BASEDIR) then + echo "export BASEDIR=$BASEDIR" >! $outfil + endif + if ($?LD_LIBRARY_PATH) then + echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH" >> $outfil + endif + if ($?LD_LIBRARY64_PATH) then + echo "export LD_LIBRARY64_PATH=$LD_LIBRARY64_PATH" >> $outfil + endif + + set modulecmd = `which modulecmd` + if ($status) set modulecmd = "/usr/bin/modulecmd" + set modinit_sh = `echo $modinit | sed "s|/csh|/sh|"` + + if (-e $modulecmd) then + if (-e $modinit_sh) then + echo 'source '$modinit_sh >> $outfil + endif + echo 'eval `'$modulecmd sh purge'`' >> $outfil + if ($loadmodules) then + echo 'eval `'$modulecmd sh load modules'`' >> $outfil + endif + foreach mod ($mods) + echo 'eval `'$modulecmd sh load $mod'`' >> $outfil + end + endif + +endif +exit + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +# usage information # +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +usage: + +more < + +OPTIONS + + help echo usage + basedir echo expected value for BASEDIR environment variable + modules echo expected list of modules + modinit echo location of csh module initialization script + loadmodules echo logical indicating whether "module load modules" + is needed prior to loading other modules + usemodules echo logical indicating whether "module use directory(s)" + is needed prior to loading other modules + ESMA_FC echo value of ESMA_FC if set + site echo site as detected by $scriptname + sh write sh version of g5_modules to file named, ".g5_modules.sh" + +EOF +exit 1 diff --git a/projects/MissionSupport/applications/WxTraj/bin/modules b/projects/MissionSupport/applications/WxTraj/bin/modules new file mode 100755 index 0000000..0652a47 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/bin/modules @@ -0,0 +1,17 @@ +#!/usr/bin/sh +#======================================================================= +# name - setup_env.sh +# purpose - +# This script can be "sourced" from the c shell to set environment + + +# Set Python PATH +#----------------- +setenv PYTHONPATH /discover/nobackup/pcastell/workspace/simplekml:/home/dao_ops/gmao_packages/Workflow/Shared:/home/dao_ops/gmao_packages/WxTraj/src + +setenv PATH "${PATH}:/home/dao_ops/gmao_packages/WxTraj/bin" + +# source AeroApps modules +source ./g5_modules + + diff --git a/projects/MissionSupport/applications/WxTraj/bin/wxfluid.py b/projects/MissionSupport/applications/WxTraj/bin/wxfluid.py new file mode 100755 index 0000000..4d41b5a --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/bin/wxfluid.py @@ -0,0 +1,196 @@ +#! /usr/bin/env python + +import os +import re +import sys +import yaml +import json +import glob +import errno +import argparse +import datetime as dt + +from myutils import read_yaml, str_replace +from taskmanager import * + +# Get command-line arguments + +parser = argparse.ArgumentParser(description='Weather Trajectories') + +parser.add_argument('datetime', metavar='datetime', type=str, + help='ISO datetime as ccyy-mm-ddThh:mm:ss') + +args = parser.parse_args() + +dattim = re.sub('[^0-9]', '', args.datetime+'000000')[0:14] +idate = int(dattim[0:8]) +itime = int(dattim[8:14]) +time_dt = dt.datetime.strptime(dattim,'%Y%m%d%H%M%S') +isodattim = time_dt.strftime('%Y-%m-%dT%H') + +# Set up environment based on field campaign + +campaign_name = os.environ.get('WXTRAJ_CAMPAIGN', 'default') +bin_path = os.path.abspath(os.path.dirname(sys.argv[0])) +root_path = os.path.dirname(bin_path) +campaign_path = os.path.join(root_path, campaign_name) +tmpl_path = os.path.join(root_path, 'templates') +resource_file = os.path.join(campaign_path, 'trajectory.yml') +start_points = os.path.join(campaign_path, 'start_points', '*.csv') +#lib_path = os.path.join(campaign_path, 'lib') +#bin_path = os.path.join(campaign_path, 'bin') +#sys.path.append(lib_path) +#sys.path.append(bin_path) + +resource = read_yaml(resource_file) +opt = resource.get('options', {}) + +# Create the output trajectory directory + +out_dir = time_dt.strftime(opt['outputs']) + +try: + os.makedirs(out_dir, 0755) +except: + pass + +# Create a stable seamless control file based on a collection template. +# We only need a window big enough to span the trajectories (usually +# +-2days.) + +tmplFile = opt.get('tmplFile', None) +tmplFile = os.path.join(tmpl_path, tmplFile) + +if tmplFile: + + if not os.path.isfile(tmplFile): + tmplFile = os.path.join(root_path, tmplFile) + + if not os.path.isfile(tmplFile): + errstr = 'Cannot locate template file: "{}" and "{}" do not exist.' + errstr = errstr.format(opt['tmplFile'], tmplFile) + print(errstr) + sys.exit(2) + + start_dt = time_dt - dt.timedelta(days=3) + end_dt = time_dt + dt.timedelta(days=3) + + tdef_das = int((time_dt - start_dt).total_seconds() / 3600) + tdef_total = int((end_dt - start_dt).total_seconds() / 3600) + + defs = {} + defs['T1'] = str(1) + defs['T2'] = str(tdef_das / 3 + 1) + defs['T3'] = str(tdef_das / 3 + 2) + defs['T4'] = str(tdef_total / 3 + 1) + defs['START_DATE'] = start_dt.strftime('%HZ%d%b%Y') + + with open(tmplFile, 'r') as f: + buf = f.read() + + buf = time_dt.strftime(buf) + buf = str_replace(buf, **defs) + + ctlFile, ext = os.path.splitext(os.path.basename(tmplFile)) + ctlFile = os.path.join(out_dir, ctlFile + '.%Y%m%d_%H') + ctlFile = time_dt.strftime(ctlFile) + opt['ctlFile'] = ctlFile + + with open(ctlFile, 'w') as f: + f.write(buf) + + del opt['tmplFile'] + +# Execute the trajectory calculator for all start points. + +options = ' '.join(['--'+k+' '+v for k,v in opt.items() if v]) +options += ' ' + ' '.join(['--'+k for k,v in opt.items() if not v]) +options = time_dt.strftime(options) + +filelist = glob.glob(start_points) +task = TaskManager() + +for pathname in filelist: + if os.path.isfile(pathname): + print(pathname) + + cmd = [] + cmd.append(isodattim) + cmd.append(pathname) + cmd.append(options) + + os.chdir(campaign_path) + print('flextra_run_ops.py ' + ' '.join(cmd)) + # task.spawn('flextra_run_ops.py ' + ' '.join(cmd)) + +task.wait() + +# Create FLUID version of the JSON files including a 3-day history +# of trajectories. + +forward = {} +backward = {} +current = time_dt.strftime('%Y%m%d%H') + +t_dt = time_dt - dt.timedelta(days=3) +while t_dt <= time_dt: + + dattim = t_dt.strftime('%Y%m%d%H') + input_dir = t_dt.strftime(opt['outputs']) + files = glob.glob(os.path.join(input_dir, '*_[b,f].json')) + + for pathname in files: + + with open(pathname, 'r') as f: + trajectory = json.load(f) + + basename = os.path.basename(pathname) + type, ext = os.path.splitext(basename.split('_')[-1]) + level = basename.split('_')[-2] + region = '_'.join(basename.split('_')[1:-4]) + id = region + '_' + level + + for name, record in trajectory.items(): + + name += '-' + level + + for rec in record: + + rec[0] = time_dt.year + rec[1] = time_dt.month + rec[2] = time_dt.day + rec[3] = time_dt.hour + rec[4] = 'XX' + + if type == 'f': + d = forward.get(id, {}) + forward[id] = d + else: + d = backward.get(id, {}) + backward[id] = d + + d[dattim+'_'+id] = record + + t_dt += dt.timedelta(days=1) + +# Create FLUID JSON files. + +for name, buf in forward.items(): + + outname = os.path.join(out_dir, name+'_history_f.fluid') + with open(outname, 'w') as f: + json.dump(buf, f) + + outname = os.path.join(out_dir, name+'_f.fluid') + with open(outname, 'w') as f: + json.dump({current+'_'+name: buf[current+'_'+name]}, f) + +for name, buf in backward.items(): + + outname = os.path.join(out_dir, name+'_history_b.fluid') + with open(outname, 'w') as f: + json.dump(buf, f) + + outname = os.path.join(out_dir, name+'_b.fluid') + with open(outname, 'w') as f: + json.dump({current+'_'+name: buf[current+'_'+name]}, f) diff --git a/projects/MissionSupport/applications/WxTraj/bin/wxtraj.py b/projects/MissionSupport/applications/WxTraj/bin/wxtraj.py new file mode 100755 index 0000000..43f9186 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/bin/wxtraj.py @@ -0,0 +1,200 @@ +#! /usr/bin/env python + +import os +import re +import sys +import yaml +import json +import glob +import errno +import argparse +import datetime as dt + +from myutils import read_yaml, str_replace +from taskmanager import * + +# Get command-line arguments + +parser = argparse.ArgumentParser(description='Weather Trajectories') + +parser.add_argument('datetime', metavar='datetime', type=str, + help='ISO datetime as ccyy-mm-ddThh:mm:ss') +parser.add_argument('model', metavar='model', type=str, + help='model name') + +args = parser.parse_args() + +dattim = re.sub('[^0-9]', '', args.datetime+'000000')[0:14] +idate = int(dattim[0:8]) +itime = int(dattim[8:14]) +time_dt = dt.datetime.strptime(dattim,'%Y%m%d%H%M%S') +isodattim = time_dt.strftime('%Y-%m-%dT%H') + +# Set up environment based on field campaign + +campaign_name = os.environ.get('WXTRAJ_CAMPAIGN', 'default') +bin_path = os.path.abspath(os.path.dirname(sys.argv[0])) +root_path = os.path.dirname(bin_path) +campaign_path = os.path.join(root_path, campaign_name) +tmpl_path = os.path.join(root_path, 'templates') +resource_file = os.path.join(campaign_path, 'trajectory.yml') +start_points = os.path.join(campaign_path, 'start_points', '*.csv') +#lib_path = os.path.join(campaign_path, 'lib') +#bin_path = os.path.join(campaign_path, 'bin') +#sys.path.append(lib_path) +#sys.path.append(bin_path) + +opt = read_yaml(resource_file)[args.model] + +# Create the output trajectory directory + +out_dir = time_dt.strftime(opt['outputs']) + +try: + os.makedirs(out_dir, 0755) +except: + pass + +# Create a stable seamless control file based on a collection template. +# We only need a window big enough to span the trajectories (usually +# +-2days.) + +tmplFile = opt.get('tmplFile', None) + +if tmplFile: + + tmplFile = os.path.join(tmpl_path, tmplFile) + + if not os.path.isfile(tmplFile): + tmplFile = os.path.join(root_path, tmplFile) + + if not os.path.isfile(tmplFile): + errstr = 'Cannot locate template file: "{}" and "{}" do not exist.' + errstr = errstr.format(opt['tmplFile'], tmplFile) + print(errstr) + sys.exit(2) + + start_dt = time_dt - dt.timedelta(days=3) + end_dt = time_dt + dt.timedelta(days=3) + + tdef_das = int((time_dt - start_dt).total_seconds() / 3600) + tdef_total = int((end_dt - start_dt).total_seconds() / 3600) + + defs = {} + defs['T1'] = str(1) + defs['T2'] = str(tdef_das / 3 + 1) + defs['T3'] = str(tdef_das / 3 + 2) + defs['T4'] = str(tdef_total / 3 + 1) + defs['START_DATE'] = start_dt.strftime('%HZ%d%b%Y') + + with open(tmplFile, 'r') as f: + buf = f.read() + + buf = time_dt.strftime(buf) + buf = str_replace(buf, **defs) + + ctlFile, ext = os.path.splitext(os.path.basename(tmplFile)) + ctlFile = os.path.join(out_dir, ctlFile + '.%Y%m%d_%H') + ctlFile = time_dt.strftime(ctlFile) + opt['ctlFile'] = ctlFile + + with open(ctlFile, 'w') as f: + f.write(buf) + + del opt['tmplFile'] + +# Execute the trajectory calculator for all start points. + +options = ' '.join(['--'+k+' '+v for k,v in opt.items() if v]) +options += ' ' + ' '.join(['--'+k for k,v in opt.items() if not v]) +options = time_dt.strftime(options) + +filelist = glob.glob(start_points) +task = TaskManager(ntask=16) + +for pathname in filelist: + if os.path.isfile(pathname): + print(pathname) + + cmd = [] + cmd.append(isodattim) + cmd.append(pathname) + cmd.append(options) + + os.chdir(campaign_path) + print('flextra_run_ops.py ' + ' '.join(cmd)) + task.spawn('flextra_run_ops.py ' + ' '.join(cmd)) + +task.wait() + +# Create FLUID version of the JSON files including a 3-day history +# of trajectories. + +forward = {} +backward = {} +current = time_dt.strftime('%Y%m%d%H') + +t_dt = time_dt - dt.timedelta(days=3) +while t_dt <= time_dt: + + dattim = t_dt.strftime('%Y%m%d%H') + input_dir = t_dt.strftime(opt['outputs']) + files = glob.glob(os.path.join(input_dir, '*_[b,f].json')) + + for pathname in files: + + with open(pathname, 'r') as f: + trajectory = json.load(f) + + basename = os.path.basename(pathname) + type, ext = os.path.splitext(basename.split('_')[-1]) + level = basename.split('_')[-2] + region = '_'.join(basename.split('_')[1:-4]) + id = region + '_' + level + + for name, record in trajectory.items(): + + name += '-' + level + + for rec in record: + + rec[0] = time_dt.year + rec[1] = time_dt.month + rec[2] = time_dt.day + rec[3] = time_dt.hour + rec[4] = 'traj' + height = rec[7] * 3.28084 # Convert meters to feet + rec[7] = int(round(height/10.0)) # Use decafeet + + if type == 'f': + d = forward.get(id, {}) + forward[id] = d + else: + d = backward.get(id, {}) + backward[id] = d + + d[dattim+'_'+id] = record + + t_dt += dt.timedelta(days=1) + +# Create FLUID JSON files. + +for name, buf in forward.items(): + + outname = os.path.join(out_dir, name+'_history_f.fluid') + with open(outname, 'w') as f: + json.dump(buf, f) + + outname = os.path.join(out_dir, name+'_f.fluid') + with open(outname, 'w') as f: + json.dump({current+'_'+name: buf[current+'_'+name]}, f) + +for name, buf in backward.items(): + + outname = os.path.join(out_dir, name+'_history_b.fluid') + with open(outname, 'w') as f: + json.dump(buf, f) + + outname = os.path.join(out_dir, name+'_b.fluid') + with open(outname, 'w') as f: + json.dump({current+'_'+name: buf[current+'_'+name]}, f) diff --git a/projects/MissionSupport/applications/WxTraj/bin/wxtraj.py.keep b/projects/MissionSupport/applications/WxTraj/bin/wxtraj.py.keep new file mode 100755 index 0000000..d341219 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/bin/wxtraj.py.keep @@ -0,0 +1,196 @@ +#! /usr/bin/env python + +import os +import re +import sys +import yaml +import json +import glob +import errno +import argparse +import datetime as dt + +from myutils import read_yaml, str_replace +from taskmanager import * + +# Get command-line arguments + +parser = argparse.ArgumentParser(description='Weather Trajectories') + +parser.add_argument('datetime', metavar='datetime', type=str, + help='ISO datetime as ccyy-mm-ddThh:mm:ss') + +args = parser.parse_args() + +dattim = re.sub('[^0-9]', '', args.datetime+'000000')[0:14] +idate = int(dattim[0:8]) +itime = int(dattim[8:14]) +time_dt = dt.datetime.strptime(dattim,'%Y%m%d%H%M%S') +isodattim = time_dt.strftime('%Y-%m-%dT%H') + +# Set up environment based on field campaign + +campaign_name = os.environ.get('WXTRAJ_CAMPAIGN', 'default') +bin_path = os.path.abspath(os.path.dirname(sys.argv[0])) +root_path = os.path.dirname(bin_path) +campaign_path = os.path.join(root_path, campaign_name) +tmpl_path = os.path.join(root_path, 'templates') +resource_file = os.path.join(campaign_path, 'trajectory.yml') +start_points = os.path.join(campaign_path, 'start_points', '*.csv') +#lib_path = os.path.join(campaign_path, 'lib') +#bin_path = os.path.join(campaign_path, 'bin') +#sys.path.append(lib_path) +#sys.path.append(bin_path) + +resource = read_yaml(resource_file) +opt = resource.get('options', {}) + +# Create the output trajectory directory + +out_dir = time_dt.strftime(opt['outputs']) + +try: + os.makedirs(out_dir, 0755) +except: + pass + +# Create a stable seamless control file based on a collection template. +# We only need a window big enough to span the trajectories (usually +# +-2days.) + +tmplFile = opt.get('tmplFile', None) +tmplFile = os.path.join(tmpl_path, tmplFile) + +if tmplFile: + + if not os.path.isfile(tmplFile): + tmplFile = os.path.join(root_path, tmplFile) + + if not os.path.isfile(tmplFile): + errstr = 'Cannot locate template file: "{}" and "{}" do not exist.' + errstr = errstr.format(opt['tmplFile'], tmplFile) + print(errstr) + sys.exit(2) + + start_dt = time_dt - dt.timedelta(days=3) + end_dt = time_dt + dt.timedelta(days=3) + + tdef_das = int((time_dt - start_dt).total_seconds() / 3600) + tdef_total = int((end_dt - start_dt).total_seconds() / 3600) + + defs = {} + defs['T1'] = str(1) + defs['T2'] = str(tdef_das / 3 + 1) + defs['T3'] = str(tdef_das / 3 + 2) + defs['T4'] = str(tdef_total / 3 + 1) + defs['START_DATE'] = start_dt.strftime('%HZ%d%b%Y') + + with open(tmplFile, 'r') as f: + buf = f.read() + + buf = time_dt.strftime(buf) + buf = str_replace(buf, **defs) + + ctlFile, ext = os.path.splitext(os.path.basename(tmplFile)) + ctlFile = os.path.join(out_dir, ctlFile + '.%Y%m%d_%H') + ctlFile = time_dt.strftime(ctlFile) + opt['ctlFile'] = ctlFile + + with open(ctlFile, 'w') as f: + f.write(buf) + + del opt['tmplFile'] + +# Execute the trajectory calculator for all start points. + +options = ' '.join(['--'+k+' '+v for k,v in opt.items() if v]) +options += ' ' + ' '.join(['--'+k for k,v in opt.items() if not v]) +options = time_dt.strftime(options) + +filelist = glob.glob(start_points) +task = TaskManager() + +for pathname in filelist: + if os.path.isfile(pathname): + print(pathname) + + cmd = [] + cmd.append(isodattim) + cmd.append(pathname) + cmd.append(options) + + os.chdir(campaign_path) + print('flextra_run_ops.py ' + ' '.join(cmd)) + # task.spawn('flextra_run_ops.py ' + ' '.join(cmd)) + +task.wait() + +# Create FLUID version of the JSON files including a 3-day history +# of trajectories. + +forward = {} +backward = {} +current = time_dt.strftime('%Y%m%d%H') + +t_dt = time_dt - dt.timedelta(days=3) +while t_dt <= time_dt: + + dattim = t_dt.strftime('%Y%m%d%H') + input_dir = t_dt.strftime(opt['outputs']) + files = glob.glob(os.path.join(input_dir, '*_[b,f].json')) + + for pathname in files: + + with open(pathname, 'r') as f: + trajectory = json.load(f) + + basename = os.path.basename(pathname) + type, ext = os.path.splitext(basename.split('_')[-1]) + level = basename.split('_')[-2] + region = '_'.join(basename.split('_')[1:-4]) + id = region + '_' + level + + for name, record in trajectory.items(): + + name += '-' + level + + for rec in record: + + rec[0] = time_dt.year + rec[1] = time_dt.month + rec[2] = time_dt.day + rec[3] = time_dt.hour + rec[4] = 'XX' + + if type == 'f': + d = forward.get(id, {}) + forward[id] = d + else: + d = backward.get(id, {}) + backward[id] = d + + d[dattim+'_'+id] = record + + t_dt += dt.timedelta(days=1) + +# Create FLUID JSON files. + +for name, buf in forward.items(): + + outname = os.path.join(out_dir, name+'_history_f.fluid') + with open(outname, 'w') as f: + json.dump(buf, f) + + outname = os.path.join(out_dir, name+'_f.fluid') + with open(outname, 'w') as f: + json.dump({current+'_'+name: buf[current+'_'+name]}, f) + +for name, buf in backward.items(): + + outname = os.path.join(out_dir, name+'_history_b.fluid') + with open(outname, 'w') as f: + json.dump(buf, f) + + outname = os.path.join(out_dir, name+'_b.fluid') + with open(outname, 'w') as f: + json.dump({current+'_'+name: buf[current+'_'+name]}, f) diff --git a/projects/MissionSupport/applications/WxTraj/default b/projects/MissionSupport/applications/WxTraj/default new file mode 120000 index 0000000..eecb6c0 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/default @@ -0,0 +1 @@ +asia-aq \ No newline at end of file diff --git a/projects/MissionSupport/applications/WxTraj/src/AVAILABLE b/projects/MissionSupport/applications/WxTraj/src/AVAILABLE new file mode 100644 index 0000000..bee26be --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/AVAILABLE @@ -0,0 +1,28 @@ +DATE TIME FILENAME SPECIFICATIONS +YYYYMMDD HHMISS +________ ______ __________ __________ +20230130 000000 Y2023/M01/D30/GEOS.fp.asm.inst3_3d_asm_Nv.20230130_0000.V01.nc4 +20230130 030000 Y2023/M01/D30/GEOS.fp.asm.inst3_3d_asm_Nv.20230130_0300.V01.nc4 +20230130 060000 Y2023/M01/D30/GEOS.fp.asm.inst3_3d_asm_Nv.20230130_0600.V01.nc4 +20230130 090000 Y2023/M01/D30/GEOS.fp.asm.inst3_3d_asm_Nv.20230130_0900.V01.nc4 +20230130 120000 Y2023/M01/D30/GEOS.fp.asm.inst3_3d_asm_Nv.20230130_1200.V01.nc4 +20230130 150000 Y2023/M01/D30/GEOS.fp.asm.inst3_3d_asm_Nv.20230130_1500.V01.nc4 +20230130 180000 Y2023/M01/D30/GEOS.fp.asm.inst3_3d_asm_Nv.20230130_1800.V01.nc4 +20230130 210000 Y2023/M01/D30/GEOS.fp.asm.inst3_3d_asm_Nv.20230130_2100.V01.nc4 +20230131 000000 Y2023/M01/D31/GEOS.fp.asm.inst3_3d_asm_Nv.20230131_0000.V01.nc4 +20230131 030000 Y2023/M01/D31/GEOS.fp.asm.inst3_3d_asm_Nv.20230131_0300.V01.nc4 +20230131 060000 Y2023/M01/D31/GEOS.fp.asm.inst3_3d_asm_Nv.20230131_0600.V01.nc4 +20230131 090000 Y2023/M01/D31/GEOS.fp.asm.inst3_3d_asm_Nv.20230131_0900.V01.nc4 +20230131 120000 Y2023/M01/D31/GEOS.fp.asm.inst3_3d_asm_Nv.20230131_1200.V01.nc4 +20230131 150000 Y2023/M01/D31/GEOS.fp.asm.inst3_3d_asm_Nv.20230131_1500.V01.nc4 +20230131 180000 Y2023/M01/D31/GEOS.fp.asm.inst3_3d_asm_Nv.20230131_1800.V01.nc4 +20230131 210000 Y2023/M01/D31/GEOS.fp.asm.inst3_3d_asm_Nv.20230131_2100.V01.nc4 +20230201 000000 Y2023/M02/D01/GEOS.fp.asm.inst3_3d_asm_Nv.20230201_0000.V01.nc4 +20230201 030000 Y2023/M02/D01/GEOS.fp.asm.inst3_3d_asm_Nv.20230201_0300.V01.nc4 +20230201 060000 Y2023/M02/D01/GEOS.fp.asm.inst3_3d_asm_Nv.20230201_0600.V01.nc4 +20230201 090000 Y2023/M02/D01/GEOS.fp.asm.inst3_3d_asm_Nv.20230201_0900.V01.nc4 +20230201 120000 Y2023/M02/D01/GEOS.fp.asm.inst3_3d_asm_Nv.20230201_1200.V01.nc4 +20230201 150000 Y2023/M02/D01/GEOS.fp.asm.inst3_3d_asm_Nv.20230201_1500.V01.nc4 +20230201 180000 Y2023/M02/D01/GEOS.fp.asm.inst3_3d_asm_Nv.20230201_1800.V01.nc4 +20230201 210000 Y2023/M02/D01/GEOS.fp.asm.inst3_3d_asm_Nv.20230201_2100.V01.nc4 +20230202 000000 Y2023/M02/D02/GEOS.fp.asm.inst3_3d_asm_Nv.20230202_0000.V01.nc4 diff --git a/projects/MissionSupport/applications/WxTraj/src/AVAILABLE.save b/projects/MissionSupport/applications/WxTraj/src/AVAILABLE.save new file mode 100644 index 0000000..ac10782 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/AVAILABLE.save @@ -0,0 +1,44 @@ +DATE TIME FILENAME SPECIFICATIONS +YYYYMMDD HHMISS +________ ______ __________ __________ +20230801 120000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230801_1200.V01.nc4 +20230801 150000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230801_1500.V01.nc4 +20230801 180000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230801_1800.V01.nc4 +20230801 210000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230801_2100.V01.nc4 +20230802 000000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230802_0000.V01.nc4 +20230802 030000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230802_0300.V01.nc4 +20230802 060000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230802_0600.V01.nc4 +20230802 090000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230802_0900.V01.nc4 +20230802 120000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230802_1200.V01.nc4 +20230802 150000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230802_1500.V01.nc4 +20230802 180000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230802_1800.V01.nc4 +20230802 210000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230802_2100.V01.nc4 +20230803 000000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230803_0000.V01.nc4 +20230803 030000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230803_0300.V01.nc4 +20230803 060000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230803_0600.V01.nc4 +20230803 090000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230803_0900.V01.nc4 +20230803 120000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230803_1200.V01.nc4 +20230803 150000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230803_1500.V01.nc4 +20230803 180000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230803_1800.V01.nc4 +20230803 210000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230803_2100.V01.nc4 +20230804 000000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230804_0000.V01.nc4 +20230804 030000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230804_0300.V01.nc4 +20230804 060000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230804_0600.V01.nc4 +20230804 090000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230804_0900.V01.nc4 +20230804 120000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230804_1200.V01.nc4 +20230804 150000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230804_1500.V01.nc4 +20230804 180000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230804_1800.V01.nc4 +20230804 210000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230804_2100.V01.nc4 +20230805 000000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230805_0000.V01.nc4 +20230805 030000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230805_0300.V01.nc4 +20230805 060000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230805_0600.V01.nc4 +20230805 090000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230805_0900.V01.nc4 +20230805 120000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230805_1200.V01.nc4 +20230805 150000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230805_1500.V01.nc4 +20230805 180000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230805_1800.V01.nc4 +20230805 210000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230805_2100.V01.nc4 +20230806 000000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230806_0000.V01.nc4 +20230806 030000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230806_0300.V01.nc4 +20230806 060000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230806_0600.V01.nc4 +20230806 090000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230806_0900.V01.nc4 +20230806 120000 GEOS.fp.fcst.inst3_3d_asm_Nv.20230801_12+20230806_1200.V01.nc4 diff --git a/projects/MissionSupport/applications/WxTraj/src/FLEXTRA.f b/projects/MissionSupport/applications/WxTraj/src/FLEXTRA.f new file mode 100644 index 0000000..4e93fe4 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/FLEXTRA.f @@ -0,0 +1,136 @@ + program flextra +******************************************************************************** +* * +* This program calculates trajectories for various input wind fields. * +* * +* Authors: A. Stohl, G. Wotawa * +* * +* 2 February 1994 * +* * +* Update: January 1999: A. Stohl * +* Use of global fields, CET option, etc. * +* * +******************************************************************************** +* * +* Variables: * +* error .true., if error ocurred in subprogram, else .false. * +* * +* Constants: * +* * +******************************************************************************** + use netcdf + include 'includepar' + include 'includecom' + include 'netcdf.inc' + + logical error + +C Read the command line argument for the pathnames filename +************************************************************ + + call getarg(1,pathnames) + + +C Read the pathnames where input/output files are stored +******************************************************** + + call readpaths(error) + if (error) goto 999 + + +C Read the user specifications for the current model run +******************************************************** + + call readcommand(error) + if (error) goto 999 + +C Read, which wind fields are available within the modelling period +******************************************************************* + + call readavailable(error) + if(error) goto 999 + +C Determine the grid specifications, vertical discretization, and orography +*************************************************************************** + + call gridcheck(error) + if(error) goto 999 +! call gridcheck_nests(error) ! PC not implementing nests for now +! if(error) goto 999 + + + +C Read the coordinates of trajectory beginning/ending points for the +C current model run +C Alternatively, if CET is to be calculated read CET starting domain +******************************************************************** + + if (modecet.eq.1) then + call readpoints(error) + else if (modecet.eq.2) then + call readcet(error) + else + call readflight(error) + endif + if(error) goto 999 + + +!C Check, if user selected options don't exceed the current dimension limits +*************************************************************************** + + call checklimits(error) + if(error) goto 999 + +C Conversion of the startpoints from geografical to grid coordinates +******************************************************************** + + call coordtrafo(error) + if(error) goto 999 + + +C Fix the coordinates of the uncertainty trajectories +***************************************************** + + if (modecet.eq.1) call uncertcoor() + + +C Subtract the orography from the height above sea level +******************************************************** + + call subtractoro() + + +C Open the output files +*********************** + + if (modecet.eq.1) then + call openoutput(error) + else if (modecet.eq.2) then + call opencetoutput(error) + else + call openflightoutput(error) + endif + if(error) goto 999 + + +C Calculate trajectories +************************ + + call timemanager() + + +C Close output and reverse direction of back trajectory output +************************************************************** + + if (modecet.eq.1) call lastprocessor() + + write(*,*) 'CONGRATULATIONS: YOU HAVE SUCCESSFULLY COMPLETED A FL + +EXTRA MODEL RUN!' + + goto 1000 + +999 write(*,*) 'FLEXTRA MODEL ERROR: EXECUTION HAD TO BE TERMINATED' + +1000 continue + + end diff --git a/projects/MissionSupport/applications/WxTraj/src/FLEXTRA_GEOS b/projects/MissionSupport/applications/WxTraj/src/FLEXTRA_GEOS new file mode 100755 index 0000000..532838a Binary files /dev/null and b/projects/MissionSupport/applications/WxTraj/src/FLEXTRA_GEOS differ diff --git a/projects/MissionSupport/applications/WxTraj/src/FLEXTRA_ecmwf.f b/projects/MissionSupport/applications/WxTraj/src/FLEXTRA_ecmwf.f new file mode 100644 index 0000000..426c6f5 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/FLEXTRA_ecmwf.f @@ -0,0 +1,135 @@ + program flextra +******************************************************************************** +* * +* This program calculates trajectories for various input wind fields. * +* * +* Authors: A. Stohl, G. Wotawa * +* * +* 2 February 1994 * +* * +* Update: January 1999: A. Stohl * +* Use of global fields, CET option, etc. * +* * +******************************************************************************** +* * +* Variables: * +* error .true., if error ocurred in subprogram, else .false. * +* * +* Constants: * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + logical error,oronew + + +C Read the pathnames where input/output files are stored +******************************************************** + + call readpaths(error) + if (error) goto 999 + + +C Read the user specifications for the current model run +******************************************************** + + call readcommand(error) + if (error) goto 999 + +C Read, which wind fields are available within the modelling period +******************************************************************* + + call readavailable(error) + if(error) goto 999 + +C Determine the grid specifications and the vertical discretization +******************************************************************* + + call gridcheck(oronew,error) + if(error) goto 999 + call gridcheck_nests(error) + if(error) goto 999 + + +C Read the orography used by the ECMWF model +******************************************** + + if(.not.oronew) call readoro(error) + if(error) goto 999 + +C Read the coordinates of trajectory beginning/ending points for the +C current model run +C Alternatively, if CET is to be calculated read CET starting domain +******************************************************************** + + if (modecet.eq.1) then + call readpoints(error) + else if (modecet.eq.2) then + call readcet(error) + else + call readflight(error) + endif + if(error) goto 999 + + +C Check, if user selected options don't exceed the current dimension limits +*************************************************************************** + + call checklimits(error) + if(error) goto 999 + +C Conversion of the startpoints from geografical to grid coordinates +******************************************************************** + + call coordtrafo(error) + if(error) goto 999 + + +C Fix the coordinates of the uncertainty trajectories +***************************************************** + + if (modecet.eq.1) call uncertcoor() + + +C Subtract the orography from the height above sea level +******************************************************** + + call subtractoro() + + +C Open the output files +*********************** + + if (modecet.eq.1) then + call openoutput(error) + else if (modecet.eq.2) then + call opencetoutput(error) + else + call openflightoutput(error) + endif + if(error) goto 999 + + +C Calculate trajectories +************************ + + call timemanager() + + +C Close output and reverse direction of back trajectory output +************************************************************** + + if (modecet.eq.1) call lastprocessor() + + write(*,*) 'CONGRATULATIONS: YOU HAVE SUCCESSFULLY COMPLETED A FL + +EXTRA MODEL RUN!' + + goto 1000 + +999 write(*,*) 'FLEXTRA MODEL ERROR: EXECUTION HAD TO BE TERMINATED' + +1000 continue + + end diff --git a/projects/MissionSupport/applications/WxTraj/src/README b/projects/MissionSupport/applications/WxTraj/src/README new file mode 100644 index 0000000..d7c9a3d --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/README @@ -0,0 +1,2 @@ +Original Source Code: +/discover/nobackup/pcastell/workspace/flextra/flextra diff --git a/projects/MissionSupport/applications/WxTraj/src/ak_bk_forward.txt b/projects/MissionSupport/applications/WxTraj/src/ak_bk_forward.txt new file mode 100644 index 0000000..2984e69 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/ak_bk_forward.txt @@ -0,0 +1,74 @@ +layer ak bk +1 1.000000E-02 0.000000E+00 +2 2.000000E-02 0.000000E+00 +3 3.270000E-02 0.000000E+00 +4 4.758501E-02 0.000000E+00 +5 6.600001E-02 0.000000E+00 +6 8.934502E-02 0.000000E+00 +7 1.197030E-01 0.000000E+00 +8 1.594950E-01 0.000000E+00 +9 2.113490E-01 0.000000E+00 +10 2.785261E-01 0.000000E+00 +11 3.650411E-01 0.000000E+00 +12 4.758061E-01 0.000000E+00 +13 6.167791E-01 0.000000E+00 +14 7.951341E-01 0.000000E+00 +15 1.019440E+00 0.000000E+00 +16 1.300510E+00 0.000000E+00 +17 1.650790E+00 0.000000E+00 +18 2.084970E+00 0.000000E+00 +19 2.620211E+00 0.000000E+00 +20 3.276431E+00 0.000000E+00 +21 4.076571E+00 0.000000E+00 +22 5.046801E+00 0.000000E+00 +23 6.216801E+00 0.000000E+00 +24 7.619842E+00 0.000000E+00 +25 9.292942E+00 0.000000E+00 +26 1.127690E+01 0.000000E+00 +27 1.364340E+01 0.000000E+00 +28 1.645710E+01 0.000000E+00 +29 1.979160E+01 0.000000E+00 +30 2.373041E+01 0.000000E+00 +31 2.836781E+01 0.000000E+00 +32 3.381001E+01 0.000000E+00 +33 4.017541E+01 0.000000E+00 +34 4.764391E+01 0.000000E+00 +35 5.638791E+01 0.000000E+00 +36 6.660341E+01 0.000000E+00 +37 7.851231E+01 0.000000E+00 +38 9.236572E+01 0.000000E+00 +39 1.086630E+02 0.000000E+00 +40 1.278370E+02 0.000000E+00 +41 1.503930E+02 0.000000E+00 +42 1.769300E+02 8.175413E-09 +43 2.011920E+02 6.960025E-03 +44 2.168650E+02 2.801004E-02 +45 2.243630E+02 6.372006E-02 +46 2.238980E+02 1.136021E-01 +47 2.187760E+02 1.562241E-01 +48 2.121500E+02 2.003501E-01 +49 2.032590E+02 2.467411E-01 +50 1.930970E+02 2.944031E-01 +51 1.816190E+02 3.433811E-01 +52 1.696090E+02 3.928911E-01 +53 1.562600E+02 4.437402E-01 +54 1.429100E+02 4.945902E-01 +55 1.286959E+02 5.463042E-01 +56 1.189586E+02 5.810415E-01 +57 1.091817E+02 6.158184E-01 +58 9.936521E+01 6.506349E-01 +59 8.909992E+01 6.858999E-01 +60 7.883422E+01 7.211660E-01 +61 7.062198E+01 7.493782E-01 +62 6.436264E+01 7.706375E-01 +63 5.805321E+01 7.919469E-01 +64 5.169611E+01 8.133039E-01 +65 4.533901E+01 8.346609E-01 +66 3.898201E+01 8.560180E-01 +67 3.257081E+01 8.774290E-01 +68 2.609201E+01 8.989080E-01 +69 1.961311E+01 9.203870E-01 +70 1.313480E+01 9.418650E-01 +71 6.593752E+00 9.634060E-01 +72 4.804826E-02 9.849520E-01 +73 0.000000E+00 1.000000E+00 diff --git a/projects/MissionSupport/applications/WxTraj/src/ak_bk_reversed.txt b/projects/MissionSupport/applications/WxTraj/src/ak_bk_reversed.txt new file mode 100644 index 0000000..107c061 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/ak_bk_reversed.txt @@ -0,0 +1,74 @@ +layer,ak,bk +73 0.000000E+00 1.000000E+00 +72 4.804826E-02 9.849520E-01 +71 6.593752E+00 9.634060E-01 +70 1.313480E+01 9.418650E-01 +69 1.961311E+01 9.203870E-01 +68 2.609201E+01 8.989080E-01 +67 3.257081E+01 8.774290E-01 +66 3.898201E+01 8.560180E-01 +65 4.533901E+01 8.346609E-01 +64 5.169611E+01 8.133039E-01 +63 5.805321E+01 7.919469E-01 +62 6.436264E+01 7.706375E-01 +61 7.062198E+01 7.493782E-01 +60 7.883422E+01 7.211660E-01 +59 8.909992E+01 6.858999E-01 +58 9.936521E+01 6.506349E-01 +57 1.091817E+02 6.158184E-01 +56 1.189586E+02 5.810415E-01 +55 1.286959E+02 5.463042E-01 +54 1.429100E+02 4.945902E-01 +53 1.562600E+02 4.437402E-01 +52 1.696090E+02 3.928911E-01 +51 1.816190E+02 3.433811E-01 +50 1.930970E+02 2.944031E-01 +49 2.032590E+02 2.467411E-01 +48 2.121500E+02 2.003501E-01 +47 2.187760E+02 1.562241E-01 +46 2.238980E+02 1.136021E-01 +45 2.243630E+02 6.372006E-02 +44 2.168650E+02 2.801004E-02 +43 2.011920E+02 6.960025E-03 +42 1.769300E+02 8.175413E-09 +41 1.503930E+02 0.000000E+00 +40 1.278370E+02 0.000000E+00 +39 1.086630E+02 0.000000E+00 +38 9.236572E+01 0.000000E+00 +37 7.851231E+01 0.000000E+00 +36 6.660341E+01 0.000000E+00 +35 5.638791E+01 0.000000E+00 +34 4.764391E+01 0.000000E+00 +33 4.017541E+01 0.000000E+00 +32 3.381001E+01 0.000000E+00 +31 2.836781E+01 0.000000E+00 +30 2.373041E+01 0.000000E+00 +29 1.979160E+01 0.000000E+00 +28 1.645710E+01 0.000000E+00 +27 1.364340E+01 0.000000E+00 +26 1.127690E+01 0.000000E+00 +25 9.292942E+00 0.000000E+00 +24 7.619842E+00 0.000000E+00 +23 6.216801E+00 0.000000E+00 +22 5.046801E+00 0.000000E+00 +21 4.076571E+00 0.000000E+00 +20 3.276431E+00 0.000000E+00 +19 2.620211E+00 0.000000E+00 +18 2.084970E+00 0.000000E+00 +17 1.650790E+00 0.000000E+00 +16 1.300510E+00 0.000000E+00 +15 1.019440E+00 0.000000E+00 +14 7.951341E-01 0.000000E+00 +13 6.167791E-01 0.000000E+00 +12 4.758061E-01 0.000000E+00 +11 3.650411E-01 0.000000E+00 +10 2.785261E-01 0.000000E+00 +9 2.113490E-01 0.000000E+00 +8 1.594950E-01 0.000000E+00 +7 1.197030E-01 0.000000E+00 +6 8.934502E-02 0.000000E+00 +5 6.600001E-02 0.000000E+00 +4 4.758501E-02 0.000000E+00 +3 3.270000E-02 0.000000E+00 +2 2.000000E-02 0.000000E+00 +1 1.000000E-02 0.000000E+00 diff --git a/projects/MissionSupport/applications/WxTraj/src/calcpv.f b/projects/MissionSupport/applications/WxTraj/src/calcpv.f new file mode 100644 index 0000000..9020d7c --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/calcpv.f @@ -0,0 +1,301 @@ + subroutine calcpv(n) +C +******************************************************************************** +* * +* Calculation of potential vorticity on 3-d grid. * +* * +* Author: P. James * +* 3 February 2000 * +* * +******************************************************************************** +* * +* Variables: * +* n temporal index for meteorological fields (1 to 3) * +* * +* Constants: * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer n,ix,jy,i,j,k,kl,ii,jj,klvrp,klvrm,klpt,kup,kdn,kch + integer jyvp,jyvm,ixvp,ixvm,jumpx,jumpy,jux,juy,ivrm,ivrp,ivr + integer nlck + real vx(2),uy(2),phi,tanphi,cosphi,dvdx,dudy,f + real theta,thetap,thetam,dthetadp,dt1,dt2,dt,ppmk + real height(nuvzmax),pvavr,ppml(nuvzmax) + real thup,thdn + +C Set number of levels to check for adjacent theta + nlck=nuvz/3 + do 5 k=1,nuvz + height(k)=akz(k)/p0+bkz(k) +5 continue +C *** Precalculate all theta levels for efficiency + do 9 jy=0,ny-1 + do 14 kl=1,nuvz + do 13 ix=0,nx-1 + ppmk=akz(kl)+bkz(kl)*ps(ix,jy,1,n) + th(ix,jy,kl,n)=tt(ix,jy,kl,n)*(100000./ppmk)**kappa +13 continue +14 continue +9 continue +C +C Loop over entire grid +*********************** + do 10 jy=0,ny-1 + if (sglobal.and.jy.eq.0) goto 10 + if (nglobal.and.jy.eq.ny-1) goto 10 + phi = (ylat0 + jy * dy) * pi / 180. + f = 0.00014585 * sin(phi) + tanphi = tan(phi) + cosphi = cos(phi) +C Provide a virtual jy+1 and jy-1 in case we are on domain edge (Lat) + jyvp=jy+1 + jyvm=jy-1 + if (jy.eq.0) jyvm=0 + if (jy.eq.ny-1) jyvp=ny-1 +C Define absolute gap length + jumpy=2 + if (jy.eq.0.or.jy.eq.ny-1) jumpy=1 + if (sglobal.and.jy.eq.1) then + jyvm=1 + jumpy=1 + end if + if (nglobal.and.jy.eq.ny-2) then + jyvp=ny-2 + jumpy=1 + end if + juy=jumpy +C + do 11 ix=0,nx-1 +C Provide a virtual ix+1 and ix-1 in case we are on domain edge (Long) + ixvp=ix+1 + ixvm=ix-1 + jumpx=2 + if (xglobal) then + ivrp=ixvp + ivrm=ixvm + if (ixvm.lt.0) ivrm=ixvm+nx-1 + if (ixvp.ge.nx) ivrp=ixvp-nx+1 + else + if (ix.eq.0) ixvm=0 + if (ix.eq.nx-1) ixvp=nx-1 + ivrp=ixvp + ivrm=ixvm +C Define absolute gap length + if (ix.eq.0.or.ix.eq.nx-1) jumpx=1 + end if + jux=jumpx +C Precalculate pressure values for efficiency + do 8 kl=1,nuvz + ppml(kl)=akz(kl)+bkz(kl)*ps(ix,jy,1,n) +8 continue +C +C Loop over the vertical +************************ + + do 12 kl=1,nuvz + theta=th(ix,jy,kl,n) + klvrp=kl+1 + klvrm=kl-1 + klpt=kl +C If top or bottom level, dthetadp is evaluated between the current +C level and the level inside, otherwise between level+1 and level-1 +C + if (klvrp.gt.nuvz) klvrp=nuvz + if (klvrm.lt.1) klvrm=1 + thetap=th(ix,jy,klvrp,n) + thetam=th(ix,jy,klvrm,n) + dthetadp=(thetap-thetam)/(ppml(klvrp)-ppml(klvrm)) + +C Compute vertical position at pot. temperature surface on subgrid +C and the wind at that position +****************************************************************** +C a) in x direction + ii=0 + do 20 i=ixvm,ixvp,jumpx + ivr=i + if (xglobal) then + if (i.lt.0) ivr=ivr+nx-1 + if (i.ge.nx) ivr=ivr-nx+1 + end if + ii=ii+1 +C Search adjacent levels for current theta value +C Spiral out from current level for efficiency + kup=klpt-1 + kdn=klpt + kch=0 +40 continue +C Upward branch + kup=kup+1 + if (kch.ge.nlck) goto 21 ! No more levels to check, +C ! and no values found + if (kup.ge.nuvz) goto 41 + kch=kch+1 + k=kup + thdn=th(ivr,jy,k,n) + thup=th(ivr,jy,k+1,n) + if (((thdn.ge.theta).and.(thup.le.theta)).or. + + ((thdn.le.theta).and.(thup.ge.theta))) then + dt1=abs(theta-thdn) + dt2=abs(theta-thup) + dt=dt1+dt2 + if (dt.lt.eps) then ! Avoid division by zero error + dt1=0.5 ! G.W., 10.4.1996 + dt2=0.5 + dt=1.0 + endif + vx(ii)=(vv(ivr,jy,k,n)*dt2+vv(ivr,jy,k+1,n)*dt1)/dt + goto 20 + endif +41 continue +C Downward branch + kdn=kdn-1 + if (kdn.lt.1) goto 40 + kch=kch+1 + k=kdn + thdn=th(ivr,jy,k,n) + thup=th(ivr,jy,k+1,n) + if (((thdn.ge.theta).and.(thup.le.theta)).or. + + ((thdn.le.theta).and.(thup.ge.theta))) then + dt1=abs(theta-thdn) + dt2=abs(theta-thup) + dt=dt1+dt2 + if (dt.lt.eps) then ! Avoid division by zero error + dt1=0.5 ! G.W., 10.4.1996 + dt2=0.5 + dt=1.0 + endif + vx(ii)=(vv(ivr,jy,k,n)*dt2+vv(ivr,jy,k+1,n)*dt1)/dt + goto 20 + endif + goto 40 +C This section used when no values were found +21 continue +C Must use vv at current level and long. jux becomes smaller by 1 + vx(ii)=vv(ix,jy,kl,n) + jux=jux-1 +C Otherwise OK +20 continue + if (jux.gt.0) then + dvdx=(vx(2)-vx(1))/float(jux)/(dx*pi/180.) + else + dvdx=vv(ivrp,jy,kl,n)-vv(ivrm,jy,kl,n) + dvdx=dvdx/float(jumpx)/(dx*pi/180.) +C Only happens if no equivalent theta value +C can be found on either side, hence must use values +C from either side, same pressure level. + end if + +C b) in y direction + + jj=0 + do 50 j=jyvm,jyvp,jumpy + jj=jj+1 +C Search adjacent levels for current theta value +C Spiral out from current level for efficiency + kup=klpt-1 + kdn=klpt + kch=0 +70 continue +C Upward branch + kup=kup+1 + if (kch.ge.nlck) goto 51 ! No more levels to check, +C ! and no values found + if (kup.ge.nuvz) goto 71 + kch=kch+1 + k=kup + thdn=th(ix,j,k,n) + thup=th(ix,j,k+1,n) + if (((thdn.ge.theta).and.(thup.le.theta)).or. + + ((thdn.le.theta).and.(thup.ge.theta))) then + dt1=abs(theta-thdn) + dt2=abs(theta-thup) + dt=dt1+dt2 + if (dt.lt.eps) then ! Avoid division by zero error + dt1=0.5 ! G.W., 10.4.1996 + dt2=0.5 + dt=1.0 + endif + uy(jj)=(uu(ix,j,k,n)*dt2+uu(ix,j,k+1,n)*dt1)/dt + goto 50 + endif +71 continue +C Downward branch + kdn=kdn-1 + if (kdn.lt.1) goto 70 + kch=kch+1 + k=kdn + thdn=th(ix,j,k,n) + thup=th(ix,j,k+1,n) + if (((thdn.ge.theta).and.(thup.le.theta)).or. + + ((thdn.le.theta).and.(thup.ge.theta))) then + dt1=abs(theta-thdn) + dt2=abs(theta-thup) + dt=dt1+dt2 + if (dt.lt.eps) then ! Avoid division by zero error + dt1=0.5 ! G.W., 10.4.1996 + dt2=0.5 + dt=1.0 + endif + uy(jj)=(uu(ix,j,k,n)*dt2+uu(ix,j,k+1,n)*dt1)/dt + goto 50 + endif + goto 70 +C This section used when no values were found +51 continue +C Must use uu at current level and lat. juy becomes smaller by 1 + uy(jj)=uu(ix,jy,kl,n) + juy=juy-1 +C Otherwise OK +50 continue + if (juy.gt.0) then + dudy=(uy(2)-uy(1))/float(juy)/(dy*pi/180.) + else + dudy=uu(ix,jyvp,kl,n)-uu(ix,jyvm,kl,n) + dudy=dudy/float(jumpy)/(dy*pi/180.) + end if +C + pv(ix,jy,kl,n)=dthetadp*(f+(dvdx/cosphi-dudy + + +uu(ix,jy,kl,n)*tanphi)/r_earth)*(-1.e6)*9.81 +C +C Resest jux and juy + jux=jumpx + juy=jumpy +12 continue +11 continue +10 continue +C +C Fill in missing PV values on poles, if present +C Use mean PV of surrounding latitude ring +C + if (sglobal) then + do 80 kl=1,nuvz + pvavr=0. + do 81 ix=0,nx-1 + pvavr=pvavr+pv(ix,1,kl,n) +81 continue + pvavr=pvavr/float(nx) + jy=0 + do 82 ix=0,nx-1 + pv(ix,jy,kl,n)=pvavr +82 continue +80 continue + end if + if (nglobal) then + do 90 kl=1,nuvz + pvavr=0. + do 91 ix=0,nx-1 + pvavr=pvavr+pv(ix,ny-2,kl,n) +91 continue + pvavr=pvavr/float(nx) + jy=ny-1 + do 92 ix=0,nx-1 + pv(ix,jy,kl,n)=pvavr +92 continue +90 continue + end if + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/calcpv_nests.f b/projects/MissionSupport/applications/WxTraj/src/calcpv_nests.f new file mode 100644 index 0000000..4927064 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/calcpv_nests.f @@ -0,0 +1,252 @@ + subroutine calcpv_nests(l,n) +C +******************************************************************************** +* * +* Calculation of potential vorticity on 3-d nested grid * +* * +* Author: P. James * +* 22 February 2000 * +* * +******************************************************************************** +* * +* Variables: * +* n temporal index for meteorological fields (1 to 3) * +* l index of current nest * +* * +* Constants: * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer n,ix,jy,i,j,k,kl,ii,jj,klvrp,klvrm,klpt,kup,kdn,kch + integer jyvp,jyvm,ixvp,ixvm,jumpx,jumpy,jux,juy,ivrm,ivrp,ivr + integer nlck,l + real vx(2),uy(2),phi,tanphi,cosphi,dvdx,dudy,f + real theta,thetap,thetam,dthetadp,dt1,dt2,dt,ppmk + real height(nuvzmax),ppml(nuvzmax) + real thup,thdn + +C Set number of levels to check for adjacent theta + nlck=nuvz/3 + do 5 k=1,nuvz + height(k)=akz(k)/p0+bkz(k) +5 continue +C *** Precalculate all theta levels for efficiency + do 9 jy=0,nyn(l)-1 + do 14 kl=1,nuvz + do 13 ix=0,nxn(l)-1 + ppmk=akz(kl)+bkz(kl)*psn(ix,jy,1,n,l) + thn(ix,jy,kl,n,l)=ttn(ix,jy,kl,n,l)*(100000./ppmk)**kappa +13 continue +14 continue +9 continue +C +C Loop over entire grid +*********************** + do 10 jy=0,nyn(l)-1 + phi = (ylat0n(l) + jy * dyn(l)) * pi / 180. + f = 0.00014585 * sin(phi) + tanphi = tan(phi) + cosphi = cos(phi) +C Provide a virtual jy+1 and jy-1 in case we are on domain edge (Lat) + jyvp=jy+1 + jyvm=jy-1 + if (jy.eq.0) jyvm=0 + if (jy.eq.nyn(l)-1) jyvp=nyn(l)-1 +C Define absolute gap length + jumpy=2 + if (jy.eq.0.or.jy.eq.nyn(l)-1) jumpy=1 + juy=jumpy +C + do 11 ix=0,nxn(l)-1 +C Provide a virtual ix+1 and ix-1 in case we are on domain edge (Long) + ixvp=ix+1 + ixvm=ix-1 + jumpx=2 + if (ix.eq.0) ixvm=0 + if (ix.eq.nxn(l)-1) ixvp=nxn(l)-1 + ivrp=ixvp + ivrm=ixvm +C Define absolute gap length + if (ix.eq.0.or.ix.eq.nxn(l)-1) jumpx=1 + jux=jumpx +C Precalculate pressure values for efficiency + do 8 kl=1,nuvz + ppml(kl)=akz(kl)+bkz(kl)*psn(ix,jy,1,n,l) +8 continue +C +C Loop over the vertical +************************ + + do 12 kl=1,nuvz + theta=thn(ix,jy,kl,n,l) + klvrp=kl+1 + klvrm=kl-1 + klpt=kl +C If top or bottom level, dthetadp is evaluated between the current +C level and the level inside, otherwise between level+1 and level-1 +C + if (klvrp.gt.nuvz) klvrp=nuvz + if (klvrm.lt.1) klvrm=1 + thetap=thn(ix,jy,klvrp,n,l) + thetam=thn(ix,jy,klvrm,n,l) + dthetadp=(thetap-thetam)/(ppml(klvrp)-ppml(klvrm)) + +C Compute vertical position at pot. temperature surface on subgrid +C and the wind at that position +****************************************************************** +C a) in x direction + ii=0 + do 20 i=ixvm,ixvp,jumpx + ivr=i + ii=ii+1 +C Search adjacent levels for current theta value +C Spiral out from current level for efficiency + kup=klpt-1 + kdn=klpt + kch=0 +40 continue +C Upward branch + kup=kup+1 + if (kch.ge.nlck) goto 21 ! No more levels to check, +C ! and no values found + if (kup.ge.nuvz) goto 41 + kch=kch+1 + k=kup + thdn=thn(ivr,jy,k,n,l) + thup=thn(ivr,jy,k+1,n,l) + if (((thdn.ge.theta).and.(thup.le.theta)).or. + + ((thdn.le.theta).and.(thup.ge.theta))) then + dt1=abs(theta-thdn) + dt2=abs(theta-thup) + dt=dt1+dt2 + if (dt.lt.eps) then ! Avoid division by zero error + dt1=0.5 ! G.W., 10.4.1996 + dt2=0.5 + dt=1.0 + endif + vx(ii)=(vvn(ivr,jy,k,n,l)*dt2+vvn(ivr,jy,k+1,n,l)*dt1)/dt + goto 20 + endif +41 continue +C Downward branch + kdn=kdn-1 + if (kdn.lt.1) goto 40 + kch=kch+1 + k=kdn + thdn=thn(ivr,jy,k,n,l) + thup=thn(ivr,jy,k+1,n,l) + if (((thdn.ge.theta).and.(thup.le.theta)).or. + + ((thdn.le.theta).and.(thup.ge.theta))) then + dt1=abs(theta-thdn) + dt2=abs(theta-thup) + dt=dt1+dt2 + if (dt.lt.eps) then ! Avoid division by zero error + dt1=0.5 ! G.W., 10.4.1996 + dt2=0.5 + dt=1.0 + endif + vx(ii)=(vvn(ivr,jy,k,n,l)*dt2+vvn(ivr,jy,k+1,n,l)*dt1)/dt + goto 20 + endif + goto 40 +C This section used when no values were found +21 continue +C Must use vv at current level and long. jux becomes smaller by 1 + vx(ii)=vvn(ix,jy,kl,n,l) + jux=jux-1 +C Otherwise OK +20 continue + if (jux.gt.0) then + dvdx=(vx(2)-vx(1))/float(jux)/(dxn(l)*pi/180.) + else + dvdx=vvn(ivrp,jy,kl,n,l)-vvn(ivrm,jy,kl,n,l) + dvdx=dvdx/float(jumpx)/(dxn(l)*pi/180.) +C Only happens if no equivalent theta value +C can be found on either side, hence must use values +C from either side, same pressure level. + end if + +C b) in y direction + + jj=0 + do 50 j=jyvm,jyvp,jumpy + jj=jj+1 +C Search adjacent levels for current theta value +C Spiral out from current level for efficiency + kup=klpt-1 + kdn=klpt + kch=0 +70 continue +C Upward branch + kup=kup+1 + if (kch.ge.nlck) goto 51 ! No more levels to check, +C ! and no values found + if (kup.ge.nuvz) goto 71 + kch=kch+1 + k=kup + thdn=thn(ix,j,k,n,l) + thup=thn(ix,j,k+1,n,l) + if (((thdn.ge.theta).and.(thup.le.theta)).or. + + ((thdn.le.theta).and.(thup.ge.theta))) then + dt1=abs(theta-thdn) + dt2=abs(theta-thup) + dt=dt1+dt2 + if (dt.lt.eps) then ! Avoid division by zero error + dt1=0.5 ! G.W., 10.4.1996 + dt2=0.5 + dt=1.0 + endif + uy(jj)=(uun(ix,j,k,n,l)*dt2+uun(ix,j,k+1,n,l)*dt1)/dt + goto 50 + endif +71 continue +C Downward branch + kdn=kdn-1 + if (kdn.lt.1) goto 70 + kch=kch+1 + k=kdn + thdn=thn(ix,j,k,n,l) + thup=thn(ix,j,k+1,n,l) + if (((thdn.ge.theta).and.(thup.le.theta)).or. + + ((thdn.le.theta).and.(thup.ge.theta))) then + dt1=abs(theta-thdn) + dt2=abs(theta-thup) + dt=dt1+dt2 + if (dt.lt.eps) then ! Avoid division by zero error + dt1=0.5 ! G.W., 10.4.1996 + dt2=0.5 + dt=1.0 + endif + uy(jj)=(uun(ix,j,k,n,l)*dt2+uun(ix,j,k+1,n,l)*dt1)/dt + goto 50 + endif + goto 70 +C This section used when no values were found +51 continue +C Must use uu at current level and lat. juy becomes smaller by 1 + uy(jj)=uun(ix,jy,kl,n,l) + juy=juy-1 +C Otherwise OK +50 continue + if (juy.gt.0) then + dudy=(uy(2)-uy(1))/float(juy)/(dyn(l)*pi/180.) + else + dudy=uun(ix,jyvp,kl,n,l)-uun(ix,jyvm,kl,n,l) + dudy=dudy/float(jumpy)/(dyn(l)*pi/180.) + end if +C + pvn(ix,jy,kl,n,l)=dthetadp*(f+(dvdx/cosphi-dudy + + +uun(ix,jy,kl,n,l)*tanphi)/r_earth)*(-1.e6)*9.81 +C +C Resest jux and juy + jux=jumpx + juy=jumpy +12 continue +11 continue +10 continue +C + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/caldate.f b/projects/MissionSupport/applications/WxTraj/src/caldate.f new file mode 100644 index 0000000..e55f2c6 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/caldate.f @@ -0,0 +1,69 @@ + SUBROUTINE caldate(JULDATE,YYYYMMDD,HHMISS) +c i o o +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* * +* Calculates the Gregorian date from the Julian date * +* * +* AUTHOR: Andreas Stohl (21 January 1994), adapted from Numerical Recipes * +* * +* Variables: * +* DD Day * +* HH Hour * +* HHMISS Hour, Minute, Second * +* JA,JB,JC,JD,JE help variables * +* JALPHA help variable * +* JULDATE Julian Date * +* JULDAY help variable * +* MI Minute * +* MM Month * +* SS Seconds * +* YYYY Year * +* YYYYMMDD Year, Month, Day * +* * +* Constants: * +* IGREG help constant * +* * +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + + IMPLICIT NONE + + INTEGER YYYYMMDD,YYYY,MM,DD,HHMISS,HH,MI,SS + INTEGER JULDAY,JA,JB,JC,JD,JE,IGREG,JALPHA + DOUBLE PRECISION JULDATE + PARAMETER (IGREG=2299161) + + JULDAY=INT(JULDATE) + IF(JULDAY.GE.IGREG)THEN + JALPHA=INT(((JULDAY-1867216)-0.25)/36524.25) + JA=JULDAY+1+JALPHA-INT(0.25*JALPHA) + ELSE + JA=JULDAY + ENDIF + JB=JA+1524 + JC=INT(6680.+((JB-2439870)-122.1)/365.25) + JD=365*JC+INT(0.25*JC) + JE=INT((JB-JD)/30.6001) + DD=JB-JD-INT(30.6001*JE) + MM=JE-1 + IF (MM.GT.12) MM=MM-12 + YYYY=JC-4715 + IF (MM.GT.2) YYYY=YYYY-1 + IF (YYYY.LE.0) YYYY=YYYY-1 + + YYYYMMDD=10000*YYYY+100*MM+DD + HH=INT(24.*(JULDATE-FLOAT(JULDAY))) + MI=INT(1440.*(JULDATE-FLOAT(JULDAY))-60.*FLOAT(HH)) + SS=NINT(86400.*(JULDATE-FLOAT(JULDAY))-3600.*FLOAT(HH)) + +-60.*FLOAT(MI) + IF (SS.EQ.60) THEN ! 60 seconds = 1 minute + SS=0 + MI=MI+1 + ENDIF + IF (MI.EQ.60) THEN + MI=0 + HH=HH+1 + ENDIF + HHMISS=10000*HH+100*MI+SS + + RETURN + END diff --git a/projects/MissionSupport/applications/WxTraj/src/checklimits.f b/projects/MissionSupport/applications/WxTraj/src/checklimits.f new file mode 100644 index 0000000..4383cdd --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/checklimits.f @@ -0,0 +1,84 @@ + subroutine checklimits(error) +C o +******************************************************************************** +* * +* This routine checks, if the current user specifications are within the * +* dimensional limits of the number of trajectories that have to be handled * +* at the same time. * +* * +* Author: A. Stohl * +* * +* 2 February 1994 * +* * +******************************************************************************** +* * +* Variables: * +* error .true., if dimensions are exceeded, else .false. * +* interv [s] interval between two trajectory calculations * +* lentra [s] length of an individual trajectory * +* numtramax wanted maximum number of trajectories * +* * +* Constants: * +* maxtra maximum allowable number of trajectories * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer numtramax + logical error + + error=.false. + +1 format(1x,a6,i7,a43) + +C Calculate maximum number of trajectories to be held in memory +C If only one starting time is selected, numtramax=numpoint, otherwise it is +C =(number of starting points)*(length of trajectories)/(interval of starting +C times of trajectories) +***************************************************************************** + + if ((ibdate.eq.iedate).and.(ibtime.eq.ietime)) then + numtramax=numpoint + else + numtramax=numpoint*int(float(abs(lentra))/float(interv)+1.) + endif + + if (modecet.eq.3) then + numtramax=1 + endif + + +C If numtramax is greater than the number allowed by maxtra, give a warning +C and stop the model execution. +*************************************************************************** + + if (numtramax.gt.maxtra) then + error=.true. + write(*,*) '##### !!!ERROR!!! # + +####' + write(*,*) '##### YOU WANT TO CALCULATE TOO MANY TRAJECTORIES: # + +####' + write(*,1) '##### ',numtramax,' ARE WANTED, BUT ONLY + + #####' + write(*,1) '##### ',maxtra,' ARE POSSIBLE. + + #####' + write(*,*) '##### YOU CAN AVOID THIS PROBLEM IN THREE WAYS: # + +####' + write(*,*) '##### 1) REDUCE THE NUMBER OF STARTING POINTS IN # + +####' + write(*,*) '##### FILE "STARTPOINTS". # + +####' + write(*,*) '##### 2) REDUCE THE CALCULATION LENGTH OF THE # + +####' + write(*,*) '##### TRAJECTORIES IN FILE "COMMAND". # + +####' + write(*,*) '##### 3) INCREASE THE TIME INTERVAL BETWEEN TWO # + +####' + write(*,*) '##### TRAJECTORY CALCULATIONS IN FILE "COMMAND".# + +####' + endif + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/cmapf1.0.f b/projects/MissionSupport/applications/WxTraj/src/cmapf1.0.f new file mode 100644 index 0000000..c0c6b48 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/cmapf1.0.f @@ -0,0 +1,707 @@ +C CHANGES TO THE ROUTINES BY A. STOHL +C XI,XI0,ETA,ETA0 ARE DOUBLE PRECISION VARIABLES TO AVOID PROBLEMS +C AT POLES + + SUBROUTINE CC2GLL (STRCMP, XLAT,XLONG, UE,VN, UG,VG) +C* WRITTEN ON 3/31/94 BY Dr. Albion Taylor NOAA / OAR / ARL + PARAMETER (PI=3.14159265358979,RADPDG=PI/180,DGPRAD=180/PI) + DOUBLE PRECISION XPOLG,YPOLG,ALONG,SLONG,CLONG,ROT + REAL STRCMP(9) + ALONG = CSPANF( XLONG - STRCMP(2), -180., 180.) + IF (XLAT.GT.89.985) THEN +C* NORTH POLAR METEOROLOGICAL ORIENTATION: "NORTH" ALONG PRIME MERIDIAN + ROT = - STRCMP(1) * ALONG + XLONG - 180. + ELSEIF (XLAT.LT.-89.985) THEN +C* SOUTH POLAR METEOROLOGICAL ORIENTATION: "NORTH" ALONG PRIME MERIDIAN + ROT = - STRCMP(1) * ALONG - XLONG + ELSE + ROT = - STRCMP(1) * ALONG + ENDIF + SLONG = SIN( RADPDG * ROT ) + CLONG = COS( RADPDG * ROT ) + XPOLG = SLONG * STRCMP(5) + CLONG * STRCMP(6) + YPOLG = CLONG * STRCMP(5) - SLONG * STRCMP(6) + UG = YPOLG * UE + XPOLG * VN + VG = YPOLG * VN - XPOLG * UE + RETURN + END + + SUBROUTINE CCRVLL (STRCMP, XLAT,XLONG, GX,GY) +C* WRITTEN ON 9/20/94 BY Dr. Albion Taylor NOAA / OAR / ARL + PARAMETER (REARTH=6 371.2) + PARAMETER (PI=3.14159265358979,RADPDG=PI/180,DGPRAD=180/PI) + DOUBLE PRECISION XPOLG,YPOLG,TEMP,ALONG,SLONG,CLONG,CTEMP + REAL STRCMP(9) + ALONG = CSPANF( XLONG - STRCMP(2), -180., 180.) + SLONG = SIN( RADPDG * STRCMP(1) * ALONG) + CLONG = COS( RADPDG * STRCMP(1) * ALONG) + XPOLG = - SLONG * STRCMP(5) + CLONG * STRCMP(6) + YPOLG = CLONG * STRCMP(5) + SLONG * STRCMP(6) + TEMP = SIN(RADPDG * XLAT) + CTEMP = COS(RADPDG * XLAT) + CURV = (STRCMP(1) - TEMP) / CTEMP / REARTH + GX = CURV * XPOLG + GY = CURV * YPOLG + RETURN + END + + SUBROUTINE CCRVXY (STRCMP, X,Y, GX,GY) +C* WRITTEN ON 9/20/94 BY Dr. Albion Taylor NOAA / OAR / ARL + PARAMETER (REARTH=6 371.2) + PARAMETER (PI=3.14159265358979,RADPDG=PI/180,DGPRAD=180/PI) + REAL STRCMP(9) + DOUBLE PRECISION XPOLG,YPOLG,TEMP,YMERC,EFACT,CURV + TEMP = STRCMP(1) * STRCMP(7) /REARTH + XPOLG = STRCMP(6) + TEMP * (STRCMP(3) - X) + YPOLG = STRCMP(5) + TEMP * (STRCMP(4) - Y) + TEMP = SQRT ( XPOLG ** 2 + YPOLG ** 2 ) + IF (TEMP.GT.0.) THEN + YMERC = - LOG( TEMP) /STRCMP(1) + EFACT = EXP(YMERC) + CURV = ( (STRCMP(1) - 1.D0) * EFACT + + A (STRCMP(1) + 1.D0) / EFACT ) + B * .5D0 / REARTH + GX = XPOLG * CURV / TEMP + GY = YPOLG * CURV / TEMP + ELSE + IF (ABS(STRCMP(1)) .EQ. 1.) THEN + GX = 0. + GY = 0. + ELSE + GX = 1./REARTH + GY = 1./REARTH + ENDIF + ENDIF + RETURN + END + + SUBROUTINE CG2CLL (STRCMP, XLAT,XLONG, UG,VG, UE,VN) +C* WRITTEN ON 3/31/94 BY Dr. Albion Taylor NOAA / OAR / ARL + PARAMETER (PI=3.14159265358979,RADPDG=PI/180,DGPRAD=180/PI) + DOUBLE PRECISION XPOLG,YPOLG,ALONG,SLONG,CLONG,ROT + REAL STRCMP(9) + ALONG = CSPANF( XLONG - STRCMP(2), -180., 180.) + IF (XLAT.GT.89.985) THEN +C* NORTH POLAR METEOROLOGICAL ORIENTATION: "NORTH" ALONG PRIME MERIDIAN + ROT = - STRCMP(1) * ALONG + XLONG - 180. + ELSEIF (XLAT.LT.-89.985) THEN +C* SOUTH POLAR METEOROLOGICAL ORIENTATION: "NORTH" ALONG PRIME MERIDIAN + ROT = - STRCMP(1) * ALONG - XLONG + ELSE + ROT = - STRCMP(1) * ALONG + ENDIF + SLONG = SIN( RADPDG * ROT ) + CLONG = COS( RADPDG * ROT ) + XPOLG = SLONG * STRCMP(5) + CLONG * STRCMP(6) + YPOLG = CLONG * STRCMP(5) - SLONG * STRCMP(6) + UE = YPOLG * UG - XPOLG * VG + VN = YPOLG * VG + XPOLG * UG + RETURN + END + + SUBROUTINE CG2CXY (STRCMP, X,Y, UG,VG, UE,VN) +C* WRITTEN ON 3/31/94 BY Dr. Albion Taylor NOAA / OAR / ARL + PARAMETER (REARTH=6 371.2) + REAL STRCMP(9) + DOUBLE PRECISION XPOLG,YPOLG,TEMP,XI0,ETA0,XI,ETA + PARAMETER (PI=3.14159265358979,RADPDG=PI/180,DGPRAD=180/PI) + XI0 = ( X - STRCMP(3) ) * STRCMP(7) / REARTH + ETA0 = ( Y - STRCMP(4) ) * STRCMP(7) /REARTH + XI = XI0 * STRCMP(5) - ETA0 * STRCMP(6) + ETA = ETA0 * STRCMP(5) + XI0 * STRCMP(6) + RADIAL = 2. * ETA - STRCMP(1) * (XI*XI + ETA*ETA) + IF (RADIAL.GT.STRCMP(8)) THEN +C* CASE NORTH OF 89 DEGREES. METEOROLOGICAL WIND DIRECTION DEFINITION +C* CHANGES. + CALL CNXYLL(STRCMP, XI,ETA, XLAT,XLONG) +C* NORTH POLAR METEOROLOGICAL ORIENTATION: "NORTH" ALONG PRIME MERIDIAN + ROT = STRCMP(1) * (XLONG - STRCMP(2)) - XLONG - 180. + SLONG = - SIN( RADPDG * ROT ) + CLONG = COS( RADPDG * ROT ) + XPOLG = SLONG * STRCMP(5) + CLONG * STRCMP(6) + YPOLG = CLONG * STRCMP(5) - SLONG * STRCMP(6) + ELSE IF (RADIAL.LT.STRCMP(9)) THEN +C* CASE SOUTH OF -89 DEGREES. METEOROLOGICAL WIND DIRECTION DEFINITION +C* CHANGES. + CALL CNXYLL(STRCMP, XI,ETA, XLAT,XLONG) +C* SOUTH POLAR METEOROLOGICAL ORIENTATION: "NORTH" ALONG PRIME MERIDIAN + ROT = STRCMP(1) * (XLONG - STRCMP(2)) + XLONG + SLONG = - SIN( RADPDG * ROT ) + CLONG = COS( RADPDG * ROT ) + XPOLG = SLONG * STRCMP(5) + CLONG * STRCMP(6) + YPOLG = CLONG * STRCMP(5) - SLONG * STRCMP(6) + ELSE +C* NORMAL CASE. METEOROLOGICAL DIRECTION OF WIND RELATED TO TRUE NORTH. + XPOLG = STRCMP(6) - STRCMP(1) * XI0 + YPOLG = STRCMP(5) - STRCMP(1) * ETA0 + TEMP = SQRT ( XPOLG ** 2 + YPOLG ** 2 ) + XPOLG = XPOLG / TEMP + YPOLG = YPOLG / TEMP + END IF + UE = ( YPOLG * UG - XPOLG * VG ) + VN = ( YPOLG * VG + XPOLG * UG ) + RETURN + END + + REAL FUNCTION CGSZLL (STRCMP, XLAT,XLONG) +C* WRITTEN ON 3/31/94 BY Dr. Albion Taylor NOAA / OAR / ARL + PARAMETER (PI=3.14159265358979,RADPDG=PI/180,DGPRAD=180D0/PI) + REAL STRCMP(9) + DOUBLE PRECISION SLAT,YMERC,EFACT + IF (XLAT .GT. 89.985) THEN +C* CLOSE TO NORTH POLE + IF (STRCMP(1) .GT. 0.9999) THEN +C* AND TO GAMMA == 1. + CGSZLL = 2. * STRCMP(7) + RETURN + ENDIF + EFACT = COS(RADPDG * XLAT) + IF (EFACT .LE. 0.) THEN + CGSZLL = 0. + RETURN + ELSE + YMERC = - LOG( EFACT /(1. + SIN(RADPDG * XLAT))) + ENDIF + ELSE IF (XLAT .LT. -89.985) THEN +C* CLOSE TO SOUTH POLE + IF (STRCMP(1) .LT. -0.9999) THEN +C* AND TO GAMMA == -1.0 + CGSZLL = 2. * STRCMP(7) + RETURN + ENDIF + EFACT = COS(RADPDG * XLAT) + IF (EFACT .LE. 0.) THEN + CGSZLL = 0. + RETURN + ELSE + YMERC = LOG( EFACT /(1. - SIN(RADPDG * XLAT))) + ENDIF + ELSE + SLAT = SIN(RADPDG * XLAT) + YMERC = LOG((1. + SLAT) / (1. - SLAT))/2. +C EFACT = EXP(YMERC) +C CGSZLL = 2. * STRCMP(7) * EXP (STRCMP(1) * YMERC) +C C / (EFACT + 1./EFACT) + ENDIF + CGSZLL = STRCMP(7) * COS(RADPDG * XLAT) * EXP(STRCMP(1) *YMERC) + RETURN + END + + REAL FUNCTION CGSZXY (STRCMP, X,Y) +C* WRITTEN ON 3/31/94 BY Dr. Albion Taylor NOAA / OAR / ARL + PARAMETER (REARTH=6 371.2,ALMST1=.9999999) + REAL STRCMP(9) + DOUBLE PRECISION YMERC,EFACT + DOUBLE PRECISION XI0,ETA0,XI,ETA + XI0 = ( X - STRCMP(3) ) * STRCMP(7) / REARTH + ETA0 = ( Y - STRCMP(4) ) * STRCMP(7) /REARTH + XI = XI0 * STRCMP(5) - ETA0 * STRCMP(6) + ETA = ETA0 * STRCMP(5) + XI0 * STRCMP(6) + RADIAL = 2. * ETA - STRCMP(1) * (XI*XI + ETA*ETA) + EFACT = STRCMP(1) * RADIAL + IF (EFACT .GT. ALMST1) THEN + IF (STRCMP(1).GT.ALMST1) THEN + CGSZXY = 2. * STRCMP(7) + ELSE + CGSZXY = 0. + ENDIF + RETURN + ENDIF + IF (ABS(EFACT) .LT. 1.E-2) THEN + TEMP = (EFACT / (2. - EFACT) )**2 + YMERC = RADIAL / (2. - EFACT) * (1. + TEMP * + C (1./3. + TEMP * + C (1./5. + TEMP * + C (1./7. )))) + ELSE + YMERC = - LOG( 1. - EFACT ) /2. /STRCMP(1) + ENDIF + IF (YMERC .GT. 6.) THEN + IF (STRCMP(1) .GT. ALMST1) THEN + CGSZXY = 2. * STRCMP(7) + ELSE + CGSZXY = 0. + ENDIF + ELSE IF (YMERC .LT. -6.) THEN + IF (STRCMP(1) .LT. -ALMST1) THEN + CGSZXY = 2. * STRCMP(7) + ELSE + CGSZXY = 0. + ENDIF + ELSE + EFACT = EXP(YMERC) + CGSZXY = 2. * STRCMP(7) * EXP (STRCMP(1) * YMERC) + C / (EFACT + 1./EFACT) + ENDIF + RETURN + END + + SUBROUTINE CLL2XY (STRCMP, XLAT,XLONG, X,Y) +C* WRITTEN ON 3/31/94 BY Dr. Albion Taylor NOAA / OAR / ARL + PARAMETER (REARTH=6 371.2) + REAL STRCMP(9) + CALL CNLLXY(STRCMP, XLAT,XLONG, XI,ETA) + X = STRCMP(3) + REARTH/STRCMP(7) * + C (XI * STRCMP(5) + ETA * STRCMP(6) ) + Y = STRCMP(4) + REARTH/STRCMP(7) * + C (ETA * STRCMP(5) - XI * STRCMP(6) ) + RETURN + END + + SUBROUTINE CNLLXY (STRCMP, XLAT,XLONG, XI,ETA) +C* WRITTEN ON 3/31/94 BY Dr. Albion Taylor NOAA / OAR / ARL +C MAIN TRANSFORMATION ROUTINE FROM LATITUDE-LONGITUDE TO +C CANONICAL (EQUATOR-CENTERED, RADIAN UNIT) COORDINATES + PARAMETER (PI=3.14159265358979,RADPDG=PI/180,DGPRAD=180/PI) + PARAMETER (ALMST1=.9999999) + REAL STRCMP(9) + DOUBLE PRECISION GAMMA + DOUBLE PRECISION DLONG,DLAT,SLAT,MERCY,GMERCY + GAMMA = STRCMP(1) + DLAT = XLAT + DLONG = CSPANF(XLONG - STRCMP(2), -180., 180.) + DLONG = DLONG * RADPDG + GDLONG = GAMMA * DLONG + IF (ABS(GDLONG) .LT. .01) THEN +C CODE FOR GAMMA SMALL OR ZERO. THIS AVOIDS ROUND-OFF ERROR OR DIVIDE- +C BY ZERO IN THE CASE OF MERCATOR OR NEAR-MERCATOR PROJECTIONS. + GDLONG = GDLONG * GDLONG + SNDGAM = DLONG * (1. - 1./6. * GDLONG * + C (1. - 1./20. * GDLONG * + C (1. - 1./42. * GDLONG ))) + CSDGAM = DLONG * DLONG * .5 * + C (1. - 1./12. * GDLONG * + C (1. - 1./30. * GDLONG * + C (1. - 1./56. * GDLONG ))) + ELSE +C CODE FOR MODERATE VALUES OF GAMMA + SNDGAM = SIN (GDLONG) /GAMMA + CSDGAM = (1. - COS(GDLONG) )/GAMMA /GAMMA + ENDIF + SLAT = SIN(RADPDG * DLAT) + IF ((SLAT .GE. ALMST1) .OR. (SLAT .LE. -ALMST1)) THEN + ETA = 1./STRCMP(1) + XI = 0. + RETURN + ENDIF + MERCY = .5 * LOG( (1. + SLAT) / (1. - SLAT) ) + GMERCY = GAMMA * MERCY + IF (ABS(GMERCY) .LT. .001) THEN +C CODE FOR GAMMA SMALL OR ZERO. THIS AVOIDS ROUND-OFF ERROR OR DIVIDE- +C BY ZERO IN THE CASE OF MERCATOR OR NEAR-MERCATOR PROJECTIONS. + RHOG1 = MERCY * (1. - .5 * GMERCY * + C (1. - 1./3. * GMERCY * + C (1. - 1./4. * GMERCY ) ) ) + ELSE +C CODE FOR MODERATE VALUES OF GAMMA + RHOG1 = (1. - EXP(-GMERCY)) / GAMMA + ENDIF + ETA = RHOG1 + (1. - GAMMA * RHOG1) * GAMMA * CSDGAM + XI = (1. - GAMMA * RHOG1 ) * SNDGAM + END + + SUBROUTINE CNXYLL (STRCMP, XI,ETA, XLAT,XLONG) +C* WRITTEN ON 3/31/94 BY Dr. Albion Taylor NOAA / OAR / ARL +C MAIN TRANSFORMATION ROUTINE FROM CANONICAL (EQUATOR-CENTERED, +C RADIAN UNIT) COORDINATES + PARAMETER (PI=3.14159265358979,RADPDG=PI/180,DGPRAD=180/PI) + PARAMETER (ALMST1=.9999999) + REAL STRCMP(9) + DOUBLE PRECISION GAMMA,TEMP,ARG1,ARG2,YMERC,ALONG,GXI,CGETA + DOUBLE PRECISION XI,ETA + GAMMA = STRCMP(1) +C CALCULATE EQUIVALENT MERCATOR COORDINATE + ODIST = XI*XI + ETA*ETA + ARG2 = 2. * ETA - GAMMA * (XI*XI + ETA*ETA) + ARG1 = GAMMA * ARG2 +C Change by A. Stohl to avoid problems close to the poles +C IF (ARG1 .GE. ALMST1) THEN +C DISTANCE TO NORTH (OR SOUTH) POLE IS ZERO (OR IMAGINARY ;) ) +C XLAT = SIGN(90.,STRCMP(1)) +C XLONG = STRCMP(2) +C RETURN +C ENDIF + IF (ABS(ARG1) .LT. .01) THEN +C CODE FOR GAMMA SMALL OR ZERO. THIS AVOIDS ROUND-OFF ERROR OR DIVIDE- +C BY ZERO IN THE CASE OF MERCATOR OR NEAR-MERCATOR PROJECTIONS. + TEMP = (ARG1 / (2. - ARG1) )**2 + YMERC = ARG2 / (2. - ARG1) * (1. + TEMP * + C (1./3. + TEMP * + C (1./5. + TEMP * + C (1./7. )))) + ELSE +C CODE FOR MODERATE VALUES OF GAMMA + YMERC = - LOG ( 1. - ARG1 ) /2. / GAMMA + ENDIF +C CONVERT YMERC TO LATITUDE + TEMP = EXP( - ABS(YMERC) ) + XLAT = SIGN(ATAN2((1. - TEMP) * (1. + TEMP), 2. * TEMP), YMERC) +C FIND LONGITUDES + GXI = GAMMA*XI + CGETA = 1. - GAMMA * ETA + IF ( ABS(GXI) .LT. .01*CGETA ) THEN +C CODE FOR GAMMA SMALL OR ZERO. THIS AVOIDS ROUND-OFF ERROR OR DIVIDE- +C BY ZERO IN THE CASE OF MERCATOR OR NEAR-MERCATOR PROJECTIONS. + TEMP = ( GXI /CGETA )**2 + ALONG = XI / CGETA * (1. - TEMP * + C (1./3. - TEMP * + C (1./5. - TEMP * + C (1./7. )))) + ELSE +C CODE FOR MODERATE VALUES OF GAMMA + ALONG = ATAN2( GXI, CGETA) / GAMMA + ENDIF + XLONG = SNGL(STRCMP(2) + DGPRAD * ALONG) + XLAT = XLAT * DGPRAD + RETURN + END + + SUBROUTINE CPOLLL (STRCMP, XLAT,XLONG, ENX,ENY,ENZ) +C* WRITTEN ON 11/23/94 BY Dr. Albion Taylor NOAA / OAR / ARL + PARAMETER (PI=3.14159265358979,RADPDG=PI/180.,DGPRAD=180./PI) + DOUBLE PRECISION XPOLG,YPOLG,ALONG,SLONG,CLONG,ROT + REAL STRCMP(9) + ALONG = CSPANF( XLONG - STRCMP(2), -180., 180.) + ROT = - STRCMP(1) * ALONG + SLONG = SIN( RADPDG * ROT ) + CLONG = COS( RADPDG * ROT ) + XPOLG = SLONG * STRCMP(5) + CLONG * STRCMP(6) + YPOLG = CLONG * STRCMP(5) - SLONG * STRCMP(6) + CLAT = COS(RADPDG * XLAT) + ENX = CLAT * XPOLG + ENY = CLAT * YPOLG + ENZ = SIN(RADPDG * XLAT) + RETURN + END + + SUBROUTINE CPOLXY (STRCMP, X,Y, ENX,ENY,ENZ) +C* WRITTEN ON 11/26/94 BY Dr. Albion Taylor NOAA / OAR / ARL + PARAMETER (REARTH=6 371.2) + PARAMETER (PI=3.14159265358979,RADPDG=PI/180,DGPRAD=180/PI) + REAL STRCMP(9) + DOUBLE PRECISION XPOL,YPOL,TEMP,XI0,ETA0,XI,ETA,RADIAL + DOUBLE PRECISION TEMP2,YMERC,ARG,OARG,CLAT + XI0 = ( X - STRCMP(3) ) * STRCMP(7) / REARTH + ETA0 = ( Y - STRCMP(4) ) * STRCMP(7) /REARTH + XI = XI0 * STRCMP(5) - ETA0 * STRCMP(6) + ETA = ETA0 * STRCMP(5) + XI0 * STRCMP(6) + RADIAL = 2. * ETA - STRCMP(1) * (XI*XI + ETA*ETA) + TEMP = STRCMP(1) * RADIAL + IF (TEMP .GE. 1.) THEN + ENX = 0. + ENY = 0. + ENZ = SIGN(1.,STRCMP(1)) + RETURN + ENDIF + IF (ABS(TEMP).LT.1.E-2) THEN + TEMP2 = (TEMP / (2. - TEMP))**2 + YMERC = RADIAL / (2. - TEMP) * (1. + TEMP2 * + C (1./3. + TEMP2 * + C (1./5. + TEMP2 * + C (1./7.)))) + ELSE + YMERC = -.5 * LOG(1. - TEMP) / STRCMP(1) + ENDIF + ARG = EXP( YMERC ) + OARG = 1./ARG + CLAT = 2./(ARG + OARG) + ENZ = (ARG - OARG) * CLAT /2. + TEMP = CLAT / SQRT(1. - TEMP) + XPOL = - XI * STRCMP(1) * TEMP + YPOL = (1. - ETA * STRCMP(1) ) * TEMP + ENX = XPOL * STRCMP(5) + YPOL * STRCMP(6) + ENY = YPOL * STRCMP(5) - XPOL * STRCMP(6) + RETURN + END + + REAL FUNCTION CSPANF (VALUE, BEGIN, END) +C* WRITTEN ON 3/31/94 BY Dr. Albion Taylor NOAA / OAR / ARL +C* REAL FUNCTION CSPANF RETURNS A VALUE IN THE INTERVAL (BEGIN,END] +C* WHICH IS EQUIVALENT TO VALUE, MOD (END - BEGIN). IT IS USED TO +C* REDUCE PERIODIC VARIABLES TO A STANDARD RANGE. IT ADJUSTS FOR THE +C* BEHAVIOR OF THE MOD FUNCTION WHICH PROVIDES POSITIVE RESULTS FOR +c* POSITIVE INPUT, AND NEGATIVE RESULTS FOR NEGATIVE INPUT +C* INPUT: +C* VALUE - REAL NUMBER TO BE REDUCED TO THE SPAN +C* BEGIN - FIRST VALUE OF THE SPAN +C* END - LAST VALUE OF THE SPAN +C* RETURNS: +C* THE REDUCED VALUE +C* EXAMPLES: +C* ALONG = CSPANF(XLONG, -180., +180.) +C* DIR = CSPANF(ANGLE, 0., 360.) + REAL FIRST,LAST + FIRST = MIN(BEGIN,END) + LAST = MAX(BEGIN,END) + VAL = MOD( VALUE - FIRST , LAST - FIRST) + IF ( VAL . LE. 0.) THEN + CSPANF = VAL + LAST + ELSE + CSPANF = VAL + FIRST + ENDIF + RETURN + END + + SUBROUTINE CXY2LL (STRCMP, X,Y, XLAT,XLONG) +C* WRITTEN ON 3/31/94 BY Dr. Albion Taylor NOAA / OAR / ARL + PARAMETER (REARTH=6 371.2) + DOUBLE PRECISION XI0,ETA0,XI,ETA + REAL STRCMP(9) + XI0 = ( X - STRCMP(3) ) * STRCMP(7) / REARTH + ETA0 = ( Y - STRCMP(4) ) * STRCMP(7) /REARTH + XI = XI0 * STRCMP(5) - ETA0 * STRCMP(6) + ETA = ETA0 * STRCMP(5) + XI0 * STRCMP(6) + CALL CNXYLL(STRCMP, XI,ETA, XLAT,XLONG) + XLONG = CSPANF(XLONG, -180., 180.) + RETURN + END + + REAL FUNCTION EQVLAT (XLAT1,XLAT2) +C* WRITTEN ON 3/31/94 BY Dr. Albion Taylor NOAA / OAR / ARL + PARAMETER (PI=3.14159265358979,RADPDG=PI/180,DGPRAD=180/PI) + SIND(X) = SIN (RADPDG*X) + SINL1 = SIND (XLAT1) + SINL2 = SIND (XLAT2) + IF (ABS(SINL1 - SINL2) .GT. .001) THEN + AL1 = LOG((1. - SINL1)/(1. - SINL2)) + AL2 = LOG((1. + SINL1)/(1. + SINL2)) + ELSE +C CASE LAT1 NEAR OR EQUAL TO LAT2 + TAU = - (SINL1 - SINL2)/(2. - SINL1 - SINL2) + TAU = TAU*TAU + AL1 = 2. / (2. - SINL1 - SINL2) * (1. + TAU * + C (1./3. + TAU * + C (1./5. + TAU * + C (1./7.)))) + TAU = (SINL1 - SINL2)/(2. + SINL1 + SINL2) + TAU = TAU*TAU + AL2 = -2. / (2. + SINL1 + SINL2) * (1. + TAU * + C (1./3. + TAU * + C (1./5. + TAU * + C (1./7.)))) + ENDIF + EQVLAT = ASIN((AL1 + AL2) / (AL1 - AL2))/RADPDG + RETURN + END + + SUBROUTINE STCM1P(STRCMP, X1,Y1, XLAT1,XLONG1, + C XLATG,XLONGG, GRIDSZ, ORIENT) +C* WRITTEN ON 3/31/94 BY Dr. Albion Taylor NOAA / OAR / ARL + PARAMETER (PI=3.14159265358979,RADPDG=PI/180,DGPRAD=180/PI) + REAL STRCMP(9) + DO K=3,4 + STRCMP (K) = 0. + ENDDO + TURN = RADPDG * (ORIENT - STRCMP(1) * + C CSPANF(XLONGG - STRCMP(2), -180., 180.) ) + STRCMP (5) = COS (TURN) + STRCMP (6) = - SIN (TURN) + STRCMP (7) = 1. + STRCMP (7) = GRIDSZ * STRCMP(7) + C / CGSZLL(STRCMP, XLATG, STRCMP(2)) + CALL CLL2XY (STRCMP, XLAT1,XLONG1, X1A,Y1A) + STRCMP(3) = STRCMP(3) + X1 - X1A + STRCMP(4) = STRCMP(4) + Y1 - Y1A + RETURN + END + + SUBROUTINE STCM2P(STRCMP, X1,Y1, XLAT1,XLONG1, + C X2,Y2, XLAT2,XLONG2) +C* WRITTEN ON 3/31/94 BY Dr. Albion Taylor NOAA / OAR / ARL + REAL STRCMP(9) + DO K=3,6 + STRCMP (K) = 0. + ENDDO + STRCMP (5) = 1. + STRCMP (7) = 1. + CALL CLL2XY (STRCMP, XLAT1,XLONG1, X1A,Y1A) + CALL CLL2XY (STRCMP, XLAT2,XLONG2, X2A,Y2A) + DEN = SQRT( (X1 - X2)**2 + (Y1 - Y2)**2 ) + DENA = SQRT( (X1A - X2A)**2 + (Y1A - Y2A)**2 ) + STRCMP(5) = ((X1A - X2A)*(X1 - X2) + (Y1A - Y2A) * (Y1 - Y2)) + C /DEN /DENA + STRCMP(6) = ((Y1A - Y2A)*(X1 - X2) - (X1A - X2A) * (Y1 - Y2)) + C /DEN /DENA + STRCMP (7) = STRCMP(7) * DENA / DEN + CALL CLL2XY (STRCMP, XLAT1,XLONG1, X1A,Y1A) + STRCMP(3) = STRCMP(3) + X1 - X1A + STRCMP(4) = STRCMP(4) + Y1 - Y1A + RETURN + END + +C* GENERAL CONFORMAL MAP ROUTINES FOR METEOROLOGICAL MODELERS +C* WRITTEN ON 3/31/94 BY + +C* Dr. Albion Taylor +C* NOAA / OAR / ARL Phone: (301) 713-0295 x 132 +C* Rm. 3151, 1315 East-West Highway Fax: (301) 713-0119 +C* Silver Spring, MD 20910 E-mail: ADTaylor@arlrisc.ssmc.noaa.gov + +C* SUBROUTINE STLMBR (STRCMP, TNGLAT, CLONG) +C* THIS ROUTINE INITIALIZES THE MAP STRUCTURE ARRAY STRCMP TO +C* THE FORM OF A SPECIFIC MAP PROJECTION +C* INPUTS: +C* TNGLAT - THE LATITUDE AT WHICH THE PROJECTION WILL BE TANGENT +C* TO THE EARTH. +90. FOR NORTH POLAR STEREOGRAPHIC, +C* -90. FOR SOUTH POLAR STEREOGRAPHIC, 0. FOR MERCATOR, +C* AND OTHER VALUES FOR LAMBERT CONFORMAL. +C* -90 <= TNGLAT <= 90. +C* CLONG - A LONGITUDE IN THE REGION UNDER CONSIDERATION. LONGITUDES +C* BETWEEN CLONG-180. AND CLONG+180. WILL BE MAPPED IN ONE +C* CONNECTED REGION +C* OUTPUTS: +C* STRCMP - A 9-VALUE MAP STRUCTURE ARRAY FOR USE WITH SUBSEQUENT +C* CALLS TO THE COORDINATE TRANSFORM ROUTINES. +C* +C* REAL FUNCTION EQVLAT (XLAT1,XLAT2) +C* THIS FUNCTION IS PROVIDED TO ASSIST IN FINDING THE TANGENT LATITUDE +C* EQUIVALENT TO THE 2-REFERENCE LATITUDE SPECIFICATION IN THE LEGEND +C* OF MOST LAMBERT CONFORMAL MAPS. IF THE MAP SPECIFIES "SCALE +C* 1:XXXXX TRUE AT 40N AND 60N", THEN EQVLAT(40.,60.) WILL RETURN THE +C* EQUIVALENT TANGENT LATITUDE. +C* INPUTS: +C* XLAT1,XLAT2: THE TWO LATITUDES SPECIFIED IN THE MAP LEGEND +C* RETURNS: +C* THE EQUIVALENT TANGENT LATITUDE +C* EXAMPLE: CALL STLMBR(STRCMP, EQVLAT(40.,60.), 90.) + +C* SUBROUTINE STCM2P (STRCMP, X1,Y1, XLAT1,XLONG1, +C* X2,Y2, XLAT2,XLONG2) +C* SUBROUTINE STCM1P (STRCMP, X1,Y1, XLAT1,XLONG1, +C* XLATG,XLONGG, GRIDSZ, ORIENT) +C* THESE ROUTINES COMPLETE THE SPECIFICATION OF THE MAP STRUCTURE +C* ARRAY BY CONFORMING THE MAP COORDINATES TO THE SPECIFICATIONS +C* OF A PARTICULAR GRID. EITHER STCM1P OR STCM2P MUST BE CALLED, +C* BUT NOT BOTH +C* INPUTS: +C* STRCMP - A 9-VALUE MAP STRUCTURE ARRAY, SET TO A PARTICULAR MAP +C* FORM BY A PREVIOUS CALL TO STLMBR +C* FOR STCM2P: +C* X1,Y1, X2,Y2 - THE MAP COORDINATES OF TWO POINTS ON THE GRID +C* XLAT1,XLONG1, XLAT2,XLONG2 - THE GEOGRAPHIC COORDINATES OF THE +C* SAME TWO POINTS +C* FOR STCM1P: +C* X1,Y1 - THE MAP COORDINATES OF ONE POINT ON THE GRID +C* XLAT1,XLONG1 - THE GEOGRAPHIC COORDINATES OF THE SAME POINT +C* XLATG,XLONGG - LATITUDE AND LONGITUDE OF REFERENCE POINT FOR +C* GRIDSZ AND ORIENTATION SPECIFICATION. +C* GRIDSZ - THE DESIRED GRID SIZE IN KILOMETERS, AT XLATG,XLONGG +C* ORIENT - THE ANGLE, WITH RESPECT TO NORTH, OF A Y-GRID LINE, AT +C* THE POINT XLATG,XLONGG +C* OUTPUTS: +C* STRCMP - A 9-VALUE MAP STRUCTURE ARRAY, FULLY SET FOR USE BY +C* OTHER SUBROUTINES IN THIS SYSTEM + +C* SUBROUTINE CLL2XY (STRCMP, XLAT,XLONG, X,Y) +C* SUBROUTINE CXY2LL (STRCMP, X,Y, XLAT,XLONG) +C* THESE ROUTINES CONVERT BETWEEN MAP COORDINATES X,Y +C* AND GEOGRAPHIC COORDINATES XLAT,XLONG +C* INPUTS: +C* STRCMP(9) - 9-VALUE MAP STRUCTURE ARRAY +C* FOR CLL2XY: XLAT,XLONG - GEOGRAPHIC COORDINATES +C* FOR CXY2LL: X,Y - MAP COORDINATES +C* OUTPUTS: +C* FOR CLL2XY: X,Y - MAP COORDINATES +C* FOR CXY2LL: XLAT,XLONG - GEOGRAPHIC COORDINATES + +C* SUBROUTINE CC2GXY (STRCMP, X,Y, UE,VN, UG,VG) +C* SUBROUTINE CG2CXY (STRCMP, X,Y, UG,VG, UE,VN) +C* SUBROUTINE CC2GLL (STRCMP, XLAT,XLONG, UE,VN, UG,VG) +C* SUBROUTINE CG2CLL (STRCMP, XLAT,XLONG, UG,VG, UE,VN) +C* THESE SUBROUTINES CONVERT VECTOR WIND COMPONENTS FROM +C* GEOGRAPHIC, OR COMPASS, COORDINATES, TO MAP OR +C* GRID COORDINATES. THE SITE OF THE WIND TO BE +C* CONVERTED MAY BE GIVEN EITHER IN GEOGRAPHIC OR +C* MAP COORDINATES. WIND COMPONENTS ARE ALL IN KILOMETERS +C* PER HOUR, WHETHER GEOGRAPHIC OR MAP COORDINATES. +C* INPUTS: +C* STRCMP(9) - 9-VALUE MAP STRUCTURE ARRAY +C* FOR CC2GXY AND CG2CXY: X,Y - MAP COORDINATES OF SITE +C* FOR CC2GLL AND CG2CLL: XLAT,XLONG - GEOGRAPHIC COORDINATES OF SITE +C* FOR CC2GXY AND CC2GLL: UE,VN - EAST AND NORTH WIND COMPONENTS +C* FOR CG2CXY AND CG2CLL: UG,VG - X- AND Y- DIRECTION WIND COMPONENTS +C* OUTPUTS: +C* FOR CC2GXY AND CC2GLL: UG,VG - X- AND Y- DIRECTION WIND COMPONENTS +C* FOR CG2CXY AND CG2CLL: UE,VN - EAST AND NORTH WIND COMPONENTS + +C* SUBROUTINE CCRVXY (STRCMP, X, Y, GX,GY) +C* SUBROUTINE CCRVLL (STRCMP, XLAT,XLONG, GX,GY) +C* THESE SUBROUTINES RETURN THE CURVATURE VECTOR (GX,GY), AS REFERENCED +C* TO MAP COORDINATES, INDUCED BY THE MAP TRANSFORMATION. WHEN +C* NON-LINEAR TERMS IN WIND SPEED ARE IMPORTANT, A "GEODESIC" FORCE +C* SHOULD BE INCLUDED IN THE VECTOR FORM [ (U,U) G - (U,G) U ] WHERE THE +C* INNER PRODUCT (U,G) IS DEFINED AS UX*GX + UY*GY. +C* INPUTS: +C* STRCMP(9) - 9-VALUE MAP STRUCTURE ARRAY +C* FOR CCRVXY: X,Y - MAP COORDINATES OF SITE +C* FOR CCRVLL: XLAT,XLONG - GEOGRAPHIC COORDINATES OF SITE +C* OUTPUTS: +C* GX,GY - VECTOR COEFFICIENTS OF CURVATURE, IN UNITS RADIANS +C* PER KILOMETER + +C* REAL FUNCTION CGSZLL (STRCMP, XLAT,XLONG) +C* REAL FUNCTION CGSZXY (STRCMP, X,Y) +C* THESE FUNCTIONS RETURN THE SIZE, IN KILOMETERS, OF EACH UNIT OF +C* MOTION IN MAP COORDINATES (GRID SIZE). THE GRID SIZE AT ANY +C* LOCATION DEPENDS ON THAT LOCATION; THE POSITION MAY BE GIVEN IN +C* EITHER MAP OR GEOGRAPHIC COORDINATES. +C* INPUTS: +C* STRCMP(9) - 9-VALUE MAP STRUCTURE ARRAY +C* FOR CGSZXY: X,Y - MAP COORDINATES OF SITE +C* FOR CGSZLL: XLAT,XLONG - GEOGRAPHIC COORDINATES OF SITE +C* RETURNS: +C* GRIDSIZE IN KILOMETERS AT GIVEN SITE. + +C* SUBROUTINE CPOLXY (STRCMP, X,Y, ENX,ENY,ENZ) +C* SUBROUTINE CPOLLL (STRCMP, XLAT,XLONG, ENX,ENY,ENZ) +C* THESE SUBROUTINES PROVIDE 3-D VECTOR COMPONENTS OF A UNIT VECTOR +C* IN THE DIRECTION OF THE NORTH POLAR AXIS. WHEN MULTIPLIED +C* BY TWICE THE ROTATION RATE OF THE EARTH (2 * PI/24 HR), THE +C* VERTICAL COMPONENT YIELDS THE CORIOLIS FACTOR. +C* INPUTS: +C* STRCMP(9) - 9-VALUE MAP STRUCTURE ARRAY +C* FOR CPOLXY: X,Y - MAP COORDINATES OF SITE +C* FOR CPOLLL: XLAT,XLONG - GEOGRAPHIC COORDINATES OF SITE +C* RETURNS: +C* ENX,ENY,ENZ THE DIRECTION COSINES OF A UNIT VECTOR IN THE +C* DIRECTION OF THE ROTATION AXIS OF THE EARTH + +C* SUBROUTINE CNLLXY (STRCMP, XLAT,XLONG, XI,ETA) +C* SUBROUTINE CNXYLL (STRCMP, XI,ETA, XLAT,XLONG) +C* THESE SUBROUTINES PERFORM THE UNDERLYING TRANSFORMATIONS FROM +C* GEOGRAPHIC COORDINATES TO AND FROM CANONICAL (EQUATOR CENTERED) +C* COORDINATES. THEY ARE CALLED BY CXY2LL AND CLL2XY, BUT ARE NOT +C* INTENDED TO BE CALLED DIRECTLY + +C* REAL FUNCTION CSPANF (VALUE, BEGIN, END) +C* THIS FUNCTION ASSISTS OTHER ROUTINES IN PROVIDING A LONGITUDE IN +C* THE PROPER RANGE. IT ADDS TO VALUE WHATEVER MULTIPLE OF +C* (END - BEGIN) IS NEEDED TO RETURN A NUMBER BEGIN < CSPANF <= END + + SUBROUTINE STLMBR(STRCMP, TNGLAT, XLONG) +C* WRITTEN ON 3/31/94 BY Dr. Albion Taylor NOAA / OAR / ARL + PARAMETER (PI=3.14159265358979,RADPDG=PI/180,DGPRAD=180/PI) + PARAMETER (REARTH=6 371.2) + REAL STRCMP(9) + STRCMP(1) = SIN(RADPDG * TNGLAT) +C* GAMMA = SINE OF THE TANGENT LATITUDE + STRCMP(2) = CSPANF( XLONG, -180., +180.) +C* LAMBDA_0 = REFERENCE LONGITUDE + STRCMP(3) = 0. +C* X_0 = X- GRID COORDINATE OF ORIGIN (XI,ETA) = (0.,0.) + STRCMP(4) = 0. +C* y_0 = Y-GRID COORDINATE OF ORIGIN (XI,ETA) = (0.,0.) + STRCMP(5) = 1. +C* COSINE OF ROTATION ANGLE FROM XI,ETA TO X,Y + STRCMP(6) = 0. +C* SINE OF ROTATION ANGLE FROM XI,ETA TO X,Y + STRCMP(7) = REARTH +C* GRIDSIZE IN KILOMETERS AT THE EQUATOR + CALL CNLLXY(STRCMP, 89.,XLONG, XI,ETA) + STRCMP(8) = 2. * ETA - STRCMP(1) * ETA * ETA +C* RADIAL COORDINATE FOR 1 DEGREE FROM NORTH POLE + CALL CNLLXY(STRCMP, -89.,XLONG, XI,ETA) + STRCMP(9) = 2. * ETA - STRCMP(1) * ETA * ETA +C* RADIAL COORDINATE FOR 1 DEGREE FROM SOUTH POLE + RETURN + END diff --git a/projects/MissionSupport/applications/WxTraj/src/coordtrafo.f b/projects/MissionSupport/applications/WxTraj/src/coordtrafo.f new file mode 100644 index 0000000..5503110 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/coordtrafo.f @@ -0,0 +1,85 @@ + subroutine coordtrafo(error) +*********************************************************************** +* * +* TRAJECTORY MODEL SUBROUTINE COORDTRAFO * +* * +*********************************************************************** +* * +* AUTHOR: G. WOTAWA * +* DATE: 1994-02-07 * +* LAST UPDATE: ---------- * +* * +*********************************************************************** +* * +* DESCRIPTION: This subroutine transforms x and y coordinates of * +* trajectory starting points to grid coordinates. * +* * +*********************************************************************** +* + include 'includepar' + include 'includecom' + + integer i,j + logical error + + error=.false. + + if(numpoint.eq.0) goto 30 +* +* TRANSFORM X- AND Y- COORDINATES OF STARTING POINTS TO GRID COORDINATES +* + + do i=1,numpoint + xpoint(i)=(xpoint(i)-xlon0)/dx + if (xglobal) then + if (xpoint(i).gt.float(nx-1)) xpoint(i)=xpoint(i)-float(nx-1) + if (xpoint(i).lt.0.) xpoint(i)=xpoint(i)+float(nx-1) + endif + ypoint(i)=(ypoint(i)-ylat0)/dy + end do + +15 continue +* +* CHECK IF STARTING POINTS ARE WITHIN DOMAIN +* + do 25 i=1,numpoint + + if((xpoint(i).lt.0.).or.(xpoint(i).gt.float(nx-1)).or. + & (ypoint(i).lt.0.).or.(ypoint(i).gt.float(ny-1))) then + + write(*,*) ' NOTICE: STARTING POINT OUT OF DOMAIN HAS '// + & 'BEEN DETECTED --> ' + write(*,*) ' IT IS REMOVED NOW ... ' + write(*,*) ' COMMENT: ',compoint(i) + + if(i.lt.numpoint) then + + do j=i+1,numpoint + + xpoint(j-1)=xpoint(j) + ypoint(j-1)=ypoint(j) + zpoint(j-1)=zpoint(j) + kind(j-1)=kind(j) + kindz(j-1)=kindz(j) + compoint(j-1)=compoint(j) + end do + endif + + numpoint=numpoint-1 + if(numpoint.gt.0) goto 15 + + endif + +25 continue + +30 if(numpoint.eq.0) then + + error=.true. + write(*,*) ' TRAJECTORY MODEL SUBROUTINE COORDTRAFO: '// + & 'ERROR ! ' + write(*,*) ' NO TRAJECTORY STARTING POINTS ARE GIVEN !!!' + + endif + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/eta.ecmwf.f b/projects/MissionSupport/applications/WxTraj/src/eta.ecmwf.f new file mode 100644 index 0000000..4764754 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/eta.ecmwf.f @@ -0,0 +1,51 @@ + real function eta(psurf,pconst) +****************************************************************************** +* * +* This routine computes vertical coordinate eta for a given pressure p. * +* * +* Author: A. Stohl * +* * +* 5 April 1994 * +* Last modification: G. Wotawa, 1994 - 04 -27 * +* * +****************************************************************************** +* Variables: * +* eta value of eta for given pressure * +* fract help variable for linear interpolation * +* plevel1 [Pa] pressure of level below wanted pressure * +* plevel2 [Pa] pressure of level above wanted pressure * +* pconst [Pa] pressure level of isobaric trajectory * +* psurf [Pa] surface level pressure * +* wheight(nwzmax) height of ecmwf layer interfaces (eta coordinates) * +****************************************************************************** + + include 'includepar' + include 'includecom' + + integer i + real plevel1,plevel2,fract,psurf,pconst + + plevel1=akm(1)+bkm(1)*psurf + if (plevel1.le.pconst) then ! pressure higher than surface pressure + eta=wheight(1) + else ! normal case -> linear interpolation + do i=2,nwz ! look, between which layers we are + plevel2=akm(i)+bkm(i)*psurf + if (plevel2.lt.pconst) then + fract=(pconst-plevel2)/(plevel1-plevel2) + eta=wheight(i)*(1.-fract)+wheight(i-1)*fract + goto 100 + endif + plevel1=plevel2 + end do + eta=wheight(nwz) ! pressure lower than highest model layer + endif + +100 continue + + + if (eta.gt.heightmax) eta=heightmax + if (eta.lt.heightmin) eta=heightmin + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/etatrafo.f b/projects/MissionSupport/applications/WxTraj/src/etatrafo.f new file mode 100644 index 0000000..7bd677c --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/etatrafo.f @@ -0,0 +1,90 @@ + subroutine etatrafo(xt,yt,zt,itime1,itime2,itime,indexf,ngrid, + +psint) +*********************************************************************** +* * +* TRAJECTORY MODEL SUBROUTINE ETATRAFO * +* * +*********************************************************************** +* * +* AUTHOR: G. WOTAWA * +* DATE: 1994-04-06 * +* LAST UPDATE: ---------- * +* * +*********************************************************************** +* * +* DESCRIPTION: This subroutine transforms the vertical coordinate * +* from z-coordinate system [m] to eta-coordinate * +* system [ECMWF] * +* Remark: Just call after initialization of a new * +* trajectory (first call of getwind) * +* * +*********************************************************************** +* * +* INPUT: * +* * +* xt x-coordinate of point [grid units] * +* yt y-coordinate of point [grid units] * +* zt z-coordinate of point [m] * +* itime1 time [s] of first windfield * +* itime2 time [s] of second windfield * +* itime time [s] of calculation * +* indexf time index of field xx * +* psint surface pressure at point (xt,yt) [Pa] * +* * +*********************************************************************** +* * +* OUTPUT: * +* * +* zt z-coordinate of point [eta ECMWF] * +* * +*********************************************************************** +* + include 'includepar' + include 'includecom' + + integer itime1,itime2,itime,indexf,k,ngrid + real xt,yt,zt,psint,fract,pp1,pp2,tv + real tlev(nuvzmax),zzlev(nwzmax) +* +* calculate interpolated vertical temperature profile on model levels +* + do 10 k=1,nuvz + if (ngrid.gt.0) then + call levlininterpoln(ttn,maxnests,nxmaxn,nymaxn,nuvzmax,ngrid, + + nxn,nyn,memind,xt,yt,k,itime1,itime2,itime,indexf,tlev(k)) + else + call levlininterpol(tt,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,k,itime1,itime2,itime,indexf,tlev(k)) + endif +10 continue +* +* calculate geometric height on model levels +* + zzlev(1)=0. + if (zt.lt.zzlev(1)) then + write(*,*) ' TRAJECTORY MODEL: NOTICE - STARTING POINT OUT'// + & ' OF MODEL DOMAIN' + write(*,*) ' (VERTICAL) HAS BEEN DETECTED --> IT IS SET TO'// + & ' THE BOTTOM OF THE MODEL ...' + zt=uvheight(1) + return + endif + do 15 k=2,nwz + pp1=akm(k-1)+bkm(k-1)*psint + pp2=akm(k)+bkm(k)*psint + tv=tlev(k-1) !! NO HUMIDITY INFORMATION AVAILABLE IN FLEXTRA + zzlev(k)=zzlev(k-1)+r_air/ga*log(pp1/pp2)*tv + if(zt.lt.zzlev(k)) goto 20 +15 continue + write(*,*) ' TRAJECTORY MODEL: NOTICE - STARTING POINT OUT'// + & ' OF MODEL DOMAIN' + write(*,*) ' (VERTICAL) HAS BEEN DETECTED --> IT IS SET TO'// + & ' THE TOP OF THE MODEL ...' + zt=uvheight(nuvz) + return +20 fract=(zt-zzlev(k-1))/(zzlev(k)-zzlev(k-1)) + zt=wheight(k-1)*(1.-fract)+wheight(k)*fract + if(zt.lt.uvheight(1)) zt=uvheight(1) + if(zt.gt.uvheight(nuvz)) zt=uvheight(nuvz) + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/ew_gfs.f b/projects/MissionSupport/applications/WxTraj/src/ew_gfs.f new file mode 100644 index 0000000..e9f2e27 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/ew_gfs.f @@ -0,0 +1,23 @@ + REAL FUNCTION EW(X) +C **************************************************************** +C SAETTIGUNGSDAMPFDRUCK UEBER WASSER IN PA. X IN KELVIN. +C NACH DER GOFF-GRATCH-FORMEL. +C **************************************************************** + EW=0. + IF(X.LE.0.) then + WRITE(*,*) 'TEMP: ',X + STOP 'SORRY: T NOT IN [K]' + ENDIF + Y=373.16/X + A=-7.90298*(Y-1.) + A=A+(5.02808*0.43429*ALOG(Y)) + C=(1.-(1./Y))*11.344 + C=-1.+(10.**C) + C=-1.3816*C/(10.**7) + D=(1.-Y)*3.49149 + D=-1.+(10.**D) + D=8.1328*D/(10.**3) + Y=A+C+D + EW=1013.246*(10.**Y)*100. ! Saettigungsdampfdruck in Pa + RETURN + END diff --git a/projects/MissionSupport/applications/WxTraj/src/flextra_norm.py b/projects/MissionSupport/applications/WxTraj/src/flextra_norm.py new file mode 100644 index 0000000..bed87be --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/flextra_norm.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python3 +""" +Run flextra in NORMAL mode +""" + +import os,sys +from datetime import datetime, timedelta +from dateutil.parser import parse as isoparser +from glob import glob +import subprocess + +if __name__ == "__main__": +# lon = 126.99 +# lat = 37.55 +# startname = 'Seoul' + +# lon = 120.98 +# lat = 14.599 +# startname = 'Manila' + + lon = 101.6841 + lat = 3.1319 + startname = "Kuala_Lampur" + +# lon = 100.5018 +# lat = 13.7563 +# startname = "Thailand" + + + alts = 100, #500, 1000 + startdate = '2015-02-01T00:00:00' + enddate = '2019-03-30T00:00:00' + tdt = timedelta(days=-5) + + opendap = '/home/pcastell/opendap/fp/opendap/assim/' + ctlFile = opendap + 'inst3_3d_asm_Nv' + + # get filename template + f = open(ctlFile,'r') + dset = f.readline().split()[1] + f.close() + + # Edit pathnames + dsetRoot = '/'.join(dset.split('/')[:-4]) + '/' + dsetPath = '/'.join(dset.split('/')[-4:]) + f = open('pathnames','r') + data = f.readlines() + f.close() + + data[2] = dsetRoot +'\n' + data[4] = dsetRoot +'\n' + data[6] = dsetRoot +'\n' + + f = open('pathnames','w') + f.writelines(data) + f.close() + + # get list of dates + sdate = isoparser(startdate) + edate = isoparser(enddate) + dt = timedelta(days=1) + + datelist = [] + while sdate <= edate: + # we're only doing Januray 15 - March 15 + mindate = datetime(sdate.year,1,15,00) + maxdate = datetime(sdate.year,3,15,00) + if (sdate >= mindate) and (sdate <= maxdate): + datelist.append(sdate) + + sdate += dt + + dt = timedelta(hours=3) + for date in datelist: + # Edit COMMAND file + f = open('options/COMMAND','r') + data = f.readlines() + f.close() + + data[19] = date.strftime(' %Y%m%d 000000\n') +# data[23] = date.strftime(' %Y%m%d 090000\n') + data[23] = date.strftime(' %Y%m%d 000000\n') + + f = open('options/COMMAND','w') + f.writelines(data) + f.close() + + # Edit AVAILABLE file + sd = min(date,date+tdt) + timedelta(days=-1) + ed = max(date,date+tdt) + timedelta(days=1) + + f = open('AVAILABLE','w') + f.write('DATE TIME FILENAME SPECIFICATIONS\n') + f.write('YYYYMMDD HHMISS\n') + f.write('________ ______ __________ __________\n') + while sd <= ed: + yy = sd.strftime('%Y') + mm = sd.strftime('%m') + dd = sd.strftime('%d') + hh = sd.strftime('%H') + yyyymmdd_hh = sd.strftime('%Y%m%d %H0000 ') + filename = dsetPath.replace('%y4',yy).replace('%m2',mm).replace('%d2',dd).replace('%h2',hh).replace('%n2','00') + line = yyyymmdd_hh + filename + '\n' + f.write(line) + + sd += dt + f.close() + + for alt in alts: + # Edit STARTPOINTS File + f = open('options/STARTPOINTS','r') + data = f.readlines() + f.close() + + data[26] = '{lon:9.4f}\n'.format(lon=lon) + data[29] = '{lat:9.4f}\n'.format(lat=lat) + data[38] = '{alt:10.3f}\n'.format(alt=alt) + data[41] = '{}_{}_{}\n'.format(startname,date.strftime('%Y%m%d_%H'),alt) + + f = open('options/STARTPOINTS','w') + f.writelines(data) + f.close() + + + # run flexpart + p = subprocess.Popen(['./FLEXTRA_GEOS']) + p.wait() diff --git a/projects/MissionSupport/applications/WxTraj/src/flextra_run_ops.py b/projects/MissionSupport/applications/WxTraj/src/flextra_run_ops.py new file mode 100755 index 0000000..7ce17fc --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/flextra_run_ops.py @@ -0,0 +1,271 @@ +#!/usr/bin/env python3 +""" +Run flextra in NORMAL mode +""" + +import os,sys +from datetime import datetime, timedelta +from dateutil.parser import parse as isoparser +from glob import glob +import subprocess +import argparse +import csv +from normal import NORMAL +import shutil +import simplekml +import json + +if __name__ == "__main__": + + # defaults + alts = [100] + direction='both' + days = 3 + opendap = '/home/pcastell/opendap/fp/opendap/assim/' + ctlFile = opendap + 'inst3_3d_asm_Nv' + inputs = os.getcwd() + outputs = inputs + '/output' + # inputs arguments + parser = argparse.ArgumentParser() + + parser.add_argument("iso_startdate", + help="start date for trajectory is ISO format") + + parser.add_argument("start_points_file", + help="input CSV file with starting points name,lon,lat") + + parser.add_argument("--inputs",default=inputs, + help="inputs directory, default is the current working directory "\ + "(default=%s)"%inputs) + + parser.add_argument("--outputs",default=outputs, + help="outputs directory, default is the current working directory/output "\ + "(default=%s)"%outputs) + + parser.add_argument("--alts",default=alts,nargs='+',type=float, + help="list of altitudes (use spaces) to start trajectories from "\ + "(default=%s)"%alts) + + parser.add_argument("--direction",default=direction, + help="direction for trajectory, can be 'forward','backward', or 'both'" \ + "(default=%s)"%direction) + + parser.add_argument("--days",default=days,type=int, + help="number of days to calcuate for trajectory " \ + "(default=%i)"%days) + + parser.add_argument("--ctlFile",default=ctlFile, + help="control file of model wind fields " \ + "(default=%s)"%ctlFile) + + parser.add_argument("--seamless",action="store_true", + help="set this flag if you're using a seamless control file " \ + "(default=False)") + + parser.add_argument("--debug",action="store_true", + help="debugging, don't delete input and intermdiate files after FLEXTRA run " \ + "(default=False)") + + args = parser.parse_args() + + # get start date + sdate = isoparser(args.iso_startdate) + + if args.direction == "forward": + tdtf = args.days + tdtb = None + elif args.direction == "backward": + tdtf = None + tdtb = -1*args.days + else: + tdtf = args.days + tdtb = -1*args.days + + + # read start point CSV + # --------------------- + pointsFile = open(args.start_points_file,'r') + reader = csv.DictReader(pointsFile) + + # loop through start points, altitudes, and trajectory directions + # --------------------------------------------------------------- + for startp in reader: + for alt in args.alts: + for tdt in [tdtf, tdtb]: + if tdt is not None: + if tdt < 0: + direction = 'b' + else: + direction = 'f' + + ident = '{}_{}_{}_{}'.format(startp['name'],sdate.strftime('%Y%m%d_%H'),alt,direction) + if not os.path.exists(ident): + os.mkdir(ident) + + # Edit pathnames input File + # ----------------------------- + # get model filename template (control file) + if args.seamless: + f = open(args.ctlFile,'r') + dsetRoot = f.readline().split()[1][:-4] + ch, assim_s, assim_e, assim_path = f.readline().split() + ch, forec_s, forec_e, forec_path = f.readline().split() + for l in range(17): + f.readline() + + tdef,t_e,linear,ctl_start, dmin = f.readline().split() + ctlsdate = datetime.strptime(ctl_start,'%HZ%d%b%Y') + + assim_sdate = datetime.strptime(ctl_start,'%HZ%d%b%Y') + assim_edate = assim_sdate + timedelta(hours=(3*int(assim_e))) + + forec_sdate = assim_sdate + timedelta(hours=(3*int(forec_s))) + + f.close() + else: + f = open(args.ctlFile,'r') + dset = f.readline().split()[1] + f.close() + + dsetRoot = '/'.join(dset.split('/')[:-4]) + '/' + dsetPath = '/'.join(dset.split('/')[-4:]) + + f = open('pathnames','r') + data = f.readlines() + f.close() + + data[0] = args.inputs + '/{}/\n'.format(ident) + data[1] = args.outputs + '/\n' + data[2] = dsetRoot +'\n' + data[3] = args.inputs + '/{}/AVAILABLE\n'.format(ident) + data[4] = dsetRoot +'\n' + data[5] = args.inputs + '/{}/AVAILABLE\n'.format(ident) + data[6] = dsetRoot +'\n' + data[7] = args.inputs + '/{}/AVAILABLE\n'.format(ident) + + pathnames = '{}/pathnames'.format(ident) + f = open(pathnames,'w') + f.writelines(data) + f.close() + + + # Edit STARTPOINTS File + # --------------------- + f = open('options/STARTPOINTS','r') + data = f.readlines() + f.close() + + data[26] = '{lon:9.4f}\n'.format(lon=float(startp['lon'])) + data[29] = '{lat:9.4f}\n'.format(lat=float(startp['lat'])) + data[38] = '{alt:10.3f}\n'.format(alt=alt) + outFile = '{}_{}_{}_{}'.format(startp['name'],sdate.strftime('%Y%m%d_%H'),alt,direction) + data[41] = '{}\n'.format(outFile) + + f = open('{}/STARTPOINTS'.format(ident),'w') + f.writelines(data) + f.close() + + + # Edit COMMAND file + # ------------------ + f = open('options/COMMAND','r') + data = f.readlines() + f.close() + + if tdt < 0: + data[11] = ' -1\n' + else: + data[11] = ' 1\n' + + tdt_h = str(abs(tdt*24)).zfill(3) + data[15] = ' {}0000\n'.format(tdt_h) + + data[19] = sdate.strftime(' %Y%m%d 000000\n') + data[23] = sdate.strftime(' %Y%m%d 000000\n') + + f = open('{}/COMMAND'.format(ident),'w') + f.writelines(data) + f.close() + + # Edit AVAILABLE file + # --------------------- + dt = timedelta(hours=3) # model time step + sd = min(sdate,sdate+timedelta(days=tdt)) + timedelta(days=-1) + ed = max(sdate,sdate+timedelta(days=tdt)) + timedelta(days=1) + + f = open('{}/AVAILABLE'.format(ident),'w') + f.write('DATE TIME FILENAME SPECIFICATIONS\n') + f.write('YYYYMMDD HHMISS\n') + f.write('________ ______ __________ __________\n') + while sd <= ed: + yy = sd.strftime('%Y') + mm = sd.strftime('%m') + dd = sd.strftime('%d') + hh = sd.strftime('%H') + yyyymmdd_hh = sd.strftime('%Y%m%d %H0000 ') + + if args.seamless: + if sd <= assim_edate: + filename = assim_path.replace('%y4',yy).replace('%m2',mm).replace('%d2',dd).replace('%h2',hh).replace('%n2','00') + else: + filename = forec_path.replace('%y4',yy).replace('%m2',mm).replace('%d2',dd).replace('%h2',hh).replace('%n2','00') + else: + filename = dsetPath.replace('%y4',yy).replace('%m2',mm).replace('%d2',dd).replace('%h2',hh).replace('%n2','00') + + line = yyyymmdd_hh + filename + '\n' + f.write(line) + + sd += dt + f.close() + + + # run flexpart + # ------------- + p = subprocess.Popen(['FLEXTRA_GEOS.x','{}'.format(pathnames)]) + p.wait() + + # read formatted outfile, and rewrite output to simple csv & kml & json + # ---------------------------------------------------------------- + tdata = NORMAL('{}/TI_{}'.format(args.outputs,outFile)) + f = open('{}/TI_{}.csv'.format(args.outputs,outFile),'w') + writer = csv.writer(f) + fields = ['date','lat','lon','alt'] + writer.writerow(fields) + + rows = [] + urecords = [] + kml = simplekml.Kml(open=1) + linestring = kml.newlinestring(name="{} trajectory".format(direction)) + coords = [] + for date,lat,lon,altitude in zip(tdata.sdate[0,:],tdata.lat[0,:],tdata.lon[0,:],tdata.alt[0,:]): + rows.append([date,lat,lon,altitude]) + year,month,dd = date.split('-') + day, time = dd.split('T') + hour,minute,sec = time.split(':') + urecords.append((year,month,day,hour,'traj',lat,lon)) + coords.append((lon, lat, altitude)) + linestring.coords = coords + linestring.altitudemode = simplekml.AltitudeMode.relativetoground + linestring.extrude = 1 + linestring.style.linestyle.color = simplekml.Color.cyan + linestring.style.linestyle.width = 4 + + writer.writerows(rows) + f.close() + kml.save('{}/TI_{}.kml'.format(args.outputs,outFile)) + + f = open('{}/TI_{}.json'.format(args.outputs,outFile),'w') + tnew = {} + tnew[startp['name']] = urecords + tdata = json.dumps(tnew) + f.write(tdata) + f.close() + + # if not debug mode, remove input files and FLEXTRA formatted output + # ------------------------------------------------------------------ + if not args.debug: + shutil.rmtree(args.inputs + '/{}'.format(ident)) + os.remove('{}/TI_{}'.format(args.outputs,outFile)) + + + pointsFile.close() diff --git a/projects/MissionSupport/applications/WxTraj/src/g5_modules b/projects/MissionSupport/applications/WxTraj/src/g5_modules new file mode 100755 index 0000000..adeb315 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/g5_modules @@ -0,0 +1,435 @@ +#!/bin/csh -f +######################################################################## +# +# Name: g5_modules +# +# Purposes - +# * provide single location for BASEDIR and module values +# * initialize the following: +# - set BASEDIR +# - update LD_LIBRARY_PATH with BASEDIR lib +# - load library modules +# * echo expected BASEDIR and library module values when queried +# +# Notes: +# 1. The script will not function correctly if the scriptname +# definition within the script is incorrect. +# 2. Type "g5_modules help" for usage information. +# +# Perl Notes: +# ========== +# 1. You cannot "source" this file from a perl script. +# 2. Instead use the following in your perl script: +# #-------------------------------- +# use Env; +# do "g5_modules_perl_wrapper"; +# #-------------------------------- +# 3. Use the g5_modules_perl_wrapper file located in the build's bin +# directory, where a copy of g5_modules also resides. This is important +# since g5_modules_perl_wrapper uses g5_modules and expects it to be in +# the same directory. +# +# Bash Notes: +# ========== +# If you are in a bash shell, then source the g5_modules.sh script. +# > source g5_modules.sh +# +# REVISION HISTORY +# 31Aug2007 Stassi Initial version of code +# 15Oct2007 Stassi Expand list of machines and include defaults +# 15Dec2007 Stassi Added LD_LIBRARY_PATH functionality +# 21Jul2008 Takacs New modules and BASEDIR on discover after OS upgrade +# 13Apr2009 Stassi Updated for pleiades +# 22Apr2010 Kokron Updated for Fortuna-2.1 on pleiades +# 21Jul2011 Kokron Overlay older MKL module as on discover to gain reproducible results from dgeev in GSI +# 24Aug2012 Stassi Added sh option to write bash source-able file +# 03Nov2016 Thompson Remove JIBB +######################################################################## + +# NOTE: Spell out scriptname--DO NOT SET EQUAL TO $0! +#---------------------------------------------------- +set scriptname = g5_modules +if ( $scriptname == "$0:t" ) then + set sourced = 0 +else + set sourced = 1 +endif + +# check for improper usage +#------------------------- +if (! $sourced && ! $#argv) goto usage # not sourced and no args +if ( $sourced && $#argv) goto usage # sourced with args + +# get architecture, machine, and node information +#------------------------------------------------ +set arch = `uname -s` +set mach = `uname -m` +set node = `uname -n` + +# Find site +# --------- + +if (($node =~ discover*) || ($node =~ borg*) || \ + ($node =~ dali*) || ($node =~ warp*)) then + + set site = "NCCS" + +else if (($node =~ pfe*) || ($node =~ tfe*) || \ + ($node =~ r[0-9]*i[0-9]*n[0-9]*) || \ + ($node =~ r[0-9]*c[0-9]*t[0-9]*n[0-9]*)) then + + # We are on NAS... + set site = "NAS" + + # Are we on TOSS4 + set LSB_RELEASE = `lsb_release -sr | cut -d'.' -f 1` + if ($LSB_RELEASE == '8') then + set nasos = "TOSS4" + else + set nasos = "TOSS3" + endif + +else if ( -d /ford1/share/gmao_SIteam/ && -d /ford1/local/ && $arch == Linux ) then + set site = "GMAO.desktop" + +else + set site = $node + +endif + +alias echo2 "echo \!* > /dev/stderr" + +# get values +#----------- +if ($mach == x86_64) goto X86_64 +if ($mach == arm64) goto ARM64 + +# ERROR -- unknown architecture/machine +#-------------------------------------- +echo2 "${scriptname}: >>>WARNING<<< unrecognizable arch/machine = $arch/$mach" +echo 0 # indicating error condition +exit 8 + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +# X86_64 values (Linux) +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +X86_64: + +#==================# +# X86_64 default # +#==================# + +set modinit = DUMMY + +set loadmodules = 0 +set usemodules = 0 + +#========# +# NCCS # +#========# +if ( $site == NCCS ) then + + set mod1 = GEOSenv + + set mod2 = comp/gcc/10.3.0 + set mod3 = comp/intel/2021.6.0 + + set mod4 = mpi/impi/2021.6.0 + + set mod5 = python/GEOSpyD/Min4.11.0_py3.9_AND_Min4.8.3_py2.7 + +# set basedir = /discover/swdev/gmao_SIteam/Baselibs/ESMA-Baselibs-7.7.0/x86_64-pc-linux-gnu/ifort_2021.6.0-intelmpi_2021.6.0 +# no mpi baselibs + set basedir = /discover/swdev/gmao_SIteam/Baselibs/ESMA-Baselibs-7.13.0/x86_64-pc-linux-gnu/gfortran_11.2.0-mpiuni + + set mods = ( $mod1 $mod2 $mod3 $mod4 $mod5 ) + set modinit = /usr/share/modules/init/csh + set loadmodules = 0 + + set usemod1 = /discover/swdev/gmao_SIteam/modulefiles-SLES12 + set usemods = ( $usemod1 ) + set usemodules = 1 + +#=======# +# NAS # +#=======# +else if ( $site == NAS ) then + + if ( $nasos == TOSS3 ) then + set basedir = /nobackup/gmao_SIteam/Baselibs/ESMA-Baselibs-7.7.0/x86_64-pc-linux-gnu/ifort_2022.1.0-mpt_2.25 + else + set basedir = /nobackup/gmao_SIteam/Baselibs/ESMA-Baselibs-7.7.0/x86_64-pc-linux-gnu/ifort_2022.1.0-mpt_2.25-TOSS4-BuiltOnRome + endif + + set mod1 = GEOSenv + set mod2 = gcc/10.2 + set mod3 = comp-intel/2022.1.0 + set mod4 = mpi-hpe/mpt.2.25 + set mod5 = python/GEOSpyD/Min4.11.0_py3.9_AND_Min4.8.3_py2.7 + + set mods = ( $mod1 $mod2 $mod3 $mod4 $mod5 ) + set modinit = /usr/share/modules/init/tcsh + set loadmodules = 0 + + set usemod1 = /u/scicon/tools/modulefiles + set usemod2 = /nobackup/gmao_SIteam/modulefiles + set usemod3 = /nasa/modulefiles/testing + set usemods = ( $usemod1 $usemod2 $usemod3 ) + set usemodules = 1 + +#=================# +# GMAO DESKTOP # +#=================# +else if ( $site == GMAO.desktop ) then + + set basedir=/ford1/share/gmao_SIteam/Baselibs/ESMA-Baselibs-7.7.0/x86_64-pc-linux-gnu/ifort_2022.1.0-intelmpi_2022.1.0 + + set mod1 = GEOSenv + + set mod2 = comp/gcc/11.2.0 + set mod3 = comp/intel/2022.1.0 + set mod4 = mpi/impi/2022.1.0 + set mod5 = other/python/GEOSpyD/Min4.11.0_py3.9_AND_Min4.8.3_py2.7 + + set mods = ( $mod1 $mod2 $mod3 $mod4 $mod5 ) + set modinit = /usr/share/Modules/init/tcsh + set loadmodules = 0 + + set usemod1 = /ford1/share/gmao_SIteam/modulefiles + set usemods = ( $usemod1 ) + set usemodules = 1 + +endif + +goto ACTION + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +# ARM64 values +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +ARM64: + +#=================# +# ARM64 default # +#=================# + +set modinit = DUMMY + +set loadmodules = 0 +set usemodules = 0 + +goto ACTION + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +# perform requested action +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +ACTION: + +#===================# +# ECHO VALUE(s) # +#===================# +set wrapper = 0 +if ( $#argv > 0 ) then + + if ( $1 == basedir ) then + echo $basedir + + else if ( $1 == modules ) then + echo $mods + + else if ( $1 == modinit ) then + echo $modinit + + else if ( $1 == loadmodules ) then + echo $loadmodules + + else if ( $1 == usemodules ) then + echo $usemods + + else if ( $1 == ESMA_FC ) then + echo $ESMA_FC + + else if ( $1 == site ) then + echo $site + + else if ( $1 == sh ) then + set wrapper = 1 + goto SETVALUES + + else if ( $1 == help ) then + goto usage + + else + echo2 "${scriptname}: >>>ERROR<<< unrecognizable option -- $1" + echo2 Type "$scriptname help" for usage information. + echo 0 # indicating error condition + exit 9 + endif + + exit +endif + +SETVALUES: +#================# +# SET VALUES # +#================# +#------------------------------------------------------------------------- +# set environment variables, BASEDIR and LD_LIBRARY_PATH; and load modules +#------------------------------------------------------------------------- + +# setenv BASEDIR +#--------------- +if ($?basedir) then + if (! $wrapper) echo -n "${scriptname}: Setting BASEDIR" + setenv BASEDIR $basedir +else if ($?BASEDIR) then + if (! $wrapper) echo -n "${scriptname}: BASEDIR found in environment" +else + echo + echo "BASEDIR not found in environment or set by ${scriptname}" + exit 3 +endif + +# add BASEDIR lib to LD_LIBRARY_PATH, if not already there +#--------------------------------------------------------- +if ($?LD_LIBRARY_PATH) then + echo $LD_LIBRARY_PATH | grep $BASEDIR/$arch/lib > /dev/null + if ($status) then # == 1, if not found + setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:$BASEDIR/$arch/lib + endif +else + setenv LD_LIBRARY_PATH $BASEDIR/$arch/lib +endif + +# add individual $ld_libraries to LD_LIBRARY_PATH, if not already there +#---------------------------------------------------------------------- +if ($?ld_libraries) then + foreach lib ( $ld_libraries ) + if ($LD_LIBRARY_PATH !~ *$lib*) then + setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:$lib + endif + end +endif + +if ($?LD_LIBRARY64_PATH) then + echo $LD_LIBRARY64_PATH | grep $BASEDIR/$arch/lib > /dev/null + if ($status) then # == 1, if not found + setenv LD_LIBRARY64_PATH ${LD_LIBRARY64_PATH}:$BASEDIR/$arch/lib + endif +endif + +# load library modules +#--------------------- +if (-e $modinit) then + + if (! $wrapper) echo -n " and modules" + source $modinit + module purge + + if ($loadmodules) module load modules + + if ($usemodules) then + foreach usemod ( $usemods ) + module use -a $usemod + end + endif + + foreach mod ( $mods ) + module load $mod + end + + if ($?XTRAMODS2LOAD) then + set xmods = (`echo $XTRAMODS2LOAD | cut -d: -f1- --output-delimiter=" "`) + foreach mod ( $xmods ) + module load $mod + end + endif + +endif +if (! $wrapper) echo " for $node" + +# write sh commands to a .g5_modules.sh file +#------------------------------------------- +if ($wrapper) then + set outfil = ".g5_modules.sh" + + if ($?BASEDIR) then + echo "export BASEDIR=$BASEDIR" >! $outfil + endif + if ($?LD_LIBRARY_PATH) then + echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH" >> $outfil + endif + if ($?LD_LIBRARY64_PATH) then + echo "export LD_LIBRARY64_PATH=$LD_LIBRARY64_PATH" >> $outfil + endif + + set modulecmd = `which modulecmd` + if ($status) set modulecmd = "/usr/bin/modulecmd" + set modinit_sh = `echo $modinit | sed "s|/csh|/sh|"` + + if (-e $modulecmd) then + if (-e $modinit_sh) then + echo 'source '$modinit_sh >> $outfil + endif + echo 'eval `'$modulecmd sh purge'`' >> $outfil + if ($loadmodules) then + echo 'eval `'$modulecmd sh load modules'`' >> $outfil + endif + foreach mod ($mods) + echo 'eval `'$modulecmd sh load $mod'`' >> $outfil + end + endif + +endif +exit + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +# usage information # +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +usage: + +more < + +OPTIONS + + help echo usage + basedir echo expected value for BASEDIR environment variable + modules echo expected list of modules + modinit echo location of csh module initialization script + loadmodules echo logical indicating whether "module load modules" + is needed prior to loading other modules + usemodules echo logical indicating whether "module use directory(s)" + is needed prior to loading other modules + ESMA_FC echo value of ESMA_FC if set + site echo site as detected by $scriptname + sh write sh version of g5_modules to file named, ".g5_modules.sh" + +EOF +exit 1 diff --git a/projects/MissionSupport/applications/WxTraj/src/g5_modules.sh b/projects/MissionSupport/applications/WxTraj/src/g5_modules.sh new file mode 100755 index 0000000..5ee327e --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/g5_modules.sh @@ -0,0 +1,38 @@ +#!/usr/bin/sh +#======================================================================= +# name - g5_modules.bash +# purpose - +# This script can be "sourced" from the bash shell to set environment +# variables and modules needed for building and running the GEOS system. +# +# Notes: +# 1. This script needs to be located in the same directory as g5_modules. +# +# REVISION HISTORY +# 01Sep2017 pchakrab Not writing to .g5_modules.sh anymore +# 24Aug2012 Stassi Initial version of code +#======================================================================= + +g5ModDir=$( cd "$( dirname "$BASH_SOURCE" )" && pwd ) +g5modules=$g5ModDir/g5_modules +if [ ! -e $g5modules ]; then + echo "Error. Cannot find $g5modules" + return 1 +fi + +# Basedir +export BASEDIR=$(csh $g5modules basedir) + +# Modules +source $MODULESHOME/init/bash +module purge + +# This is for non-standard module paths +for usemod in $(csh $g5modules usemodules); do + module use -a $usemod +done + +for mymod in $(csh $g5modules modules); do + module load $mymod +done + diff --git a/projects/MissionSupport/applications/WxTraj/src/geteta.f b/projects/MissionSupport/applications/WxTraj/src/geteta.f new file mode 100644 index 0000000..b524ba3 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/geteta.f @@ -0,0 +1,172 @@ + subroutine geteta(xt,yt,eta,theta,itime1,itime2,itime,indexf, + +psurf,ngrid,indz1,indz2) +C i i i/o i i i i i +C i i o o +***************************************************************************** +* * +* Calculates eta for a given potential temperature. * +* If profile is unstable, an eta region is given instead of a single * +* level. * +* * +* Author: A. Stohl * +* * +* 27 April 1994 * +* * +* Modified by Petra Seibert, 27 April 1995: * +* indz1 and indz2 will contain indz on output instead of 1 * +* in stable case * +* * +***************************************************************************** +* * +* Variables: * +* akz,bkz(nuvzmax) coefficients for computing the heights of the eta lev* +* deltazt vertical displacement of trajectory in eta coordinate* +* dt,dt1,dt2 weighting factors * +* eta old eta level of isentropic trajectory * +* indexf indicates the number of the wind field to be read in * +* indz1,indz2 indices of layer boundaries of unstable region * +* itime time index of trajectory position * +* itime1 time index of first temperature field * +* itime2 time index of second temperature field * +* ngrid level of nested grid to be used * +* nx,ny,nuvz field dimensions in x,y and z for (u,v) direction * +* pp(nuvzmax) [Pa] Pressure at the model levels * +* psurf [Pa] Surface pressure * +* theta [K] theta level of trajectory calculation * +* tt(0:nxmax-1,0:nymax-1,nuvzmax,3) 3-dim temperature field * +* ttlev(nuvzmax) [K] Potential temperature at the model levels * +* xt,yt Position of trajectory * +* * +* Constants: * +* kappa exponent for calculating potential temperature * +* nuvzmax maximum number of levels, where u,v and tt are given * +* * +***************************************************************************** + + include 'includepar' + include 'includecom' + + integer itime,itime1,itime2,indexf,k,indz,indz1,indz2,i,ngrid + real xt,yt,zt,theta,zthelp,dt,dt1,dt2,deltazt,eta,thelp + real psurf,pp(nuvzmax),ttlev(nuvzmax) + + +********************************************* +C 1. Calculate the pressure at all eta levels +********************************************* + + do k=1,nuvz + pp(k)=akz(k)+bkz(k)*psurf + end do + +************************************************ +C 2. Calculate the temperature at all eta levels +************************************************ + + do 16 k=1,nuvz + if (ngrid.gt.0) then + call levlininterpoln(ttn,maxnests,nxmaxn,nymaxn,nuvzmax,ngrid, + + nxn,nyn,memind,xt,yt,k,itime1,itime2,itime,indexf,ttlev(k)) + else + call levlininterpol(tt,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,k,itime1,itime2,itime,indexf,ttlev(k)) + endif +16 continue + + +********************************************************** +C 3. Calculate the potential temperature at all eta levels +********************************************************** + + do k=1,nuvz + ttlev(k)=ttlev(k)*(100000/pp(k))**kappa + end do + +***************************************************************************** +C 4. Search for the potential temperature that is equal to the temperature of +C trajectory calculation. If the region where this temperature can be found +C is unstable, find the lower and upper boundary of the unstable region. +***************************************************************************** + +C Find the height where potential temp. is equal to trajectory level. +C If more levels exist, where this is valid, search for the one +C closest in eta coordinate to the eta coordinate of last time step. +********************************************************************* + + deltazt=999999. + do 30 k=1,nuvz-1 + if (((ttlev(k).ge.theta).and.(ttlev(k+1).le.theta)).or. + + ((ttlev(k).le.theta).and.(ttlev(k+1).ge.theta))) then + dt1=abs(theta-ttlev(k)) + dt2=abs(theta-ttlev(k+1)) + dt=dt1+dt2 + if (dt.lt.eps) then ! Avoid division by zero error + dt1=0.5 ! G.W., 10.4.1996 + dt2=0.5 + dt=1.0 + endif + zthelp=(uvheight(k)*dt2+uvheight(k+1)*dt1)/dt + if (abs(zthelp-eta).lt.deltazt) then + deltazt=abs(zthelp-eta) + zt=zthelp + indz=k + endif + endif +30 continue + + + if (deltazt.gt.999990.) then ! no level has been found + if (abs(ttlev(1)-theta).lt.abs(ttlev(nuvz)-theta)) then + indz=1 + zt=uvheight(1) + else + indz=nuvz-1 + zt=uvheight(nuvz) + endif + endif + + +C Determine if the air at trajectory level is stable or unstable stratified +C If it is stable -> just take the level +C If it is unstable -> take the whole unstable region and determine lower +C and upper boundary of this region +*************************************************************************** + + if (ttlev(indz).lt.ttlev(indz+1)) then ! stable region + eta=zt + indz1=indz + indz2=indz1 ! -----, indz1 and indz2 must be equal + else ! unstable region + indz1=1 + do 40 k=indz-1,1,-1 + if (ttlev(k).lt.ttlev(k+1)) then + indz1=k+1 ! lower boundary of unstable region + thelp=ttlev(indz1) + goto 45 + endif +40 continue +45 continue + indz2=indz+1 + do 50 k=indz+2,nuvz + if (ttlev(k).gt.ttlev(indz1)) then + indz2=k-1 ! upper boundary of unstable region + goto 55 + endif +50 continue +55 continue + eta=uvheight(indz2) + + +C Calculate new mean potential temperature of the unstable layer +**************************************************************** + + theta=0. + do i=indz1,indz2 + theta=theta+ttlev(i) + end do + theta=theta/float(indz2-indz1+1) + endif + + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/getfields.f b/projects/MissionSupport/applications/WxTraj/src/getfields.f new file mode 100644 index 0000000..3e553a8 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/getfields.f @@ -0,0 +1,166 @@ + subroutine getfields(firststep,itime,indexf,idiff,nstop) +C i i o o o +******************************************************************************** +* * +* This subroutine manages the 3 data fields to be kept in memory. * +* During the first time step of petterssen it has to be fulfilled that the * +* first data field must have |wftime| 0, if trajectory has to be terminated * +* nx,ny,nuvz,nwz field dimensions in x,y and z direction * +* uu(0:nxmax-1,0:nymax-1,nuvzmax,3) wind components in x-direction [m/s] * +* vv(0:nxmax-1,0:nymax-1,nuvzmax,3) wind components in y-direction [m/s] * +* ww(0:nxmax-1,0:nymax-1,nwzmax,3)wind components in z-direction [deltaeta/s] * +* tt(0:nxmax-1,0:nymax-1,nuvzmax,3) temperature [K] * +* ps(0:nxmax-1,0:nymax-1,3) surface pressure [Pa] * +* * +* Constants: * +* idiffnorm normal time difference between 2 wind fields * +* idiffmax maximum allowable time difference between 2 wind fields * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer indj,indmin,l,itime,indexf,idiff,nstop,memhelp + logical firststep + save indmin + + data indmin/1/ + + +C Check, if wind fields are available for the current time step +*************************************************************** + + if ((ldirect*wftime(1).ge.ldirect*itime).or. + +(ldirect*wftime(numbwf).le.ldirect*itime)) then + write(*,*) 'FLEXTRA WARNING: NO WIND FIELDS ARE AVAILABLE.' + write(*,*) 'A TRAJECTORY HAS TO BE TERMINATED.' + nstop=4 + return + endif + + +****************************************************************************** +C For the first time step of petterssen, arrange the wind fields in such a way +C that 1st wind field is before itime and 2nd and 3rd are after itime. +****************************************************************************** + + if (firststep) then + if ((ldirect*memtime(1).lt.ldirect*itime).and. + + (ldirect*memtime(2).ge.ldirect*itime)) then + +! The right wind fields are already in memory -> don't do anything +****************************************************************** + + continue + + else if ((ldirect*memtime(2).lt.ldirect*itime).and. + + (ldirect*memtime(3).ge.ldirect*itime)) then + + +C Current time is between 2nd and 3rd wind field +C -> Resort wind field pointers, so that current time is between 1st and 2nd +**************************************************************************** + + memhelp=memind(1) + do l=1,2 + memind(l)=memind(l+1) + memtime(l)=memtime(l+1) + end do + memind(3)=memhelp + + +C Read a new wind field and store it on place memind(3) +******************************************************* + + do 30 indj=indmin,numbwf-2 + if ((ldirect*wftime(indj).lt.ldirect*itime).and. + + (ldirect*wftime(indj+1).ge.ldirect*itime)) then + call readwind(indj+2,memind(3)) +! call readwind_nests(indj+2,memind(3)) + memtime(3)=wftime(indj+2) + goto 40 + endif +30 continue +40 indmin=indj + + else + +C No wind fields, which can be used, are currently in memory +C -> read all 3 wind fields +************************************************************ + + do 50 indj=indmin,numbwf-1 + if ((ldirect*wftime(indj).lt.ldirect*itime).and. + + (ldirect*wftime(indj+1).ge.ldirect*itime)) then + memind(1)=1 + call readwind(indj,memind(1)) +! call readwind_nests(indj,memind(1)) + memtime(1)=wftime(indj) + memind(2)=2 + call readwind(indj+1,memind(2)) +! call readwind_nests(indj+1,memind(2)) + memtime(2)=wftime(indj+1) + memind(3)=3 + call readwind(indj+2,memind(3)) +! call readwind_nests(indj+2,memind(3)) + memtime(3)=wftime(indj+2) + goto 60 + endif +50 continue +60 indmin=indj + + endif + + indexf=1 + idiff=abs(memtime(2)-memtime(1)) + + +***************************************************************************** +C For 2nd step of petterssen all necessary data fields are already in memory. +C Just look, if current temporal position is between the first two fields or +C between the 2nd and 3rd field. +***************************************************************************** + + else + if ((ldirect*memtime(1).lt.ldirect*itime).and. !between 1st and 2nd + + (ldirect*memtime(2).ge.ldirect*itime)) then + indexf=1 + idiff=abs(memtime(2)-memtime(1)) + else if ((ldirect*memtime(2).lt.ldirect*itime).and. !between 2nd and 3rd + + (ldirect*memtime(3).ge.ldirect*itime)) then + indexf=2 + idiff=abs(memtime(3)-memtime(2)) + endif + endif + +C Check the time difference between the wind fields. If it is too +C big, terminate the trajectory. +****************************************************************** + + if (idiff.gt.idiffmax) nstop=3 + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/getheight.f b/projects/MissionSupport/applications/WxTraj/src/getheight.f new file mode 100644 index 0000000..7744aed --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/getheight.f @@ -0,0 +1,89 @@ + subroutine getheight(itime,xt,yt,zt,pt,ht) +*********************************************************************** +* * +* TRAJECTORY MODEL SUBROUTINE GETHEIGHT * +* * +*********************************************************************** +* * +* AUTHOR: G. WOTAWA * +* DATE: 1994-04-07 * +* Adaptation to Nesting: A. Stohl, 1999-01-07 * +* More efficient determination of wind field index, * +* A. Stohl, 2000-01-30 * +*********************************************************************** +* * +* DESCRIPTION: This subroutine calculates pressure [Pa] and geometric * +* height [m] along trajectory for a given vertical * +* coordinate zt (eta ECMWF) on a given position (xt,yt). * +* * +*********************************************************************** +* * +* INPUT: * +* * +* itime time relative to beginning of calculation period * +* xt x coordinate of point [grid units] * +* yt y coordinate of point [grid units] * +* zt z coordinate of point [units] * +* * +*********************************************************************** +* * +* OUTPUT: * +* * +* pt pressure [Pa] * +* ht geometric height [m] * +* * +*********************************************************************** +* + include 'includepar' + include 'includecom' + + integer itime,indexf,j,ngrid + + real pp,xt,yt,zt,pt,ht,psint,xtn,ytn + + +C Determine the times of the wind fields needed for interpolation +****************************************************************** + + if ((ldirect*memtime(1).lt.ldirect*itime).and. + +(ldirect*memtime(2).ge.ldirect*itime)) then ! between 1st and 2nd + indexf=1 + else if((ldirect*memtime(2).lt.ldirect*itime).and. + +(ldirect*memtime(3).ge.ldirect*itime)) then ! between 2nd and 3rd + indexf=2 + endif + + +C Determine which nesting level to be used +****************************************** + + ngrid=0 + do 12 j=numbnests,1,-1 + if ((xt.gt.xln(j)).and.(xt.lt.xrn(j)).and. + + (yt.gt.yln(j)).and.(yt.lt.yrn(j))) then + ngrid=j + goto 13 + endif +12 continue +13 continue + + if (ngrid.eq.0) then + xtn=xt + ytn=yt + call levlininterpol(ps,nxmax,nymax,1,nx,ny,memind, + + xt,yt,1,memtime(indexf),memtime(indexf+1),itime,indexf,psint) + else + xtn=(xt-xln(ngrid))*xresoln(ngrid) + ytn=(yt-yln(ngrid))*yresoln(ngrid) + call levlininterpoln(psn,maxnests,nxmaxn,nymaxn,1,ngrid, + + nxn,nyn,memind,xtn,ytn,1,memtime(indexf),memtime(indexf+1), + + itime,indexf,psint) + endif + + pt=pp(psint,zt) + + call zztrafo(ngrid,xtn,ytn,zt,memtime(indexf),memtime(indexf+1), + +itime,indexf,psint,ht) + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/getmet.f b/projects/MissionSupport/applications/WxTraj/src/getmet.f new file mode 100644 index 0000000..f47e84f --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/getmet.f @@ -0,0 +1,91 @@ + subroutine getmet(itime,xt,yt,zt,qqint,pvint,thint) +C i i i i i i i +******************************************************************************** +* * +* Interpolation of meteorological data (i.e. specific humidity, potential * +* vorticity and potential temperature) onto trajectory positions. * +* * +* Author: A. Stohl * +* * +* 29 January 2000 * +* * +******************************************************************************** +* * +* Variables: * +* itime [s] current temporal position * +* xt,yt,zt coordinates of position for which data shall be interpolat* +* pvint interpolated potential vorticity * +* qqint interpolated specific humidity * +* thint interpolated potential temperature * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer itime,indexf,ngrid,j + real xt,yt,zt,xtn,ytn,qqint,pvint,thint + + +C Determine the times of the wind fields needed for interpolation +****************************************************************** + + if ((ldirect*memtime(1).lt.ldirect*itime).and. + +(ldirect*memtime(2).ge.ldirect*itime)) then ! between 1st and 2nd + indexf=1 + else if((ldirect*memtime(2).lt.ldirect*itime).and. + +(ldirect*memtime(3).ge.ldirect*itime)) then ! between 2nd and 3rd + indexf=2 + endif + + +C Determine which nesting level to be used +****************************************** + + ngrid=0 + do 12 j=numbnests,1,-1 + if ((xt.gt.xln(j)).and.(xt.lt.xrn(j)).and. + + (yt.gt.yln(j)).and.(yt.lt.yrn(j))) then + ngrid=j + goto 13 + endif +12 continue +13 continue + + +C Do linear interpolation of the meteo data +******************************************* + + if (ngrid.eq.0) then ! mother grid + call lininterpol(qq,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind, + + uvheight,xt,yt,zt,memtime(indexf),memtime(indexf+1),itime, + + indexf,qqint) + call lininterpol(pv,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind, + + uvheight,xt,yt,zt,memtime(indexf),memtime(indexf+1),itime, + + indexf,pvint) + call lininterpol(th,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind, + + uvheight,xt,yt,zt,memtime(indexf),memtime(indexf+1),itime, + + indexf,thint) + + else if (ngrid.gt.0) then ! nested grid + +C Determine nested grid coordinates +*********************************** + + xtn=(xt-xln(ngrid))*xresoln(ngrid) + ytn=(yt-yln(ngrid))*yresoln(ngrid) + + call lininterpoln(qqn,maxnests,nxmaxn,nymaxn,nuvzmax, + + ngrid,nxn,nyn,nuvz,memind,uvheight,xtn,ytn,zt,memtime(indexf), + + memtime(indexf+1),itime,indexf,qqint) + call lininterpoln(pvn,maxnests,nxmaxn,nymaxn,nuvzmax, + + ngrid,nxn,nyn,nuvz,memind,uvheight,xtn,ytn,zt,memtime(indexf), + + memtime(indexf+1),itime,indexf,pvint) + call lininterpoln(thn,maxnests,nxmaxn,nymaxn,nuvzmax, + + ngrid,nxn,nyn,nuvz,memind,uvheight,xtn,ytn,zt,memtime(indexf), + + memtime(indexf+1),itime,indexf,thint) + + endif + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/getwind.f b/projects/MissionSupport/applications/WxTraj/src/getwind.f new file mode 100644 index 0000000..270c1a6 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/getwind.f @@ -0,0 +1,81 @@ + subroutine getwind(firststep,init,itime,levconst,xt,yt,zt, + +lkind,lkindz,iter,ngrid,uint,vint,dzdt,idiff,indwz,nstop) +C i i i i i i i +C i i i i o o o o o o +******************************************************************************** +* * +* This subroutine reads the wind fields and interpolates the wind fields to * +* the current trajectory position. * +* One has to distinguish between different types of trajectories, eg. isobaric* +* on model layers or 3-dim. Interpolation is done separately for each of these* +* types. * +* * +* Author: A. Stohl * +* * +* 26 April 1994 * +* * +* Update: 23 December 1998 (Use of global domain and nesting) * +* * +******************************************************************************** +* * +* Variables: * +* uint,vint,dzdt wind components in grid units per second * +* firststep .true. for first iteration of petterssen * +* idiff [s] Temporal distance between the windfields used for interpol* +* indwz index of the model layer beneath current position of traj.* +* init .true. for first time step of trajectory * +* iter number of iteration step * +* itime [s] current temporal position * +* levconst height of trajectory in Pa, m or K, depending on type of t* +* lkind kind of trajectory (e.g. isobaric, 3-dimensional) * +* lkindz unit of z coordinate (1:masl, 2:magl, 3:hPa) * +* memtime(3) [s] times of the wind fields in memory * +* ngrid points towards which grid shall be used * +* nstop =greater 0, if trajectory calculation is finished * +* xt,yt,zt coordinates position for which wind data shall be calculat* +* * +* Constants: * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer itime,idiff,indexf,indwz,nstop,lkind,lkindz,iter,ngrid + real xt,yt,zt,levconst,uint,vint,dzdt + logical firststep,init + + +C Update of the wind fields that are currently kept in memory. +C If a new wind field is necessary, read it. +************************************************************** + + call getfields(firststep,itime,indexf,idiff,nstop) + + if (nstop.ge.3) return ! error has occurred + +C Call interpolation of the different types of trajectories. +************************************************************ + + if (lkind.eq.1) then ! full 3-dimensional trajectories + call inter3d(xt,yt,zt,indexf,itime,init,firststep, + + iter,lkindz,ngrid,uint,vint,dzdt,indwz) + else if (lkind.eq.2) then ! trajectories on model layers + call intermod(xt,yt,zt,indexf,itime,init,firststep, + + iter,lkindz,ngrid,uint,vint) + dzdt=0. + else if (lkind.eq.3) then ! mixing layer trajectories + call intermix(xt,yt,zt,levconst,indexf,itime,iter,ngrid, + + uint,vint) + dzdt=0. + else if (lkind.eq.4) then ! isobaric trajectories + call interisobar(xt,yt,zt,levconst,indexf,itime,init,firststep, + + iter,lkindz,ngrid,uint,vint) + dzdt=0. + else if (lkind.eq.5) then ! isentropic trajectories + call interisentrop(xt,yt,zt,levconst,indexf,itime,init, + + firststep,iter,lkindz,ngrid,uint,vint) + endif + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/go.sh b/projects/MissionSupport/applications/WxTraj/src/go.sh new file mode 100644 index 0000000..592df8e --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/go.sh @@ -0,0 +1 @@ +python ./flextra_run_ops.py 2023-01-01T00:00:00 start_points.csv --inputs ./ --outputs output_joe --alts 1000 --direction backward --days 3 --ctlFile /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/assim/inst3_3d_asm_Nv diff --git a/projects/MissionSupport/applications/WxTraj/src/gridcheck.f b/projects/MissionSupport/applications/WxTraj/src/gridcheck.f new file mode 100755 index 0000000..1bda176 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/gridcheck.f @@ -0,0 +1,474 @@ + subroutine gridcheck(oronew,error) +************************************************************************ +* * +* TRAJECTORY MODEL SUBROUTINE GRIDCHECK * +* * +************************************************************************ +* * +* AUTHOR: G. WOTAWA * +* DATE: 1997-08-06 * +* * +* Update: 1998-12, global fields allowed, A. Stohl * +* 2011-06, implemented reading of grib2 format* +* analog to FLEXPART 8.22 routines * +* * +************************************************************************ +* * +* DESCRIPTION: * +* * +* THIS SUBROUTINE DETERMINES THE GRID SPECIFICATIONS (LOWER LEFT * +* LONGITUDE, LOWER LEFT LATITUDE, NUMBER OF GRID POINTS, GRID DIST- * +* ANCE AND VERTICAL DISCRETIZATION OF THE ECMWF MODEL) FROM THE * +* GRIB HEADER OF THE FIRST INPUT FILE. THE CONSISTANCY (NO CHANGES * +* WITHIN ONE FLEXTRA RUN) IS CHECKED IN THE ROUTINE "READWIND" AT ANY * +* CALL. * +* * +* OUTPUT error .true. - can not read grid specifications * +* error .false. - normal * +* oronew .true. - Terrain heights given in grib files * +* oronew .false. - Terrain heights not specified in the * +* grib files (old file standard) * +* * +* XLON0 geographical longitude of lower left gridpoint * +* XLAT0 geographical latitude of lower left gridpoint * +* NX number of grid points x-direction * +* NY number of grid points y-direction * +* DX grid distance x-direction * +* DY grid distance y-direction * +* NUVZ number of grid points for horizontal wind * +* components in z direction * +* NWZ number of grid points for vertical wind * +* sizesouth, sizenorth give the map scale (i.e. number of virtual grid* +* points of the polar stereographic grid): * +* used to check the CFL criterion * +* component in z direction * +* UVHEIGHT(1)- heights of gridpoints where u and v are * +* UVHEIGHT(NUVZ) given * +* WHEIGHT(1)- heights of gridpoints where w is given * +* WHEIGHT(NWZ) * +* * +*********************************************************************** +* + use grib_api + + include 'includepar' + include 'includecom' + + integer i,ifn,ifield,j,k,iumax,iwmax,numskip + real sizesouth,sizenorth,xauxa + logical error,oronew + +!HSO parameters for grib_api + integer ifile + integer iret + integer igrib + integer gotGrid + real*4 xaux1,xaux2,yaux1,yaux2 + real*8 xaux1in,xaux2in,yaux1in,yaux2in + integer gribVer,parCat,parNum,typSurf,valSurf,discipl + character*24 gribErrorMsg + character*20 gribFunction +!HSO end + +* VARIABLES AND ARRAYS NEEDED FOR GRIB DECODING + +C dimension of isec2 at least (22+n), where n is the number of parallels or +C meridians in a quasi-regular (reduced) Gaussian or lat/long grid + +C dimension of zsec2 at least (10+nn), where nn is the number of vertical +C coordinate parameters + + integer isec0(2),isec1(56),isec2(22+nxmax+nymax),isec3(2) + integer isec4(64),inbuff(jpack),ilen,iswap,ierr,iword,lunit + real zsec2(91+2*nuvzmax),zsec3(2),zsec4(jpunp) + character*1 yoper,opt + data yoper/'D'/ + + error=.false. + oronew=.false. + iumax=0 + iwmax=0 +* + if(ideltas.gt.0) then + ifn=1 + else + ifn=numbwf + endif +* +* OPENING OF DATA FILE (GRIB CODE) +* +5 call grib_open_file(ifile,path(3)(1:len(3)) + >//trim(wfname(ifn)),'r',iret) + if (iret.ne.GRIB_SUCCESS) then + goto 999 ! ERROR DETECTED + endif +! turn on support for multi fields messages +! call grib_multi_support_on() + + gotGrid=0 + ifield=0 +10 ifield=ifield+1 + +* +* GET NEXT FIELDS +* + call grib_new_from_file(ifile,igrib,iret) + if (iret.eq.GRIB_END_OF_FILE ) then + goto 30 ! EOF DETECTED + elseif (iret.ne.GRIB_SUCCESS) then + goto 999 ! ERROR DETECTED + endif + +! first see if we read GRIB1 or GRIB2 + call grib_get_int(igrib,'editionNumber',gribVer,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + +C GRIB 1 +C ******************************************************************* + if (gribVer.eq.1) then +C print*,'GRiB Edition 1' +c read the grib2 identifiers + call grib_get_int(igrib,'indicatorOfParameter',isec1(6),iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'level',isec1(8),iret) + call grib_check(iret,gribFunction,gribErrorMsg) + +c change code for etadot to code for omega + if (isec1(6).eq.77) then + isec1(6)=135 + endif +C GRIB 2 +C ******************************************************************* + else +C print*,'GRiB Edition 2' +c read the grib2 identifiers + call grib_get_int(igrib,'discipline',discipl,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'parameterCategory',parCat,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'parameterNumber',parNum,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'typeOfFirstFixedSurface',typSurf,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'level',valSurf,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + +! convert to grib1 identifiers + isec1(6)=-1 + isec1(7)=-1 + isec1(8)=-1 + isec1(8)=valSurf ! level + + if ((parCat.eq.0).and.(parNum.eq.0).and.(typSurf.eq.105))then ! T + isec1(6)=130 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.2).and.(typSurf.eq.105))then ! U + isec1(6)=131 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.3).and.(typSurf.eq.105))then ! V + isec1(6)=132 ! indicatorOfParameter + elseif((parCat.eq.1).and.(parNum.eq.0).and.(typSurf.eq.105))then ! Q + isec1(6)=133 ! indicatorOfParameter + elseif((parCat.eq.3).and.(parNum.eq.0).and.(typSurf.eq.1))then !SP + isec1(6)=134 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.32)) then ! W, actually eta dot + isec1(6)=135 ! indicatorOfParameter + elseif((parCat.eq.3).and.(parNum.eq.0).and.(typSurf.eq.101))then !SLP + isec1(6)=151 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.2).and.(typSurf.eq.103))then ! 10U + isec1(6)=165 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.3).and.(typSurf.eq.103))then ! 10V + isec1(6)=166 ! indicatorOfParameter + elseif((parCat.eq.0).and.(parNum.eq.0).and.(typSurf.eq.103))then ! 2T + isec1(6)=167 ! indicatorOfParameter + elseif((parCat.eq.0).and.(parNum.eq.6).and.(typSurf.eq.103))then ! 2D + isec1(6)=168 ! indicatorOfParameter + elseif((parCat.eq.1).and.(parNum.eq.11).and.(typSurf.eq.1))then ! SD + isec1(6)=141 ! indicatorOfParameter + elseif((parCat.eq.6).and.(parNum.eq.1)) then ! CC + isec1(6)=164 ! indicatorOfParameter + elseif((parCat.eq.1).and.(parNum.eq.9)) then ! LSP + isec1(6)=142 ! indicatorOfParameter + elseif((parCat.eq.1).and.(parNum.eq.10)) then ! CP + isec1(6)=143 ! indicatorOfParameter + elseif((parCat.eq.0).and.(parNum.eq.11).and.(typSurf.eq.1))then ! SHF + isec1(6)=146 ! indicatorOfParameter + elseif((parCat.eq.4).and.(parNum.eq.9).and.(typSurf.eq.1))then ! SR + isec1(6)=176 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.17))then ! EWSS + isec1(6)=180 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.18))then ! NSSS + isec1(6)=181 ! indicatorOfParameter + elseif((parCat.eq.3).and.(parNum.eq.4))then ! ORO + isec1(6)=129 ! indicatorOfParameter + elseif((parCat.eq.3).and.(parNum.eq.7))then ! SDO + isec1(6)=160 ! indicatorOfParameter + elseif((discipl.eq.2).and.(parCat.eq.0).and.(parNum.eq.0).and. + + (typSurf.eq.1)) then ! LSM + isec1(6)=172 ! indicatorOfParameter + else + print*,'***ERROR: undefined GRiB2 message found!',discipl, + + parCat,parNum,typSurf + endif + + + endif + +! get the size and data of the values array + if (isec1(6).ne.-1) then + call grib_get_real4_array(igrib,'values',zsec4,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + endif + + if(ifield.eq.1) then +!HSO get the required fields from section 2 in a gribex compatible manner + call grib_get_int(igrib,'numberOfPointsAlongAParallel', + > isec2(2),iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'numberOfPointsAlongAMeridian', + > isec2(3),iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_real8(igrib,'longitudeOfFirstGridPointInDegrees', + > xaux1in,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'numberOfVerticalCoordinateValues', + > isec2(12),iret) + call grib_check(iret,gribFunction,gribErrorMsg) + +! get the size and data of the vertical coordinate array + call grib_get_real4_array(igrib,'pv',zsec2,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + + nxfield=isec2(2) + ny=isec2(3) + nlev_ec=isec2(12)/2-1 + endif + +!HSO get the second part of the grid dimensions only from GRiB1 messages + if ((gribVer.eq.1).and.(gotGrid.eq.0)) then + call grib_get_real8(igrib,'longitudeOfLastGridPointInDegrees', + > xaux2in,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_real8(igrib,'latitudeOfLastGridPointInDegrees', + > yaux1in,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_real8(igrib,'latitudeOfFirstGridPointInDegrees', + > yaux2in,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + xaux1=xaux1in + xaux2=xaux2in + yaux1=yaux1in + yaux2=yaux2in + if (xaux1.gt.180.) xaux1=xaux1-360.0 + if (xaux2.gt.180.) xaux2=xaux2-360.0 + if (xaux1.lt.-180.) xaux1=xaux1+360.0 + if (xaux2.lt.-180.) xaux2=xaux2+360.0 + if (xaux2.lt.xaux1) xaux2=xaux2+360.0 + xlon0=xaux1 + ylat0=yaux1 + dx=(xaux2-xaux1)/float(nxfield-1) + dy=(yaux2-yaux1)/float(ny-1) + gotGrid=1 + +C Check whether fields are global +C If they contain the poles, specify polar stereographic map +C projections using the stlmbr- and stcm2p-calls +************************************************************ + + if (xauxa.lt.0.001) then + nx=nxfield+1 ! field is cyclic + xglobal=.true. + else + nx=nxfield + xglobal=.false. + endif + if (xlon0.gt.180.) xlon0=xlon0-360. + xauxa=abs(yaux1+90.) + if (xglobal.and.xauxa.lt.0.001) then + sglobal=.true. ! field contains south pole +C Enhance the map scale by factor 3 (*2=6) compared to north-south +C map scale + sizesouth=6.*(switchsouth+90.)/dy + call stlmbr(southpolemap,-90.,0.) + call stcm2p(southpolemap,0.,0.,switchsouth,0.,sizesouth, + + sizesouth,switchsouth,180.) + switchsouthg=(switchsouth-ylat0)/dy + else + sglobal=.false. + switchsouthg=999999. + endif + xauxa=abs(yaux2-90.) + if (xglobal.and.xauxa.lt.0.001) then + nglobal=.true. ! field contains north pole +C Enhance the map scale by factor 3 (*2=6) compared to north-south +C map scale + sizenorth=6.*(90.-switchnorth)/dy + call stlmbr(northpolemap,90.,0.) + call stcm2p(northpolemap,0.,0.,switchnorth,0.,sizenorth, + + sizenorth,switchnorth,180.) + switchnorthg=(switchnorth-ylat0)/dy + else + nglobal=.false. + switchnorthg=999999. + endif + endif ! gotGrid + + k=isec1(8) + if(isec1(6).eq.131) iumax=max(iumax,nlev_ec-k+1) + if(isec1(6).eq.135) iwmax=max(iwmax,nlev_ec-k+1) + + if(isec1(6).eq.129) then + oronew=.true. + do 20 j=0,ny-1 + do 21 i=0,nxfield-1 +21 oro(i,j)=zsec4(nxfield*(ny-j-1)+i+1)/ga + if (xglobal) oro(nx-1,j)=oro(0,j) +20 continue + endif + + call grib_release(igrib) + goto 10 !! READ NEXT LEVEL OR PARAMETER +* +* CLOSING OF INPUT DATA FILE +* +30 call grib_close_file(ifile) + +* error message if no fields found with correct first longitude in it + if (gotGrid.eq.0) then + print*,'***ERROR: input file needs to contain GRiB1 formatted'// + &'messages' + stop + endif + + nuvz=iumax + nwz =iwmax + if(nuvz.eq.nlev_ec) nwz=nlev_ec+1 + + if (nx.gt.nxmax) then + write(*,*) 'FLEXTRA error: Too many grid points in x direction.' + write(*,*) 'Reduce resolution of wind fields.' + write(*,*) 'Or change parameter settings in file includepar.' + write(*,*) nx,nxmax + error=.true. + return + endif + + if (ny.gt.nymax) then + write(*,*) 'FLEXTRA error: Too many grid points in y direction.' + write(*,*) 'Reduce resolution of wind fields.' + write(*,*) 'Or change parameter settings in file includepar.' + write(*,*) ny,nymax + error=.true. + return + endif + + if (nuvz.gt.nuvzmax) then + write(*,*) 'FLEXTRA error: Too many u,v grid points in z '// + +'direction.' + write(*,*) 'Reduce resolution of wind fields.' + write(*,*) 'Or change parameter settings in file includepar.' + write(*,*) nuvz+1,nuvzmax + error=.true. + return + endif + + if (nwz.gt.nwzmax) then + write(*,*) 'FLEXTRA error: Too many w grid points in z '// + +'direction.' + write(*,*) 'Reduce resolution of wind fields.' + write(*,*) 'Or change parameter settings in file includepar.' + write(*,*) nwz,nwzmax + error=.true. + return + endif + +C Output of grid info +********************* + + write(*,*) + write(*,*) + write(*,'(a,2i7)') '# of vertical levels: ',nuvz,nwz + write(*,*) + write(*,'(a)') 'Mother domain:' + write(*,'(a,f10.2,a1,f10.2,a,f10.2)') ' Longitude range: ', + +xlon0,' to ',xlon0+(nx-1)*dx,' Grid distance: ',dx + write(*,'(a,f10.2,a1,f10.2,a,f10.2)') ' Latitude range: ', + +ylat0,' to ',ylat0+(ny-1)*dy,' Grid distance: ',dy + write(*,*) + + +C Compute often used aux variables to convert geografical into grid coord. +*************************************************************************** + + xthelp=180./pi/r_earth/dx + ythelp=180./pi/r_earth/dy + + +* CALCULATE VERTICAL DISCRETIZATION OF ECMWF MODEL +* PARAMETER akm,bkm DESCRIBE THE HYBRID "ETA" COORDINATE SYSTEM +* wheight(i) IS THE HEIGHT OF THE i-th MODEL HALF LEVEL (=INTERFACE BETWEEN +* 2 MODEL LEVELS) IN THE "ETA" SYSTEM + + numskip=nlev_ec-nuvz ! number of ecmwf model layers not used + ! by trajectory model + do 40 i=1,nwz + j=numskip+i + k=nlev_ec+1+numskip+i + akm(nwz-i+1)=zsec2(j) + bkm(nwz-i+1)=zsec2(k) +40 wheight(nwz-i+1)=akm(nwz-i+1)/p0+bkm(nwz-i+1) + +* CALCULATION OF uvheight, akz, bkz +* akz,bkz ARE THE DISCRETIZATION PARAMETERS FOR THE MODEL LEVELS +* uvheight(i) IS THE HEIGHT OF THE i-th MODEL LEVEL IN THE "ETA" SYSTEM + + do 45 i=1,nuvz + uvheight(i)=0.5*(wheight(i+1)+wheight(i)) + akz(i)=0.5*(akm(i+1)+akm(i)) + bkz(i)=0.5*(bkm(i+1)+bkm(i)) +45 continue + +C If vertical coordinates decrease with increasing altitude, multiply by -1. +C This means that also the vertical velocities have to be multiplied by -1. +**************************************************************************** + + if (uvheight(1).lt.uvheight(nuvz)) then + zdirect=1. + else + zdirect=-1. + do 55 i=1,nuvz +55 uvheight(i)=zdirect*uvheight(i) + do 65 i=1,nwz +65 wheight(i)=zdirect*wheight(i) + endif + + +C Compute minimum and maximum height of modelling domain +******************************************************** + + heightmin=max(uvheight(1),wheight(1)) + heightmax=min(uvheight(nuvz),wheight(nwz)) + + + return + +999 write(*,*) + write(*,*) ' ###########################################'// + & '###### ' + write(*,*) ' TRAJECTORY MODEL SUBROUTINE GRIDCHECK:' + write(*,*) ' CAN NOT OPEN INPUT DATA FILE '//wfname(ifn) + write(*,*) ' ###########################################'// + & '###### ' + write(*,*) + write(*,'(a)') '!!! PLEASE INSERT A NEW CD-ROM AND !!!' + write(*,'(a)') '!!! PRESS ANY KEY TO CONTINUE... !!!' + write(*,'(a)') '!!! ...OR TERMINATE FLEXTRA PRESSING !!!' + write(*,'(a)') '!!! THE "X" KEY... !!!' + write(*,*) + read(*,'(a)') opt + if(opt.eq.'X') then + error=.true. + else + goto 5 + endif + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/gridcheck.geos.f b/projects/MissionSupport/applications/WxTraj/src/gridcheck.geos.f new file mode 100755 index 0000000..32c6f96 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/gridcheck.geos.f @@ -0,0 +1,312 @@ + subroutine gridcheck(error) +************************************************************************ +* * +* TRAJECTORY MODEL SUBROUTINE GRIDCHECK * +* * +************************************************************************ +* * +* AUTHOR: G. WOTAWA * +* DATE: 1997-08-06 * +* * +* Update: 1998-12, global fields allowed, A. Stohl * +* 2011-06, implemented reading of grib2 format* +* analog to FLEXPART 8.22 routines * +* * +************************************************************************ +* * +* DESCRIPTION: * +* * +* THIS SUBROUTINE DETERMINES THE GRID SPECIFICATIONS (LOWER LEFT * +* LONGITUDE, LOWER LEFT LATITUDE, NUMBER OF GRID POINTS, GRID DIST- * +* ANCE AND VERTICAL DISCRETIZATION OF THE ECMWF MODEL) FROM THE * +* GRIB HEADER OF THE FIRST INPUT FILE. THE CONSISTANCY (NO CHANGES * +* WITHIN ONE FLEXTRA RUN) IS CHECKED IN THE ROUTINE "READWIND" AT ANY * +* CALL. * +* * +* OUTPUT error .true. - can not read grid specifications * +* error .false. - normal * +* * +* XLON0 geographical longitude of lower left gridpoint * +* XLAT0 geographical latitude of lower left gridpoint * +* NX number of grid points x-direction * +* NY number of grid points y-direction * +* DX grid distance x-direction * +* DY grid distance y-direction * +* NUVZ number of grid points for horizontal wind * +* components in z direction * +* NWZ number of grid points for vertical wind * +* sizesouth, sizenorth give the map scale (i.e. number of virtual grid* +* points of the polar stereographic grid): * +* used to check the CFL criterion * +* component in z direction * +* * +*********************************************************************** +* + use netcdf + + include 'includepar' + include 'includecom' + include 'netcdf.inc' + + integer i,ifn,ifield,j,k,iumax,iwmax,numskip + real sizesouth,sizenorth,xauxa + logical error + +! parameters for netcdf + integer ncid + integer dimid, varid + real*8 var(nwzmax) + real*8 lon(nxmax),lat(nymax) + + real*4 xaux1,xaux2,yaux1,yaux2 +!HSO end + + + error=.false. + iumax=0 + iwmax=0 + + if(ideltas.gt.0) then + ifn=1 + else + ifn=numbwf + endif +! +! OPENING OF DATA FILE (NETCDF CODE) +! + call check(nf_open(path(3)(1:len(3))//trim(wfname(ifn)), + + NF_NOWRITE,ncid), + + "opening file" // trim(wfname(ifn))) + + +! +! Read Grid Dimensions +! + + call check(nf_inq_dimid(ncid, 'lon', dimid), + + "getting lon dimid") + call check(nf_inq_dimlen(ncid, dimid,nxfield), + + "read nlon") + + call check(nf_inq_dimid(ncid, 'lat', dimid), + + "getting lat dimid") + call check(nf_inq_dimlen(ncid, dimid,ny), + + "read nlat") + + call check(nf_inq_dimid(ncid, 'lev', dimid), + + "getting lev dimid") + call check(nf_inq_dimlen(ncid, dimid,nlev_geos), + + "read nlev") + +! PHIS surface geopotential + call check(nf_inq_varid(ncid,'PHIS',varid), + + "getting varid for PHIS") + + call check(nf_get_var(ncid,varid,oro), + + " reading PHIS") +! convert PHIS to oro [m] + oro = oro/ga + +! get lat/lon extent + + call check(nf_inq_varid(ncid,'lon',varid), + + "getting varid for lon") + call check(nf_get_var(ncid,varid,lon), + + "reading lon") +! Westernmost Longitude + xaux1 = real(lon(1)) +! Easternmost Longitude + xaux2 = real(lon(nxfield)) + + call check(nf_inq_varid(ncid,'lat',varid), + + "getting varid for lat") + call check(nf_get_var(ncid,varid,lat), + + "reading lat") +! Southernmost Latitude + yaux1 = real(lat(1)) +! Northernmost Latitude + yaux2 = real(lat(ny)) + + if (xaux1.gt.180.) xaux1=xaux1-360.0 + if (xaux2.gt.180.) xaux2=xaux2-360.0 + if (xaux1.lt.-180.) xaux1=xaux1+360.0 + if (xaux2.lt.-180.) xaux2=xaux2+360.0 + if (xaux2.lt.xaux1) xaux2=xaux2+360.0 + xlon0=xaux1 + ylat0=yaux1 + dx=(xaux2-xaux1)/float(nxfield-1) + dy=(yaux2-yaux1)/float(ny-1) + +! GEOS is always global +! and contains the poles, specify polar stereographic map +! projections using the stlmbr- and stcm2p-calls +!************************************************************ + + nx=nxfield + xglobal=.true. + + sglobal=.true. ! field contains south pole +! Enhance the map scale by factor 3 (*2=6) compared to north-south +! map scale + sizesouth=6.*(switchsouth+90.)/dy + call stlmbr(southpolemap,-90.,0.) + call stcm2p(southpolemap,0.,0.,switchsouth,0.,sizesouth, + + sizesouth,switchsouth,180.) + switchsouthg=(switchsouth-ylat0)/dy + + nglobal=.true. ! field contains north pole +! Enhance the map scale by factor 3 (*2=6) compared to north-south +! map scale + sizenorth=6.*(90.-switchnorth)/dy + call stlmbr(northpolemap,90.,0.) + call stcm2p(northpolemap,0.,0.,switchnorth,0.,sizenorth, + + sizenorth,switchnorth,180.) + switchnorthg=(switchnorth-ylat0)/dy + + iumax=max(iumax,nlev_geos) + iwmax=max(iwmax,nlev_geos) + +! +! CLOSING OF INPUT DATA FILE +! + call check(nf_close(ncid),"closing" // trim(wfname(ifn))) + + nuvz=iumax + nwz =iwmax + if(nuvz.eq.nlev_geos) nwz=nlev_geos+1 + + if (nx.gt.nxmax) then + write(*,*) 'FLEXTRA error: Too many grid points in x direction.' + write(*,*) 'Reduce resolution of wind fields.' + write(*,*) 'Or change parameter settings in file includepar.' + write(*,*) nx,nxmax + error=.true. + return + endif + + if (ny.gt.nymax) then + write(*,*) 'FLEXTRA error: Too many grid points in y direction.' + write(*,*) 'Reduce resolution of wind fields.' + write(*,*) 'Or change parameter settings in file includepar.' + write(*,*) ny,nymax + error=.true. + return + endif + + if (nuvz.gt.nuvzmax) then + write(*,*) 'FLEXTRA error: Too many u,v grid points in z '// + +'direction.' + write(*,*) 'Reduce resolution of wind fields.' + write(*,*) 'Or change parameter settings in file includepar.' + write(*,*) nuvz+1,nuvzmax + error=.true. + return + endif + + if (nwz.gt.nwzmax) then + write(*,*) 'FLEXTRA error: Too many w grid points in z '// + +'direction.' + write(*,*) 'Reduce resolution of wind fields.' + write(*,*) 'Or change parameter settings in file includepar.' + write(*,*) nwz,nwzmax + error=.true. + return + endif + +! Output of grid info +!********************* + + write(*,*) + write(*,*) + write(*,'(a,2i7)') '# of vertical levels: ',nuvz,nwz + write(*,*) + write(*,'(a)') 'Mother domain:' + write(*,'(a,f10.2,a1,f10.2,a,f10.2)') ' Longitude range: ', + +xlon0,' to ',xlon0+(nx-1)*dx,' Grid distance: ',dx + write(*,'(a,f10.2,a1,f10.2,a,f10.2)') ' Latitude range: ', + +ylat0,' to ',ylat0+(ny-1)*dy,' Grid distance: ',dy + write(*,*) + + +! Compute often used aux variables to convert geografical into grid coord. +!************************************************************************** + + xthelp=180./pi/r_earth/dx + ythelp=180./pi/r_earth/dy + + +! CALCULATE VERTICAL DISCRETIZATION OF GEOS MODEL +! PARAMETER akm,bkm DESCRIBE THE HYBRID "ETA" COORDINATE SYSTEM +! wheight(i) IS THE HEIGHT OF THE i-th MODEL HALF LEVEL (=INTERFACE BETWEEN +! 2 MODEL LEVELS) IN THE "ETA" SYSTEM + call check(nf_open('ak_bk.nc', + + NF_NOWRITE,ncid), + + "opening file ak_bk.nc") + + call check(nf_inq_varid(ncid,'ak',varid), + + "getting varid for ak") + + call check(nf_get_var(ncid,varid,var), + + " reading ak") + akm = real(var) + + call check(nf_inq_varid(ncid,'bk',varid), + + "getting varid for bk") + + call check(nf_get_var(ncid,varid,var), + + " reading bk") + bkm = real(var) + + wheight=akm/p0+bkm +! CALCULATION OF uvheight, akz, bkz +! akz,bkz ARE THE DISCRETIZATION PARAMETERS FOR THE MODEL LEVELS +! uvheight(i) IS THE HEIGHT OF THE i-th MODEL LEVEL IN THE "ETA" SYSTEM + + do 45 i=1,nuvz + uvheight(i)=0.5*(wheight(i+1)+wheight(i)) + akz(i)=0.5*(akm(i+1)+akm(i)) + bkz(i)=0.5*(bkm(i+1)+bkm(i)) +45 continue + +! If vertical coordinates decrease with increasing altitude, multiply by -1. +! This means that also the vertical velocities have to be multiplied by -1. +!**************************************************************************** + + if (uvheight(1).lt.uvheight(nuvz)) then + zdirect=1. + else + zdirect=-1. + do i=1,nuvz + uvheight(i)=zdirect*uvheight(i) + end do + do i=1,nwz + wheight(i)=zdirect*wheight(i) + end do + endif + + +C Compute minimum and maximum height of modelling domain +******************************************************** + + heightmin=max(uvheight(1),wheight(1)) + heightmax=min(uvheight(nuvz),wheight(nwz)) + + + return + +999 write(*,*) + write(*,*) ' ###########################################'// + & '###### ' + write(*,*) ' TRAJECTORY MODEL SUBROUTINE GRIDCHECK:' + write(*,*) ' CAN NOT OPEN INPUT DATA FILE '//wfname(ifn) + write(*,*) ' ###########################################'// + & '###### ' + write(*,*) + write(*,'(a)') '!!! PLEASE INSERT A NEW CD-ROM AND !!!' + write(*,'(a)') '!!! PRESS ANY KEY TO CONTINUE... !!!' + write(*,'(a)') '!!! ...OR TERMINATE FLEXTRA PRESSING !!!' + write(*,'(a)') '!!! THE "X" KEY... !!!' + write(*,*) + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/gridcheck_gfs.f b/projects/MissionSupport/applications/WxTraj/src/gridcheck_gfs.f new file mode 100644 index 0000000..994c175 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/gridcheck_gfs.f @@ -0,0 +1,448 @@ + subroutine gridcheck(oronew,error) +*********************************************************************** +* * +* TRAJECTORY MODEL SUBROUTINE GRIDCHECK * +* * +*********************************************************************** +* * +* AUTHOR: G. WOTAWA * +* DATE: 1997-08-06 * +* * +* Update: 1998-12, global fields allowed, A. Stohl * +* Modification:2001-01, NCEP Pressure level data, * +* G. Wotawa * +* Sabine Eckhardt, Jan 2008 update to read GRIB2 with * +* Grib Api * +* * +*********************************************************************** +* * +* DESCRIPTION: * +* * +* THIS SUBROUTINE DETERMINES THE GRID SPECIFICATIONS (LOWER LEFT * +* LONGITUDE, LOWER LEFT LATITUDE, NUMBER OF GRID POINTS, GRID DIST- * +* ANCE AND VERTICAL DISCRETIZATION OF THE ECMWF MODEL) FROM THE * +* GRIB HEADER OF THE FIRST INPUT FILE. THE CONSISTANCY (NO CHANGES * +* WITHIN ONE FLEXTRA RUN) IS CHECKED IN THE ROUTINE "READWIND" AT ANY * +* CALL. * +* * +* OUTPUT error .true. - can not read grid specifications * +* error .false. - normal * +* oronew .true. - Terrain heights given in grib files * +* oronew .false. - Terrain heights not specified in the * +* grib files (old file standard) * +* * +* XLON0 geographical longitude of lower left gridpoint * +* XLAT0 geographical latitude of lower left gridpoint * +* NX number of grid points x-direction * +* NY number of grid points y-direction * +* DX grid distance x-direction * +* DY grid distance y-direction * +* NUVZ number of grid points for horizontal wind * +* components in z direction * +* NWZ number of grid points for vertical wind * +* sizesouth, sizenorth give the map scale (i.e. number of virtual grid* +* points of the polar stereographic grid): * +* used to check the CFL criterion * +* component in z direction * +* UVHEIGHT(1)- heights of gridpoints where u and v are * +* UVHEIGHT(NUVZ) given * +* WHEIGHT(1)- heights of gridpoints where w is given * +* WHEIGHT(NWZ) * +* * +*********************************************************************** +* + include 'includepar' + include 'includecom' + include 'grib_api_f77.h' + + + + integer i,ifn,ifield,j,k,iumax,iwmax,numskip + real sizesouth,sizenorth,xauxa + real plev(nwzmax),help + logical error,oronew + +* VARIABLES AND ARRAYS NEEDED FOR GRIB DECODING + +C dimension of isec2 at least (22+n), where n is the number of parallels or +C meridians in a quasi-regular (reduced) Gaussian or lat/long grid + +C dimension of zsec2 at least (10+nn), where nn is the number of vertical +C coordinate parameters + + integer isec1(56),isec2(22+nxmax+nymax) + real zsec4(jpunp) + +!HSO parameters for grib_api + integer ifile + integer iret + integer igrib + integer*4 isize + real*4 xaux1,xaux2,yaux1,yaux2 + real*8 xaux1in,xaux2in,yaux1in,yaux2in,zsecn4(jpunp*4) + integer gribVer,parCat,parNum,typSurf,valSurf +!HSO end + + integer i179,i180,i181 + real akm_usort(nwzmax) + + error=.false. + oronew=.false. + iumax=0 + iwmax=0 +* + if(ideltas.gt.0) then + ifn=1 + else + ifn=numbwf + endif + +* +* OPENING OF DATA FILE (GRIB CODE) +* + ifile=5 +5 iret=grib_open_file(ifile,path(3)(1:len(3))// + >trim(wfname(ifn)),'r') + call grib_check(iret) +! turn on support for multi fields messages */ + call grib_check(grib_multi_support_on()) +!HSO 5 call pbopen(lunit,path(3)(1:len(3))//wfname(ifn),'r',ierr) +! if(ierr.lt.0) goto 999 +!HSO fin + + ifield=0 +10 ifield=ifield+1 + +* +* GET NEXT FIELDS +* + iret = grib_new_from_file(ifile,igrib) + if (igrib .eq. -1 ) then + if (iret .ne. -1) then + call grib_check(iret) + goto 999 ! ERROR DETECTED + endif + goto 30 ! EOF DETECTED + endif + + + +C Check whether we are on a little endian or on a big endian computer +********************************************************************* + +c if (inbuff(1).eq.1112101447) then ! little endian, swap bytes +c iswap=1+ilen/4 +c call swap32(inbuff,iswap) +c else if (inbuff(1).ne.1196575042) then ! big endian +c stop 'subroutine gridcheck: corrupt GRIB data' +c endif + + + +! first see if we read GRIB1 or GRIB2 + call grib_check(grib_get_int( igrib, + >'editionNumber',gribVer)) + +! get the size and data of the values array + call grib_check(grib_get_size(igrib,'values',isize)) + call grib_check(grib_get_real8_array(igrib,'values',zsecn4,isize)) + do i=1,isize + zsec4(i)=zsecn4(i) + enddo + + if (gribVer.eq.1) then ! GRIB Edition 1 + +! read the grib1 identifiers + call grib_check(grib_get_int( igrib, + >'indicatorOfParameter',isec1(6))) + call grib_check(grib_get_int( igrib, + >'indicatorOfTypeOfLevel',isec1(7))) + call grib_check(grib_get_int( igrib, + >'level',isec1(8))) + + else ! GRIB Edition 2 + +! read the grib2 identifiers + call grib_check(grib_get_int( igrib, + >'parameterCategory',parCat)) + call grib_check(grib_get_int( igrib, + >'parameterNumber',parNum)) + call grib_check(grib_get_int( igrib, + >'typeOfFirstFixedSurface',typSurf)) + call grib_check(grib_get_int( igrib, + >'scaledValueOfFirstFixedSurface',valSurf)) + +! convert to grib1 identifiers + isec1(6)=-1 + isec1(7)=-1 + isec1(8)=-1 + if ((parCat.eq.2).and.(parNum.eq.2).and.(typSurf.eq.100)) then ! U + isec1(6)=33 ! indicatorOfParameter + isec1(7)=100 ! indicatorOfTypeOfLevel + isec1(8)=valSurf/100 ! level, convert to hPa + elseif ((parCat.eq.3).and.(parNum.eq.5).and.(typSurf.eq.1)) then ! TOPO + isec1(6)=7 ! indicatorOfParameter + isec1(7)=1 ! indicatorOfTypeOfLevel + isec1(8)=0 + elseif ((parCat.eq.0).and.(parNum.eq.0).and.(typSurf.eq.1)) then ! LSM + isec1(6)=81 ! indicatorOfParameter + isec1(7)=1 ! indicatorOfTypeOfLevel + isec1(8)=0 + endif + + endif ! gribVer + + if(ifield.eq.1) then + +! get the required fields from section 2 +! store compatible to gribex input + call grib_check(grib_get_int( igrib, + >'numberOfPointsAlongAParallel',isec2(2))) + call grib_check(grib_get_int( igrib, + >'numberOfPointsAlongAMeridian',isec2(3))) + call grib_check(grib_get_real8(igrib, + >'latitudeOfFirstGridPointInDegrees',yaux2in)) + call grib_check(grib_get_real8(igrib, + >'longitudeOfFirstGridPointInDegrees',xaux1in)) + call grib_check(grib_get_real8(igrib, + >'latitudeOfLastGridPointInDegrees',yaux1in)) + call grib_check(grib_get_real8(igrib, + >'longitudeOfLastGridPointInDegrees',xaux2in)) + xaux1=xaux1in + xaux2=xaux2in + yaux1=yaux1in + yaux2=yaux2in + +c if (ierr.ne.0) goto 10 ! ERROR DETECTED + + + + nxfield=isec2(2) + ny=isec2(3) + if((abs(xaux1).lt.eps).and.(xaux2.ge.359)) then ! NCEP DATA FROM 0 TO + xaux1=-179.0 ! 359 DEG EAST -> + xaux2=-179.0+360.-360./float(nxfield) ! TRANSFORMED TO -179 + endif ! TO 180 DEG EAST + if (xaux1.gt.180) xaux1=xaux1-360.0 + if (xaux2.gt.180) xaux2=xaux2-360.0 + if (xaux1.lt.-180) xaux1=xaux1+360.0 + if (xaux2.lt.-180) xaux2=xaux2+360.0 + if (xaux2.lt.xaux1) xaux2=xaux2+360. + xlon0=xaux1 + ylat0=yaux1 + dx=(xaux2-xaux1)/float(nxfield-1) + dy=(yaux2-yaux1)/float(ny-1) + + i179=nint(179./dx) + i180=nint(179./dx)+1 + i181=i180+1 + +C Check whether fields are global +C If they contain the poles, specify polar stereographic map +C projections using the stlmbr- and stcm2p-calls +************************************************************ + + xauxa=abs(xaux2+dx-360.-xaux1) + if (xauxa.lt.0.001) then + nx=nxfield+1 ! field is cyclic + xglobal=.true. + else + nx=nxfield + xglobal=.false. + endif + xauxa=abs(yaux1+90.) + if (xglobal.and.xauxa.lt.0.001) then + sglobal=.true. ! field contains south pole +C Enhance the map scale by factor 3 (*2=6) compared to north-south +C map scale + sizesouth=6.*(switchsouth+90.)/dy + call stlmbr(southpolemap,-90.,0.) + call stcm2p(southpolemap,0.,0.,switchsouth,0.,sizesouth, + + sizesouth,switchsouth,180.) + switchsouthg=(switchsouth-ylat0)/dy + else + sglobal=.false. + switchsouthg=999999. + endif + xauxa=abs(yaux2-90.) + if (xglobal.and.xauxa.lt.0.001) then + nglobal=.true. ! field contains north pole +C Enhance the map scale by factor 3 (*2=6) compared to north-south +C map scale + sizenorth=6.*(90.-switchnorth)/dy + call stlmbr(northpolemap,90.,0.) + call stcm2p(northpolemap,0.,0.,switchnorth,0.,sizenorth, + + sizenorth,switchnorth,180.) + switchnorthg=(switchnorth-ylat0)/dy + else + nglobal=.false. + switchnorthg=999999. + endif + endif + + + if((isec1(6).eq.007).and.(isec1(7).eq.001)) oronew=.true. +* k=isec1(8) +* if(isec1(6).eq. 33) iumax=max(iumax,nlev_ec-k+1) +* if(isec1(6).eq. 39) iwmax=max(iwmax,nlev_ec-k+1) + if((isec1(6).eq.33).and.(isec1(7).eq.100)) then + iumax=iumax+1 + plev(iumax)=float(isec1(8))*100.0 + endif + + if((isec1(6).eq.007).and.(isec1(7).eq.001)) then +* TOPOGRAPHY + do 20 j=0,ny-1 + do 21 i=0,nxfield-1 + help=zsec4(nxfield*(ny-j-1)+i+1) + if(i.le.180) then + oro(i179+i,j)=help + else + oro(i-i181,j)=help + endif +21 continue +20 continue + endif + + if (igrib.ne.-1) then + call grib_check(grib_release(igrib)) + endif + + goto 10 !! READ NEXT LEVEL OR PARAMETER + +30 continue + +* +* CLOSING OF INPUT DATA FILE +* + call grib_check(grib_close_file(ifile)) + + nuvz=iumax + nwz =iumax + nlev_ec=iumax + + if (nx.gt.nxmax) then + write(*,*) 'FLEXTRA error: Too many grid points in x direction.' + write(*,*) 'Reduce resolution of wind fields (file GRIDSPEC).' + error=.true. + return + endif + + if (ny.gt.nymax) then + write(*,*) 'FLEXTRA error: Too many grid points in y direction.' + write(*,*) 'Reduce resolution of wind fields (file GRIDSPEC).' + error=.true. + return + endif + + if (nuvz.gt.nuvzmax) then + write(*,*) 'FLEXTRA error: Too many u,v grid points in z '// + +'direction.' + write(*,*) 'Reduce resolution of wind fields (file GRIDSPEC).' + error=.true. + return + endif + + if (nwz.gt.nwzmax) then + write(*,*) 'FLEXTRA error: Too many w grid points in z '// + +'direction.' + write(*,*) 'Reduce resolution of wind fields (file GRIDSPEC).' + error=.true. + return + endif + +C Output of grid info +********************* + + write(*,*) + write(*,*) + write(*,'(a,2i7)') '# of vertical levels: ',nuvz,nwz + write(*,*) + write(*,'(a)') 'Mother domain:' + write(*,'(a,f10.2,a1,f10.2,a,f10.2)') ' Longitude range: ', + +xlon0,' to ',xlon0+(nx-1)*dx,' Grid distance: ',dx + write(*,'(a,f10.2,a1,f10.2,a,f10.2)') ' Latitude range: ', + +ylat0,' to ',ylat0+(ny-1)*dy,' Grid distance: ',dy + write(*,*) + + +C Compute often used aux variables to convert geografical into grid coord. +*************************************************************************** + + xthelp=180./pi/r_earth/dx + ythelp=180./pi/r_earth/dy + + + +* CALCULATE VERTICAL DISCRETIZATION OF ECMWF MODEL +* PARAMETER akm,bkm DESCRIBE THE HYBRID "ETA" COORDINATE SYSTEM +* wheight(i) IS THE HEIGHT OF THE i-th MODEL HALF LEVEL (=INTERFACE BETWEEN +* 2 MODEL LEVELS) IN THE "ETA" SYSTEM + + numskip=nlev_ec-nuvz ! number of ecmwf model layers not used + ! by trajectory model + do 40 i=1,nwz + j=numskip+i + k=nlev_ec+1+numskip+i + akm_usort(nwz-i+1)=plev(nwz-i+1) +40 bkm(nwz-i+1)=0.0 + +******************************* +* change Sabine Eckhardt: akm should always be in descending order ... readwind adapted! +******************************* + do 41 i=1,nwz + if (akm_usort(1).gt.akm_usort(2)) then + akm(i)=akm_usort(i) + else + akm(i)=akm_usort(nwz-i+1) + endif +41 continue + + +* CALCULATION OF uvheight, akz, bkz +* akz,bkz ARE THE DISCRETIZATION PARAMETERS FOR THE MODEL LEVELS +* uvheight(i) IS THE HEIGHT OF THE i-th MODEL LEVEL IN THE "ETA" SYSTEM + + do 43 i=1,nwz +43 wheight(nwz-i+1)=akm(nwz-i+1)/p0+bkm(nwz-i+1) + + do 45 i=1,nuvz + uvheight(i)=wheight(i) + akz(i)=akm(i) + bkz(i)=bkm(i) +45 continue + +C If vertical coordinates decrease with increasing altitude, multiply by -1. +C This means that also the vertical velocities have to be multiplied by -1. +**************************************************************************** + + if (uvheight(1).lt.uvheight(nuvz)) then + zdirect=1. + else + zdirect=-1. + do 55 i=1,nuvz +55 uvheight(i)=zdirect*uvheight(i) + do 65 i=1,nwz +65 wheight(i)=zdirect*wheight(i) + endif + +C Compute minimum and maximum height of modelling domain +******************************************************** + + heightmin=max(uvheight(1),wheight(1)) + heightmax=min(uvheight(nuvz),wheight(nwz)) + + + return + +999 write(*,*) + write(*,*) ' ###########################################'// + & '###### ' + write(*,*) ' TRAJECTORY MODEL SUBROUTINE GRIDCHECK:' + write(*,*) ' CAN NOT OPEN INPUT DATA FILE '//wfname(ifn) + write(*,*) ' ###########################################'// + & '###### ' + error=.true. + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/gridcheck_nests.f b/projects/MissionSupport/applications/WxTraj/src/gridcheck_nests.f new file mode 100755 index 0000000..1fabe26 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/gridcheck_nests.f @@ -0,0 +1,431 @@ + subroutine gridcheck_nests(error) +C o +******************************************************************************** +* * +* This routine checks the grid specification for the nested model domains. * +* It is similar to subroutine gridcheck, which checks the mother domain. * +* * +* Authors: A. Stohl, G. Wotawa * +* * +* 30 December 1998 * +* * +* Updated: * +* 2011-06, implemented reading of grib2 format* +* analog to FLEXPART 8.22 routines * +************************************************************************ + use grib_api + + include 'includepar' + include 'includecom' + +!HSO parameters for grib_api + integer ifile + integer iret + integer igrib + integer gribVer,parCat,parNum,typSurf,valSurf,discipl + integer gotGrib + character*24 gribErrorMsg + character*20 gribFunction +!HSO end + + integer i,j,k,l,ifn,ifield,iumax,iwmax,numskip,nlev_ecn + integer nuvzn,nwzn + real akmn(nwzmax),bkmn(nwzmax),akzn(nuvzmax),bkzn(nuvzmax) + real uvheightn(nuvzmax),wheightn(nwzmax) + real xaux1,xaux2,yaux1,yaux2 + real*8 xaux1in,xaux2in,yaux1in,yaux2in + logical error,oronew + +* VARIABLES AND ARRAYS NEEDED FOR GRIB DECODING + +C dimension of isec2 at least (22+n), where n is the number of parallels or +C meridians in a quasi-regular (reduced) Gaussian or lat/long grid + +C dimension of zsec2 at least (10+nn), where nn is the number of vertical +C coordinate parameters + + integer isec0(2),isec1(56),isec2(22+nxmaxn+nymaxn),isec3(2) + integer isec4(64),inbuff(jpack),ilen,iswap,ierr,iword,lunit + real zsec2(60+2*nuvzmax),zsec3(2),zsec4(jpunp) + character*1 yoper +!HSO grib api error messages + data gribErrorMsg/'Error reading grib file'/ + data gribFunction/'gridcheck_nests'/ + + data yoper/'D'/ + + error=.false. + xresoln(0)=1. ! resolution enhancement for mother grid + yresoln(0)=1. ! resolution enhancement for mother grid + +C Loop about all nesting levels +******************************* + + do 300 l=1,numbnests + oronew=.false. + + iumax=0 + iwmax=0 +* + if(ideltas.gt.0) then + ifn=1 + else + ifn=numbwf + endif +* +* OPENING OF DATA FILE (GRIB CODE) +* + ifile=0 + igrib=0 + iret=0 + +5 call grib_open_file(ifile,path(numpath+2*(l-1)+1) + + (1:len(numpath+2*(l-1)+1))//trim(wfnamen(l,ifn)),'r',iret) + if (iret.ne.GRIB_SUCCESS) then + goto 999 ! ERROR DETECTED + endif + + gotGrib=0 + ifield=0 +10 ifield=ifield+1 +* +* GET NEXT FIELDS +* + call grib_new_from_file(ifile,igrib,iret) + if (iret.eq.GRIB_END_OF_FILE) then + goto 30 ! EOF DETECTED + elseif (iret.ne.GRIB_SUCCESS) then + goto 999 ! ERROR DETECTED + endif + +! first see if we read GRIB1 or GRIB2 + call grib_get_int(igrib,'editionNumber',gribVer,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + + if (gribVer.eq.1) then ! GRIB Edition 1 +c print*,'GRiB Edition 1' +c read the grib2 identifiers + call grib_get_int(igrib,'indicatorOfParameter',isec1(6),iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'level',isec1(8),iret) + call grib_check(iret,gribFunction,gribErrorMsg) +c change code for etadot to code for omega + if (isec1(6).eq.77) then + isec1(6)=135 + endif + else +c print*,'GRiB Edition 2' +c read the grib2 identifiers + call grib_get_int(igrib,'discipline',discipl,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'parameterCategory',parCat,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'parameterNumber',parNum,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'typeOfFirstFixedSurface',typSurf, + + iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'level',valSurf,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + +! convert to grib1 identifiers + isec1(6)=-1 + isec1(7)=-1 + isec1(8)=-1 + isec1(8)=valSurf ! level + if((parCat.eq.0).and.(parNum.eq.0).and.(typSurf.eq.105))then ! T + isec1(6)=130 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.2).and.(typSurf.eq.105)) + + then ! U + isec1(6)=131 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.3).and.(typSurf.eq.105)) + + then ! V + isec1(6)=132 ! indicatorOfParameter + elseif((parCat.eq.1).and.(parNum.eq.0).and.(typSurf.eq.105)) + + then ! Q + isec1(6)=133 ! indicatorOfParameter + elseif((parCat.eq.3).and.(parNum.eq.0).and.(typSurf.eq.1))then !SP + isec1(6)=134 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.32)) then ! W, actually eta dot + isec1(6)=135 ! indicatorOfParameter + elseif((parCat.eq.3).and.(parNum.eq.0).and.(typSurf.eq.101)) + + then !SLP + isec1(6)=151 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.2).and.(typSurf.eq.103)) + + then ! 10U + isec1(6)=165 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.3).and.(typSurf.eq.103)) + + then ! 10V + isec1(6)=166 ! indicatorOfParameter + elseif((parCat.eq.0).and.(parNum.eq.0).and.(typSurf.eq.103)) + + then ! 2T + isec1(6)=167 ! indicatorOfParameter + elseif((parCat.eq.0).and.(parNum.eq.6).and.(typSurf.eq.103)) + + then ! 2D + isec1(6)=168 ! indicatorOfParameter + elseif((parCat.eq.1).and.(parNum.eq.11).and.(typSurf.eq.1)) + + then ! SD + isec1(6)=141 ! indicatorOfParameter + elseif((parCat.eq.6).and.(parNum.eq.1)) then ! CC + isec1(6)=164 ! indicatorOfParameter + elseif((parCat.eq.1).and.(parNum.eq.9)) then ! LSP + isec1(6)=142 ! indicatorOfParameter + elseif((parCat.eq.1).and.(parNum.eq.10)) then ! CP + isec1(6)=143 ! indicatorOfParameter + elseif((parCat.eq.0).and.(parNum.eq.11).and.(typSurf.eq.1)) + + then ! SHF + isec1(6)=146 ! indicatorOfParameter + elseif((parCat.eq.4).and.(parNum.eq.9).and.(typSurf.eq.1)) + + then ! SR + isec1(6)=176 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.17)) then ! EWSS + isec1(6)=180 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.18)) then ! NSSS + isec1(6)=181 ! indicatorOfParameter + elseif((parCat.eq.3).and.(parNum.eq.4)) then ! ORO + isec1(6)=129 ! indicatorOfParameter + elseif((parCat.eq.3).and.(parNum.eq.7)) then ! SDO + isec1(6)=160 ! indicatorOfParameter + elseif((discipl.eq.2).and.(parCat.eq.0).and.(parNum.eq.0).and. + + (typSurf.eq.1)) then ! LSM + isec1(6)=172 ! indicatorOfParameter + else + print*,'***ERROR: undefined GRiB2 message found!',discipl, + + parCat,parNum,typSurf + endif + endif +! get the size and data of the values array + if (isec1(6).ne.-1) then + call grib_get_real4_array(igrib,'values',zsec4,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + endif + +!HSO get the required fields from section 2 in a gribex compatible manner + if (ifield.eq.1) then + call grib_get_int(igrib,'numberOfPointsAlongAParallel', + > isec2(2),iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'numberOfPointsAlongAMeridian', + > isec2(3),iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'numberOfVerticalCoordinateValues', + > isec2(12),iret) + call grib_check(iret,gribFunction,gribErrorMsg) +!HSO get the size and data of the vertical coordinate array + call grib_get_real4_array(igrib,'pv',zsec2,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + nxn(l)=isec2(2) + nyn(l)=isec2(3) + nlev_ecn=isec2(12)/2-1 + endif ! ifield + +!HSO get the second part of the grid dimensions only from GRiB1 messages + if ((gribVer.eq.1).and.(gotGrib.eq.0)) then + call grib_get_real8(igrib,'longitudeOfFirstGridPointInDegrees' + + ,xaux1in,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_real8(igrib,'longitudeOfLastGridPointInDegrees', + + xaux2in,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_real8(igrib,'latitudeOfLastGridPointInDegrees', + + yaux1in,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_real8(igrib,'latitudeOfFirstGridPointInDegrees', + + yaux2in,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + xaux1=xaux1in + xaux2=xaux2in + yaux1=yaux1in + yaux2=yaux2in + if(xaux1.gt.180) xaux1=xaux1-360.0 + if(xaux2.gt.180) xaux2=xaux2-360.0 + if(xaux1.lt.-180) xaux1=xaux1+360.0 + if(xaux2.lt.-180) xaux2=xaux2+360.0 + if (xaux2.lt.xaux1) xaux2=xaux2+360. + xlon0n(l)=xaux1 + ylat0n(l)=yaux1 + dxn(l)=(xaux2-xaux1)/float(nxn(l)-1) + dyn(l)=(yaux2-yaux1)/float(nyn(l)-1) + gotGrib=1 + endif ! ifield.eq.1 + + + if(isec1(6).eq.129) oronew=.true. + k=isec1(8) + if(isec1(6).eq.131) iumax=max(iumax,nlev_ecn-k+1) + if(isec1(6).eq.135) iwmax=max(iwmax,nlev_ecn-k+1) + + if(isec1(6).eq.129) then + do 20 j=0,nyn(l)-1 + do 21 i=0,nxn(l)-1 +21 oron(i,j,l)=zsec4(nxn(l)*(nyn(l)-j-1)+i+1)/ga +20 continue + endif + + call grib_release(igrib) + goto 10 ! READ NEXT LEVEL OR PARAMETER +* +* CLOSING OF INPUT DATA FILE +* +30 call grib_close_file(ifile) + +* error message if no fields found with correct first longitude in it + if (gotGrib.eq.0) then + print*,'***ERROR: input file needs to contain GRiB1 formatted' + + //'messages' + stop + endif + + nuvzn=iumax + nwzn=iwmax + if(nuvzn.eq.nlev_ecn) nwzn=nlev_ecn+1 + + if (nxn(l).gt.nxmaxn) then + write(*,*) 'FLEXTRA error: Too many grid points in x direction.' + write(*,*) 'Reduce resolution of wind fields (file GRIDSPEC)' + write(*,*) 'for nesting level ',l + + error=.true. + return + endif + + if (nyn(l).gt.nymaxn) then + write(*,*) 'FLEXTRA error: Too many grid points in y direction.' + write(*,*) 'Reduce resolution of wind fields (file GRIDSPEC)' + write(*,*) 'for nesting level ',l + error=.true. + return + endif + + if ((nuvzn.gt.nuvzmax).or.(nwzn.gt.nwzmax)) then + write(*,*) 'FLEXTRA error: Nested wind fields have too many'// + +'vertical levels.' + write(*,*) 'Problem was encountered for nesting level ',l + error=.true. + return + endif + + +C Output of grid info +********************* + + write(*,'(a,i2)') 'Nested domain #: ',l + write(*,'(a,f10.2,a1,f10.2,a,f10.2)') ' Longitude range: ', + +xlon0n(l),' to ',xlon0n(l)+(nxn(l)-1)*dxn(l), + +' Grid distance: ',dxn(l) + write(*,'(a,f10.2,a1,f10.2,a,f10.2)') ' Latitude range: ', + +ylat0n(l),' to ',ylat0n(l)+(nyn(l)-1)*dyn(l), + +' Grid distance: ',dyn(l) + write(*,*) + + +C Determine, how much the resolutions in the nests are enhanced as +C compared to the mother grid +****************************************************************** + + xresoln(l)=dx/dxn(l) + yresoln(l)=dy/dyn(l) + +C Determine the mother grid coordinates of the corner points of the +C nested grids +C Convert first to geographical coordinates, then to grid coordinates +********************************************************************* + + xaux1=xlon0n(l) + xaux2=xlon0n(l)+float(nxn(l)-1)*dxn(l) + yaux1=ylat0n(l) + yaux2=ylat0n(l)+float(nyn(l)-1)*dyn(l) + + xln(l)=(xaux1-xlon0)/dx + xrn(l)=(xaux2-xlon0)/dx + yln(l)=(yaux1-ylat0)/dy + yrn(l)=(yaux2-ylat0)/dy + + +* CALCULATE VERTICAL DISCRETIZATION OF ECMWF MODEL +* PARAMETER akm,bkm DESCRIBE THE HYBRID "ETA" COORDINATE SYSTEM +* wheight(i) IS THE HEIGHT OF THE i-th MODEL HALF LEVEL (=INTERFACE BETWEEN +* 2 MODEL LEVELS) IN THE "ETA" SYSTEM + + numskip=nlev_ecn-nuvzn ! number of ECMWF model layers not used + ! by trajectory model + do 40 i=1,nwzn + j=numskip+i + k=nlev_ecn+1+numskip+i + akmn(nwzn-i+1)=zsec2(j) + bkmn(nwzn-i+1)=zsec2(k) +40 wheightn(nwzn-i+1)=akmn(nwzn-i+1)/p0+bkmn(nwzn-i+1) + +* CALCULATION OF uvheight, akz, bkz +* akz,bkz ARE THE DISCRETIZATION PARAMETERS FOR THE MODEL LEVELS +* uvheight(i) IS THE HEIGHT OF THE i-th MODEL LEVEL IN THE "ETA" SYSTEM + + do 45 i=1,nuvzn + uvheightn(i)=0.5*(wheightn(i+1)+wheightn(i)) + akzn(i)=0.5*(akmn(i+1)+akmn(i)) +45 bkzn(i)=0.5*(bkmn(i+1)+bkmn(i)) + + +C If vertical coordinates decrease with increasing altitude, multiply by -1. +C This means that also the vertical velocities have to be multiplied by -1. +**************************************************************************** + + if (uvheightn(1).lt.uvheightn(nuvzn)) then + zdirect=1. + else + zdirect=-1. + do 55 i=1,nuvz +55 uvheightn(i)=zdirect*uvheightn(i) + do 65 i=1,nwz +65 wheightn(i)=zdirect*wheightn(i) + endif + + +C Check, whether the heights of the model levels of the nested +C wind fields are consistent with those of the mother domain. +C If not, terminate model run. +************************************************************** + + do 75 i=1,nuvz + if ((akzn(i).ne.akz(i)).or.(bkzn(i).ne.bkz(i)).or. + + (uvheightn(i).ne.uvheight(i))) then + write(*,*) 'FLEXTRA error: The wind fields of nesting level',l + write(*,*) 'are not consistent with the mother domain:' + write(*,*) 'Differences in vertical levels detected.' + error=.true. + return + endif +75 continue + + do 85 i=1,nwz + if ((akmn(i).ne.akm(i)).or.(bkmn(i).ne.bkm(i)).or. + + (wheightn(i).ne.wheight(i))) then + write(*,*) 'FLEXTRA error: The wind fields of nesting level',l + write(*,*) 'are not consistent with the mother domain:' + write(*,*) 'Differences in vertical levels detected.' + error=.true. + return + endif +85 continue + + if (.not.oronew) then + write(*,*) 'FLEXTRA error: Orography of nested domains' + write(*,*) 'is missing in the wind field files.' + endif + +300 continue + return + + +999 write(*,*) + write(*,*) ' ###########################################'// + & '###### ' + write(*,*) ' TRAJECTORY MODEL SUBROUTINE GRIDCHECK:' + write(*,*) ' CAN NOT OPEN INPUT DATA FILE '//wfnamen(l,ifn) + write(*,*) ' FOR NESTING LEVEL ',k + write(*,*) ' ###########################################'// + & '###### ' + error=.true. + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/gridcheck_nests_gfs.f b/projects/MissionSupport/applications/WxTraj/src/gridcheck_nests_gfs.f new file mode 100644 index 0000000..b0bb6bc --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/gridcheck_nests_gfs.f @@ -0,0 +1,21 @@ + subroutine gridcheck_nests(error) +C o +******************************************************************************** +* * +* This routine checks the grid specification for the nested model domains. * +* It is similar to subroutine gridcheck, which checks the mother domain. * +* * +* Authors: A. Stohl, G. Wotawa * +* * +* 30 December 1998 * +******************************************************************************** + + include 'includepar' + include 'includecom' + + logical error + + if (numbnests.ne.0) + + stop 'FLEXTRA GFS cannot be operated with nested windfields' + + end diff --git a/projects/MissionSupport/applications/WxTraj/src/includecom b/projects/MissionSupport/applications/WxTraj/src/includecom new file mode 100644 index 0000000..202f34f --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/includecom @@ -0,0 +1,306 @@ +******************************************************************************** +* Include file for calculation of trajectories (Program FLEXTRA) * +* This file contains a global common block used in FLEXTRA * +* * +* Authors: A. Stohl, G. Wotawa * +* * +* 1 February 1994 * +* Update: December 1998, A. Stohl * +* * +******************************************************************************** + + +C Variables needed for polar stereographic projection +***************************************************** + + logical xglobal,sglobal,nglobal + real switchnorthg,switchsouthg + +C xglobal T for global fields, F for limited area fields +C sglobal T if domain extends towards south pole +C nglobal T if domain extends towards north pole +C switchnorthg,switchsouthg same as parameters switchnorth, +C switchsouth, but in grid units + + real southpolemap(9),northpolemap(9) + +C southpolemap,northpolemap define stereographic projections +C at the two poles + + +C Variables needed for nested grids +*********************************** + + integer numbnests + +C numbnests number of nested grids + + character*18 wfnamen(maxnests,numbwfmax) + character*18 wfspecn(maxnests,numbwfmax) + +C wfnamen nested wind field names +C wfspecn specifications of wind field file, e.g. if on hard +C disc or on tape + + + integer nxn(maxnests),nyn(maxnests) + real dxn(maxnests),dyn(maxnests),xlon0n(maxnests),ylat0n(maxnests) + +C nxn,nyn actual dimensions of nested wind fields in x and y direction +C dxn,dyn grid distances in x,y direction for the nested grids +C xlon0n geographical longitude of lower left grid point of nested wind fields +C ylat0n geographical latitude of lower left grid point of nested wind fields + + + real uun(0:nxmaxn-1,0:nymaxn-1,nuvzmax,3,maxnests) + real vvn(0:nxmaxn-1,0:nymaxn-1,nuvzmax,3,maxnests) + real wwn(0:nxmaxn-1,0:nymaxn-1,nwzmax,3,maxnests) + real ttn(0:nxmaxn-1,0:nymaxn-1,nuvzmax,3,maxnests) + real qqn(0:nxmaxn-1,0:nymaxn-1,nuvzmax,3,maxnests) + real pvn(0:nxmaxn-1,0:nymaxn-1,nuvzmax,3,maxnests) + real thn(0:nxmaxn-1,0:nymaxn-1,nuvzmax,3,maxnests) + real psn(0:nxmaxn-1,0:nymaxn-1,1,3,maxnests) + real oron(0:nxmaxn-1,0:nymaxn-1,maxnests) + +C uun,vvn,wwn nested wind data in x,y and z direction +C psn nested surface pressure +C oron [m] nested orography of the ECMWF model +C ttn, qqn nested temperature and specific humidity +C pvn, thn nested potential vorticity and potential temperature + + + real xresoln(0:maxnests),yresoln(0:maxnests) + +C xresoln, yresoln Factors by which the resolutions in the nests +C are enhanced compared to mother grid + + real xln(maxnests),yln(maxnests),xrn(maxnests),yrn(maxnests) + +C xln,yln,xrn,yrn Corner points of nested grids in grid coordinates +C of mother grid + + + + integer nx,ny,nxfield,nuvz,nwz,nlev_geos + +C nx,ny,nuvz,nwz actual dimensions of wind fields in x,y and z +C direction, respectively + +C nxfield same as nx for limited area fields, +C but for global fields nx=nxfield+1 + +C nuvz is used for u,v components +C nwz is used for w components (staggered grid) +C nlev_goes number of levels GEOS model + + integer inter,interstep,ldim,numbunc,inpolkind,modecet + +C inter index, if trajectory output with constant time step +C interstep time step for trajectory output +C ldim number of steps along the interpolated trajectory +C numbunc number of uncertainty trajectories +C inpolkind index for kind of interpolation (spline or linear) +C modecet 1 = CET mode switched off, 2 = CET mode switched on + + character*50 runcomment + +C runcomment identification comment for the model run + + real cfl,cflt + +C* cfl CFL-criterion horizontal and vertical +C* cflt CFL-criterion time + + real distunc + +C distunc distance (grid units) of uncertainty t. from main one + + integer ldirect + +C ldirect direction of the trajectories (-1=backward,1=forward) + + integer numpoint + +C numpoint actual number of trajectory starting/ending points + + integer lentra,ibdate,ibtime,iedate,ietime,interv + + +C lentra length of trajectory (s) +C ibdate beginning date (YYYYMMDD) +C ibtime beginning time (HHMISS) +C iedate ending date (YYYYMMDD) +C ietime ending time (HHMISS) +C interv interval of trajectory calculation (s) + + integer len(numpath+2*maxnests) + +C len length of path names needed for trajectory model + + integer ideltas,nextflight + +C ideltas length of trajectory loop from beginning to +C ending date (s) +C nextflight next time, when initialization of FLIGHT +C trajectories is due (s) + + real epsu,epsv,epsw,relaxtime + +C epsu,epsv,epsw magnitude of the relative random errors that are +C added to the wind components of the ensemble +C uncertainty trajectories at each time step +C relaxtime time constant (in units of the wind field interval) +C at which the above errors are relaxed using +C a Langevin equation + + + integer numbwf,wftime(numbwfmax) + character*180 wfname(numbwfmax) + character*10 wfspec(numbwfmax) + +C numbwf actual number of wind fields +C wftime(numbwfmax) [s] times relative to beginning time of wind fields +C wfname(numbwfmax) file names of wind fields +C wfspec(numbwfmax) specifications of wind field file, e.g. if on hard +C disc or on tape + + + real akm(nwzmax), bkm(nwzmax) + real akz(nuvzmax) , bkz(nuvzmax) + +* akm,bkm: coeffizients which regulate vertical discretization of ecmwf model +* (at the border of model layers) +* akz,bkz: model discretization coeffizients at the centre of the layers + + + integer memtime(3),memind(3) + +C memind pointer, at which position the wind fields are actually stored +C in memory +C memtime times of the fields stored in memory + + real uu(0:nxmax-1,0:nymax-1,nuvzmax,3) + real vv(0:nxmax-1,0:nymax-1,nuvzmax,3) + real pe(0:nxmax-1,0:nymax-1,nuvzmax,3) + real delp(0:nxmax-1,0:nymax-1,nuvzmax,3) + real pm(0:nxmax-1,0:nymax-1,nuvzmax,3) + real uupol(0:nxmax-1,0:nymax-1,nuvzmax,3) + real vvpol(0:nxmax-1,0:nymax-1,nuvzmax,3) + real ww(0:nxmax-1,0:nymax-1,nwzmax,3) + real tt(0:nxmax-1,0:nymax-1,nuvzmax,3) + real qq(0:nxmax-1,0:nymax-1,nuvzmax,3) + real pv(0:nxmax-1,0:nymax-1,nuvzmax,3) + real th(0:nxmax-1,0:nymax-1,nuvzmax,3) + real ps(0:nxmax-1,0:nymax-1,1,3) + real oro(0:nxmax-1,0:nymax-1) + +C uu,vv,ww wind data in x,y and z direction (grid values) +C uupol,vvpol horizontal wind transformed onto a polarstereographic grid +C tt, qq temperature and specific humidity +C pv, th potential vorticity and potential temperature +C ps surface pressure +C delp layer pressure thickness +C pe pressure at layer edges +C pm mid-layer pressure +C oro [m] orography of the GEOS model (PHIS/gravity) + + real xpoint(maxtra),ypoint(maxtra),zpoint(maxtra) + +C xpoint x-coordinates of starting/ending points +C ypoint y-coordinates of starting/ending points +C zpoint z-coordinates of starting/ending points + + real dx,dy,xlon0,ylat0,xthelp,ythelp + real uvheight(nuvzmax),wheight(nwzmax),heightmin,heightmax + +C dx grid distance in x direction +C dy grid distance in y direction +C uvheight heights of (u,v) gridpoints +C wheight heights of (w) gridpoints +C xlon0 geographical longitude of lower left grid point +C ylat0 geographical latitude of lower left grid point +C heightmin, heightmax minimum and maximum height of modelling domain +C xthelp,ythelp help variables to convert geografical coordinates +C into grid coordinates + + real zdirect + +C zdirect direction of model levels from bottom to top +C if coordinate of first model level (bottom) is +C less then coordinate of last model level, +C zdirect is set 1. Otherwise, it is set -1 + + integer numtra,nttra(maxtra),npoint(maxtra) + integer kind(maxtra),kindz(maxtra) + real randerroru(maxtra),randerrorv(maxtra),randerrorw(maxtra) + integer ittra(maxtra,maxtime),ittraint(maxitime) + real xtra(maxtra,maxtime),ytra(maxtra,maxtime), + & ztra(maxtra,maxtime),ptra(maxtra,maxtime), + & htra(maxtra,maxtime),pvtra(maxtra,maxtime), + & thtra(maxtra,maxtime),qqtra(maxtra,maxtime) + real xtraint(maxitime),ytraint(maxitime),ztraint(maxitime), + + ptraint(maxitime),htraint(maxitime),pvtraint(maxitime), + + thtraint(maxitime),qqtraint(maxitime) + +C numtra actual number of trajectories in memory +C nttra(maxtra) number of time steps that are already computed +C npoint(maxtra) identification of startpoint of trajectory +C kind(maxtra) index for kind of trajectories (e.g. isobaric, 3-d,..) +C randerroru,randerrorv, Random errors added to the trajectory during +C randerrorw last time step +C kindz(maxtra) indicates the unit of the z coordinate (1: masl, +C 2: magl, 3: hPa) +C htra,ptra height in meters and in hPa +C xtra,ytra,ztra spatial positions of the trajectories +C qqtra specific humidity along trajectories +C qqtraint specific humidity interpolated to constant time step +C thtra(maxtra,maxtime) [K] potential temperature along trajectory +C thtraint(maxitime) [K] potential temperature interpolated to constant step +c pvtra(maxtra,maxtime) [Ks-1hPa-1] potential vorticity along trajectory +c pvtraint(maxtra,maxtime) [Ks-1hPa-1] potential vorticity interpolated to constant step +C ittra (maxtra,maxtime) [s] temporal position of the trajectories +C ittraint(maxitime) [s] one trajectory interpolated to constant time step +C xtraint,ytraint,ztraint one trajectory interpolated to constant time step + + + double precision bdate + +C bdate beginning date of trajectory loop (julian date) + + character path(numpath+2*maxnests)*180 + +C path path names needed for trajectory model + + character pathnames*180 + +C pathnames filename of pathnames file - command line input + + character compoint(maxtra)*45 + +C compoint comment - characterization of starting point + + common /global1/ + +bdate, + +nx,ny,nuvz,nwz,numbwf,wftime,inter,interstep,ldim,numbunc,modecet, + +inpolkind,ldirect,kind,kindz,lentra,ibdate,ibtime,iedate,ietime, + +interv,len,numpoint,ideltas,ittra,ittraint,numtra,nttra,npoint, + +memtime,memind,nxfield,nlev_geos,nextflight, + +randerroru,randerrorv,randerrorw + + common /global2/ + +xtra,ytra,ztra,ptra,qqtra,htra,xtraint,ytraint,ztraint,ptraint, + +qqtraint,htraint, + +cfl,cflt,distunc,akm,bkm,akz,bkz,pvtra,pvtraint,thtra, + +thtraint,uu,vv,uupol,vvpol,ww,tt,qq,pv,th,ps,oro, + +switchsouthg,switchnorthg,northpolemap,southpolemap, + +xpoint,ypoint,zpoint,epsu,epsv,epsw,relaxtime, + +dx,dy,uvheight,wheight,heightmin,heightmax,xlon0,ylat0, + +xthelp,ythelp,zdirect,xglobal,sglobal,nglobal + + common /global3/ + +pathnames,path,wfname,wfspec,compoint,runcomment + + common /global4/ + +numbnests,nxn,nyn,uun,vvn,wwn,ttn,qqn,pvn,thn,psn,oron, + +xlon0n,ylat0n,dxn,dyn,xresoln,yresoln,xln,yln,xrn,yrn, + +wfnamen,wfspecn diff --git a/projects/MissionSupport/applications/WxTraj/src/includepar b/projects/MissionSupport/applications/WxTraj/src/includepar new file mode 100644 index 0000000..c656625 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/includepar @@ -0,0 +1,131 @@ +******************************************************************************** +* Include file for calculation of trajectories (Program FLEXTRA) * +* This file contains the parameter statements used in FLEXTRA * +* * +* Authors: A. Stohl, G. Wotawa * +* * +* 1 February 1994 * +* Update: December 1998, A. Stohl * +* * +******************************************************************************** + + implicit none + + real pi,p0,kappa,eps,eps1 + parameter(pi=3.14159265,p0=101325,kappa=0.286,eps=1.e-5) + parameter(eps1=1.e-30) + +C number "pi" +C eps = tiny number +C kappa = exponent of formula for potential temperature +C p0 = parameter for calculation of vertical coordinate eta (ECMWF) + + real xmwml + parameter(xmwml=18.016/28.960) + +* xmwml ratio of molar weights of water vapor and dry air + + real r_earth,r_air,ga + + parameter(r_earth=6.371e6,r_air=287.05,ga=9.81) + +C r_earth radius of earth [m] +C r_air individual gas constant for dry air [J/kg/K] +C ga gravity acceleration of earth [m/s**2] + + + integer nxmax,nymax,nuvzmax,nwzmax + parameter(nxmax=1152,nymax=721,nuvzmax=92,nwzmax=92) + +C nxmax,nymax maximum dimension of wind fields in x and y +C direction, respectively +C nuvzmax,nwzmax maximum dimension of (u,v) and (w) wind fields in z +C direction + + integer itermax + parameter(itermax=50) + +C itermax Maximum number of iterations in integration +C scheme of trajectory equation + + integer numpath + parameter(numpath=4) + +C numpath Number of different pathnames for input/output files + + integer numbwfmax + parameter(numbwfmax=15000) + +C numbwfmax maximum number of windfields + + + real deltahormax,deltavermax + parameter(deltahormax=0.0001,deltavermax=0.0001) + +C deltahormax Maximum horizontal distance between two iterations +C of the integration scheme +C deltavermax Maximum vertical distance between two iterations +C of the integration scheme + + integer maxpoint +c parameter(maxpoint=160) + parameter(maxpoint= 50) + +C maxpoint Maximum number of trajectory starting/ending +C points + + integer maxtra,maxtime,maxitime + parameter(maxtra=100*maxpoint) + parameter(maxtime=1500,maxitime=10000) + +C maxtra maximum number of simultaneously calculated trajectories +C maxtime maximum number of trajectory timesteps +C maxitime maximum number of equidistant interpolated time steps + + integer idiffnorm,idiffmax + parameter(idiffnorm=21600) + parameter(idiffmax=2*idiffnorm) + +C idiffnorm normal time difference between two windfields +C idiffmax maximum time difference between two windfields + + integer unitpath,unitcommand,unitgrid,unitavailab + integer unitpoin,unitwind,unittraj,unittraji + integer unitvert,unitoro + parameter(unitpath=1,unitcommand=1,unitgrid=1) + parameter(unitavailab=1,unitpoin=1,unitwind=1) + parameter(unitvert=1,unitoro=1) + parameter(unittraj=70,unittraji=8) + + +C Parameters for GRIB file decoding +*********************************** + + integer jpack,jpunp + + parameter(jpack=4*nxmax*nymax,jpunp=4*jpack) + + +C Parameters for polar stereographic projection close to the poles +****************************************************************** + + real switchnorth,switchsouth + parameter(switchnorth=75.,switchsouth=-75.) + +C switchnorth use polar stereographic grid north of switchnorth +C switchsouth use polar stereographic grid south of switchsouth + + +C Parameters for nested grids +***************************** + + integer maxnests + parameter(maxnests=1) + +C maxnests maximum number of nested grids + + integer nxmaxn,nymaxn + parameter(nxmaxn=251,nymaxn=151) + +C nxmaxn,nymaxn maximum dimension of nested wind fields in +C x and y direction, respectively diff --git a/projects/MissionSupport/applications/WxTraj/src/inter3d.f b/projects/MissionSupport/applications/WxTraj/src/inter3d.f new file mode 100644 index 0000000..9ee7da1 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/inter3d.f @@ -0,0 +1,161 @@ + subroutine inter3d(xt,yt,zt,indexf,itime,init,firststep, + +iter,lkindz,ngrid,uint,vint,dzdt,indwz) +C i i i i i i i +C i i i o o o o +******************************************************************************** +* * +* Interpolation routine for 3-dimensional trajectories. * +* * +* Author: A. Stohl * +* * +* 27 April 1994 * +* * +* Update: 23 December 1998 (Use of global domain and nesting) * +* * +******************************************************************************** +* * +* Variables: * +* dzdt wind components in grid units per second * +* firstep .true. for first iteration of petterssen * +* idiff [s] Temporal distance between the windfields used for interpol* +* indwz index of the model layer beneath current position of traj.* +* init .true. for first time step of trajectory * +* iter number of time iteration step * +* itime [s] current temporal position * +* memtime(3) [s] times for the wind fields in memory * +* ngrid index which grid is to be used * +* nstop =greater 0, if trajectory calculation is finished * +* uint,vint,wint [m/s] interpolated wind components * +* xt,yt,zt coordinates position for which wind data shall be calculat* +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer i,itime,indexf,indwz,iter,lkindz,ngrid + real xt,yt,zt,dzdt,uint,vint,wint,psint,eta,xtn,ytn + logical firststep,init + + +C Determine nested grid coordinates +*********************************** + + if (ngrid.gt.0) then + xtn=(xt-xln(ngrid))*xresoln(ngrid) + ytn=(yt-yln(ngrid))*yresoln(ngrid) + endif + +C Calculate the surface pressure. +********************************* + + if (ngrid.gt.0) then ! nested grid + call levlininterpoln(psn,maxnests,nxmaxn,nymaxn,1,ngrid,nxn,nyn, + + memind,xtn,ytn,1,memtime(indexf),memtime(indexf+1),itime, + + indexf,psint) + else ! mother grid + call levlininterpol(ps,nxmax,nymax,1,nx,ny,memind,xt,yt, + + 1,memtime(indexf),memtime(indexf+1),itime,indexf,psint) + endif + + +C For a new trajectory and the first iteration of petterssen: +C Transformation from height in [m] coordinate to height in eta coordinate. +C Or: transformation from height in [Pa] to height in eta coordinate. +*************************************************************************** + + if (init.and.firststep) then + if ((lkindz.eq.1).or.(lkindz.eq.2)) then + if (ngrid.gt.0) then ! nested grid + call etatrafo(xtn,ytn,zt,memtime(indexf),memtime(indexf+1), + + itime,indexf,ngrid,psint) + else ! mother grid + call etatrafo(xt,yt,zt,memtime(indexf),memtime(indexf+1), + + itime,indexf,ngrid,psint) + endif + else if (lkindz.eq.3) then + zt=eta(psint,zt) + endif + endif + + +C Calculate index of (w) layers between the trajectory point is situated. +C Trajectory point is located between wheight(indwz) and wheight(indwz+1) +************************************************************************* + + do 95 i=2,nwz + if (wheight(i).ge.zt) goto 96 +95 continue +96 indwz=i-1 + + + +C Interpolation of wind field data is done. +C Either linear interpolation (if selected and for first iteration +C of petterssen) or bicubic interpolation +******************************************* + + if (ngrid.eq.0) then ! mother grid + if ((inpolkind.eq.1).and.(iter.ne.1)) then + call interpol(uu,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind,uvheight, + + xt,yt,zt,memtime(indexf),memtime(indexf+1),itime,indexf,uint) + call interpol(vv,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind,uvheight, + + xt,yt,zt,memtime(indexf),memtime(indexf+1),itime,indexf,vint) + call interpol(ww,nxmax,nymax,nwzmax,nx,ny,nwz,memind,wheight, + + xt,yt,zt,memtime(indexf),memtime(indexf+1),itime,indexf,wint) + else ! bilinear interpolation + call lininterpol(uu,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind, + + uvheight,xt,yt,zt,memtime(indexf),memtime(indexf+1),itime, + + indexf,uint) + call lininterpol(vv,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind, + + uvheight,xt,yt,zt,memtime(indexf),memtime(indexf+1),itime, + + indexf,vint) + call lininterpol(ww,nxmax,nymax,nwzmax,nx,ny,nwz,memind, + + wheight,xt,yt,zt,memtime(indexf),memtime(indexf+1),itime, + + indexf,wint) + endif + + else if (ngrid.gt.0) then ! nested grid + + if ((inpolkind.eq.1).and.(iter.ne.1)) then + call interpoln(uun,maxnests,nxmaxn,nymaxn,nuvzmax, + + ngrid,nxn,nyn,nuvz,memind,uvheight,xtn,ytn,zt,memtime(indexf), + + memtime(indexf+1),itime,indexf,uint) + call interpoln(vvn,maxnests,nxmaxn,nymaxn,nuvzmax, + + ngrid,nxn,nyn,nuvz,memind,uvheight,xtn,ytn,zt,memtime(indexf), + + memtime(indexf+1),itime,indexf,vint) + call interpoln(wwn,maxnests,nxmaxn,nymaxn,nwzmax, + + ngrid,nxn,nyn,nwz,memind,wheight,xtn,ytn,zt,memtime(indexf), + + memtime(indexf+1),itime,indexf,wint) + + else ! bilinear interpolation + call lininterpoln(uun,maxnests,nxmaxn,nymaxn,nuvzmax, + + ngrid,nxn,nyn,nuvz,memind,uvheight,xtn,ytn,zt,memtime(indexf), + + memtime(indexf+1),itime,indexf,uint) + call lininterpoln(vvn,maxnests,nxmaxn,nymaxn,nuvzmax, + + ngrid,nxn,nyn,nuvz,memind,uvheight,xtn,ytn,zt,memtime(indexf), + + memtime(indexf+1),itime,indexf,vint) + call lininterpoln(wwn,maxnests,nxmaxn,nymaxn,nwzmax, + + ngrid,nxn,nyn,nwz,memind,wheight,xtn,ytn,zt,memtime(indexf), + + memtime(indexf+1),itime,indexf,wint) + endif + + else ! polar stereographic grid + ! only linear interpolation used + + call lininterpol(uupol,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind, + + uvheight,xt,yt,zt,memtime(indexf),memtime(indexf+1),itime, + + indexf,uint) + call lininterpol(vvpol,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind, + + uvheight,xt,yt,zt,memtime(indexf),memtime(indexf+1),itime, + + indexf,vint) + call lininterpol(ww,nxmax,nymax,nwzmax,nx,ny,nwz,memind, + + wheight,xt,yt,zt,memtime(indexf),memtime(indexf+1),itime, + + indexf,wint) + endif + + + call wtransform(wint,psint,zt,indwz,dzdt) + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/interisentrop.f b/projects/MissionSupport/applications/WxTraj/src/interisentrop.f new file mode 100644 index 0000000..23e17e7 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/interisentrop.f @@ -0,0 +1,296 @@ + subroutine interisentrop(xt,yt,zt,thetaconst,indexf,itime,init, + +firststep,iter,lkindz,ngrid,uint,vint) +C i i i/o i/o i i i +C i i i i o o +******************************************************************************** +* * +* Interpolation routine for isentropic trajectories. * +* * +* The user gives the vertical coordinate in metres. In the first time step of * +* the trajectory, metres are transformed to Kelvin. In all time steps these * +* Kelvin are kept constant and transformed onward to the eta coordinate. * +* * +* * +* Author: A. Stohl * +* * +* 27 April 1994 * +* * +* Update: 23 December 1998 (Use of global domain and nesting) * +* * +******************************************************************************** +* * +* Variables: * +* firststep .true. for first step of petterssen, .false. for iteration* +* idiff [s] Temporal distance between the windfields used for interpol* +* indz1,indz2 indices of boundary of unstable region * +* init .true. for first time step of trajectory, .false. for othe* +* iter number of iteration step * +* itime [s] current temporal position * +* lkindz unit of z coordinate (1:masl, 2:magl, 3:hPa) * +* memtime(3) [s] times of the wind fields in memory * +* ngrid index which grid is to be used * +* nstop =greater 0, if trajectory calculation is finished * +* psint [Pa] interpolated surface pressure * +* temp [K] temperature at trajectory position * +* thetaconst [Pa] theta level, for which trajectories shall be calculated * +* uint,vint [m/s] interpolated wind components * +* uvheight heights in which u,v and t are given * +* xt,yt,zt coordinates position for which wind data shall be calculat* +* * +* Constants: * +* kappa exponent for calculating potential temperature * +* * +* Function: * +* pp calculates the pressure at a given eta level * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer itime,indexf,iter,indz1,indz2,i,lkindz,ngrid + real xt,yt,zt,uint,vint,psint,thetaconst,phelp,pp,xtn,ytn + real weight,uhelp,vhelp,qhelp,ph1,ph2,eta + logical init,firststep + + indz1=0 + indz2=0 + +C Determine nested grid coordinates +*********************************** + + if (ngrid.gt.0) then + xtn=(xt-xln(ngrid))*xresoln(ngrid) + ytn=(yt-yln(ngrid))*yresoln(ngrid) + endif + +C Calculate the surface pressure. +********************************* + + if (ngrid.gt.0) then ! nested grid + call levlininterpoln(psn,maxnests,nxmaxn,nymaxn,1,ngrid,nxn,nyn, + + memind,xtn,ytn,1,memtime(indexf),memtime(indexf+1),itime, + + indexf,psint) + else ! mother grid + call levlininterpol(ps,nxmax,nymax,1,nx,ny,memind,xt,yt, + + 1,memtime(indexf),memtime(indexf+1),itime,indexf,psint) + endif + + +****************************************************************************** +C For a new trajectory and the first iteration of petterssen: +C thetaconst is given in [m] +C 1. Transformation from height in [m] coordinate to height in eta coordinate. +C Or: Transformation from hPa to eta. +C 2. Transformation from height in eta to height in theta [K] coordinate. +****************************************************************************** + + if (init.and.firststep) then + if ((lkindz.eq.1).or.(lkindz.eq.2)) then + if (ngrid.gt.0) then ! nested grid + call etatrafo(xtn,ytn,thetaconst,memtime(indexf), + + memtime(indexf+1),itime,indexf,ngrid,psint) + else ! mother grid + call etatrafo(xt,yt,thetaconst,memtime(indexf), + + memtime(indexf+1),itime,indexf,ngrid,psint) + endif + zt=thetaconst ! now thetaconst is given in eta + else if (lkindz.eq.3) then + zt=eta(psint,zt) + endif + +C Calculate pressure and potential temperature for current position +******************************************************************* + + phelp=pp(psint,zt) + if (ngrid.gt.0) then ! nested grid + call lininterpoln(thn,maxnests,nxmaxn,nymaxn,nuvzmax, + + ngrid,nxn,nyn,nuvz,memind,uvheight,xtn,ytn,zt,memtime(indexf), + + memtime(indexf+1),itime,indexf,thetaconst) + else ! mother grid + call lininterpol(th,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind, + + uvheight,xt,yt,zt,memtime(indexf),memtime(indexf+1),itime, + + indexf,thetaconst) + endif + else + +******************************************************************************** +C For all other time steps: +C Transformation from height in theta [K] coordinate to height in eta coordinate +******************************************************************************** + + if (ngrid.gt.0) then ! nested grid + call geteta(xtn,ytn,zt,thetaconst,memtime(indexf), + + memtime(indexf+1),itime,indexf,psint,ngrid,indz1,indz2) + else ! mother grid + call geteta(xt,yt,zt,thetaconst,memtime(indexf), + + memtime(indexf+1),itime,indexf,psint,ngrid,indz1,indz2) + endif + endif + + +C Interpolation of wind field data is done. +***************************************************************************** + + if (indz1.eq.indz2) then ! stable level + if (ngrid.eq.0) then ! mother grid + if ((inpolkind.eq.1).and.(iter.ne.1)) then + call interpol(uu,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind,uvheight, + + xt,yt,zt,memtime(indexf),memtime(indexf+1),itime,indexf,uint) + call interpol(vv,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind,uvheight, + + xt,yt,zt,memtime(indexf),memtime(indexf+1),itime,indexf,vint) + else ! bilinear interpolation + call lininterpol(uu,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind, + + uvheight,xt,yt,zt,memtime(indexf),memtime(indexf+1),itime, + + indexf,uint) + call lininterpol(vv,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind, + + uvheight,xt,yt,zt,memtime(indexf),memtime(indexf+1),itime, + + indexf,vint) + endif + + else if (ngrid.gt.0) then ! nested grid + + if ((inpolkind.eq.1).and.(iter.ne.1)) then + call interpoln(uun,maxnests,nxmaxn,nymaxn,nuvzmax, + + ngrid,nxn,nyn,nuvz,memind,uvheight,xtn,ytn,zt,memtime(indexf), + + memtime(indexf+1),itime,indexf,uint) + call interpoln(vvn,maxnests,nxmaxn,nymaxn,nuvzmax, + + ngrid,nxn,nyn,nuvz,memind,uvheight,xtn,ytn,zt,memtime(indexf), + + memtime(indexf+1),itime,indexf,vint) + else ! bilinear interpolation + call lininterpoln(uun,maxnests,nxmaxn,nymaxn,nuvzmax, + + ngrid,nxn,nyn,nuvz,memind,uvheight,xtn,ytn,zt,memtime(indexf), + + memtime(indexf+1),itime,indexf,uint) + call lininterpoln(vvn,maxnests,nxmaxn,nymaxn,nuvzmax, + + ngrid,nxn,nyn,nuvz,memind,uvheight,xtn,ytn,zt,memtime(indexf), + + memtime(indexf+1),itime,indexf,vint) + endif + + else ! polar stereographic grid + ! only linear interpolation used + call lininterpol(uupol,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind, + + uvheight,xt,yt,zt,memtime(indexf),memtime(indexf+1),itime, + + indexf,uint) + call lininterpol(vvpol,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind, + + uvheight,xt,yt,zt,memtime(indexf),memtime(indexf+1),itime, + + indexf,vint) + endif + + else ! unstable layer + +C -> take the layer averaged wind velocity (weighted with pressure increments) +****************************************************************************** + + weight=0. + uhelp=0. + vhelp=0. + qhelp=0. + ph1=akz(indz1)+bkz(indz1)*psint + + do 10 i=indz1,indz2-1 + if (ngrid.ge.0) then ! mother grid + if ((inpolkind.eq.1).and.(iter.ne.1)) then + call levinterpol(uu,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,i,memtime(indexf),memtime(indexf+1),itime,indexf, + + uint) + call levinterpol(vv,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,i,memtime(indexf),memtime(indexf+1),itime,indexf, + + vint) + else ! bilinear interpolation + call levlininterpol(uu,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,i,memtime(indexf),memtime(indexf+1),itime,indexf, + + uint) + call levlininterpol(vv,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,i,memtime(indexf),memtime(indexf+1),itime,indexf, + + vint) + endif + + else if (ngrid.gt.0) then ! nested grid + + if ((inpolkind.eq.1).and.(iter.ne.1)) then + call levinterpoln(uun,maxnests,nxmaxn,nymaxn,nuvzmax,ngrid, + + nxn,nyn,memind,xtn,ytn,i,memtime(indexf),memtime(indexf+1), + + itime,indexf,uint) + call levinterpoln(vvn,maxnests,nxmaxn,nymaxn,nuvzmax,ngrid, + + nxn,nyn,memind,xtn,ytn,i,memtime(indexf),memtime(indexf+1), + + itime,indexf,vint) + else ! linear interpolation + call levlininterpoln(uun,maxnests,nxmaxn,nymaxn,nuvzmax,ngrid, + + nxn,nyn,memind,xtn,ytn,i,memtime(indexf),memtime(indexf+1), + + itime,indexf,uint) + call levlininterpoln(vvn,maxnests,nxmaxn,nymaxn,nuvzmax,ngrid, + + nxn,nyn,memind,xtn,ytn,i,memtime(indexf),memtime(indexf+1), + + itime,indexf,vint) + endif + + else ! polar stereographic grid + ! only linear interpolation used + call levlininterpol(uupol,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,i,memtime(indexf),memtime(indexf+1),itime,indexf, + + uint) + call levlininterpol(vvpol,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,i,memtime(indexf),memtime(indexf+1),itime,indexf, + + vint) + endif + ph2=akm(i+1)+bkm(i+1)*psint + weight=weight+ph1-ph2 + uhelp=uhelp+uint*(ph1-ph2) + vhelp=vhelp+vint*(ph1-ph2) +10 ph1=ph2 + + if (ngrid.ge.0) then ! mother grid + if ((inpolkind.eq.1).and.(iter.ne.1)) then + call levinterpol(uu,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,indz2,memtime(indexf),memtime(indexf+1),itime,indexf, + + uint) + call levinterpol(vv,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,indz2,memtime(indexf),memtime(indexf+1),itime,indexf, + + vint) + else ! bilinear interpolation + call levlininterpol(uu,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,indz2,memtime(indexf),memtime(indexf+1),itime,indexf, + + uint) + call levlininterpol(vv,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,indz2,memtime(indexf),memtime(indexf+1),itime,indexf, + + vint) + endif + + else if (ngrid.gt.0) then ! nested grid + + if ((inpolkind.eq.1).and.(iter.ne.1)) then + call levinterpoln(uun,maxnests,nxmaxn,nymaxn,nuvzmax,ngrid, + + nxn,nyn,memind,xtn,ytn,indz2,memtime(indexf), + + memtime(indexf+1),itime,indexf,uint) + call levinterpoln(vvn,maxnests,nxmaxn,nymaxn,nuvzmax,ngrid, + + nxn,nyn,memind,xtn,ytn,indz2,memtime(indexf), + + memtime(indexf+1),itime,indexf,vint) + else ! linear interpolation + call levlininterpoln(uun,maxnests,nxmaxn,nymaxn,nuvzmax,ngrid, + + nxn,nyn,memind,xtn,ytn,indz2,memtime(indexf), + + memtime(indexf+1),itime,indexf,uint) + call levlininterpoln(vvn,maxnests,nxmaxn,nymaxn,nuvzmax,ngrid, + + nxn,nyn,memind,xtn,ytn,indz2,memtime(indexf), + + memtime(indexf+1),itime,indexf,vint) + endif + + else ! polar stereographic grid + call levlininterpol(uupol,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,indz2,memtime(indexf),memtime(indexf+1),itime,indexf, + + uint) + call levlininterpol(vvpol,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,indz2,memtime(indexf),memtime(indexf+1),itime,indexf, + + vint) + endif + + ph2=akz(indz2)+bkz(indz2)*psint + weight=weight+ph1-ph2 + uhelp=uhelp+uint*(ph1-ph2) + vhelp=vhelp+vint*(ph1-ph2) + + uint=uhelp/weight + vint=vhelp/weight + endif + + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/interisobar.f b/projects/MissionSupport/applications/WxTraj/src/interisobar.f new file mode 100644 index 0000000..32de4a2 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/interisobar.f @@ -0,0 +1,148 @@ + subroutine interisobar(xt,yt,zt,pconst,indexf,itime,init, + +firststep,iter,lkindz,ngrid,uint,vint) +C i i i/o i i i i +C i i i i o o +******************************************************************************** +* * +* Interpolation routine for isobaric trajectories. * +* * +* Author: A. Stohl * +* * +* 27 April 1994 * +* * +* Update: 23 December 1998 (Use of global domain and nesting) * +* * +******************************************************************************** +* * +* Variables: * +* eta eta coordinate of pressure level * +* firststep .true. for first iteration of petterssen * +* idiff [s] Temporal distance between the windfields used for interpol* +* init .true. for first time step of trajectory * +* iter number of iteration step * +* itime [s] current temporal position * +* lkindz unit of z coordinate (1:masl, 2:magl, 3:hPa) * +* memtime(3) [s] times of the wind fields in memory * +* ngrid index which grid is to be used * + +* nstop =greater 0, if trajectory calculation is finished * +* pconst [Pa] pressure level, for which trajectories shall be calculated* +* uint,vint [m/s] interpolated wind components * +* xt,yt,zt coordinates position for which wind data shall be calculat* +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer itime,indexf,iter,lkindz,ngrid + real xt,yt,zt,uint,vint,psint,eta,pconst,pp,xtn,ytn + logical init,firststep + + +C Determine nested grid coordinates +*********************************** + + if (ngrid.gt.0) then + xtn=(xt-xln(ngrid))*xresoln(ngrid) + ytn=(yt-yln(ngrid))*yresoln(ngrid) + endif + + +C For a new trajectory and the first iteration of petterssen: +C Transformation from height in [m] coordinate to height in eta coordinate. +C Or: Transformation from hPa to eta. +C For this it is necessary to know the surface pressure. +*************************************************************************** + + if (init.and.firststep) then +C Calculate the surface pressure. +********************************* + + if (ngrid.gt.0) then ! nested grid + call levlininterpoln(psn,maxnests,nxmaxn,nymaxn,1,ngrid, + + nxn,nyn,memind,xtn,ytn,1,memtime(indexf),memtime(indexf+1), + + itime,indexf,psint) + else ! mother grid + call levlininterpol(ps,nxmax,nymax,1,nx,ny,memind,xt,yt, + + 1,memtime(indexf),memtime(indexf+1),itime,indexf,psint) + endif + + if ((lkindz.eq.1).or.(lkindz.eq.2)) then + if (ngrid.gt.0) then ! nested grid + call etatrafo(xtn,ytn,zt,memtime(indexf),memtime(indexf+1), + + itime,indexf,ngrid,psint) + else ! mother grid + call etatrafo(xt,yt,zt,memtime(indexf),memtime(indexf+1), + + itime,indexf,ngrid,psint) + endif + pconst=pp(psint,zt) + else if (lkindz.eq.3) then + zt=eta(psint,zt) + endif + endif + + +C Transformation from height in pressure coordinate to height in eta coordinate. +C For this it is necessary to know the surface pressure. +********************************************************************************* + + if (ngrid.gt.0) then + call levlininterpoln(psn,maxnests,nxmaxn,nymaxn,1,ngrid, + + nxn,nyn,memind,xtn,ytn,1,memtime(indexf),memtime(indexf+1), + + itime,indexf,psint) + else + call levlininterpol(ps,nxmax,nymax,1,nx,ny,memind,xt,yt, + + 1,memtime(indexf),memtime(indexf+1),itime,indexf,psint) + endif + zt=eta(psint,pconst) + + +C Interpolation of wind field data is done. +***************************************************************************** + + if (ngrid.eq.0) then ! mother grid + if ((inpolkind.eq.1).and.(iter.ne.1)) then + call interpol(uu,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind,uvheight, + + xt,yt,zt,memtime(indexf),memtime(indexf+1),itime,indexf,uint) + call interpol(vv,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind,uvheight, + + xt,yt,zt,memtime(indexf),memtime(indexf+1),itime,indexf,vint) + else ! bilinear interpolation + call lininterpol(uu,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind, + + uvheight,xt,yt,zt,memtime(indexf),memtime(indexf+1),itime, + + indexf,uint) + call lininterpol(vv,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind, + + uvheight,xt,yt,zt,memtime(indexf),memtime(indexf+1),itime, + + indexf,vint) + endif + + else if (ngrid.gt.0) then ! nested grid + + if ((inpolkind.eq.1).and.(iter.ne.1)) then + call interpoln(uun,maxnests,nxmaxn,nymaxn,nuvzmax, + + ngrid,nxn,nyn,nuvz,memind,uvheight,xtn,ytn,zt,memtime(indexf), + + memtime(indexf+1),itime,indexf,uint) + call interpoln(vvn,maxnests,nxmaxn,nymaxn,nuvzmax, + + ngrid,nxn,nyn,nuvz,memind,uvheight,xtn,ytn,zt,memtime(indexf), + + memtime(indexf+1),itime,indexf,vint) + else ! bilinear interpolation + call lininterpoln(uun,maxnests,nxmaxn,nymaxn,nuvzmax, + + ngrid,nxn,nyn,nuvz,memind,uvheight,xtn,ytn,zt,memtime(indexf), + + memtime(indexf+1),itime,indexf,uint) + call lininterpoln(vvn,maxnests,nxmaxn,nymaxn,nuvzmax, + + ngrid,nxn,nyn,nuvz,memind,uvheight,xtn,ytn,zt,memtime(indexf), + + memtime(indexf+1),itime,indexf,vint) + endif + + else ! polar stereographic grid + + call lininterpol(uupol,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind, + + uvheight,xt,yt,zt,memtime(indexf),memtime(indexf+1),itime, + + indexf,uint) + call lininterpol(vvpol,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind, + + uvheight,xt,yt,zt,memtime(indexf),memtime(indexf+1),itime, + + indexf,vint) + endif + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/intermix.f b/projects/MissionSupport/applications/WxTraj/src/intermix.f new file mode 100644 index 0000000..50f3aa6 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/intermix.f @@ -0,0 +1,258 @@ + subroutine intermix(xt,yt,zt,zconst,indexf,itime,iter,ngrid, + +uint,vint) +C i i i i i i i i +C o o +******************************************************************************** +* * +* Interpolation routine for mixing layer trajectories. * +* * +* Author: A. Stohl * +* * +* 27 April 1994 * +* * +* Update: 23 December 1998 (Use of global domain and nesting) * +* * +******************************************************************************** +* * +* Variables: * +* firstep .true. for first iteration of petterssen * +* hmix height of mixing layer in eta coordinates * +* idiff [s] Temporal distance between the windfields used for interpol* +* induvz index of the model layer beneath current position of traj.* +* init .true. for first time step of trajectory * +* iter number of iteration step * +* itime [s] current temporal position * +* memtime(3) [s] times of the wind fields in memory * +* pp [Pa] pressure at mixing height * +* ngrid index which grid is to be used * + +* nstop =greater 0, if trajectory calculation is finished * +* uint,vint [m/s] interpolated wind components * +* xt,yt,zt coordinates position for which wind data shall be calculat* +* zconst [m] height of mixing layer * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer i,itime,indexf,induvz,iter,ngrid + real xt,yt,zt,zconst,uint,vint,uhelp,vhelp,qhelp + real psint,xtn,ytn,hmix,weight,pp,ph1,ph2 + + +C Determine nested grid coordinates +*********************************** + + if (ngrid.gt.0) then + xtn=(xt-xln(ngrid))*xresoln(ngrid) + ytn=(yt-yln(ngrid))*yresoln(ngrid) + endif + + +C Transformation from mixing height in [m] coordinate to height in eta coordinate. +C For this it is necessary to know the surface pressure. +********************************************************************************** + + if (ngrid.gt.0) then ! nested grid + call levlininterpoln(psn,maxnests,nxmaxn,nymaxn,1,ngrid, + + nxn,nyn,memind,xtn,ytn,1,memtime(indexf),memtime(indexf+1), + + itime,indexf,psint) + hmix=zconst + call etatrafo(xtn,ytn,hmix,memtime(indexf),memtime(indexf+1), + + itime,indexf,ngrid,psint) + else ! mother grid + call levlininterpol(ps,nxmax,nymax,1,nx,ny,memind, + + xt,yt,1,memtime(indexf),memtime(indexf+1),itime,indexf,psint) + hmix=zconst + call etatrafo(xt,yt,hmix,memtime(indexf),memtime(indexf+1), + + itime,indexf,ngrid,psint) + endif + + +C Calculate the index of layers between which the mixed layer height is situated. +********************************************************************************* + + do 85 induvz=1,nuvz-1 + if (uvheight(induvz).ge.hmix) goto 86 +85 continue +86 continue + +C Mixed layer height is located between uvheight(induvz-1) and uvheight(induvz) +******************************************************************************* + +C 1.) If mixed layer height is lower than the first model level +C -> take wind data from first model level +*************************************************************** + + if (induvz.eq.1) then + zt=uvheight(1) + if (ngrid.eq.0) then ! mother grid + if ((inpolkind.eq.1).and.(iter.ne.1)) then + call levinterpol(uu,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,1,memtime(indexf),memtime(indexf+1),itime, + + indexf,uint) + call levinterpol(vv,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,1,memtime(indexf),memtime(indexf+1),itime, + + indexf,vint) + else ! linear interpolation + call levlininterpol(uu,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,1,memtime(indexf),memtime(indexf+1),itime, + + indexf,uint) + call levlininterpol(vv,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,1,memtime(indexf),memtime(indexf+1),itime, + + indexf,vint) + endif + + else if (ngrid.gt.0) then ! nested grid + + if ((inpolkind.eq.1).and.(iter.ne.1)) then + call levinterpoln(uun,maxnests,nxmaxn,nymaxn,nuvzmax,ngrid, + + nxn,nyn,memind,xtn,ytn,1,memtime(indexf),memtime(indexf+1), + + itime,indexf,uint) + call levinterpoln(vvn,maxnests,nxmaxn,nymaxn,nuvzmax,ngrid, + + nxn,nyn,memind,xtn,ytn,1,memtime(indexf),memtime(indexf+1), + + itime,indexf,vint) + else ! linear interpolation + call levlininterpoln(uun,maxnests,nxmaxn,nymaxn,nuvzmax,ngrid, + + nxn,nyn,memind,xtn,ytn,1,memtime(indexf),memtime(indexf+1), + + itime,indexf,uint) + call levlininterpoln(vvn,maxnests,nxmaxn,nymaxn,nuvzmax,ngrid, + + nxn,nyn,memind,xtn,ytn,1,memtime(indexf),memtime(indexf+1), + + itime,indexf,vint) + endif + + else ! polar stereographic grid + ! only linear interpolation used + call levlininterpol(uupol,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,1,memtime(indexf),memtime(indexf+1),itime, + + indexf,uint) + call levlininterpol(vvpol,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,1,memtime(indexf),memtime(indexf+1),itime, + + indexf,vint) + endif + + +C 2.) Normal case: mixed layer higher than the first model level +C -> take average wind within mixed layer for trajectory displacement +************************************************************************* + + else + weight=0. + uhelp=0. + vhelp=0. + qhelp=0. + ph1=psint + + do 140 i=1,induvz-2 + +C Interpolation of wind field data is done. +C -> Interpolated winds are weighted with the thicknesses of the layers +*********************************************************************** + + if (ngrid.eq.0) then ! mother grid + if ((inpolkind.eq.1).and.(iter.ne.1)) then + call levinterpol(uu,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,i,memtime(indexf),memtime(indexf+1),itime, + + indexf,uint) + call levinterpol(vv,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,i,memtime(indexf),memtime(indexf+1),itime, + + indexf,vint) + else ! bilinear interpolation + call levlininterpol(uu,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,i,memtime(indexf),memtime(indexf+1),itime, + + indexf,uint) + call levlininterpol(vv,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,i,memtime(indexf),memtime(indexf+1),itime, + + indexf,vint) + endif + + else if (ngrid.gt.0) then ! nested grid + if ((inpolkind.eq.1).and.(iter.ne.1)) then + call levinterpoln(uun,maxnests,nxmaxn,nymaxn,nuvzmax,ngrid, + + nxn,nyn,memind,xtn,ytn,i,memtime(indexf),memtime(indexf+1), + + itime,indexf,uint) + call levinterpoln(vvn,maxnests,nxmaxn,nymaxn,nuvzmax,ngrid, + + nxn,nyn,memind,xtn,ytn,i,memtime(indexf),memtime(indexf+1), + + itime,indexf,vint) + else ! linear interpolation + call levlininterpoln(uun,maxnests,nxmaxn,nymaxn,nuvzmax,ngrid, + + nxn,nyn,memind,xtn,ytn,i,memtime(indexf),memtime(indexf+1), + + itime,indexf,uint) + call levlininterpoln(vvn,maxnests,nxmaxn,nymaxn,nuvzmax,ngrid, + + nxn,nyn,memind,xtn,ytn,i,memtime(indexf),memtime(indexf+1), + + itime,indexf,vint) + endif + + else ! polar stereographic grid + ! only linear interpolation used + call levlininterpol(uupol,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,i,memtime(indexf),memtime(indexf+1),itime, + + indexf,uint) + call levlininterpol(vvpol,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,i,memtime(indexf),memtime(indexf+1),itime, + + indexf,vint) + endif + ph2=akm(i+1)+bkm(i+1)*psint + weight=weight+ph1-ph2 + uhelp=uhelp+uint*(ph1-ph2) + vhelp=vhelp+vint*(ph1-ph2) +140 ph1=ph2 + + + if (ngrid.eq.0) then ! mother grid + if ((inpolkind.eq.1).and.(iter.ne.1)) then + call levinterpol(uu,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,induvz-1,memtime(indexf),memtime(indexf+1),itime, + + indexf,uint) + call levinterpol(vv,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,induvz-1,memtime(indexf),memtime(indexf+1),itime, + + indexf,vint) + else ! bilinear interpolation + call levlininterpol(uu,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,induvz-1,memtime(indexf),memtime(indexf+1),itime, + + indexf,uint) + call levlininterpol(vv,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,induvz-1,memtime(indexf),memtime(indexf+1),itime, + + indexf,vint) + endif + + else if (ngrid.gt.0) then ! nested grid + + if ((inpolkind.eq.1).and.(iter.ne.1)) then + call levinterpoln(uun,maxnests,nxmaxn,nymaxn,nuvzmax,ngrid, + + nxn,nyn,memind,xtn,ytn,induvz-1,memtime(indexf), + + memtime(indexf+1),itime,indexf,uint) + call levinterpoln(vvn,maxnests,nxmaxn,nymaxn,nuvzmax,ngrid, + + nxn,nyn,memind,xtn,ytn,induvz-1,memtime(indexf), + + memtime(indexf+1),itime,indexf,vint) + else ! linear interpolation + call levlininterpoln(uun,maxnests,nxmaxn,nymaxn,nuvzmax, + + ngrid,nxn,nyn,memind,xtn,ytn,induvz-1,memtime(indexf), + + memtime(indexf+1),itime,indexf,uint) + call levlininterpoln(vvn,maxnests,nxmaxn,nymaxn,nuvzmax, + + ngrid,nxn,nyn,memind,xtn,ytn,induvz-1,memtime(indexf), + + memtime(indexf+1),itime,indexf,vint) + endif + + else ! polar stereographic grid + ! only linear interpolation used + call levlininterpol(uupol,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,induvz-1,memtime(indexf),memtime(indexf+1),itime, + + indexf,uint) + call levlininterpol(vvpol,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,induvz-1,memtime(indexf),memtime(indexf+1),itime, + + indexf,vint) + endif + ph2=pp(psint,hmix) + weight=weight+ph1-ph2 + uhelp=uhelp+uint*(ph1-ph2) + vhelp=vhelp+vint*(ph1-ph2) + + uint=uhelp/weight + vint=vhelp/weight + endif + zt=hmix + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/intermod.f b/projects/MissionSupport/applications/WxTraj/src/intermod.f new file mode 100644 index 0000000..21113a4 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/intermod.f @@ -0,0 +1,131 @@ + subroutine intermod(xt,yt,zt,indexf,itime,init,firststep, + +iter,lkindz,ngrid,uint,vint) +C i i i i i i i +C i i i o o +******************************************************************************** +* * +* Interpolation routine for trajectories on model layers. * +* * +* Author: A. Stohl * +* * +* 27 April 1994 * +* * +* Update: 23 December 1998 (Use of global domain and nesting) * +* * +******************************************************************************** +* * +* Variables: * +* firstep .true. for first iteration of petterssen * +* idiff [s] Temporal distance between the windfields used for interpol* +* init .true. for first time step of trajectory * +* iter number of iteration step * +* itime [s] current temporal position * +* lkindz unit of z coordinate (1:masl, 2:magl, 3:hPa) * +* memtime(3) [s] times of the wind fields in memory * +* ngrid index which grid is to be used * +* nstop =greater 0, if trajectory calculation is finished * +* uint,vint [m/s] interpolated wind components * +* xt,yt,zt coordinates position for which wind data shall be calculat* +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer itime,indexf,iter,lkindz,ngrid + real xt,yt,zt,uint,vint,psint,eta,xtn,ytn + logical firststep,init + + +C Determine nested grid coordinates +*********************************** + + if (ngrid.gt.0) then + xtn=(xt-xln(ngrid))*xresoln(ngrid) + ytn=(yt-yln(ngrid))*yresoln(ngrid) + endif + + +C For a new trajectory and the first iteration of petterssen: +C Transformation from height in [m] coordinate to height in eta coordinate. +C Or: Transformation from hPa to eta. +*************************************************************************** + + if (init.and.firststep) then +C Calculate the surface pressure. +********************************* + + if (ngrid.gt.0) then ! nested grid + call levlininterpoln(psn,maxnests,nxmaxn,nymaxn,1,ngrid, + + nxn,nyn,memind,xtn,ytn,1,memtime(indexf),memtime(indexf+1), + + itime,indexf,psint) + else ! mother grid + call levlininterpol(ps,nxmax,nymax,1,nx,ny,memind,xt,yt, + + 1,memtime(indexf),memtime(indexf+1),itime,indexf,psint) + endif + + if ((lkindz.eq.1).or.(lkindz.eq.2)) then + if (ngrid.gt.0) then ! nested grid + call etatrafo(xtn,ytn,zt,memtime(indexf),memtime(indexf+1), + + itime,indexf,ngrid,psint) + else ! mother grid + call etatrafo(xt,yt,zt,memtime(indexf),memtime(indexf+1), + + itime,indexf,ngrid,psint) + endif + else if (lkindz.eq.3) then + zt=eta(psint,zt) + endif + endif + + + +C Interpolation of wind field data is done. +C Either linear interpolation (if selected and for first iteration +C of petterssen) or bicubic interpolation +**************************************************************************** + + if (ngrid.eq.0) then ! mother grid + if ((inpolkind.eq.1).and.(iter.ne.1)) then + call interpol(uu,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind,uvheight, + + xt,yt,zt,memtime(indexf),memtime(indexf+1),itime,indexf,uint) + call interpol(vv,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind,uvheight, + + xt,yt,zt,memtime(indexf),memtime(indexf+1),itime,indexf,vint) + else ! bilinear interpolation + call lininterpol(uu,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind, + + uvheight,xt,yt,zt,memtime(indexf),memtime(indexf+1),itime, + + indexf,uint) + call lininterpol(vv,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind, + + uvheight,xt,yt,zt,memtime(indexf),memtime(indexf+1),itime, + + indexf,vint) + endif + + else if (ngrid.gt.0) then ! nested grid + + if ((inpolkind.eq.1).and.(iter.ne.1)) then + call interpoln(uun,maxnests,nxmaxn,nymaxn,nuvzmax, + + ngrid,nxn,nyn,nuvz,memind,uvheight,xtn,ytn,zt,memtime(indexf), + + memtime(indexf+1),itime,indexf,uint) + call interpoln(vvn,maxnests,nxmaxn,nymaxn,nuvzmax, + + ngrid,nxn,nyn,nuvz,memind,uvheight,xtn,ytn,zt,memtime(indexf), + + memtime(indexf+1),itime,indexf,vint) + else ! bilinear interpolation + call lininterpoln(uun,maxnests,nxmaxn,nymaxn,nuvzmax, + + ngrid,nxn,nyn,nuvz,memind,uvheight,xtn,ytn,zt,memtime(indexf), + + memtime(indexf+1),itime,indexf,uint) + call lininterpoln(vvn,maxnests,nxmaxn,nymaxn,nuvzmax, + + ngrid,nxn,nyn,nuvz,memind,uvheight,xtn,ytn,zt,memtime(indexf), + + memtime(indexf+1),itime,indexf,vint) + endif + + else ! polar stereographic grid + ! only linear interpolation used + call lininterpol(uupol,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind, + + uvheight,xt,yt,zt,memtime(indexf),memtime(indexf+1),itime, + + indexf,uint) + call lininterpol(vvpol,nxmax,nymax,nuvzmax,nx,ny,nuvz,memind, + + uvheight,xt,yt,zt,memtime(indexf),memtime(indexf+1),itime, + + indexf,vint) + endif + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/interpol.f b/projects/MissionSupport/applications/WxTraj/src/interpol.f new file mode 100644 index 0000000..dfc2784 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/interpol.f @@ -0,0 +1,275 @@ + subroutine interpol(yy,nxmax,nymax,nzmax,nx,ny,nz,memind,height, + +xt,yt,zt,itime1,itime2,itime,indexf,yint) +C i i i i i i i i i +C i i i i i i i o +***************************************************************************** +* * +* Interpolation of 3-dimensional meteorological fields. * +* In horizontal direction bicubic interpolation interpolation is used. * +* In the vertical a polynomial interpolation is used. * +* In the temporal direction linear interpolation is used. * +* These interpolation techniques have been found to be most accurate. * +* * +* The interpolation routines have been taken from: * +* Press W.H. et al. (1992): Numerical Recipes in FORTRAN. The art of * +* scientific computing. 2nd edition. Cambridge University Press. * +* * +* But they have been modified for faster performance. * +* * +* 4-3 * +* | | The points are numbered in this order. Values and gradients are * +* 1-2 stored in fields with dimension 4. * +* * +* 1,2 is the level closest to the current position for the first time * +* 1,1 is the level below 1,2 * +* 1,3 is the level above 1,2 * +* 2,2 is the level closest to the current position for the second time * +* 2,1 is the level below 2,2 * +* 2,3 is the level above 2,2 * +* * +* * +* Author: A. Stohl * +* * +* 30 May 1994 * +* * +***************************************************************************** +* * +* Variables: * +* * +* dt1,dt2 time differences between fields and current position * +* dz1,dz2 z distance between levels and current position * +* height(nzmax) heights of the model levels * +* indexf indicates the number of the wind field to be read in * +* indexfh help variable * +* indz the level closest to the current trajectory position * +* indzh help variable * +* itime current time * +* itime1 time of the first wind field * +* itime2 time of the second wind field * +* ix,jy x,y coordinates of lower left subgrid point * +* memind(3) points to the places of the wind fields * +* nx,ny,nz actual field dimensions in x,y and z direction * +* nxmax,nymax,nzmax maximum field dimensions in x,y and z direction * +* x1l,x2l x,y coordinates of lower left subgrid point * +* x1u,x2u x,y coordinates of upper right subgrid point * +* xt current x coordinate * +* y(4,2,3) subset of 4 points for 2 times and 3 levels * +* ygx(4,2,3) x gradients at 4 points for 2 times and 3 levels * +* ygy(4,2,3) y gradients at 4 points for 2 times and 3 levels * +* ygxy(4,2,3) x,y gradients at 4 points for 2 times and 3 levels * +* yhelp(2,3) the interpolated values for 2 times and 3 levels * +* yh2(2) the interpolated values for the 2 times * +* yint the final interpolated value * +* yt current y coordinate * +* yy(0:nxmax,0:nymax,nzmax,3) meteorological field used for interpolation * +* zt current z coordinate * +* * +***************************************************************************** + + implicit none + + integer nx,ny,nz,nxmax,nymax,nzmax,memind(3),i,j,l,m,n,ix,jy + integer itime,itime1,itime2,indexf,indz,indexfh,indzh,im,ip,jm,jp + real yy(0:nxmax-1,0:nymax-1,nzmax,3),height(nzmax) + real y(4,2,3),ygx(4,2,3),ygy(4,2,3),ygxy(4,2,3),yhelp(2,3),yh2(2) + real x1l,x1u,x2l,x2u,dz1,dz2,dt1,dt2,zz(3) + real xt,yt,zt,yint + + +C 3 levels are needed for the polynomial interpolation in the vertical +C Determine the closest vertical level -1 +********************************************************************** + + do 5 i=1,nz-1 + if ((height(i).le.zt).and.(height(i+1).ge.zt)) then + dz1=zt-height(i) + dz2=height(i+1)-zt + if (dz1.lt.dz2) then + indz=i-1 + else + indz=i + endif + goto 6 + endif +5 continue +6 continue + if (indz.lt.1) indz=1 + if (indz.gt.(nz-2)) indz=nz-2 + + +C If point at border of grid -> small displacement into grid +************************************************************ + + if (xt.ge.float(nx-1)) xt=float(nx-1)-0.00001 + if (yt.ge.float(ny-1)) yt=float(ny-1)-0.00001 + + + +*********************************************************************** +C 1.) Bicubic horizontal interpolation +C This has to be done separately for 6 fields (Temporal(2)*Vertical(3)) +*********************************************************************** + +C Determine the lower left corner +********************************* + + ix=int(xt) + jy=int(yt) + + x1l=float(ix) + x1u=float(ix+1) + x2l=float(jy) + x2u=float(jy+1) + + +C Loop over the 2*2 grid points +******************************* + + do 10 l=1,4 + if (l.eq.1) then + i=ix + j=jy + else if (l.eq.2) then + i=ix+1 + j=jy + else if (l.eq.3) then + i=ix+1 + j=jy+1 + else if (l.eq.4) then + i=ix + j=jy+1 + endif + ip=i+1 + im=i-1 + jp=j+1 + jm=j-1 + + +C Loop over 2 time steps and 3 levels +************************************* + + do 10 m=1,2 + indexfh=memind(indexf+m-1) + do 10 n=1,3 + indzh=indz+n-1 + + +C Values at the 2*2 subgrid +*************************** + + y(l,m,n)=yy(i,j,indzh,indexfh) + + +C Calculate derivatives in x-direction on the 2*2 subgrid +********************************************************* + + if (i.eq.0) then + ygx(l,m,n) = yy(ip,j ,indzh,indexfh) + + - yy(i ,j ,indzh,indexfh) + else if (i.eq.nx-1) then + ygx(l,m,n) = yy(i ,j ,indzh,indexfh) + + - yy(im,j ,indzh,indexfh) + else + ygx(l,m,n) =(yy(ip,j ,indzh,indexfh) + + - yy(im,j ,indzh,indexfh))/2. + endif + + +C Calculate derivatives in y-direction on the 2*2 subgrid +********************************************************* + + if (j.eq.0) then + ygy(l,m,n) = yy(i ,jp,indzh,indexfh) + + - yy(i ,j ,indzh,indexfh) + else if (j.eq.ny-1) then + ygy(l,m,n) = yy(i ,j ,indzh,indexfh) + + - yy(i ,jm,indzh,indexfh) + else + ygy(l,m,n) =(yy(i ,jp,indzh,indexfh) + + - yy(i ,jm,indzh,indexfh))/2. + endif + + +C Calculate cross derivative on the 2*2 subgrid +*********************************************** + + if ((i.eq.0).and.(j.eq.0)) then + ygxy(l,m,n)= yy(ip,jp,indzh,indexfh)- + + yy(ip,j ,indzh,indexfh)- + + yy(i ,jp,indzh,indexfh)+ + + yy(i ,j ,indzh,indexfh) + else if ((i.eq.nx-1).and.(j.eq.ny-1)) then + ygxy(l,m,n)= yy(i ,j ,indzh,indexfh)- + + yy(i ,jm,indzh,indexfh)- + + yy(im,j ,indzh,indexfh)+ + + yy(im,jm,indzh,indexfh) + else if ((i.eq.0).and.(j.eq.ny-1)) then + ygxy(l,m,n)= yy(ip,j ,indzh,indexfh)- + + yy(ip,jm,indzh,indexfh)- + + yy(i ,j ,indzh,indexfh)+ + + yy(i ,jm,indzh,indexfh) + else if ((i.eq.nx-1).and.(j.eq.0)) then + ygxy(l,m,n)= yy(i ,jp,indzh,indexfh)- + + yy(i ,j ,indzh,indexfh)- + + yy(im,jp,indzh,indexfh)+ + + yy(im,j ,indzh,indexfh) + else if (i.eq.nx-1) then + ygxy(l,m,n)=(yy(i ,jp,indzh,indexfh)- + + yy(i ,jm,indzh,indexfh)- + + yy(im,jp,indzh,indexfh)+ + + yy(im,jm,indzh,indexfh))/2. + else if (i.eq.0) then + ygxy(l,m,n)=(yy(ip,jp,indzh,indexfh)- + + yy(ip,jm,indzh,indexfh)- + + yy(i ,jp,indzh,indexfh)+ + + yy(i ,jm,indzh,indexfh))/2. + else if (j.eq.ny-1) then + ygxy(l,m,n)=(yy(ip,j ,indzh,indexfh)- + + yy(ip,jm,indzh,indexfh)- + + yy(im,j ,indzh,indexfh)+ + + yy(im,jm,indzh,indexfh))/2. + else if (j.eq.0) then + ygxy(l,m,n)=(yy(ip,jp,indzh,indexfh)- + + yy(ip,j ,indzh,indexfh)- + + yy(im,jp,indzh,indexfh)+ + + yy(im,j ,indzh,indexfh))/2. + else + ygxy(l,m,n)=(yy(ip,jp,indzh,indexfh)- + + yy(ip,jm,indzh,indexfh)- + + yy(im,jp,indzh,indexfh)+ + + yy(im,jm,indzh,indexfh))/4. + endif + +10 continue + + +C Call bicubic interpolation +**************************** + + call bicubic(y,ygx,ygy,ygxy,x1l,x1u,x2l,x2u,xt,yt,yhelp,2,3) + + + +************************************************** +C 2. Vertical interpolation by a 2nd order polynom +************************************************** + + do 20 n=1,3 +20 zz(n)=height(indz+n-1) + + call polynom(zz,yhelp,3,zt,yh2,2) + + + +************************************* +C 3.) Temporal interpolation (linear) +************************************* + + dt1=float(itime-itime1) + dt2=float(itime2-itime) + + yint=(yh2(1)*dt2+yh2(2)*dt1)/(dt1+dt2) + + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/interpol_nests.f b/projects/MissionSupport/applications/WxTraj/src/interpol_nests.f new file mode 100644 index 0000000..71bd8fe --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/interpol_nests.f @@ -0,0 +1,276 @@ + subroutine interpoln(yy,maxnests,nxmax,nymax,nzmax,ngrid, + +nxn,nyn,nz,memind,height,xt,yt,zt,itime1,itime2,itime,indexf,yint) +C i i i i i i +C i i i i i i i i i i i i i +***************************************************************************** +* * +* Interpolation of nested 3-dimensional meteorological fields. * +* In horizontal direction bicubic interpolation interpolation is used. * +* In the vertical a polynomial interpolation is used. * +* In the temporal direction linear interpolation is used. * +* These interpolation techniques have been found to be most accurate. * +* * +* The interpolation routines have been taken from: * +* Press W.H. et al. (1992): Numerical Recipes in FORTRAN. The art of * +* scientific computing. 2nd edition. Cambridge University Press. * +* * +* But they have been modified for faster performance. * +* * +* 4-3 * +* | | The points are numbered in this order. Values and gradients are * +* 1-2 stored in fields with dimension 4. * +* * +* 1,2 is the level closest to the current position for the first time * +* 1,1 is the level below 1,2 * +* 1,3 is the level above 1,2 * +* 2,2 is the level closest to the current position for the second time * +* 2,1 is the level below 2,2 * +* 2,3 is the level above 2,2 * +* * +* * +* Author: A. Stohl * +* * +* 30 May 1994 * +* * +***************************************************************************** +* * +* Variables: * +* * +* dt1,dt2 time differences between fields and current position * +* dz1,dz2 z distance between levels and current position * +* height(nzmax) heights of the model levels * +* indexf indicates the number of the wind field to be read in * +* indexfh help variable * +* indz the level closest to the current trajectory position * +* indzh help variable * +* itime current time * +* itime1 time of the first wind field * +* itime2 time of the second wind field * +* ix,jy x,y coordinates of lower left subgrid point * +* memind(3) points to the places of the wind fields * +* nx,ny,nz actual field dimensions in x,y and z direction * +* nxmax,nymax,nzmax maximum field dimensions in x,y and z direction * +* x1l,x2l x,y coordinates of lower left subgrid point * +* x1u,x2u x,y coordinates of upper right subgrid point * +* xt current x coordinate * +* y(4,2,3) subset of 4 points for 2 times and 3 levels * +* ygx(4,2,3) x gradients at 4 points for 2 times and 3 levels * +* ygy(4,2,3) y gradients at 4 points for 2 times and 3 levels * +* ygxy(4,2,3) x,y gradients at 4 points for 2 times and 3 levels * +* yhelp(2,3) the interpolated values for 2 times and 3 levels * +* yh2(2) the interpolated values for the 2 times * +* yint the final interpolated value * +* yt current y coordinate * +* yy(0:nxmax,0:nymax,nzmax,3) meteorological field used for interpolation * +* zt current z coordinate * +* * +***************************************************************************** + + implicit none + + integer maxnests,nxn(maxnests),nyn(maxnests),nz,nxmax,nymax,nzmax + integer ngrid,memind(3),i,j,l,m,n,ix,jy + integer itime,itime1,itime2,indexf,indz,indexfh,indzh,im,ip,jm,jp + real yy(0:nxmax-1,0:nymax-1,nzmax,3,maxnests),height(nzmax) + real y(4,2,3),ygx(4,2,3),ygy(4,2,3),ygxy(4,2,3),yhelp(2,3),yh2(2) + real x1l,x1u,x2l,x2u,dz1,dz2,dt1,dt2,zz(3) + real xt,yt,zt,yint + + +C 3 levels are needed for the polynomial interpolation in the vertical +C Determine the closest vertical level -1 +********************************************************************** + + do 5 i=1,nz-1 + if ((height(i).le.zt).and.(height(i+1).ge.zt)) then + dz1=zt-height(i) + dz2=height(i+1)-zt + if (dz1.lt.dz2) then + indz=i-1 + else + indz=i + endif + goto 6 + endif +5 continue +6 continue + if (indz.lt.1) indz=1 + if (indz.gt.(nz-2)) indz=nz-2 + + +C If point at border of grid -> small displacement into grid +************************************************************ + + if (xt.ge.float(nxn(ngrid)-1)) xt=float(nxn(ngrid)-1)-0.00001 + if (yt.ge.float(nyn(ngrid)-1)) yt=float(nyn(ngrid)-1)-0.00001 + + + +*********************************************************************** +C 1.) Bicubic horizontal interpolation +C This has to be done separately for 6 fields (Temporal(2)*Vertical(3)) +*********************************************************************** + +C Determine the lower left corner +********************************* + + ix=int(xt) + jy=int(yt) + + x1l=float(ix) + x1u=float(ix+1) + x2l=float(jy) + x2u=float(jy+1) + + +C Loop over the 2*2 grid points +******************************* + + do 10 l=1,4 + if (l.eq.1) then + i=ix + j=jy + else if (l.eq.2) then + i=ix+1 + j=jy + else if (l.eq.3) then + i=ix+1 + j=jy+1 + else if (l.eq.4) then + i=ix + j=jy+1 + endif + ip=i+1 + im=i-1 + jp=j+1 + jm=j-1 + + +C Loop over 2 time steps and 3 levels +************************************* + + do 10 m=1,2 + indexfh=memind(indexf+m-1) + do 10 n=1,3 + indzh=indz+n-1 + + +C Values at the 2*2 subgrid +*************************** + + y(l,m,n)=yy(i,j,indzh,indexfh,ngrid) + + +C Calculate derivatives in x-direction on the 2*2 subgrid +********************************************************* + + if (i.eq.0) then + ygx(l,m,n) = yy(ip,j ,indzh,indexfh,ngrid) + + - yy(i ,j ,indzh,indexfh,ngrid) + else if (i.eq.nxn(ngrid)-1) then + ygx(l,m,n) = yy(i ,j ,indzh,indexfh,ngrid) + + - yy(im,j ,indzh,indexfh,ngrid) + else + ygx(l,m,n) =(yy(ip,j ,indzh,indexfh,ngrid) + + - yy(im,j ,indzh,indexfh,ngrid))/2. + endif + + +C Calculate derivatives in y-direction on the 2*2 subgrid +********************************************************* + + if (j.eq.0) then + ygy(l,m,n) = yy(i ,jp,indzh,indexfh,ngrid) + + - yy(i ,j ,indzh,indexfh,ngrid) + else if (j.eq.nyn(ngrid)-1) then + ygy(l,m,n) = yy(i ,j ,indzh,indexfh,ngrid) + + - yy(i ,jm,indzh,indexfh,ngrid) + else + ygy(l,m,n) =(yy(i ,jp,indzh,indexfh,ngrid) + + - yy(i ,jm,indzh,indexfh,ngrid))/2. + endif + + +C Calculate cross derivative on the 2*2 subgrid +*********************************************** + + if ((i.eq.0).and.(j.eq.0)) then + ygxy(l,m,n)= yy(ip,jp,indzh,indexfh,ngrid)- + + yy(ip,j ,indzh,indexfh,ngrid)- + + yy(i ,jp,indzh,indexfh,ngrid)+ + + yy(i ,j ,indzh,indexfh,ngrid) + else if ((i.eq.nxn(ngrid)-1).and.(j.eq.nyn(ngrid)-1)) then + ygxy(l,m,n)= yy(i ,j ,indzh,indexfh,ngrid)- + + yy(i ,jm,indzh,indexfh,ngrid)- + + yy(im,j ,indzh,indexfh,ngrid)+ + + yy(im,jm,indzh,indexfh,ngrid) + else if ((i.eq.0).and.(j.eq.nyn(ngrid)-1)) then + ygxy(l,m,n)= yy(ip,j ,indzh,indexfh,ngrid)- + + yy(ip,jm,indzh,indexfh,ngrid)- + + yy(i ,j ,indzh,indexfh,ngrid)+ + + yy(i ,jm,indzh,indexfh,ngrid) + else if ((i.eq.nxn(ngrid)-1).and.(j.eq.0)) then + ygxy(l,m,n)= yy(i ,jp,indzh,indexfh,ngrid)- + + yy(i ,j ,indzh,indexfh,ngrid)- + + yy(im,jp,indzh,indexfh,ngrid)+ + + yy(im,j ,indzh,indexfh,ngrid) + else if (i.eq.nxn(ngrid)-1) then + ygxy(l,m,n)=(yy(i ,jp,indzh,indexfh,ngrid)- + + yy(i ,jm,indzh,indexfh,ngrid)- + + yy(im,jp,indzh,indexfh,ngrid)+ + + yy(im,jm,indzh,indexfh,ngrid))/2. + else if (i.eq.0) then + ygxy(l,m,n)=(yy(ip,jp,indzh,indexfh,ngrid)- + + yy(ip,jm,indzh,indexfh,ngrid)- + + yy(i ,jp,indzh,indexfh,ngrid)+ + + yy(i ,jm,indzh,indexfh,ngrid))/2. + else if (j.eq.nyn(ngrid)-1) then + ygxy(l,m,n)=(yy(ip,j ,indzh,indexfh,ngrid)- + + yy(ip,jm,indzh,indexfh,ngrid)- + + yy(im,j ,indzh,indexfh,ngrid)+ + + yy(im,jm,indzh,indexfh,ngrid))/2. + else if (j.eq.0) then + ygxy(l,m,n)=(yy(ip,jp,indzh,indexfh,ngrid)- + + yy(ip,j ,indzh,indexfh,ngrid)- + + yy(im,jp,indzh,indexfh,ngrid)+ + + yy(im,j ,indzh,indexfh,ngrid))/2. + else + ygxy(l,m,n)=(yy(ip,jp,indzh,indexfh,ngrid)- + + yy(ip,jm,indzh,indexfh,ngrid)- + + yy(im,jp,indzh,indexfh,ngrid)+ + + yy(im,jm,indzh,indexfh,ngrid))/4. + endif + +10 continue + + +C Call bicubic interpolation +**************************** + + call bicubic(y,ygx,ygy,ygxy,x1l,x1u,x2l,x2u,xt,yt,yhelp,2,3) + + + +************************************************** +C 2. Vertical interpolation by a 2nd order polynom +************************************************** + + do 20 n=1,3 +20 zz(n)=height(indz+n-1) + + call polynom(zz,yhelp,3,zt,yh2,2) + + + +************************************* +C 3.) Temporal interpolation (linear) +************************************* + + dt1=float(itime-itime1) + dt2=float(itime2-itime) + + yint=(yh2(1)*dt2+yh2(2)*dt1)/(dt1+dt2) + + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/juldate.f b/projects/MissionSupport/applications/WxTraj/src/juldate.f new file mode 100644 index 0000000..ae06722 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/juldate.f @@ -0,0 +1,59 @@ + FUNCTION juldate(YYYYMMDD,HHMISS) +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* * +* Calculates the Julian date * +* * +* AUTHOR: Andreas Stohl (15 October 1993) * +* * +* Variables: * +* DD Day * +* HH Hour * +* HHMISS Hour, minute + second * +* JA,JM,JY help variables * +* JULDATE Julian Date * +* JULDAY help variable * +* MI Minute * +* MM Month * +* SS Second * +* YYYY Year * +* YYYYMMDDHH Date and Time * +* * +* Constants: * +* IGREG help constant * +* * +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + + IMPLICIT NONE + + INTEGER YYYYMMDD,YYYY,MM,DD,HH,MI,SS,HHMISS + INTEGER JULDAY,JY,JM,JA,IGREG + DOUBLE PRECISION JULDATE + PARAMETER (IGREG=15+31*(10+12*1582)) + + YYYY=YYYYMMDD/10000 + MM=(YYYYMMDD-10000*YYYY)/100 + DD=YYYYMMDD-10000*YYYY-100*MM + HH=HHMISS/10000 + MI=(HHMISS-10000*HH)/100 + SS=HHMISS-10000*HH-100*MI + + IF (YYYY.EQ.0) PAUSE 'There is no Year Zero.' + IF (YYYY.LT.0) YYYY=YYYY+1 + IF (MM.GT.2) THEN + JY=YYYY + JM=MM+1 + ELSE + JY=YYYY-1 + JM=MM+13 + ENDIF + JULDAY=INT(365.25*JY)+INT(30.6001*JM)+DD+1720995 + IF (DD+31*(MM+12*YYYY).GE.IGREG) THEN + JA=INT(0.01*JY) + JULDAY=JULDAY+2-JA+INT(0.25*JA) + ENDIF + + JULDATE=DBLE(FLOAT(JULDAY))+DBLE(FLOAT(HH)/24.)+ + +DBLE(FLOAT(MI)/1440.)+DBLE(FLOAT(SS)/86400.) + + RETURN + END diff --git a/projects/MissionSupport/applications/WxTraj/src/lamphi_ecmwf.f b/projects/MissionSupport/applications/WxTraj/src/lamphi_ecmwf.f new file mode 100644 index 0000000..1417f9f --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/lamphi_ecmwf.f @@ -0,0 +1,31 @@ + subroutine lamphi_ecmwf(xmod,ymod,xlon,ylat) +C i i o o +******************************************************************************** +* * +* This routine transforms model coordinates to geografical coordinates. * +* * +* Authors: A. Stohl * +* * +* 7 April 1994 * +* * +******************************************************************************** +* * +* Variables: * +* xmod,ymod model coordinates * +* xlon,ylat geografical coordinates * + +* Constants: * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + real xlon,ylat,xmod,ymod + + + xlon=xmod*dx+xlon0 + ylat=ymod*dy+ylat0 + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/lastprocessor.f b/projects/MissionSupport/applications/WxTraj/src/lastprocessor.f new file mode 100644 index 0000000..f10a979 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/lastprocessor.f @@ -0,0 +1,174 @@ + subroutine lastprocessor() +******************************************************************************** +* * +* Back trajectories are produced in the wrong temporal direction by the * +* trajectory model. This means the first trajectory is the last one in the * +* file and the last one is the first one. * +* This routine reverses the direction so that the first date is also first * +* in the file. * +* * +* Author: A. Stohl * +* * +* 8 April 1994 * +* * +******************************************************************************** +* * +* Variables: * +* data(maximum) data content of file * +* header header of file * +* inter index, if trajectory is interpolated or not * +* last,numbmax help variables * +* numpoint number of starting positions = number of output files * +* * +* Constants: * +* maximum maximum number of lines the procedure can handle * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer maximum,numbmax,last,i,j,k + parameter(maximum=50000) + character header(98)*70,data(maximum)*80 + + + +C First: original trajectories (flexible time step) +*************************************************** + + if ((inter.eq.0).or.(inter.eq.2)) then + +C Reverse direction only for back trajectories. +C Read whole output file and store it in memory. +************************************************ + + if (ldirect.eq.-1) then + do 10 i=1,numpoint ! loop over all starting points=files + rewind(unittraj+i) + do 20 j=1,42+4*numbnests +20 read(unittraj+i,'(a)') header(j) + do 30 j=1,maximum +30 read(unittraj+i,'(a)',end=35) data(j) + +35 numbmax=j-1 + + +C If content of file exceeds available memory, don't reverse file +***************************************************************** + + if (numbmax.eq.maximum) then + k=index(compoint(i),' ')-1 + k=min(k,7) + write(*,*) '!!! Warning !!! The content of file:' + if (compoint(i)(41:41).ne.'U') then ! no uncertainty trajectory + write(*,*) 'T_'//compoint(i)(1:k) + else + write(*,*) 'T_'//compoint(i)(1:k)//'_U'//compoint(i) + + (42:45) + endif + write(*,*) 'is too long for postprocessing.' + write(*,*) 'Please use manual postprocessor!' + write(*,*) + goto 10 + endif + +C Rewind file and write it new with reversed direction +****************************************************** + + rewind(unittraj+i) + do 40 j=1,42+4*numbnests +40 write(unittraj+i,'(a)') header(j) + last=numbmax + do 50 j=numbmax,1,-1 + if (data(j)(1:1).eq.'D') then + write(unittraj+i,'(a)') data(j) + do 60 k=j+1,last +60 write(unittraj+i,'(a)') data(k) + last=j-1 + endif +50 continue +10 continue + + endif + +C Close output files +******************** + + do 70 i=1,numpoint +70 close(unittraj+i) + endif + + + +C Second: interpolated trajectories (constant time step) +******************************************************** + + if (inter.ge.1) then + +C Reverse direction only for back trajectories. +C Read whole output file and store it in memory. +************************************************ + + if (ldirect.eq.-1) then + do 110 i=1,numpoint ! loop over all starting points=files + rewind(unittraji+i) + do 120 j=1,42+4*numbnests +120 read(unittraji+i,'(a)') header(j) + do 130 j=1,maximum +130 read(unittraji+i,'(a)',end=135) data(j) + +135 numbmax=j-1 + + +C If content of file exceeds available memory, don't reverse file +***************************************************************** + + if (numbmax.eq.maximum) then + k=index(compoint(i),' ')-1 + k=min(k,7) + write(*,*) '!!! Warning !!! The content of file:' + if (compoint(i)(41:41).ne.'U') then ! no uncertainty trajectory + write(*,*) 'TI_'//compoint(i)(1:k) + else + write(*,*) 'TI_'//compoint(i)(1:k)//'_U'//compoint(i) + + (42:45) + endif + write(*,*) 'is too long for postprocessing.' + write(*,*) 'Please use manual postprocessor!' + write(*,*) + goto 110 + endif + + +C Rewind file and write it new with reversed direction +****************************************************** + + rewind(unittraji+i) + do 140 j=1,42+4*numbnests +140 write(unittraji+i,'(a)') header(j) + last=numbmax + do 150 j=numbmax,1,-1 + if (data(j)(1:1).eq.'D') then + write(unittraji+i,'(a)') data(j) + do 160 k=j+1,last +160 write(unittraji+i,'(a)') data(k) + last=j-1 + endif +150 continue +110 continue + + endif + + +C Close output files and go for a coffee +**************************************** + + do 170 i=1,numpoint +170 close(unittraji+i) + endif + + + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/levinterpol.f b/projects/MissionSupport/applications/WxTraj/src/levinterpol.f new file mode 100644 index 0000000..c544cf2 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/levinterpol.f @@ -0,0 +1,236 @@ + subroutine levinterpol(yy,nxmax,nymax,nzmax,nx,ny,memind, + +xt,yt,level,itime1,itime2,itime,indexf,yint) +C i i i i i i i +C i i i i i i i o +***************************************************************************** +* * +* Interpolation of 3-dimensional meteorological fields. * +* In horizontal direction bicubic interpolation interpolation is used. * +* In the temporal direction linear interpolation is used. * +* These interpolation techniques have been found to be most accurate. * +* * +* The interpolation routines have been taken from: * +* Press W.H. et al. (1992): Numerical Recipes in FORTRAN. The art of * +* scientific computing. 2nd edition. Cambridge University Press. * +* * +* But they have been modified for faster performance. * +* * +* 4-3 * +* | | The points are numbered in this order. Values and gradients are * +* 1-2 stored in fields with dimension 4. * +* * +* 1 is the first time * +* 2 is the second time * +* * +* * +* Author: A. Stohl * +* * +* 30 May 1994 * +* * +***************************************************************************** +* * +* Variables: * +* * +* dt1,dt2 time differences between fields and current position * +* indexf indicates the number of the wind field to be read in * +* indexfh help variable * +* level help variable * +* itime current time * +* itime1 time of the first wind field * +* itime2 time of the second wind field * +* ix,jy x,y coordinates of lower left subgrid point * +* level level for which interpolation shall be done * +* memind(3) points to the places of the wind fields * +* nx,ny actual field dimensions in x,y and z direction * +* nxmax,nymax,nzmax maximum field dimensions in x,y and z direction * +* x1l,x2l x,y coordinates of lower left subgrid point * +* x1u,x2u x,y coordinates of upper right subgrid point * +* xt current x coordinate * +* y(4,2,1) subset of 4 points for 2 times and 1 level * +* ygx(4,2,1) x gradients at 4 points for 2 times and 1 level * +* ygy(4,2,1) y gradients at 4 points for 2 times and 1 level * +* ygxy(4,2,1) x,y gradients at 4 points for 2 times and 1 level * +* yhelp(2,1) the interpolated values for 2 times and 1 level * +* yint the final interpolated value * +* yt current y coordinate * +* yy(0:nxmax,0:nymax,nzmax,3) meteorological field used for interpolation * +* * +***************************************************************************** + + implicit none + + integer nx,ny,nxmax,nymax,nzmax,memind(3),i,j,l,m,n,ix,jy + integer level,itime,itime1,itime2,indexf,indexfh,im,ip,jm,jp + real yy(0:nxmax-1,0:nymax-1,nzmax,3) + real y(4,2,1),ygx(4,2,1),ygy(4,2,1),ygxy(4,2,1),yhelp(2,1) + real x1l,x1u,x2l,x2u,dt1,dt2 + real xt,yt,yint + + + +C If point at border of grid -> small displacement into grid +************************************************************ + + if (xt.ge.float(nx-1)) xt=float(nx-1)-0.00001 + if (yt.ge.float(ny-1)) yt=float(ny-1)-0.00001 + + + +*********************************************************************** +C 1.) Bicubic horizontal interpolation +C This has to be done separately for 2 fields (Temporal) +*********************************************************************** + +C Determine the lower left corner +********************************* + + ix=int(xt) + jy=int(yt) + + x1l=float(ix) + x1u=float(ix+1) + x2l=float(jy) + x2u=float(jy+1) + + +C Loop over the 2*2 grid points +******************************* + + do 10 l=1,4 + if (l.eq.1) then + i=ix + j=jy + else if (l.eq.2) then + i=ix+1 + j=jy + else if (l.eq.3) then + i=ix+1 + j=jy+1 + else if (l.eq.4) then + i=ix + j=jy+1 + endif + ip=i+1 + im=i-1 + jp=j+1 + jm=j-1 + + +C Loop over 2 time steps and 3 levels +************************************* + + do 10 m=1,2 + do 10 n=1,1 ! this loop and dimension is necessary to be in + ! agreement with the full 3-d interpolation + + indexfh=memind(indexf+m-1) + + +C Values at the 2*2 subgrid +*************************** + + y(l,m,n)=yy(i,j,level,indexfh) + + +C Calculate derivatives in x-direction on the 2*2 subgrid +********************************************************* + + if (i.eq.0) then + ygx(l,m,n) = yy(ip,j ,level,indexfh) + + - yy(i ,j ,level,indexfh) + else if (i.eq.nx-1) then + ygx(l,m,n) = yy(i ,j ,level,indexfh) + + - yy(im,j ,level,indexfh) + else + ygx(l,m,n) =(yy(ip,j ,level,indexfh) + + - yy(im,j ,level,indexfh))/2. + endif + + +C Calculate derivatives in y-direction on the 2*2 subgrid +********************************************************* + + if (j.eq.0) then + ygy(l,m,n) = yy(i ,jp,level,indexfh) + + - yy(i ,j ,level,indexfh) + else if (j.eq.ny-1) then + ygy(l,m,n) = yy(i ,j ,level,indexfh) + + - yy(i ,jm,level,indexfh) + else + ygy(l,m,n) =(yy(i ,jp,level,indexfh) + + - yy(i ,jm,level,indexfh))/2. + endif + + +C Calculate cross derivative on the 2*2 subgrid +*********************************************** + + if ((i.eq.0).and.(j.eq.0)) then + ygxy(l,m,n)= yy(ip,jp,level,indexfh)- + + yy(ip,j ,level,indexfh)- + + yy(i ,jp,level,indexfh)+ + + yy(i ,j ,level,indexfh) + else if ((i.eq.nx-1).and.(j.eq.ny-1)) then + ygxy(l,m,n)= yy(i ,j ,level,indexfh)- + + yy(i ,jm,level,indexfh)- + + yy(im,j ,level,indexfh)+ + + yy(im,jm,level,indexfh) + else if ((i.eq.0).and.(j.eq.ny-1)) then + ygxy(l,m,n)= yy(ip,j ,level,indexfh)- + + yy(ip,jm,level,indexfh)- + + yy(i ,j ,level,indexfh)+ + + yy(i ,jm,level,indexfh) + else if ((i.eq.nx-1).and.(j.eq.0)) then + ygxy(l,m,n)= yy(i ,jp,level,indexfh)- + + yy(i ,j ,level,indexfh)- + + yy(im,jp,level,indexfh)+ + + yy(im,j ,level,indexfh) + else if (i.eq.nx-1) then + ygxy(l,m,n)=(yy(i ,jp,level,indexfh)- + + yy(i ,jm,level,indexfh)- + + yy(im,jp,level,indexfh)+ + + yy(im,jm,level,indexfh))/2. + else if (i.eq.0) then + ygxy(l,m,n)=(yy(ip,jp,level,indexfh)- + + yy(ip,jm,level,indexfh)- + + yy(i ,jp,level,indexfh)+ + + yy(i ,jm,level,indexfh))/2. + else if (j.eq.ny-1) then + ygxy(l,m,n)=(yy(ip,j ,level,indexfh)- + + yy(ip,jm,level,indexfh)- + + yy(im,j ,level,indexfh)+ + + yy(im,jm,level,indexfh))/2. + else if (j.eq.0) then + ygxy(l,m,n)=(yy(ip,jp,level,indexfh)- + + yy(ip,j ,level,indexfh)- + + yy(im,jp,level,indexfh)+ + + yy(im,j ,level,indexfh))/2. + else + ygxy(l,m,n)=(yy(ip,jp,level,indexfh)- + + yy(ip,jm,level,indexfh)- + + yy(im,jp,level,indexfh)+ + + yy(im,jm,level,indexfh))/4. + endif + +10 continue + + +C Call bicubic interpolation +**************************** + + call bicubic(y,ygx,ygy,ygxy,x1l,x1u,x2l,x2u,xt,yt,yhelp,2,1) + + + +************************************* +C 2.) Temporal interpolation (linear) +************************************* + + dt1=float(itime-itime1) + dt2=float(itime2-itime) + + yint=(yhelp(1,1)*dt2+yhelp(2,1)*dt1)/(dt1+dt2) + + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/levinterpol_nests.f b/projects/MissionSupport/applications/WxTraj/src/levinterpol_nests.f new file mode 100644 index 0000000..ef3cb29 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/levinterpol_nests.f @@ -0,0 +1,237 @@ + subroutine levinterpoln(yy,maxnests,nxmax,nymax,nzmax,ngrid, + +nxn,nyn,memind,xt,yt,level,itime1,itime2,itime,indexf,yint) +C i i i i i i +C i i i i i i i i i i i +***************************************************************************** +* * +* Interpolation of nested 3-dimensional meteorological fields. * +* In horizontal direction bicubic interpolation interpolation is used. * +* In the temporal direction linear interpolation is used. * +* These interpolation techniques have been found to be most accurate. * +* * +* The interpolation routines have been taken from: * +* Press W.H. et al. (1992): Numerical Recipes in FORTRAN. The art of * +* scientific computing. 2nd edition. Cambridge University Press. * +* * +* But they have been modified for faster performance. * +* * +* 4-3 * +* | | The points are numbered in this order. Values and gradients are * +* 1-2 stored in fields with dimension 4. * +* * +* 1 is the first time * +* 2 is the second time * +* * +* * +* Author: A. Stohl * +* * +* 30 May 1994 * +* * +***************************************************************************** +* * +* Variables: * +* * +* dt1,dt2 time differences between fields and current position * +* indexf indicates the number of the wind field to be read in * +* indexfh help variable * +* level help variable * +* itime current time * +* itime1 time of the first wind field * +* itime2 time of the second wind field * +* ix,jy x,y coordinates of lower left subgrid point * +* level level for which interpolation shall be done * +* memind(3) points to the places of the wind fields * +* nx,ny actual field dimensions in x,y and z direction * +* nxmax,nymax,nzmax maximum field dimensions in x,y and z direction * +* x1l,x2l x,y coordinates of lower left subgrid point * +* x1u,x2u x,y coordinates of upper right subgrid point * +* xt current x coordinate * +* y(4,2,1) subset of 4 points for 2 times and 1 level * +* ygx(4,2,1) x gradients at 4 points for 2 times and 1 level * +* ygy(4,2,1) y gradients at 4 points for 2 times and 1 level * +* ygxy(4,2,1) x,y gradients at 4 points for 2 times and 1 level * +* yhelp(2,1) the interpolated values for 2 times and 1 level * +* yint the final interpolated value * +* yt current y coordinate * +* yy(0:nxmax,0:nymax,nzmax,3) meteorological field used for interpolation * +* * +***************************************************************************** + + implicit none + + integer maxnests,nxn(maxnests),nyn(maxnests),nxmax,nymax,nzmax + integer memind(3),i,j,l,m,n,ngrid,ix,jy + integer level,itime,itime1,itime2,indexf,indexfh,im,ip,jm,jp + real yy(0:nxmax-1,0:nymax-1,nzmax,3,maxnests) + real y(4,2,1),ygx(4,2,1),ygy(4,2,1),ygxy(4,2,1),yhelp(2,1) + real x1l,x1u,x2l,x2u,dt1,dt2 + real xt,yt,yint + + + +C If point at border of grid -> small displacement into grid +************************************************************ + + if (xt.ge.float(nxn(ngrid)-1)) xt=float(nxn(ngrid)-1)-0.00001 + if (yt.ge.float(nyn(ngrid)-1)) yt=float(nyn(ngrid)-1)-0.00001 + + + +*********************************************************************** +C 1.) Bicubic horizontal interpolation +C This has to be done separately for 2 fields (Temporal) +*********************************************************************** + +C Determine the lower left corner +********************************* + + ix=int(xt) + jy=int(yt) + + x1l=float(ix) + x1u=float(ix+1) + x2l=float(jy) + x2u=float(jy+1) + + +C Loop over the 2*2 grid points +******************************* + + do 10 l=1,4 + if (l.eq.1) then + i=ix + j=jy + else if (l.eq.2) then + i=ix+1 + j=jy + else if (l.eq.3) then + i=ix+1 + j=jy+1 + else if (l.eq.4) then + i=ix + j=jy+1 + endif + ip=i+1 + im=i-1 + jp=j+1 + jm=j-1 + + +C Loop over 2 time steps and 3 levels +************************************* + + do 10 m=1,2 + do 10 n=1,1 ! this loop and dimension is necessary to be in + ! agreement with the full 3-d interpolation + + indexfh=memind(indexf+m-1) + + +C Values at the 2*2 subgrid +*************************** + + y(l,m,n)=yy(i,j,level,indexfh,ngrid) + + +C Calculate derivatives in x-direction on the 2*2 subgrid +********************************************************* + + if (i.eq.0) then + ygx(l,m,n) = yy(ip,j ,level,indexfh,ngrid) + + - yy(i ,j ,level,indexfh,ngrid) + else if (i.eq.nxn(ngrid)-1) then + ygx(l,m,n) = yy(i ,j ,level,indexfh,ngrid) + + - yy(im,j ,level,indexfh,ngrid) + else + ygx(l,m,n) =(yy(ip,j ,level,indexfh,ngrid) + + - yy(im,j ,level,indexfh,ngrid))/2. + endif + + +C Calculate derivatives in y-direction on the 2*2 subgrid +********************************************************* + + if (j.eq.0) then + ygy(l,m,n) = yy(i ,jp,level,indexfh,ngrid) + + - yy(i ,j ,level,indexfh,ngrid) + else if (j.eq.nyn(ngrid)-1) then + ygy(l,m,n) = yy(i ,j ,level,indexfh,ngrid) + + - yy(i ,jm,level,indexfh,ngrid) + else + ygy(l,m,n) =(yy(i ,jp,level,indexfh,ngrid) + + - yy(i ,jm,level,indexfh,ngrid))/2. + endif + + +C Calculate cross derivative on the 2*2 subgrid +*********************************************** + + if ((i.eq.0).and.(j.eq.0)) then + ygxy(l,m,n)= yy(ip,jp,level,indexfh,ngrid)- + + yy(ip,j ,level,indexfh,ngrid)- + + yy(i ,jp,level,indexfh,ngrid)+ + + yy(i ,j ,level,indexfh,ngrid) + else if ((i.eq.nxn(ngrid)-1).and.(j.eq.nyn(ngrid)-1)) then + ygxy(l,m,n)= yy(i ,j ,level,indexfh,ngrid)- + + yy(i ,jm,level,indexfh,ngrid)- + + yy(im,j ,level,indexfh,ngrid)+ + + yy(im,jm,level,indexfh,ngrid) + else if ((i.eq.0).and.(j.eq.nyn(ngrid)-1)) then + ygxy(l,m,n)= yy(ip,j ,level,indexfh,ngrid)- + + yy(ip,jm,level,indexfh,ngrid)- + + yy(i ,j ,level,indexfh,ngrid)+ + + yy(i ,jm,level,indexfh,ngrid) + else if ((i.eq.nxn(ngrid)-1).and.(j.eq.0)) then + ygxy(l,m,n)= yy(i ,jp,level,indexfh,ngrid)- + + yy(i ,j ,level,indexfh,ngrid)- + + yy(im,jp,level,indexfh,ngrid)+ + + yy(im,j ,level,indexfh,ngrid) + else if (i.eq.nxn(ngrid)-1) then + ygxy(l,m,n)=(yy(i ,jp,level,indexfh,ngrid)- + + yy(i ,jm,level,indexfh,ngrid)- + + yy(im,jp,level,indexfh,ngrid)+ + + yy(im,jm,level,indexfh,ngrid))/2. + else if (i.eq.0) then + ygxy(l,m,n)=(yy(ip,jp,level,indexfh,ngrid)- + + yy(ip,jm,level,indexfh,ngrid)- + + yy(i ,jp,level,indexfh,ngrid)+ + + yy(i ,jm,level,indexfh,ngrid))/2. + else if (j.eq.nyn(ngrid)-1) then + ygxy(l,m,n)=(yy(ip,j ,level,indexfh,ngrid)- + + yy(ip,jm,level,indexfh,ngrid)- + + yy(im,j ,level,indexfh,ngrid)+ + + yy(im,jm,level,indexfh,ngrid))/2. + else if (j.eq.0) then + ygxy(l,m,n)=(yy(ip,jp,level,indexfh,ngrid)- + + yy(ip,j ,level,indexfh,ngrid)- + + yy(im,jp,level,indexfh,ngrid)+ + + yy(im,j ,level,indexfh,ngrid))/2. + else + ygxy(l,m,n)=(yy(ip,jp,level,indexfh,ngrid)- + + yy(ip,jm,level,indexfh,ngrid)- + + yy(im,jp,level,indexfh,ngrid)+ + + yy(im,jm,level,indexfh,ngrid))/4. + endif + +10 continue + + +C Call bicubic interpolation +**************************** + + call bicubic(y,ygx,ygy,ygxy,x1l,x1u,x2l,x2u,xt,yt,yhelp,2,1) + + + +************************************* +C 2.) Temporal interpolation (linear) +************************************* + + dt1=float(itime-itime1) + dt2=float(itime2-itime) + + yint=(yhelp(1,1)*dt2+yhelp(2,1)*dt1)/(dt1+dt2) + + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/levlininterpol.f b/projects/MissionSupport/applications/WxTraj/src/levlininterpol.f new file mode 100644 index 0000000..a176b6c --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/levlininterpol.f @@ -0,0 +1,105 @@ + subroutine levlininterpol(yy,nxmax,nymax,nzmax,nx,ny,memind, + +xt,yt,level,itime1,itime2,itime,indexf,yint) +C i i i i i i i +C i i i i i i i o +***************************************************************************** +* * +* Interpolation of meteorological fields on 2-d model layers. * +* In horizontal direction bilinear interpolation interpolation is used. * +* Temporally a linear interpolation is used. * +* * +* 1 first time * +* 2 second time * +* * +* * +* Author: A. Stohl * +* * +* 30 May 1994 * +* * +***************************************************************************** +* * +* Variables: * +* * +* dt1,dt2 time differences between fields and current position * +* dz1,dz2 z distance between levels and current position * +* height(nzmax) heights of the model levels * +* indexf indicates the number of the wind field to be read in * +* indexfh help variable * +* indz the level closest to the current trajectory position * +* indzh help variable * +* itime current time * +* itime1 time of the first wind field * +* itime2 time of the second wind field * +* ix,jy x,y coordinates of lower left subgrid point * +* level level at which interpolation shall be done * +* memind(3) points to the places of the wind fields * +* nx,ny actual field dimensions in x,y and z direction * +* nxmax,nymax,nzmax maximum field dimensions in x,y and z direction * +* xt current x coordinate * +* yint the final interpolated value * +* yt current y coordinate * +* yy(0:nxmax,0:nymax,nzmax,3) meteorological field used for interpolation * +* zt current z coordinate * +* * +***************************************************************************** + + implicit none + + integer nx,ny,nxmax,nymax,nzmax,memind(3),m,ix,jy,ixp,jyp + integer itime,itime1,itime2,level,indexf,indexfh + real yy(0:nxmax-1,0:nymax-1,nzmax,3) + real ddx,ddy,rddx,rddy,dt1,dt2,y(2) + real xt,yt,yint + + + +C If point at border of grid -> small displacement into grid +************************************************************ + + if (xt.ge.float(nx-1)) xt=float(nx-1)-0.00001 + if (yt.ge.float(ny-1)) yt=float(ny-1)-0.00001 + + + +*********************************************************************** +C 1.) Bilinear horizontal interpolation +C This has to be done separately for 2 fields (Temporal) +******************************************************** + +C Determine the lower left corner and its distance to the current position +************************************************************************** + + ix=int(xt) + jy=int(yt) + ixp=ix+1 + jyp=jy+1 + ddx=xt-float(ix) + ddy=yt-float(jy) + rddx=1.-ddx + rddy=1.-ddy + + +C Loop over 2 time steps +************************ + + do 10 m=1,2 + indexfh=memind(indexf+m-1) + +10 y(m)=rddx*rddy*yy(ix ,jy ,level,indexfh) + + + ddx*rddy*yy(ixp,jy ,level,indexfh) + + +rddx* ddy*yy(ix ,jyp,level,indexfh) + + + ddx* ddy*yy(ixp,jyp,level,indexfh) + + +************************************* +C 2.) Temporal interpolation (linear) +************************************* + + dt1=float(itime-itime1) + dt2=float(itime2-itime) + + yint=(y(1)*dt2+y(2)*dt1)/(dt1+dt2) + + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/levlininterpol_nests.f b/projects/MissionSupport/applications/WxTraj/src/levlininterpol_nests.f new file mode 100644 index 0000000..7932234 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/levlininterpol_nests.f @@ -0,0 +1,106 @@ + subroutine levlininterpoln(yy,maxnests,nxmax,nymax,nzmax,ngrid, + +nxn,nyn,memind,xt,yt,level,itime1,itime2,itime,index,yint) +C i i i i i i +C i i i i i i i i i i i +***************************************************************************** +* * +* Interpolation of meteorological fields on 2-d model layers. * +* In horizontal direction bilinear interpolation interpolation is used. * +* Temporally a linear interpolation is used. * +* * +* 1 first time * +* 2 second time * +* * +* * +* Author: A. Stohl * +* * +* 30 May 1994 * +* * +***************************************************************************** +* * +* Variables: * +* * +* dt1,dt2 time differences between fields and current position * +* dz1,dz2 z distance between levels and current position * +* height(nzmax) heights of the model levels * +* index indicates the number of the wind field to be read in * +* indexh help variable * +* indz the level closest to the current trajectory position * +* indzh help variable * +* itime current time * +* itime1 time of the first wind field * +* itime2 time of the second wind field * +* ix,jy x,y coordinates of lower left subgrid point * +* level level at which interpolation shall be done * +* memind(3) points to the places of the wind fields * +* nx,ny actual field dimensions in x,y and z direction * +* nxmax,nymax,nzmax maximum field dimensions in x,y and z direction * +* xt current x coordinate * +* yint the final interpolated value * +* yt current y coordinate * +* yy(0:nxmax,0:nymax,nzmax,3) meteorological field used for interpolation * +* zt current z coordinate * +* * +***************************************************************************** + + implicit none + + integer maxnests,nxn(maxnests),nyn(maxnests),nxmax,nymax,nzmax + integer ngrid,memind(3),m,ix,jy,ixp,jyp + integer itime,itime1,itime2,level,index,indexh + real yy(0:nxmax-1,0:nymax-1,nzmax,3,maxnests) + real ddx,ddy,rddx,rddy,dt1,dt2,y(2) + real xt,yt,yint + + + +C If point at border of grid -> small displacement into grid +************************************************************ + + if (xt.ge.float(nxn(ngrid)-1)) xt=float(nxn(ngrid)-1)-0.00001 + if (yt.ge.float(nyn(ngrid)-1)) yt=float(nyn(ngrid)-1)-0.00001 + + + +*********************************************************************** +C 1.) Bilinear horizontal interpolation +C This has to be done separately for 2 fields (Temporal) +******************************************************** + +C Determine the lower left corner and its distance to the current position +************************************************************************** + + ix=int(xt) + jy=int(yt) + ixp=ix+1 + jyp=jy+1 + ddx=xt-float(ix) + ddy=yt-float(jy) + rddx=1.-ddx + rddy=1.-ddy + + +C Loop over 2 time steps +************************ + + do 10 m=1,2 + indexh=memind(index+m-1) + +10 y(m)=rddx*rddy*yy(ix ,jy ,level,indexh,ngrid) + + + ddx*rddy*yy(ixp,jy ,level,indexh,ngrid) + + +rddx* ddy*yy(ix ,jyp,level,indexh,ngrid) + + + ddx* ddy*yy(ixp,jyp,level,indexh,ngrid) + + +************************************* +C 2.) Temporal interpolation (linear) +************************************* + + dt1=float(itime-itime1) + dt2=float(itime2-itime) + + yint=(y(1)*dt2+y(2)*dt1)/(dt1+dt2) + + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/lininterpol.f b/projects/MissionSupport/applications/WxTraj/src/lininterpol.f new file mode 100644 index 0000000..f74b7c6 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/lininterpol.f @@ -0,0 +1,135 @@ + subroutine lininterpol(yy,nxmax,nymax,nzmax,nx,ny,nz,memind, + +height,xt,yt,zt,itime1,itime2,itime,indexf,yint) +C i i i i i i i i +C i i i i i i i i o +***************************************************************************** +* * +* Interpolation of 3-dimensional meteorological fields. * +* In horizontal direction bilinear interpolation interpolation is used. * +* In the vertical and temporally a linear interpolation is used. * +* * +* 1,1 is the level below current position for the first time * +* 1,2 is the level above current position for the first time * +* 2,1 is the level below current position for the second time * +* 2,2 is the level above current position for the second time * +* * +* * +* Author: A. Stohl * +* * +* 30 May 1994 * +* * +***************************************************************************** +* * +* Variables: * +* * +* dt1,dt2 time differences between fields and current position * +* dz1,dz2 z distance between levels and current position * +* height(nzmax) heights of the model levels * +* indexf indicates the number of the wind field to be read in * +* indexfh help variable * +* indz the level closest to the current trajectory position * +* indzh help variable * +* itime current time * +* itime1 time of the first wind field * +* itime2 time of the second wind field * +* ix,jy x,y coordinates of lower left subgrid point * +* memind(3) points to the places of the wind fields * +* nx,ny,nz actual field dimensions in x,y and z direction * +* nxmax,nymax,nzmax maximum field dimensions in x,y and z direction * +* xt current x coordinate * +* yint the final interpolated value * +* yt current y coordinate * +* yy(0:nxmax-1,0:nymax-1,nzmax,3)meteorological field used for interpolation* +* zt current z coordinate * +* * +***************************************************************************** + + implicit none + + integer nx,ny,nz,nxmax,nymax,nzmax,memind(3),i,m,n,ix,jy,ixp,jyp + integer itime,itime1,itime2,indexf,indz,indexfh,indzh + real yy(0:nxmax-1,0:nymax-1,nzmax,3),height(nzmax) + real ddx,ddy,rddx,rddy,dz1,dz2,dt1,dt2,y(2),yh(2) + real xt,yt,zt,yint + + +C Determine the level below the current position +************************************************ + + do 5 i=1,nz-1 + if ((height(i).le.zt).and.(height(i+1).ge.zt)) then + indz=i + goto 6 + endif +5 continue +6 continue + + +C If point at border of grid -> small displacement into grid +************************************************************ + + if (xt.ge.float(nx-1)) xt=float(nx-1)-0.00001 + if (yt.ge.float(ny-1)) yt=float(ny-1)-0.00001 + + + +*********************************************************************** +C 1.) Bilinear horizontal interpolation +C This has to be done separately for 6 fields (Temporal(2)*Vertical(3)) +*********************************************************************** + +C Determine the lower left corner and its distance to the current position +************************************************************************** + + ix=int(xt) + jy=int(yt) + ixp=ix+1 + jyp=jy+1 + ddx=xt-float(ix) + ddy=yt-float(jy) + rddx=1.-ddx + rddy=1.-ddy + + +C Vertical distance to the level below and above current position +***************************************************************** + + dz1=zt-height(indz) + dz2=height(indz+1)-zt + + +C Loop over 2 time steps and 2 levels +************************************* + + do 10 m=1,2 + indexfh=memind(indexf+m-1) + do 20 n=1,2 + indzh=indz+n-1 + +20 y(n)=rddx*rddy*yy(ix ,jy ,indzh,indexfh) + + + ddx*rddy*yy(ixp,jy ,indzh,indexfh) + + +rddx* ddy*yy(ix ,jyp,indzh,indexfh) + + + ddx* ddy*yy(ixp,jyp,indzh,indexfh) + + + +*********************************** +C 2.) Linear vertical interpolation +*********************************** + +10 yh(m)=(dz2*y(1)+dz1*y(2))/(dz1+dz2) + + + +************************************* +C 3.) Temporal interpolation (linear) +************************************* + + dt1=float(itime-itime1) + dt2=float(itime2-itime) + + yint=(yh(1)*dt2+yh(2)*dt1)/(dt1+dt2) + + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/lininterpol_nests.f b/projects/MissionSupport/applications/WxTraj/src/lininterpol_nests.f new file mode 100644 index 0000000..8384cfd --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/lininterpol_nests.f @@ -0,0 +1,138 @@ + subroutine lininterpoln(yy,maxnests,nxmax,nymax,nzmax,ngrid, + +nxn,nyn,nz,memind,height,xt,yt,zt,itime1,itime2,itime,indexf,yint) +C i i i i i i +C i i i i i i i i i i i i o +***************************************************************************** +* * +* Interpolation of nested 3-dimensional meteorological fields. * +* In horizontal direction bilinear interpolation interpolation is used. * +* In the vertical and temporally a linear interpolation is used. * +* * +* 1,1 is the level below current position for the first time * +* 1,2 is the level above current position for the first time * +* 2,1 is the level below current position for the second time * +* 2,2 is the level above current position for the second time * +* * +* * +* Author: A. Stohl * +* * +* (30 May 1994) 9 January 1999 * +* * +***************************************************************************** +* * +* Variables: * +* * +* dt1,dt2 time differences between fields and current position * +* dz1,dz2 z distance between levels and current position * +* height(nzmax) heights of the model levels * +* indexf indicates the number of the wind field to be read in * +* indexfh help variable * +* indz the level closest to the current trajectory position * +* indzh help variable * +* itime current time * +* itime1 time of the first wind field * +* itime2 time of the second wind field * +* ix,jy x,y coordinates of lower left subgrid point * +* maxnests maximum allowed number of nests * +* memind(3) points to the places of the wind fields * +* ngrid currently used number of nests * +* nxn,nyn,nz actual field dimensions in x,y and z direction * +* nxmax,nymax,nzmax maximum field dimensions in x,y and z direction * +* xt current x coordinate * +* yint the final interpolated value * +* yt current y coordinate * +* yy(0:nxmax-1,0:nymax-1,nzmax,3)meteorological field used for interpolation* +* zt current z coordinate * +* * +***************************************************************************** + + implicit none + + integer maxnests,nxn(maxnests),nyn(maxnests),nz,nxmax,nymax,nzmax + integer ngrid,memind(3),i,m,n,ix,jy,ixp,jyp + integer itime,itime1,itime2,indexf,indz,indexfh,indzh + real yy(0:nxmax-1,0:nymax-1,nzmax,3,maxnests),height(nzmax) + real ddx,ddy,rddx,rddy,dz1,dz2,dt1,dt2,y(2),yh(2) + real xt,yt,zt,yint + + +C Determine the level below the current position +************************************************ + + do 5 i=1,nz-1 + if ((height(i).le.zt).and.(height(i+1).ge.zt)) then + indz=i + goto 6 + endif +5 continue +6 continue + + +C If point at border of grid -> small displacement into grid +************************************************************ + + if (xt.ge.float(nxn(ngrid)-1)) xt=float(nxn(ngrid)-1)-0.00001 + if (yt.ge.float(nyn(ngrid)-1)) yt=float(nyn(ngrid)-1)-0.00001 + + + +*********************************************************************** +C 1.) Bilinear horizontal interpolation +C This has to be done separately for 6 fields (Temporal(2)*Vertical(3)) +*********************************************************************** + +C Determine the lower left corner and its distance to the current position +************************************************************************** + + ix=int(xt) + jy=int(yt) + ixp=ix+1 + jyp=jy+1 + ddx=xt-float(ix) + ddy=yt-float(jy) + rddx=1.-ddx + rddy=1.-ddy + + +C Vertical distance to the level below and above current position +***************************************************************** + + dz1=zt-height(indz) + dz2=height(indz+1)-zt + + +C Loop over 2 time steps and 2 levels +************************************* + + do 10 m=1,2 + indexfh=memind(indexf+m-1) + do 20 n=1,2 + indzh=indz+n-1 + +20 y(n)=rddx*rddy*yy(ix ,jy ,indzh,indexfh,ngrid) + + + ddx*rddy*yy(ixp,jy ,indzh,indexfh,ngrid) + + +rddx* ddy*yy(ix ,jyp,indzh,indexfh,ngrid) + + + ddx* ddy*yy(ixp,jyp,indzh,indexfh,ngrid) + + + +*********************************** +C 2.) Linear vertical interpolation +*********************************** + +10 yh(m)=(dz2*y(1)+dz1*y(2))/(dz1+dz2) + + + +************************************* +C 3.) Temporal interpolation (linear) +************************************* + + dt1=float(itime-itime1) + dt2=float(itime2-itime) + + yint=(yh(1)*dt2+yh(2)*dt1)/(dt1+dt2) + + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/makefile b/projects/MissionSupport/applications/WxTraj/src/makefile new file mode 100644 index 0000000..77e5c18 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/makefile @@ -0,0 +1,60 @@ +SHELL = /bin/bash +MAIN = FLEXTRA_GEOS +INCF = incl* +# + +#INCPATH = ${BASEDIR}/Linux/include/netcdf +#LIBPATH1 = ${BASEDIR}/Linux/lib +LIB_NETCDF := $(shell $(BASEDIR)/Linux/bin/nf-config --flibs) +INC_NETCDF := $(shell $(BASEDIR)/Linux/bin/nf-config --cflags) + +#FFLAGS = -O2 -s -I $(INCPATH) -m64 -mcmodel=medium +#LDFLAGS = $(FFLAGS) -L $(LIBPATH1) -lnetcdff -lnetcdf + +FFLAGS = -O2 -s $(INC_NETCDF) -m64 -mcmodel=medium +LDFLAGS = $(FFLAGS) $(LIB_NETCDF) +# for calculon +#FC := mpiifort +# for discover +FC := gfortran -fallow-argument-mismatch +# + +OBJECTS = caldate.o openoutput.o \ + checklimits.o coordtrafo.o \ + orolininterpol.o etatrafo.o \ + petters.o eta.ecmwf.o FLEXTRA.o \ + pp.ecmwf.o geteta.o \ + getfields.o pvinterpol.o \ + getheight.o random.o \ + readavailable.o getwind.o \ + readcommand.o gridcheck.geos.o \ + inter3d.o readoro.o \ + interisentrop.o readpaths.o \ + interisobar.o readpoints.o \ + intermix.o readwind.geos.o \ + intermod.o subtractoro.o \ + interpol.o timemanager.o \ + juldate.o trajinterpol.o \ + lamphi_ecmwf.o trajout.o \ + lastprocessor.o uncertcoor.o \ + levinterpol.o utransform.o \ + levlininterpol.o vtransform.o \ + lininterpol.o wtransform.o \ + numerical.o zztrafo.o \ + cmapf1.0.o \ + lininterpol_nests.o \ + levlininterpol_nests.o orolininterpol_nests.o \ + interpol_nests.o levinterpol_nests.o \ + skplin.o readcet.o \ + opencetoutput.o openflightoutput.o \ + readflight.o calcpv.o \ + getmet.o calcpv_nests.o \ + swap32.o ew.o + +# gridcheck_nests.o readwind_nests.o + + +$(MAIN): $(OBJECTS) + $(FC) *.o -o $(MAIN) $(LDFLAGS) +$(OBJECTS): $(INCF) + diff --git a/projects/MissionSupport/applications/WxTraj/src/makefile.ecmwf b/projects/MissionSupport/applications/WxTraj/src/makefile.ecmwf new file mode 100644 index 0000000..6904c06 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/makefile.ecmwf @@ -0,0 +1,50 @@ +SHELL = /bin/bash +MAIN = FLEXTRA_ECMWF +INCF = incl* +# + +INCPATH = /nilu2/home/flexpart/lib64/absoft/include +LIBPATH1 = /nilu2/home/flexpart/lib64/absoft/lib +LIBPATH2 = /nilu2/home/flexpart/lib64/absoft/lib +FFLAGS = -O2 -s -I$(INCPATH) -p$(INCPATH) -m64 -mcmodel=medium +#FFLAGS = -g -Rb -Rc -Rs -s -I$(INCPATH) -p$(INCPATH) -m64 -mcmodel=medium +LDFLAGS = $(FFLAGS) -L$(LIBPATH2) -L$(LIBPATH1) -lgrib_api_f90 -lgrib_api -lm -ljasper +# + +OBJECTS = caldate.o openoutput.o \ + checklimits.o coordtrafo.o \ + orolininterpol.o etatrafo.o \ + petters.o eta.ecmwf.o FLEXTRA.o \ + pp.ecmwf.o geteta.o \ + getfields.o pvinterpol.o \ + getheight.o random.o \ + readavailable.o getwind.o \ + readcommand.o gridcheck.o \ + inter3d.o readoro.o \ + interisentrop.o readpaths.o \ + interisobar.o readpoints.o \ + intermix.o readwind.o \ + intermod.o subtractoro.o \ + interpol.o timemanager.o \ + juldate.o trajinterpol.o \ + lamphi_ecmwf.o trajout.o \ + lastprocessor.o uncertcoor.o \ + levinterpol.o utransform.o \ + levlininterpol.o vtransform.o \ + lininterpol.o wtransform.o \ + numerical.o zztrafo.o \ + cmapf1.0.o gridcheck_nests.o \ + readwind_nests.o lininterpol_nests.o \ + levlininterpol_nests.o orolininterpol_nests.o \ + interpol_nests.o levinterpol_nests.o \ + skplin.o readcet.o \ + opencetoutput.o openflightoutput.o \ + readflight.o calcpv.o \ + getmet.o calcpv_nests.o \ + swap32.o ew.o + + +$(MAIN): $(OBJECTS) + $(FC) *.o -o $(MAIN) $(LDFLAGS) +$(OBJECTS): $(INCF) + diff --git a/projects/MissionSupport/applications/WxTraj/src/makefile.gfs b/projects/MissionSupport/applications/WxTraj/src/makefile.gfs new file mode 100644 index 0000000..30205f0 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/makefile.gfs @@ -0,0 +1,51 @@ +SHELL = /bin/bash +MAIN = FLEXTRA_GFS +INCF = incl* +# + +FC = /opt/absoft/bin/f95 +INCPATH = /nilu/home/flexpart/lib/grib_api/include +LIBPATH1 = /nilu/home/flexpart/lib/grib_api/lib +LIBPATH2 = /nilu/home/flexpart/lib/jasper/lib +#FFLAGS = -s -B108 -YEXT_NAMES=LCS -I$(INCPATH) +FFLAGS = -g -Rb -Rc -Rs -s -B108 -YEXT_NAMES=LCS -I$(INCPATH) -p$(INCPATH) +LDFLAGS = $(FFLAGS) -L$(LIBPATH1) -L$(LIBPATH2) -lgrib_api_f77 -lgrib_api -lm -ljasper +# + +OBJECTS = caldate.o openoutput.o \ + checklimits.o coordtrafo.o \ + orolininterpol.o etatrafo.o \ + petters.o eta.ecmwf.o FLEXTRA.o \ + pp.ecmwf.o geteta.o \ + getfields.o pvinterpol.o \ + getheight.o random.o \ + readavailable.o getwind.o \ + readcommand.o gridcheck_gfs.o \ + inter3d.o readoro.o \ + interisentrop.o readpaths.o \ + interisobar.o readpoints.o \ + intermix.o readwind_gfs.o \ + intermod.o subtractoro.o \ + interpol.o timemanager.o \ + juldate.o trajinterpol.o \ + lamphi_ecmwf.o trajout.o \ + lastprocessor.o uncertcoor.o \ + levinterpol.o utransform.o \ + levlininterpol.o vtransform.o \ + lininterpol.o wtransform.o \ + numerical.o zztrafo.o \ + cmapf1.0.o gridcheck_nests_gfs.o \ + readwind_nests_gfs.o lininterpol_nests.o \ + levlininterpol_nests.o orolininterpol_nests.o \ + interpol_nests.o levinterpol_nests.o \ + skplin.o readcet.o \ + opencetoutput.o openflightoutput.o \ + readflight.o calcpv.o \ + getmet.o calcpv_nests.o \ + swap32.o ew_gfs.o + + +$(MAIN): $(OBJECTS) + $(FC) *.o -o $(MAIN) $(LDFLAGS) +$(OBJECTS): $(INCF) + diff --git a/projects/MissionSupport/applications/WxTraj/src/normal.py b/projects/MissionSupport/applications/WxTraj/src/normal.py new file mode 100644 index 0000000..7e58542 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/normal.py @@ -0,0 +1,136 @@ + +""" + Class to read FLEXTRA trajectoryoutput in NORMAL mode +""" + +import os, sys +import numpy as np +from datetime import datetime,timedelta + +SDS = 'sec','lon','lat','alt','starttime','starthour' + +class NORMAL(object): + def __init__(self,Path,verb=False): + + self.verb = verb + + for sds in SDS: + self.__dict__[sds] = [] + + # Read each trajectory file + # appending them to the list + # ------------------------ + if type(Path) is list: + if len(Path) == 0: + print("Warning: Empty NORMAL object created") + return + else: + Path = [Path] + self._readList(Path) + + # convert to arrays + for sds in SDS: + self.__dict__[sds] = np.array(self.__dict__[sds]) + + self.date = [] + self.sdate = [] + for stime,shour,secs in zip(self.starttime,self.starthour,self.sec): + date = [] + sdate = [] + dh = timedelta(hours=int(shour)) + for sec in secs: + ds = timedelta(seconds=int(sec)) + tdate = stime + dh + ds + date.append(tdate) + sdate.append(tdate.strftime('%Y-%m-%dT%H:%M:%S')) + self.date.append(np.array(date)) + self.sdate.append(np.array(sdate)) + self.date = np.array(self.date) + self.sdate = np.array(self.sdate) + +#--- + def _readList(self,List): + """ + Recursively, look for files in list; list items can + be files or directories. + """ + for item in List: + if os.path.isdir(item): self._readDir(item) + elif os.path.isfile(item): self._readTraj(item) + else: + print("%s is not a valid file or directory, ignoring it"%item) +#--- + def _readDir(self,dir): + """Recursively, look for files in directory.""" + for item in os.listdir(dir): + path = dir + os.sep + item + if os.path.isdir(path): self._readDir(path) + elif os.path.isfile(path): self._readTraj(path) + else: + print("%s is not a valid file or directorey, ignoring it"%item) + +#--- + def _readTraj(self,filename): + """Reads a FLEXTRA trajectory file""" + + try: + if self.verb: + print("[] Working on "+ filename) + f = open(filename,'r',errors='ignore') + except: + print("- %s: not able to open file"%filename) + return + + # Read file + # ------------ + # get number of header lines + lines = f.readlines() + # nhead = int(lines[0].split()[0]) + # nhead = int(f.readline().split()[0])-1 + + for i, line in enumerate(lines): + if line[0:5] == 'DATE:': + nhead = i + break + + first = True + # read rest of file + for line in lines[nhead:]: + if 'DATE' in line: + if not first: + self.sec.append(np.array(SECS)) + self.lon.append(np.array(LON)) + self.lat.append(np.array(LAT)) + self.alt.append(np.array(ALT)) + SECS = [] + LON = [] + LAT = [] + ALT = [] + first = False + ll = line.split() + date = ll[1] + hour = int(ll[3])//10000 + starttime = datetime.strptime(date,'%Y%m%d') + starttime += timedelta(hours=hour) + self.starttime.append(starttime) + self.starthour.append(hour) + elif 'SECS' in line: + continue + else: +# secs,longit,latit,eta,press,z,zoro,pv,theta,q = line.split() + secs = line[:9] + longit = line[9:18] + latit = line[18:27] + alt = line[49:57] + SECS.append(int(secs)) + LON.append(float(longit)) + LAT.append(float(latit)) + ALT.append(float(alt)) + + f.close() + self.sec.append(np.array(SECS)) + self.lon.append(np.array(LON)) + self.lat.append(np.array(LAT)) + self.alt.append(np.array(ALT)) + + diff --git a/projects/MissionSupport/applications/WxTraj/src/numerical.f b/projects/MissionSupport/applications/WxTraj/src/numerical.f new file mode 100644 index 0000000..011321f --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/numerical.f @@ -0,0 +1,100 @@ +C THESE ROUTINES HAVE BEEN TAKEN FROM PRESS ET AL. (1992): NUMERICAL RECIPES +C HOWEVER, THEY HAVE BEEN MODIFIED FOR PERFORMANCE REASONS. +C A. Stohl, 31 May 1994 + + + SUBROUTINE BICUBIC(Y,Y1,Y2,Y12,X1L,X1U,X2L,X2U,X1,X2,ANSY,LD1,LD2) + DIMENSION Y(4,LD1,LD2),Y1(4,LD1,LD2),Y2(4,LD1,LD2),Y12(4,LD1,LD2) + DIMENSION C(4,4,2,3),ANSY(LD1,LD2) + CALL BCUCOF(Y,Y1,Y2,Y12,X1U-X1L,X2U-X2L,C,LD1,LD2) + T=(X1-X1L)/(X1U-X1L) + U=(X2-X2L)/(X2U-X2L) + DO 11 M=1,LD1 + DO 11 N=1,LD2 + ANSY(M,N)=0. + DO 11 I=4,1,-1 +11 ANSY(M,N)=T*ANSY(M,N)+((C(I,4,M,N)*U+C(I,3,M,N))*U+ + + C(I,2,M,N))*U+C(I,1,M,N) + RETURN + END + + + SUBROUTINE BCUCOF(Y,Y1,Y2,Y12,D1,D2,C,LD1,LD2) + DIMENSION C(4,4,2,3),Y(4,LD1,LD2),Y1(4,LD1,LD2) + DIMENSION Y2(4,LD1,LD2),Y12(4,LD1,LD2) + DIMENSION CL(16),X(16),WT(16,16) + SAVE WT + DATA WT/1.,0.,-3.,2.,4*0.,-3.,0.,9.,-6.,2.,0.,-6., + * 4.,8*0.,3.,0.,-9.,6.,-2.,0.,6.,-4.,10*0.,9.,-6., + * 2*0.,-6.,4.,2*0.,3.,-2.,6*0.,-9.,6.,2*0.,6.,-4., + * 4*0.,1.,0.,-3.,2.,-2.,0.,6.,-4.,1.,0.,-3.,2.,8*0., + * -1.,0.,3.,-2.,1.,0.,-3.,2.,10*0.,-3.,2.,2*0.,3., + * -2.,6*0.,3.,-2.,2*0.,-6.,4.,2*0.,3.,-2.,0.,1.,-2., + * 1.,5*0.,-3.,6.,-3.,0.,2.,-4.,2.,9*0.,3.,-6.,3.,0., + * -2.,4.,-2.,10*0.,-3.,3.,2*0.,2.,-2.,2*0.,-1.,1., + * 6*0.,3.,-3.,2*0.,-2.,2.,5*0.,1.,-2.,1.,0.,-2.,4., + * -2.,0.,1.,-2.,1.,9*0.,-1.,2.,-1.,0.,1.,-2.,1.,10*0., + * 1.,-1.,2*0.,-1.,1.,6*0.,-1.,1.,2*0.,2.,-2.,2*0.,-1.,1./ + D1D2=D1*D2 + DO 15 M=1,LD1 + DO 15 N=1,LD2 + DO 11 I=1,4 + X(I)=Y(I,M,N) + X(I+4)=Y1(I,M,N)*D1 + X(I+8)=Y2(I,M,N)*D2 +11 X(I+12)=Y12(I,M,N)*D1D2 + DO 13 I=1,16 + XX=0. + DO 12 K=1,16 +12 XX=XX+WT(I,K)*X(K) +13 CL(I)=XX + L=0 + DO 15 I=1,4 + DO 15 J=1,4 + L=L+1 +15 C(I,J,M,N)=CL(L) + RETURN + END + + + + + SUBROUTINE POLYNOM(XA,YA,N,X,Y,LD) + PARAMETER (NMAX=10) + DIMENSION XA(N),YA(LD,N),C(2,NMAX),D(2,NMAX),Y(LD) + NSS=1 + DIF=ABS(X-XA(1)) + DO 11 I=1,N + DIFT=ABS(X-XA(I)) + IF (DIFT.LT.DIF) THEN + NSS=I + DIF=DIFT + ENDIF + DO 11 MM=1,LD + C(MM,I)=YA(MM,I) +11 D(MM,I)=YA(MM,I) + + DO 13 MM=1,LD + NS=NSS + Y(MM)=YA(MM,NS) + NS=NS-1 + DO 13 M=1,N-1 + DO 12 I=1,N-M + HO=XA(I)-X + HP=XA(I+M)-X + W=C(MM,I+1)-D(MM,I) + DEN=HO-HP + DEN=W/DEN + D(MM,I)=HP*DEN + C(MM,I)=HO*DEN +12 CONTINUE + IF (2*NS.LT.N-M)THEN + DY=C(MM,NS+1) + ELSE + DY=D(MM,NS) + NS=NS-1 + ENDIF + Y(MM)=Y(MM)+DY +13 CONTINUE + RETURN + END diff --git a/projects/MissionSupport/applications/WxTraj/src/opencetoutput.f b/projects/MissionSupport/applications/WxTraj/src/opencetoutput.f new file mode 100644 index 0000000..04647e7 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/opencetoutput.f @@ -0,0 +1,326 @@ + subroutine opencetoutput(error) +C o +******************************************************************************** +* * +* This routine opens the trajectory data output files. * +* * +* Authors: A. Stohl * +* * +* 16 February 1994 * +* * +******************************************************************************** +* * +* Variables: * +* compoint(maxpoint) comment for each startpoint * +* datestring date and time of model run * +* error .true., if error ocurred in subprogram, else .false. * +* numpoint number of starting points * +* * +* Constants: * +* unittraj unittraj+i are connected to trajectory output (point i) * +* unittraji unittraji+i are connected to interpolated trajectories * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer k,l + logical error + character datestring*24 + + + error=.false. + + +C Look for runtime +****************** + +C call fdate(datestring) + + +C If possible, use the first 20 characters of the comment for the file +C name identification. +********************************************************************* + +C 1. if wanted, original trajectories (flexible time step) +********************************************************** + + if ((inter.eq.0).or.(inter.eq.2)) then + k=index(compoint(1),' ')-1 + k=min(k,20) + open(unittraj,file=path(2)(1:len(2))//'CET_'//compoint(1) + + (1:k),status='new',err=998) + write(unittraj,'(i8,a)') 42+4*numbnests, + + ' Number of header lines' + write(unittraj,'(a69)') '************************************* + +********************************' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a69)') '* FLEXTRA V4.0 MODEL O + +UTPUT *' + write(unittraj,'(a69)') '* FOR ECMWF WINDF + +IELDS *' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a69)') '************************************* + +********************************' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a,a,a)') '* TIME OF COMPUTATION: + + ' ,datestring(1:24),' *' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a69)') '************************************* + +********************************' + write(unittraj,'(a69)') '* + + *' + if (kind(1).eq.1) then + write(unittraj,'(a69)') '* TYPE OF TRAJECTORIES: 3- + +DIMENSIONAL *' + else if (kind(1).eq.2) then + write(unittraj,'(a69)') '* TYPE OF TRAJECTORIES: ON + + MODEL LAYERS *' + else if (kind(1).eq.4) then + write(unittraj,'(a69)') '* TYPE OF TRAJECTORIES: IS + +OBARIC *' + else if (kind(1).eq.5) then + write(unittraj,'(a69)') '* TYPE OF TRAJECTORIES: IS + +ENTROPIC *' + endif + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a69)') '************************************* + +********************************' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a69)') '* INTEGRATION SCHEME: PE + +TTERSSEN *' + if (inpolkind.eq.1) then + write(unittraj,'(a69)') '* INTERPOLATION METHOD: ID + +EAL *' + else + write(unittraj,'(a69)') '* INTERPOLATION METHOD: LI + +NEAR *' + endif + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a,f5.2,a)') '* SPATIAL CFL CRITERION + +: ',cfl,' *' + write(unittraj,'(a,f5.2,a)') '* TEMPORAL CFL CRITERION + +: ',cflt,' *' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a69)') '************************************* + +********************************' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a)') '* START POINT COMMENT: '// + + compoint(1)(1:40)//' *' + write(unittraj,'(a)') '* MODEL RUN COMMENT: '// + + runcomment(1:47)//'*' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a69)') '************************************* + +********************************' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a69)') '* INFORMATION ON WIND FIELDS USED FOR + + COMPUTATIONS: *' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a,i6,a)') '* NORMAL INTERVAL BETWEEN WIND FIE + +LDS: ',idiffnorm,' SECONDS *' + write(unittraj,'(a,i6,a)') '* MAXIMUM INTERVAL BETWEEN WIND FI + +ELDS: ',idiffmax,' SECONDS *' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a29,2i4,a32)') '* NUMBER OF VERTICAL LEVELS: + + ',nuvz,nwz,' *' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a69)') '* MOTHER DOMAIN: + + *' + write(unittraj,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LONGITUDE RANGE: ',xlon0, ' TO ',xlon0+(nx-1)*dx, + + ' GRID DISTANCE: ',dx,' *' + write(unittraj,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LATITUDE RANGE: ',ylat0, ' TO ',ylat0+(ny-1)*dy, + + ' GRID DISTANCE: ',dy,' *' + + do 300 l=1,numbnests + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a,i2,a)') '* NESTED DOMAIN NUMBER: ',l,' + + *' + write(unittraj,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LONGITUDE RANGE: ',xlon0n(l), ' TO ', + + xlon0n(l)+(nxn(l)-1)*dxn(l), + + ' GRID DISTANCE: ',dxn(l),' *' + write(unittraj,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LATITUDE RANGE: ',ylat0n(l), ' TO ', + + ylat0n(l)+(nyn(l)-1)*dyn(l), + + ' GRID DISTANCE: ',dyn(l),' *' +300 continue + + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a69)') '************************************* + +********************************' + + write(unittraj,*) + endif + + +C 2. if wanted, interpolated trajectories (constant time step) +************************************************************** + + if (inter.ge.1) then + k=index(compoint(1),' ')-1 + k=min(k,20) + open(unittraji,file=path(2)(1:len(2))//'CETI_'//compoint(1) + + (1:k),status='new',err=999) + write(unittraji,'(i8,a)') 42+4*numbnests, + + ' Number of header lines' + write(unittraji,'(a69)') '************************************* + +********************************' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a69)') '* FLEXTRA MODEL O + +UTPUT *' + write(unittraji,'(a69)') '* FOR ECMWF WINDF + +IELDS *' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a69)') '************************************* + +********************************' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a,a,a)') '* TIME OF COMPUTATION: + + ',datestring(1:24),' *' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a69)') '************************************* + +********************************' + write(unittraji,'(a69)') '* + + *' + if (kind(1).eq.1) then + write(unittraji,'(a69)') '* TYPE OF TRAJECTORIES: 3- + +DIMENSIONAL *' + else if (kind(1).eq.2) then + write(unittraji,'(a69)') '* TYPE OF TRAJECTORIES: ON + + MODEL LAYERS *' + else if (kind(1).eq.4) then + write(unittraji,'(a69)') '* TYPE OF TRAJECTORIES: IS + +OBARIC *' + else if (kind(1).eq.5) then + write(unittraji,'(a69)') '* TYPE OF TRAJECTORIES: IS + +ENTROPIC *' + endif + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a69)') '************************************* + +********************************' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a69)') '* INTEGRATION SCHEME: PE + +TTERSSEN *' + if (inpolkind.eq.1) then + write(unittraji,'(a69)') '* INTERPOLATION METHOD: ID + +EAL *' + else + write(unittraji,'(a69)') '* INTERPOLATION METHOD: LI + +NEAR *' + endif + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a,f5.2,a)') '* SPATIAL CFL CRITERION + +: ',cfl,' *' + write(unittraji,'(a,f5.2,a)') '* TEMPORAL CFL CRITERION + +: ',cflt,' *' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a69)') '************************************* + +********************************' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a)') '* START POINT COMMENT: '// + + compoint(1)(1:40)//' *' + write(unittraji,'(a)') '* MODEL RUN COMMENT: '// + + runcomment(1:47)//'*' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a69)') '************************************* + +********************************' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a69)') '* INFORMATION ON WIND FIELDS USED FOR + + COMPUTATIONS: *' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a,i6,a)') '* NORMAL INTERVAL BETWEEN WIND FIE + +LDS: ',idiffnorm,' SECONDS *' + write(unittraji,'(a,i6,a)') '* MAXIMUM INTERVAL BETWEEN WIND FI + +ELDS: ',idiffmax,' SECONDS *' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a29,2i4,a32)') '* NUMBER OF VERTICAL LEVELS: + + ',nuvz,nwz,' *' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a69)') '* MOTHER DOMAIN: + + *' + write(unittraji,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LONGITUDE RANGE: ',xlon0, ' TO ',xlon0+(nx-1)*dx, + + ' GRID DISTANCE: ',dx,' *' + write(unittraji,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LATITUDE RANGE: ',ylat0, ' TO ',ylat0+(ny-1)*dy, + + ' GRID DISTANCE: ',dy,' *' + + do 400 l=1,numbnests + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a,i2,a)') '* NESTED DOMAIN NUMBER: ',l,' + + *' + write(unittraji,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LONGITUDE RANGE: ',xlon0n(l), ' TO ', + + xlon0n(l)+(nxn(l)-1)*dxn(l), + + ' GRID DISTANCE: ',dxn(l),' *' + write(unittraji,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LATITUDE RANGE: ',ylat0n(l), ' TO ', + + ylat0n(l)+(nyn(l)-1)*dyn(l), + + ' GRID DISTANCE: ',dyn(l),' *' +400 continue + + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a69)') '************************************* + +********************************' + write(unittraji,*) + endif + + return + +998 write(*,*) + write(*,*) ' #### TRAJECTORY MODEL ERROR! THE FILE #### ' + write(*,*) + write(*,*) ' '//path(2)(1:len(2))//'CET_'//compoint(1)(1:k) + write(*,*) + write(*,*) ' #### CANNOT BE OPENED. IF A FILE WITH THIS #### ' + write(*,*) ' #### NAME ALREADY EXISTS, DELETE IT AND START #### ' + write(*,*) ' #### THE PROGRAM AGAIN. #### ' + error=.true. + return + +999 write(*,*) + write(*,*) ' #### TRAJECTORY MODEL ERROR! THE FILE #### ' + write(*,*) + write(*,*) ' '//path(2)(1:len(2))//'CETI_'//compoint(1)(1:k) + write(*,*) + write(*,*) ' #### CANNOT BE OPENED. IF A FILE WITH THIS #### ' + write(*,*) ' #### NAME ALREADY EXISTS, DELETE IT AND START #### ' + write(*,*) ' #### THE PROGRAM AGAIN. #### ' + error=.true. + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/openflightoutput.f b/projects/MissionSupport/applications/WxTraj/src/openflightoutput.f new file mode 100644 index 0000000..13ef06d --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/openflightoutput.f @@ -0,0 +1,325 @@ + subroutine openflightoutput(error) +C o +******************************************************************************** +* * +* This routine opens the trajectory data output files. * +* * +* Authors: A. Stohl * +* * +* 16 February 1994 * +* * +******************************************************************************** +* * +* Variables: * +* compoint(maxpoint) comment for each startpoint * +* datestring date and time of model run * +* error .true., if error ocurred in subprogram, else .false. * +* numpoint number of starting points * +* * +* Constants: * +* unittraj unittraj+i are connected to trajectory output (point i) * +* unittraji unittraji+i are connected to interpolated trajectories * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer k,l + logical error + character datestring*24 + + + error=.false. + + +C Look for runtime +****************** + +C call fdate(datestring) + + +C If possible, use the first 20 characters of the comment for the file +C name identification. +********************************************************************* + +C 1. if wanted, original trajectories (flexible time step) +********************************************************** + + if ((inter.eq.0).or.(inter.eq.2)) then + k=index(compoint(1),' ')-1 + k=min(k,20) + open(unittraj,file=path(2)(1:len(2))//'FLIGHT_'//compoint(1) + + (1:k),status='new',err=998) + write(unittraj,'(i8,a)') 42+4*numbnests, + + ' Number of header lines' + write(unittraj,'(a69)') '************************************* + +********************************' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a69)') '* FLEXTRA V4.0 MODEL O + +UTPUT *' + write(unittraj,'(a69)') '* FOR ECMWF WINDF + +IELDS *' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a69)') '************************************* + +********************************' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a,a,a)') '* TIME OF COMPUTATION: + + ' ,datestring(1:24),' *' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a69)') '************************************* + +********************************' + write(unittraj,'(a69)') '* + + *' + if (kind(1).eq.1) then + write(unittraj,'(a69)') '* TYPE OF TRAJECTORIES: 3- + +DIMENSIONAL *' + else if (kind(1).eq.2) then + write(unittraj,'(a69)') '* TYPE OF TRAJECTORIES: ON + + MODEL LAYERS *' + else if (kind(1).eq.4) then + write(unittraj,'(a69)') '* TYPE OF TRAJECTORIES: IS + +OBARIC *' + else if (kind(1).eq.5) then + write(unittraj,'(a69)') '* TYPE OF TRAJECTORIES: IS + +ENTROPIC *' + endif + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a69)') '************************************* + +********************************' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a69)') '* INTEGRATION SCHEME: PE + +TTERSSEN *' + if (inpolkind.eq.1) then + write(unittraj,'(a69)') '* INTERPOLATION METHOD: ID + +EAL *' + else + write(unittraj,'(a69)') '* INTERPOLATION METHOD: LI + +NEAR *' + endif + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a,f5.2,a)') '* SPATIAL CFL CRITERION + +: ',cfl,' *' + write(unittraj,'(a,f5.2,a)') '* TEMPORAL CFL CRITERION + +: ',cflt,' *' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a69)') '************************************* + +********************************' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a)') '* START POINT COMMENT: '// + + compoint(1)(1:40)//' *' + write(unittraj,'(a)') '* MODEL RUN COMMENT: '// + + runcomment(1:47)//'*' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a69)') '************************************* + +********************************' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a69)') '* INFORMATION ON WIND FIELDS USED FOR + + COMPUTATIONS: *' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a,i6,a)') '* NORMAL INTERVAL BETWEEN WIND FIE + +LDS: ',idiffnorm,' SECONDS *' + write(unittraj,'(a,i6,a)') '* MAXIMUM INTERVAL BETWEEN WIND FI + +ELDS: ',idiffmax,' SECONDS *' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a29,2i4,a32)') '* NUMBER OF VERTICAL LEVELS: + + ',nuvz,nwz,' *' + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a69)') '* MOTHER DOMAIN: + + *' + write(unittraj,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LONGITUDE RANGE: ',xlon0, ' TO ',xlon0+(nx-1)*dx, + + ' GRID DISTANCE: ',dx,' *' + write(unittraj,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LATITUDE RANGE: ',ylat0, ' TO ',ylat0+(ny-1)*dy, + + ' GRID DISTANCE: ',dy,' *' + + do 300 l=1,numbnests + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a,i2,a)') '* NESTED DOMAIN NUMBER: ',l,' + + *' + write(unittraj,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LONGITUDE RANGE: ',xlon0n(l), ' TO ', + + xlon0n(l)+(nxn(l)-1)*dxn(l), + + ' GRID DISTANCE: ',dxn(l),' *' + write(unittraj,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LATITUDE RANGE: ',ylat0n(l), ' TO ', + + ylat0n(l)+(nyn(l)-1)*dyn(l), + + ' GRID DISTANCE: ',dyn(l),' *' +300 continue + + write(unittraj,'(a69)') '* + + *' + write(unittraj,'(a69)') '************************************* + +********************************' + write(unittraj,*) + endif + + +C 2. if wanted, interpolated trajectories (constant time step) +************************************************************** + + if (inter.ge.1) then + k=index(compoint(1),' ')-1 + k=min(k,20) + open(unittraji,file=path(2)(1:len(2))//'FLIGHTI_'//compoint(1) + + (1:k),status='new',err=999) + write(unittraji,'(i8,a)') 42+4*numbnests, + + ' Number of header lines' + write(unittraji,'(a69)') '************************************* + +********************************' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a69)') '* FLEXTRA MODEL O + +UTPUT *' + write(unittraji,'(a69)') '* FOR ECMWF WINDF + +IELDS *' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a69)') '************************************* + +********************************' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a,a,a)') '* TIME OF COMPUTATION: + + ',datestring(1:24),' *' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a69)') '************************************* + +********************************' + write(unittraji,'(a69)') '* + + *' + if (kind(1).eq.1) then + write(unittraji,'(a69)') '* TYPE OF TRAJECTORIES: 3- + +DIMENSIONAL *' + else if (kind(1).eq.2) then + write(unittraji,'(a69)') '* TYPE OF TRAJECTORIES: ON + + MODEL LAYERS *' + else if (kind(1).eq.4) then + write(unittraji,'(a69)') '* TYPE OF TRAJECTORIES: IS + +OBARIC *' + else if (kind(1).eq.5) then + write(unittraji,'(a69)') '* TYPE OF TRAJECTORIES: IS + +ENTROPIC *' + endif + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a69)') '************************************* + +********************************' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a69)') '* INTEGRATION SCHEME: PE + +TTERSSEN *' + if (inpolkind.eq.1) then + write(unittraji,'(a69)') '* INTERPOLATION METHOD: ID + +EAL *' + else + write(unittraji,'(a69)') '* INTERPOLATION METHOD: LI + +NEAR *' + endif + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a,f5.2,a)') '* SPATIAL CFL CRITERION + +: ',cfl,' *' + write(unittraji,'(a,f5.2,a)') '* TEMPORAL CFL CRITERION + +: ',cflt,' *' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a69)') '************************************* + +********************************' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a)') '* START POINT COMMENT: '// + + compoint(1)(1:40)//' *' + write(unittraji,'(a)') '* MODEL RUN COMMENT: '// + + runcomment(1:47)//'*' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a69)') '************************************* + +********************************' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a69)') '* INFORMATION ON WIND FIELDS USED FOR + + COMPUTATIONS: *' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a,i6,a)') '* NORMAL INTERVAL BETWEEN WIND FIE + +LDS: ',idiffnorm,' SECONDS *' + write(unittraji,'(a,i6,a)') '* MAXIMUM INTERVAL BETWEEN WIND FI + +ELDS: ',idiffmax,' SECONDS *' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a29,2i4,a32)') '* NUMBER OF VERTICAL LEVELS: + + ',nuvz,nwz,' *' + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a69)') '* MOTHER DOMAIN: + + *' + write(unittraji,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LONGITUDE RANGE: ',xlon0, ' TO ',xlon0+(nx-1)*dx, + + ' GRID DISTANCE: ',dx,' *' + write(unittraji,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LATITUDE RANGE: ',ylat0, ' TO ',ylat0+(ny-1)*dy, + + ' GRID DISTANCE: ',dy,' *' + + do 400 l=1,numbnests + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a,i2,a)') '* NESTED DOMAIN NUMBER: ',l,' + + *' + write(unittraji,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LONGITUDE RANGE: ',xlon0n(l), ' TO ', + + xlon0n(l)+(nxn(l)-1)*dxn(l), + + ' GRID DISTANCE: ',dxn(l),' *' + write(unittraji,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LATITUDE RANGE: ',ylat0n(l), ' TO ', + + ylat0n(l)+(nyn(l)-1)*dyn(l), + + ' GRID DISTANCE: ',dyn(l),' *' +400 continue + + write(unittraji,'(a69)') '* + + *' + write(unittraji,'(a69)') '************************************* + +********************************' + write(unittraji,*) + endif + + return + +998 write(*,*) + write(*,*) ' #### TRAJECTORY MODEL ERROR! THE FILE #### ' + write(*,*) + write(*,*) ' '//path(2)(1:len(2))//'FLIGHT_'//compoint(1)(1:k) + write(*,*) + write(*,*) ' #### CANNOT BE OPENED. IF A FILE WITH THIS #### ' + write(*,*) ' #### NAME ALREADY EXISTS, DELETE IT AND START #### ' + write(*,*) ' #### THE PROGRAM AGAIN. #### ' + error=.true. + return + +999 write(*,*) + write(*,*) ' #### TRAJECTORY MODEL ERROR! THE FILE #### ' + write(*,*) + write(*,*) path(2)(1:len(2))//'FLIGHTI_'//compoint(1)(1:k) + write(*,*) + write(*,*) ' #### CANNOT BE OPENED. IF A FILE WITH THIS #### ' + write(*,*) ' #### NAME ALREADY EXISTS, DELETE IT AND START #### ' + write(*,*) ' #### THE PROGRAM AGAIN. #### ' + error=.true. + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/openoutput.f b/projects/MissionSupport/applications/WxTraj/src/openoutput.f new file mode 100644 index 0000000..fcfb09f --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/openoutput.f @@ -0,0 +1,361 @@ + subroutine openoutput(error) +C o +******************************************************************************** +* * +* This routine opens the trajectory data output files. * +* * +* Authors: A. Stohl * +* * +* 16 February 1994 * +* * +******************************************************************************** +* * +* Variables: * +* compoint(maxpoint) comment for each startpoint * +* datestring date and time of model run * +* error .true., if error ocurred in subprogram, else .false. * +* numpoint number of starting points * +* * +* Constants: * +* unittraj unittraj+i are connected to trajectory output (point i) * +* unittraji unittraji+i are connected to interpolated trajectories * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer i,j,k,l + logical error + character datestring*24 + + + error=.false. + + +C Check, if output file names are unequivocal +********************************************* + + do 1 i=1,numpoint-1 + do 1 j=i+1,numpoint + if (compoint(i)(1:20).eq.compoint(j)(1:20).and. + + (compoint(i)(41:45).eq.compoint(j)(41:45))) then + write(*,*) 'ERROR: 2 STARTING POINTS HAVE IDENTICAL NAMES.' + write(*,*) 'CHANGE ONE NAME: ',compoint(i) + stop + endif +1 continue + + +C Look for runtime +****************** + +C call fdate(datestring) + + +C If possible, use the first 20 characters of the comment for the file +C name identification. +********************************************************************* + +C 1. if wanted, original trajectories (flexible time step) +********************************************************** + + if ((inter.eq.0).or.(inter.eq.2)) then + do 10 i=1,numpoint + k=index(compoint(i),' ')-1 + k=min(k,20) + if (compoint(i)(41:41).ne.'U') then ! no uncertainty trajectory + open(unittraj+i,file=path(2)(1:len(2))//'T_'//compoint(i) + + (1:k),status='new',err=998) + else ! uncertainty trajectory + open(unittraj+i,file=path(2)(1:len(2))//'T_'//compoint(i) + +(1:k)//'_U'//compoint(i)(42:45),status='new',err=998) + endif + write(unittraj+i,'(i8,a)') 42+4*numbnests, + + ' Number of header lines' + write(unittraj+i,'(a69)') '************************************* + +********************************' + write(unittraj+i,'(a69)') '* + + *' + write(unittraj+i,'(a69)') '* FLEXTRA V4.0 MODEL O + +UTPUT *' + write(unittraj+i,'(a69)') '* FOR ECMWF WINDF + +IELDS *' + write(unittraj+i,'(a69)') '* + + *' + write(unittraj+i,'(a69)') '************************************* + +********************************' + write(unittraj+i,'(a69)') '* + + *' + write(unittraj+i,'(a,a,a)') '* TIME OF COMPUTATION: + + ' ,datestring(1:24),' *' + write(unittraj+i,'(a69)') '* + + *' + write(unittraj+i,'(a69)') '************************************* + +********************************' + write(unittraj+i,'(a69)') '* + + *' + if (kind(i).eq.1) then + write(unittraj+i,'(a69)') '* TYPE OF TRAJECTORIES: 3- + +DIMENSIONAL *' + else if (kind(i).eq.2) then + write(unittraj+i,'(a69)') '* TYPE OF TRAJECTORIES: ON + + MODEL LAYERS *' + else if (kind(i).eq.3) then + write(unittraj+i,'(a69)') '* TYPE OF TRAJECTORIES: MI + +XED LAYER *' + else if (kind(i).eq.4) then + write(unittraj+i,'(a69)') '* TYPE OF TRAJECTORIES: IS + +OBARIC *' + else if (kind(i).eq.5) then + write(unittraj+i,'(a69)') '* TYPE OF TRAJECTORIES: IS + +ENTROPIC *' + endif + write(unittraj+i,'(a69)') '* + + *' + write(unittraj+i,'(a69)') '************************************* + +********************************' + write(unittraj+i,'(a69)') '* + + *' + write(unittraj+i,'(a69)') '* INTEGRATION SCHEME: PE + +TTERSSEN *' + if (inpolkind.eq.1) then + write(unittraj+i,'(a69)') '* INTERPOLATION METHOD: ID + +EAL *' + else + write(unittraj+i,'(a69)') '* INTERPOLATION METHOD: LI + +NEAR *' + endif + write(unittraj+i,'(a69)') '* + + *' + write(unittraj+i,'(a,f5.2,a)') '* SPATIAL CFL CRITERION + +: ',cfl,' *' + write(unittraj+i,'(a,f5.2,a)') '* TEMPORAL CFL CRITERION + +: ',cflt,' *' + write(unittraj+i,'(a69)') '* + + *' + write(unittraj+i,'(a69)') '************************************* + +********************************' + write(unittraj+i,'(a69)') '* + + *' + write(unittraj+i,'(a)') '* START POINT COMMENT: '// + + compoint(i)(1:40)//' *' + write(unittraj+i,'(a)') '* MODEL RUN COMMENT: '// + + runcomment(1:47)//'*' + write(unittraj+i,'(a69)') '* + + *' + write(unittraj+i,'(a69)') '************************************* + +********************************' + write(unittraj+i,'(a69)') '* + + *' + write(unittraj+i,'(a69)') '* INFORMATION ON WIND FIELDS USED FOR + + COMPUTATIONS: *' + write(unittraj+i,'(a69)') '* + + *' + write(unittraj+i,'(a,i6,a)') '* NORMAL INTERVAL BETWEEN WIND FIE + +LDS: ',idiffnorm,' SECONDS *' + write(unittraj+i,'(a,i6,a)') '* MAXIMUM INTERVAL BETWEEN WIND FI + +ELDS: ',idiffmax,' SECONDS *' + write(unittraj+i,'(a69)') '* + + *' + write(unittraj+i,'(a29,2i4,a32)') '* NUMBER OF VERTICAL LEVELS: + + ',nuvz,nwz,' *' + write(unittraj+i,'(a69)') '* + + *' + write(unittraj+i,'(a69)') '* MOTHER DOMAIN: + + *' + write(unittraj+i,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LONGITUDE RANGE: ',xlon0, ' TO ',xlon0+(nx-1)*dx, + + ' GRID DISTANCE: ',dx,' *' + write(unittraj+i,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LATITUDE RANGE: ',ylat0, ' TO ',ylat0+(ny-1)*dy, + + ' GRID DISTANCE: ',dy,' *' + + do 300 l=1,numbnests + write(unittraj+i,'(a69)') '* + + *' + write(unittraj+i,'(a,i2,a)') '* NESTED DOMAIN NUMBER: ',l,' + + *' + write(unittraj+i,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LONGITUDE RANGE: ',xlon0n(l), ' TO ', + + xlon0n(l)+(nxn(l)-1)*dxn(l), + + ' GRID DISTANCE: ',dxn(l),' *' + write(unittraj+i,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LATITUDE RANGE: ',ylat0n(l), ' TO ', + + ylat0n(l)+(nyn(l)-1)*dyn(l), + + ' GRID DISTANCE: ',dyn(l),' *' +300 continue + + write(unittraj+i,'(a69)') '* + + *' + write(unittraj+i,'(a69)') '************************************* + +********************************' + write(unittraj+i,*) +10 continue + endif + + +C 2. if wanted, interpolated trajectories (constant time step) +************************************************************** + + if (inter.ge.1) then + do 20 i=1,numpoint + k=index(compoint(i),' ')-1 + k=min(k,40) + if (compoint(i)(41:41).ne.'U') then ! no uncertainty trajectory + open(unittraji+i,file=path(2)(1:len(2))//'TI_'//compoint(i) + + (1:k),status='new',err=999) + else ! uncertainty trajectory + open(unittraji+i,file=path(2)(1:len(2))//'TI_'//compoint(i) + +(1:k)//'_U'//compoint(i)(42:45),status='new',err=999) + endif + write(unittraji+i,'(i8,a)') 42+4*numbnests, + + ' Number of header lines' + write(unittraji+i,'(a69)') '************************************* + +********************************' + write(unittraji+i,'(a69)') '* + + *' + write(unittraji+i,'(a69)') '* FLEXTRA MODEL O + +UTPUT *' + write(unittraji+i,'(a69)') '* FOR ECMWF WINDF + +IELDS *' + write(unittraji+i,'(a69)') '* + + *' + write(unittraji+i,'(a69)') '************************************* + +********************************' + write(unittraji+i,'(a69)') '* + + *' + write(unittraji+i,'(a,a,a)') '* TIME OF COMPUTATION: + + ',datestring(1:24),' *' + write(unittraji+i,'(a69)') '* + + *' + write(unittraji+i,'(a69)') '************************************* + +********************************' + write(unittraji+i,'(a69)') '* + + *' + if (kind(i).eq.1) then + write(unittraji+i,'(a69)') '* TYPE OF TRAJECTORIES: 3- + +DIMENSIONAL *' + else if (kind(i).eq.2) then + write(unittraji+i,'(a69)') '* TYPE OF TRAJECTORIES: ON + + MODEL LAYERS *' + else if (kind(i).eq.3) then + write(unittraji+i,'(a69)') '* TYPE OF TRAJECTORIES: MI + +XED LAYER *' + else if (kind(i).eq.4) then + write(unittraji+i,'(a69)') '* TYPE OF TRAJECTORIES: IS + +OBARIC *' + else if (kind(i).eq.5) then + write(unittraji+i,'(a69)') '* TYPE OF TRAJECTORIES: IS + +ENTROPIC *' + endif + write(unittraji+i,'(a69)') '* + + *' + write(unittraji+i,'(a69)') '************************************* + +********************************' + write(unittraji+i,'(a69)') '* + + *' + write(unittraji+i,'(a69)') '* INTEGRATION SCHEME: PE + +TTERSSEN *' + if (inpolkind.eq.1) then + write(unittraji+i,'(a69)') '* INTERPOLATION METHOD: ID + +EAL *' + else + write(unittraji+i,'(a69)') '* INTERPOLATION METHOD: LI + +NEAR *' + endif + write(unittraji+i,'(a69)') '* + + *' + write(unittraji+i,'(a,f5.2,a)') '* SPATIAL CFL CRITERION + +: ',cfl,' *' + write(unittraji+i,'(a,f5.2,a)') '* TEMPORAL CFL CRITERION + +: ',cflt,' *' + write(unittraji+i,'(a69)') '* + + *' + write(unittraji+i,'(a69)') '************************************* + +********************************' + write(unittraji+i,'(a69)') '* + + *' + write(unittraji+i,'(a)') '* START POINT COMMENT: '// + + compoint(i)(1:40)//' *' + write(unittraji+i,'(a)') '* MODEL RUN COMMENT: '// + + runcomment(1:47)//'*' + write(unittraji+i,'(a69)') '* + + *' + write(unittraji+i,'(a69)') '************************************* + +********************************' + write(unittraji+i,'(a69)') '* + + *' + write(unittraji+i,'(a69)') '* INFORMATION ON WIND FIELDS USED FOR + + COMPUTATIONS: *' + write(unittraji+i,'(a69)') '* + + *' + write(unittraji+i,'(a,i6,a)') '* NORMAL INTERVAL BETWEEN WIND FIE + +LDS: ',idiffnorm,' SECONDS *' + write(unittraji+i,'(a,i6,a)') '* MAXIMUM INTERVAL BETWEEN WIND FI + +ELDS: ',idiffmax,' SECONDS *' + write(unittraji+i,'(a69)') '* + + *' + write(unittraji+i,'(a29,2i4,a32)') '* NUMBER OF VERTICAL LEVELS: + + ',nuvz,nwz,' *' + write(unittraji+i,'(a69)') '* + + *' + write(unittraji+i,'(a69)') '* MOTHER DOMAIN: + + *' + write(unittraji+i,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LONGITUDE RANGE: ',xlon0, ' TO ',xlon0+(nx-1)*dx, + + ' GRID DISTANCE: ',dx,' *' + write(unittraji+i,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LATITUDE RANGE: ',ylat0, ' TO ',ylat0+(ny-1)*dy, + + ' GRID DISTANCE: ',dy,' *' + + do 400 l=1,numbnests + write(unittraji+i,'(a69)') '* + + *' + write(unittraji+i,'(a,i2,a)') '* NESTED DOMAIN NUMBER: ',l,' + + *' + write(unittraji+i,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LONGITUDE RANGE: ',xlon0n(l), ' TO ', + + xlon0n(l)+(nxn(l)-1)*dxn(l), + + ' GRID DISTANCE: ',dxn(l),' *' + write(unittraji+i,'(a,f7.2,a,f7.2,a,f6.2,a)') + + '* LATITUDE RANGE: ',ylat0n(l), ' TO ', + + ylat0n(l)+(nyn(l)-1)*dyn(l), + + ' GRID DISTANCE: ',dyn(l),' *' +400 continue + + write(unittraji+i,'(a69)') '* + + *' + write(unittraji+i,'(a69)') '************************************* + +********************************' + write(unittraji+i,*) +20 continue + endif + + return + +998 write(*,*) + write(*,*) ' #### TRAJECTORY MODEL ERROR! THE FILE #### ' + write(*,*) + write(*,*) ' '//path(2)(1:len(2))//'T_'//compoint(i)(1:k) + write(*,*) + write(*,*) ' #### (OR THIS FILE WITH A "_U" AT THE END) #### ' + write(*,*) ' #### CANNOT BE OPENED. IF A FILE WITH THIS #### ' + write(*,*) ' #### NAME ALREADY EXISTS, DELETE IT AND START #### ' + write(*,*) ' #### THE PROGRAM AGAIN. #### ' + error=.true. + return + +999 write(*,*) + write(*,*) ' #### TRAJECTORY MODEL ERROR! THE FILE #### ' + write(*,*) + write(*,*) ' '//path(2)(1:len(2))//'TI_'//compoint(i)(1:k) + write(*,*) + write(*,*) ' #### (OR THIS FILE WITH A "_U" AT THE END) #### ' + write(*,*) ' #### CANNOT BE OPENED. IF A FILE WITH THIS #### ' + write(*,*) ' #### NAME ALREADY EXISTS, DELETE IT AND START #### ' + write(*,*) ' #### THE PROGRAM AGAIN. #### ' + error=.true. + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/options/COMMAND b/projects/MissionSupport/applications/WxTraj/src/options/COMMAND new file mode 100644 index 0000000..2fb038b --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/options/COMMAND @@ -0,0 +1,126 @@ +******************************************************************************** +* * +* Input file for the trajectory model FLEXTRA: Please select your options * +* * +******************************************************************************** + +1. __________________________________________________ 3X, A50 + Test run #1 + LABEL FOR THE MODEL RUN + +2. __ 3X, I2 + -1 + DIRECTION 1 FORWARD, -1 BACKWARD TRAJECTORIES + +3. _______ 3X, I7 + 0240000 + HHHMISS LENGTH OF AN INDIVIDUAL TRAJECTORY + +4. ________ ______ 3X, I8, 1X, I6 + 20230201 000000 + YYYYMMDD HHMISS BEGINNING DATE + +5. ________ ______ 3X, I8, 1X, I6 + 20230201 000000 + YYYYMMDD HHMISS ENDING DATE + +6. _______ 3X, I7 + 0030000 + HHHMISS TIME INTERVAL BETWEEN STARTING TIMES OF TRAJECTORIES + +7. _ _____ 3X, I1, 2X, I5 + 1 10800 + i SSSSS i>0: INTERPOLATED OUTPUT OF TRAJECTORY EVERY SSSSS SECONDS + +8. _____ ___.___ _.___ _.___ _.___ _.___ 3X, I5, 2X, F7.3 4(2X,F5.3) + 00000 000.500 2.000 0.080 0.080 0.200 + NUMBER NUMBER, DISTANCE (GRID UNITS), TIME CONSTANT (WIND FIELD INTERVAL UNITS) AND INTERPOLATION ERRORS (IN U, V AND W) OF UNCERTAINTY TRAJECT. + +9. _ 3X, I1 + 1 + INTERPOLATION 1 = IDEAL INTERPOLATION >1 = LINEAR INTERPOLATION + +10. ---.-- 4X, F6.4 + 5.0 + CFL TIMESTEP CRITERION HORIZONTAL AND VERTICAL + +11. ---.-- 4X, F6.4 + 5.0 + CFLT TIMESTEP CRITERION TIME GAP BETWEEN INPUT WIND FIELDS + +12. - 4X, I1 + 1 + MODE 1 NORMAL MODE, 2 CET MODE, 3 FLIGHT MODE +=================================================================== +1. Comment to identify the current model run + +2. Direction of trajectories (1 means forward trajectories, -1 backward) + +3. Temporal lengths of the trajectories in the format HHHMISS, where HHH is + HOUR, MI is MINUTE and SS is SECOND + +4. Beginning date and time of trajectory calculation. Must be given in format + YYYYMMDD HHMISS, where YYYY is YEAR, MM is MONTH, DD is DAY, HH is HOUR, + MI is MINUTE and SS is SECOND. All times are in UTC. + +5. Ending date and time of trajectory calculation. Same format as 4. + +6. Time interval between two trajectory calculations. Same format as 3. + +7. Options for the trajectory output: + 0 = original data in irregular time intervals + 1 = constant time intervals, interpolated output every SSSSS seconds + 2 = 0 plus 1 + +8. Six parameters have to be inputted. The first is the number of + uncertainty trajectories. They are starting in a distance from + the starting point of the reference trajectory as given by the + second parameter (in grid units). + Additionally, random errors may be added at each time step of the + trajectory calculation. Using a Langevin equation, they are relaxed + with a time constant (in units of the wind field interval, third + parameter) specified by the user. These random errors are + thought to reflect typical wind errors caused, for instance, by + interpolation. The magnitude of these errors (in relative units, + relative to the wind velocity) must be specified by the user for + the three wind components u, v and w (last three parameters). + +9. Kind of interpolation + 1 - horizontal interpolation bicubic + vertical interpolation polynomial + temporal interpolation linear + >1 - horizontal interpolation bilinear + vertical interpolation linear + temporal interpolation linear + +10.cfl criterion horizontal/vertical + factor by which time step must be shorter than that determined + from the CFL criterion, i.e. + + delta_t1=delta x/u/cfl + delta_t2=delta y/v/cfl + delta_t3=delta z/w/cfl + + delta_t(space) = min(delta_t1,delta_t2,delta_t3) + +11. cfl criterion time + factor by wich time is shorter than time interval of the wind + fields + + delta_t(time) = delta_T(input wind)/cflt + + The time step used for trajectory calculation is the minimum of + delta_t(space) and delta_t(time) + + cfl and cflt must not be less than 1! + +12. 1 NORMAL mode -> read file STARTPOINTS and calculate a time + series of trajectories starting all from the same starting + points + 2 CET mode -> read file STARTCET and calculate trajectories + starting uniformly spaced from a user-defined domain + (for a single starting time) + 3 FLIGHT mode -> read file STARTFLIGHT and calculate + trajectories starting neither uniformly spaced nor with + constant time intervals (as needed, for instance, to start + trajectories along an aircraft leg) diff --git a/projects/MissionSupport/applications/WxTraj/src/options/COMMAND.alternative b/projects/MissionSupport/applications/WxTraj/src/options/COMMAND.alternative new file mode 100644 index 0000000..cd91bb7 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/options/COMMAND.alternative @@ -0,0 +1,91 @@ +******************************************************************************** +* * +* Input file for the trajectory model FLEXTRA: Please select your options * +* * +******************************************************************************** + +'Test run #1' LABEL FOR THE MODEL RUN + 1 DIRECTION (1 FORWARD, -1 BACKWARD TRAJECT.) + 480000 HHHMISS LENGTH OF AN INDIVIDUAL TRAJECTORY +19980402 120000 YYYYMMDD HHMISS BEGINNING DATE +19980406 150000 YYYYMMDD HHMISS ENDING DATE + 060000 HHHMISS TIME INTERVAL BETWEEN STARTING TIMES OF TRAJECTORIES +2 3600 i SSSSS i>0: INTERPOLATED OUTPUT OF TRAJECTORY EVERY SSSSS SECONDS +0 0.5 2.0 0.08 0.08 0.20 NUMBER, DISTANCE (GRID UNITS), TIME CONSTANT (WIND FIELD INTERVAL UNITS) AND INTERPOLATION ERRORS (IN U, V AND W) OF UNCERTAINTY TRAJECT. +1 INTERPOLATION 1 = IDEAL INTERPOLATION >1 = LINEAR INTERPOLATION +5.0 CFL TIMESTEP CRITERION HORIZONTAL AND VERTICAL +5.0 CFLT TIMESTEP CRITERION TIME GAP BETWEEN INPUT WIND FIELDS +3 MODE 1 NORMAL MODE, 2 CET MODE, 3 FLIGHT MODE +================================================================================== +1. Comment to identify the current model run + +2. Direction of trajectories (1 means forward trajectories, -1 backward) + +3. Temporal lengths of the trajectories in the format HHHMISS, where HHH is + HOUR, MI is MINUTE and SS is SECOND + +4. Beginning date and time of trajectory calculation. Must be given in format + YYYYMMDD HHMISS, where YYYY is YEAR, MM is MONTH, DD is DAY, HH is HOUR, + MI is MINUTE and SS is SECOND. All times are in UTC. + +5. Ending date and time of trajectory calculation. Same format as 4. + +6. Time interval between two trajectory calculations. Same format as 3. + +7. Options for the trajectory output: + 0 = original data in irregular time intervals + 1 = constant time intervals, interpolated output every SSSSS seconds + 2 = 0 plus 1 + +8. Six parameters have to be inputted. The first is the number of + uncertainty trajectories. They are starting in a distance from + the starting point of the reference trajectory as given by the + second parameter (in grid units). + Additionally, random errors may be added at each time step of the + trajectory calculation. Using a Langevin equation, they are relaxed + with a time constant (in units of the wind field interval, third + parameter) specified by the user. These random errors are + thought to reflect typical wind errors caused, for instance, by + interpolation. The magnitude of these errors (in relative units, + relative to the wind velocity) must be specified by the user for + the three wind components u, v and w (last three parameters). + +9. Kind of interpolation + 1 - horizontal interpolation bicubic + vertical interpolation polynomial + temporal interpolation linear + >1 - horizontal interpolation bilinear + vertical interpolation linear + temporal interpolation linear + +10.cfl criterion horizontal/vertical + factor by which time step must be shorter than that determined + from the CFL criterion, i.e. + + delta_t1=delta x/u/cfl + delta_t2=delta y/v/cfl + delta_t3=delta z/w/cfl + + delta_t(space) = min(delta_t1,delta_t2,delta_t3) + +11. cfl criterion time + factor by wich time is shorter than time interval of the wind + fields + + delta_t(time) = delta_T(input wind)/cflt + + The time step used for trajectory calculation is the minimum of + delta_t(space) and delta_t(time) + + cfl and cflt must not be less than 1! + +12. 1 NORMAL mode -> read file STARTPOINTS and calculate a time + series of trajectories starting all from the same starting + points + 2 CET mode -> read file STARTCET and calculate trajectories + starting uniformly spaced from a user-defined domain + (for a single starting time) + 3 FLIGHT mode -> read file STARTFLIGHT and calculate + trajectories starting neither uniformly spaced nor with + constant time intervals (as needed, for instance, to start + trajectories along an aircraft leg) diff --git a/projects/MissionSupport/applications/WxTraj/src/options/COMMAND.reference b/projects/MissionSupport/applications/WxTraj/src/options/COMMAND.reference new file mode 100644 index 0000000..d6e551f --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/options/COMMAND.reference @@ -0,0 +1,126 @@ +******************************************************************************** +* * +* Input file for the trajectory model FLEXTRA: Please select your options * +* * +******************************************************************************** + +1. __________________________________________________ 3X, A50 + Test run #1 + LABEL FOR THE MODEL RUN + +2. __ 3X, I2 + -1 + DIRECTION 1 FORWARD, -1 BACKWARD TRAJECTORIES + +3. _______ 3X, I7 + 960000 + HHHMISS LENGTH OF AN INDIVIDUAL TRAJECTORY + +4. ________ ______ 3X, I8, 1X, I6 + 19980402 150000 + YYYYMMDD HHMISS BEGINNING DATE + +5. ________ ______ 3X, I8, 1X, I6 + 19980405 120000 + YYYYMMDD HHMISS ENDING DATE + +6. _______ 3X, I7 + 0060000 + HHHMISS TIME INTERVAL BETWEEN STARTING TIMES OF TRAJECTORIES + +7. _ _____ 3X, I1, 2X, I5 + 1 10800 + i SSSSS i>0: INTERPOLATED OUTPUT OF TRAJECTORY EVERY SSSSS SECONDS + +8. _____ ___.___ _.___ _.___ _.___ _.___ 3X, I5, 2X, F7.3 4(2X,F5.3) + 00000 000.500 2.000 0.080 0.080 0.200 + NUMBER NUMBER, DISTANCE (GRID UNITS), TIME CONSTANT (WIND FIELD INTERVAL UNITS) AND INTERPOLATION ERRORS (IN U, V AND W) OF UNCERTAINTY TRAJECT. + +9. _ 3X, I1 + 1 + INTERPOLATION 1 = IDEAL INTERPOLATION >1 = LINEAR INTERPOLATION + +10. ---.-- 4X, F6.4 + 5.0 + CFL TIMESTEP CRITERION HORIZONTAL AND VERTICAL + +11. ---.-- 4X, F6.4 + 5.0 + CFLT TIMESTEP CRITERION TIME GAP BETWEEN INPUT WIND FIELDS + +12. - 4X, I1 + 1 + MODE 1 NORMAL MODE, 2 CET MODE, 3 FLIGHT MODE +=================================================================== +1. Comment to identify the current model run + +2. Direction of trajectories (1 means forward trajectories, -1 backward) + +3. Temporal lengths of the trajectories in the format HHHMISS, where HHH is + HOUR, MI is MINUTE and SS is SECOND + +4. Beginning date and time of trajectory calculation. Must be given in format + YYYYMMDD HHMISS, where YYYY is YEAR, MM is MONTH, DD is DAY, HH is HOUR, + MI is MINUTE and SS is SECOND. All times are in UTC. + +5. Ending date and time of trajectory calculation. Same format as 4. + +6. Time interval between two trajectory calculations. Same format as 3. + +7. Options for the trajectory output: + 0 = original data in irregular time intervals + 1 = constant time intervals, interpolated output every SSSSS seconds + 2 = 0 plus 1 + +8. Six parameters have to be inputted. The first is the number of + uncertainty trajectories. They are starting in a distance from + the starting point of the reference trajectory as given by the + second parameter (in grid units). + Additionally, random errors may be added at each time step of the + trajectory calculation. Using a Langevin equation, they are relaxed + with a time constant (in units of the wind field interval, third + parameter) specified by the user. These random errors are + thought to reflect typical wind errors caused, for instance, by + interpolation. The magnitude of these errors (in relative units, + relative to the wind velocity) must be specified by the user for + the three wind components u, v and w (last three parameters). + +9. Kind of interpolation + 1 - horizontal interpolation bicubic + vertical interpolation polynomial + temporal interpolation linear + >1 - horizontal interpolation bilinear + vertical interpolation linear + temporal interpolation linear + +10.cfl criterion horizontal/vertical + factor by which time step must be shorter than that determined + from the CFL criterion, i.e. + + delta_t1=delta x/u/cfl + delta_t2=delta y/v/cfl + delta_t3=delta z/w/cfl + + delta_t(space) = min(delta_t1,delta_t2,delta_t3) + +11. cfl criterion time + factor by wich time is shorter than time interval of the wind + fields + + delta_t(time) = delta_T(input wind)/cflt + + The time step used for trajectory calculation is the minimum of + delta_t(space) and delta_t(time) + + cfl and cflt must not be less than 1! + +12. 1 NORMAL mode -> read file STARTPOINTS and calculate a time + series of trajectories starting all from the same starting + points + 2 CET mode -> read file STARTCET and calculate trajectories + starting uniformly spaced from a user-defined domain + (for a single starting time) + 3 FLIGHT mode -> read file STARTFLIGHT and calculate + trajectories starting neither uniformly spaced nor with + constant time intervals (as needed, for instance, to start + trajectories along an aircraft leg) diff --git a/projects/MissionSupport/applications/WxTraj/src/options/COMMAND.save b/projects/MissionSupport/applications/WxTraj/src/options/COMMAND.save new file mode 100644 index 0000000..874a4d3 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/options/COMMAND.save @@ -0,0 +1,126 @@ +******************************************************************************** +* * +* Input file for the trajectory model FLEXTRA: Please select your options * +* * +******************************************************************************** + +1. __________________________________________________ 3X, A50 + Test run #1 + LABEL FOR THE MODEL RUN + +2. __ 3X, I2 + -1 + DIRECTION 1 FORWARD, -1 BACKWARD TRAJECTORIES + +3. _______ 3X, I7 + 0720000 + HHHMISS LENGTH OF AN INDIVIDUAL TRAJECTORY + +4. ________ ______ 3X, I8, 1X, I6 + 20230801 000000 + YYYYMMDD HHMISS BEGINNING DATE + +5. ________ ______ 3X, I8, 1X, I6 + 20230801 090000 + YYYYMMDD HHMISS ENDING DATE + +6. _______ 3X, I7 + 0030000 + HHHMISS TIME INTERVAL BETWEEN STARTING TIMES OF TRAJECTORIES + +7. _ _____ 3X, I1, 2X, I5 + 1 10800 + i SSSSS i>0: INTERPOLATED OUTPUT OF TRAJECTORY EVERY SSSSS SECONDS + +8. _____ ___.___ _.___ _.___ _.___ _.___ 3X, I5, 2X, F7.3 4(2X,F5.3) + 00000 000.500 2.000 0.080 0.080 0.200 + NUMBER NUMBER, DISTANCE (GRID UNITS), TIME CONSTANT (WIND FIELD INTERVAL UNITS) AND INTERPOLATION ERRORS (IN U, V AND W) OF UNCERTAINTY TRAJECT. + +9. _ 3X, I1 + 1 + INTERPOLATION 1 = IDEAL INTERPOLATION >1 = LINEAR INTERPOLATION + +10. ---.-- 4X, F6.4 + 5.0 + CFL TIMESTEP CRITERION HORIZONTAL AND VERTICAL + +11. ---.-- 4X, F6.4 + 5.0 + CFLT TIMESTEP CRITERION TIME GAP BETWEEN INPUT WIND FIELDS + +12. - 4X, I1 + 1 + MODE 1 NORMAL MODE, 2 CET MODE, 3 FLIGHT MODE +=================================================================== +1. Comment to identify the current model run + +2. Direction of trajectories (1 means forward trajectories, -1 backward) + +3. Temporal lengths of the trajectories in the format HHHMISS, where HHH is + HOUR, MI is MINUTE and SS is SECOND + +4. Beginning date and time of trajectory calculation. Must be given in format + YYYYMMDD HHMISS, where YYYY is YEAR, MM is MONTH, DD is DAY, HH is HOUR, + MI is MINUTE and SS is SECOND. All times are in UTC. + +5. Ending date and time of trajectory calculation. Same format as 4. + +6. Time interval between two trajectory calculations. Same format as 3. + +7. Options for the trajectory output: + 0 = original data in irregular time intervals + 1 = constant time intervals, interpolated output every SSSSS seconds + 2 = 0 plus 1 + +8. Six parameters have to be inputted. The first is the number of + uncertainty trajectories. They are starting in a distance from + the starting point of the reference trajectory as given by the + second parameter (in grid units). + Additionally, random errors may be added at each time step of the + trajectory calculation. Using a Langevin equation, they are relaxed + with a time constant (in units of the wind field interval, third + parameter) specified by the user. These random errors are + thought to reflect typical wind errors caused, for instance, by + interpolation. The magnitude of these errors (in relative units, + relative to the wind velocity) must be specified by the user for + the three wind components u, v and w (last three parameters). + +9. Kind of interpolation + 1 - horizontal interpolation bicubic + vertical interpolation polynomial + temporal interpolation linear + >1 - horizontal interpolation bilinear + vertical interpolation linear + temporal interpolation linear + +10.cfl criterion horizontal/vertical + factor by which time step must be shorter than that determined + from the CFL criterion, i.e. + + delta_t1=delta x/u/cfl + delta_t2=delta y/v/cfl + delta_t3=delta z/w/cfl + + delta_t(space) = min(delta_t1,delta_t2,delta_t3) + +11. cfl criterion time + factor by wich time is shorter than time interval of the wind + fields + + delta_t(time) = delta_T(input wind)/cflt + + The time step used for trajectory calculation is the minimum of + delta_t(space) and delta_t(time) + + cfl and cflt must not be less than 1! + +12. 1 NORMAL mode -> read file STARTPOINTS and calculate a time + series of trajectories starting all from the same starting + points + 2 CET mode -> read file STARTCET and calculate trajectories + starting uniformly spaced from a user-defined domain + (for a single starting time) + 3 FLIGHT mode -> read file STARTFLIGHT and calculate + trajectories starting neither uniformly spaced nor with + constant time intervals (as needed, for instance, to start + trajectories along an aircraft leg) diff --git a/projects/MissionSupport/applications/WxTraj/src/options/STARTCET b/projects/MissionSupport/applications/WxTraj/src/options/STARTCET new file mode 100644 index 0000000..dc4aece --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/options/STARTCET @@ -0,0 +1,39 @@ +********************************************************************** +* * +* TRAJECTORY MODEL * +* DEFINITION OF THE CET DOMAIN * +* A CET STARTING DOMAIN IS DEFINED BY THE LOWER LEFT AND UPPER RIGHT* +* CORNER IN A LATITUDE/LONGITUDE COORDINATE SYSTEM, AND BY A LOWER * +* AND UPPER LEVEL. TRAJECTORIES ARE STARTED AT DISTANCES DX, DY AND * +* DZ WITHIN THIS DOMAIN. * +* * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = not allowed in CET mode * +* 4 = isobaric * +* 5 = isentropic * +* * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* The vertical distance DZ between the trajectories must be * +* given in the same units. * +* * +********************************************************************** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -20.0 F Lower left longitude [DEG] + 20.0 F Lower left latitude [DEG] + 40.0 F Upper right longitude [DEG] + 70.0 F Upper right latitude [DEG] + 1.0 F DX: Longitudinal distance between trajectories [DEG] + 1.0 F DY: Latitudinal distance between trajectories [DEG] + 1 I Kind of trajectory (see file header) + 3 I Unit of z coordinate + 500.0 F Lower z-coordinate (see file header) + 500.0 F Upper z-coordinate (see file header) + 200.0 F DZ: Vertical interval of trajectories (see file header) +'TESTCET' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/src/options/STARTCET.alternative b/projects/MissionSupport/applications/WxTraj/src/options/STARTCET.alternative new file mode 100644 index 0000000..159c43e --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/options/STARTCET.alternative @@ -0,0 +1,39 @@ +********************************************************************** +* * +* TRAJECTORY MODEL * +* DEFINITION OF THE CET DOMAIN * +* A CET STARTING DOMAIN IS DEFINED BY THE LOWER LEFT AND UPPER RIGHT* +* CORNER IN A LATITUDE/LONGITUDE COORDINATE SYSTEM, AND BY A LOWER * +* AND UPPER LEVEL. TRAJECTORIES ARE STARTED AT DISTANCES DX, DY AND * +* DZ WITHIN THIS DOMAIN. * +* * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = not allowed in CET mode * +* 4 = isobaric * +* 5 = isentropic * +* * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* The vertical distance DZ between the trajectories must be * +* given in the same units. * +* * +********************************************************************** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 10.0 F Lower left longitude [DEG] + 48.0 F Lower left latitude [DEG] + 15.0 F Upper right longitude [DEG] + 50.0 F Upper right latitude [DEG] + 0.5 F DX: Longitudinal distance between trajectories [DEG] + 0.5 F DY: Latitudinal distance between trajectories [DEG] + 5 I Kind of trajectory (see file header) + 2 I Unit of z coordinate + 2000.0 F Lower z-coordinate (see file header) + 3000.0 F Upper z-coordinate (see file header) + 500.0 F DZ: Vertical interval of trajectories (see file header) +'TEST' +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/src/options/STARTCET.reference b/projects/MissionSupport/applications/WxTraj/src/options/STARTCET.reference new file mode 100644 index 0000000..7d857e4 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/options/STARTCET.reference @@ -0,0 +1,62 @@ +********************************************************************** +* * +* TRAJECTORY MODEL * +* DEFINITION OF THE CET DOMAIN * +* A CET STARTING DOMAIN IS DEFINED BY THE LOWER LEFT AND UPPER RIGHT* +* CORNER IN A LATITUDE/LONGITUDE COORDINATE SYSTEM, AND BY A LOWER * +* AND UPPER LEVEL. TRAJECTORIES ARE STARTED AT DISTANCES DX, DY AND * +* DZ WITHIN THIS DOMAIN. * +* * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = not allowed in CET mode * +* 4 = isobaric * +* 5 = isentropic * +* * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* The vertical distance DZ between the trajectories must be * +* given in the same units. * +* * +********************************************************************** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 10.0 +____.____ f9.4 Lower left longitude [DEG] + + 48.0 +____.____ f9.4 Lower left latitude [DEG] + + 15.0 +____.____ f9.4 Upper right longitude [DEG] + + 50.0 +____.____ f9.4 Upper right latitude [DEG] + + 0.5 +____.____ f9.4 DX: Longitudinal distance between trajectories [DEG] + + 0.5 +____.____ f9.4 DY: Latitudinal distance between trajectories [DEG] + + 5 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 2000.0 +_____.___ f10.3 Lower z-coordinate (see file header) + + 3000.0 +_____.___ f10.3 Upper z-coordinate (see file header) + + 500.0 +_____.___ f10.3 DZ: Vertical interval of trajectories (see file header) + +TEST +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/src/options/STARTFLIGHT b/projects/MissionSupport/applications/WxTraj/src/options/STARTFLIGHT new file mode 100644 index 0000000..380fe0e --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/options/STARTFLIGHT @@ -0,0 +1,51 @@ +********************************************************************** +* TRAJECTORY MODEL * +* DEFINITION OF STARTING/ENDING POINTS IN FLIGHT MODE * +* This file defines starting points separated non-uniformly in * +* space as well as in time. Thus, both starting times AND starting * +* coordinates must be given. * +* The starting times must be strictly in temporal order. * +* For backward trajectories, the temporal order must be reversed. * +* In line #28 of this file, the name of the output file must be * +* indicated. Lines #29 and #30 must contain kind of trajectory and * +* the unit of the z coordinate to be used. Line #31 is arbitrary, * +* then follows a sequence of points. * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = mixing layer * +* 4 = isobaric * +* 5 = isentropic * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* For mixing layer trajectories (kind 3), the z coordinate must be * +* given in m.a.g.l. (option 2) * +* * +********************************************************************** +'Flight#7' +1 I Kind of trajectory (see file header) +1 I Unit of z coordinate +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +19980404 000000 2I Starting date and time + 34.0 F Longitude [DEG] + 72.0 F Latitude [DEG] +1000.0 F z-coordinate (see file header) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +19980404 140000 2I Starting date and time + -15.0 F Longitude [DEG] + 48.0 F Latitude [DEG] +2000.0 F z-coordinate (see file header) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +19980405 130000 2I Starting date and time + 10.0 F Longitude [DEG] + 48.0 F Latitude [DEG] +3500.0 F z-coordinate (see file header) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +19980406 130000 2I Starting date and time + 10.0 F Longitude [DEG] + 48.0 F Latitude [DEG] +3000.0 F z-coordinate (see file header) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/src/options/STARTFLIGHT.reference b/projects/MissionSupport/applications/WxTraj/src/options/STARTFLIGHT.reference new file mode 100644 index 0000000..380fe0e --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/options/STARTFLIGHT.reference @@ -0,0 +1,51 @@ +********************************************************************** +* TRAJECTORY MODEL * +* DEFINITION OF STARTING/ENDING POINTS IN FLIGHT MODE * +* This file defines starting points separated non-uniformly in * +* space as well as in time. Thus, both starting times AND starting * +* coordinates must be given. * +* The starting times must be strictly in temporal order. * +* For backward trajectories, the temporal order must be reversed. * +* In line #28 of this file, the name of the output file must be * +* indicated. Lines #29 and #30 must contain kind of trajectory and * +* the unit of the z coordinate to be used. Line #31 is arbitrary, * +* then follows a sequence of points. * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = mixing layer * +* 4 = isobaric * +* 5 = isentropic * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* For mixing layer trajectories (kind 3), the z coordinate must be * +* given in m.a.g.l. (option 2) * +* * +********************************************************************** +'Flight#7' +1 I Kind of trajectory (see file header) +1 I Unit of z coordinate +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +19980404 000000 2I Starting date and time + 34.0 F Longitude [DEG] + 72.0 F Latitude [DEG] +1000.0 F z-coordinate (see file header) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +19980404 140000 2I Starting date and time + -15.0 F Longitude [DEG] + 48.0 F Latitude [DEG] +2000.0 F z-coordinate (see file header) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +19980405 130000 2I Starting date and time + 10.0 F Longitude [DEG] + 48.0 F Latitude [DEG] +3500.0 F z-coordinate (see file header) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +19980406 130000 2I Starting date and time + 10.0 F Longitude [DEG] + 48.0 F Latitude [DEG] +3000.0 F z-coordinate (see file header) +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/src/options/STARTPOINTS b/projects/MissionSupport/applications/WxTraj/src/options/STARTPOINTS new file mode 100644 index 0000000..7934b7f --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/options/STARTPOINTS @@ -0,0 +1,44 @@ +********************************************************************** +* * +* TRAJECTORY MODEL * +* DEFINITION OF STARTING/ENDING POINTS * +* * +* The first 7 characters of the comment are also used as filenames. * +* Therefore, they cannot be blank and they must be different for * +* each starting point. * +* * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = mixing layer * +* 4 = isobaric * +* 5 = isentropic * +* * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* For mixing layer trajectories (kind 3), the z coordinate must be * +* given in m.a.g.l. (option 2) * +* * +********************************************************************** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 126.9900 +____.____ f9.4 Longitude [DEG] + + 37.5500 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 100.000 +_____.___ f10.3 z-coordinate (see file header) + +Seoul_20230201_00_100_b +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/src/options/STARTPOINTS.alternative b/projects/MissionSupport/applications/WxTraj/src/options/STARTPOINTS.alternative new file mode 100644 index 0000000..edf618f --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/options/STARTPOINTS.alternative @@ -0,0 +1,40 @@ +********************************************************************** +* * +* TRAJECTORY MODEL * +* DEFINITION OF STARTING/ENDING POINTS * +* * +* The first 7 characters of the comment are also used as filenames. * +* Therefore, they cannot be blank and they must be different for * +* each starting point. * +* * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = mixing layer * +* 4 = isobaric * +* 5 = isentropic * +* * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* For mixing layer trajectories (kind 3), the z coordinate must be * +* given in m.a.g.l. (option 2) * +* * +********************************************************************** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 10.0 F Longitude [DEG] + 48.0 F Latitude [DEG] +1 I Kind of trajectory (see file header) +1 I Unit of z coordinate +3000.0 F z-coordinate (see file header) +'TEST1' A Name of starting point +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -15.0 F Longitude [DEG] + 48.0 F Latitude [DEG] +5 I Kind of trajectory (see file header) +2 I Unit of z coordinate +2000.0 F z-coordinate (see file header) +'TEST2' A Name of starting point +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/src/options/STARTPOINTS.reference b/projects/MissionSupport/applications/WxTraj/src/options/STARTPOINTS.reference new file mode 100644 index 0000000..837b137 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/options/STARTPOINTS.reference @@ -0,0 +1,62 @@ +********************************************************************** +* * +* TRAJECTORY MODEL * +* DEFINITION OF STARTING/ENDING POINTS * +* * +* The first 7 characters of the comment are also used as filenames. * +* Therefore, they cannot be blank and they must be different for * +* each starting point. * +* * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = mixing layer * +* 4 = isobaric * +* 5 = isentropic * +* * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* For mixing layer trajectories (kind 3), the z coordinate must be * +* given in m.a.g.l. (option 2) * +* * +********************************************************************** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 10.0 +____.____ f9.4 Longitude [DEG] + + 48.0 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 3000.0 +_____.___ f10.3 z-coordinate (see file header) + +TEST1 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -15.0 +____.____ f9.4 Longitude [DEG] + + 48.0 +____.____ f9.4 Latitude [DEG] + + 5 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 2000.0 +_____.___ f10.3 z-coordinate (see file header) + +TEST2 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/src/options/STARTPOINTS.save b/projects/MissionSupport/applications/WxTraj/src/options/STARTPOINTS.save new file mode 100644 index 0000000..13019fa --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/options/STARTPOINTS.save @@ -0,0 +1,44 @@ +********************************************************************** +* * +* TRAJECTORY MODEL * +* DEFINITION OF STARTING/ENDING POINTS * +* * +* The first 7 characters of the comment are also used as filenames. * +* Therefore, they cannot be blank and they must be different for * +* each starting point. * +* * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = mixing layer * +* 4 = isobaric * +* 5 = isentropic * +* * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* For mixing layer trajectories (kind 3), the z coordinate must be * +* given in m.a.g.l. (option 2) * +* * +********************************************************************** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 126.99 +____.____ f9.4 Longitude [DEG] + + 37.55 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 250.00 +_____.___ f10.3 z-coordinate (see file header) + +Seoul +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/src/options/STARTPOINTS_backward b/projects/MissionSupport/applications/WxTraj/src/options/STARTPOINTS_backward new file mode 100644 index 0000000..2d7f0a0 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/options/STARTPOINTS_backward @@ -0,0 +1,890 @@ +********************************************************************** +* * +* TRAJECTORY MODEL * +* DEFINITION OF STARTING/ENDING POINTS * +* * +* The first 7 characters of the comment are also used as filenames. * +* Therefore, they cannot be blank and they must be different for * +* each starting point. * +* * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = mixing layer * +* 4 = isobaric * +* 5 = isentropic * +* * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* For mixing layer trajectories (kind 3), the z coordinate must be * +* given in m.a.g.l. (option 2) * +* * +********************************************************************** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 500.0 +_____.___ f10.3 z-coordinate (see file header) + +1 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 1000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0001 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 1500.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0002 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 2000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0003 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 2500.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0004 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 3000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0005 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 3500.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0006 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 4000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0007 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 4500.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0008 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 5000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0009 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 5500.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0010 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 6000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0011 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 6500.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0012 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 7000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0013 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 7500.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0014 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 8000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0015 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 8500.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0016 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 9000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0017 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + + 9500.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0018 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + +10000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0019 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + +10500.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0020 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + +11000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0021 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + +11500.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0022 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 11.1 +____.____ f9.4 Longitude [DEG] + + 47.5 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 2 + _ 1X,I1, Unit of z coordinate + +12000.0 +_____.___ f10.3 z-coordinate (see file header) + +1_0023 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 500.0 +_____.___ f10.3 z-coordinate (see file header) + +2 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 1000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0001 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 1500.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0002 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 2000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0003 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 2500.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0004 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 3000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0005 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 3500.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0006 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 4000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0007 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 4500.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0008 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 5000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0009 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 5500.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0010 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 6000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0011 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 6500.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0012 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 7000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0013 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 7500.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0014 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 8000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0015 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 8500.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0016 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 9000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0017 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 9500.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0018 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +10000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0019 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +10500.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0020 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +11000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0021 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +11500.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0022 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -25.20 +____.____ f9.4 Longitude [DEG] + + 36.97 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +12000.0 +_____.___ f10.3 z-coordinate (see file header) + +2_0023 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/src/options/STARTPOINTS_forward b/projects/MissionSupport/applications/WxTraj/src/options/STARTPOINTS_forward new file mode 100644 index 0000000..1a6f5c3 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/options/STARTPOINTS_forward @@ -0,0 +1,890 @@ +********************************************************************** +* * +* TRAJECTORY MODEL * +* DEFINITION OF STARTING/ENDING POINTS * +* * +* The first 7 characters of the comment are also used as filenames. * +* Therefore, they cannot be blank and they must be different for * +* each starting point. * +* * +* Kind of trajectory: 1 = 3 dimensional * +* 2 = on model layers * +* 3 = mixing layer * +* 4 = isobaric * +* 5 = isentropic * +* * +********************************************************************** +* * +* Unit of z coordinate: 1 = Meters above sea level * +* 2 = Meters above ground * +* 3 = Hectopascal * +* * +* For mixing layer trajectories (kind 3), the z coordinate must be * +* given in m.a.g.l. (option 2) * +* * +********************************************************************** +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 500.0 +_____.___ f10.3 z-coordinate (see file header) + +3 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 1000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0001 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 1500.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0002 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 2000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0003 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 2500.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0004 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 3000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0005 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 3500.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0006 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 4000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0007 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 4500.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0008 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 5000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0009 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 5500.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0010 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 6000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0011 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 6500.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0012 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 7000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0013 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 7500.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0014 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 8000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0015 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 8500.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0016 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 9000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0017 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 9500.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0018 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +10000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0019 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +10500.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0020 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +11000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0021 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +11500.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0022 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -69.99 +____.____ f9.4 Longitude [DEG] + + 41.69 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +12000.0 +_____.___ f10.3 z-coordinate (see file header) + +3_0023 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 500.0 +_____.___ f10.3 z-coordinate (see file header) + +4 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 1000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0001 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 1500.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0002 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 2000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0003 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 2500.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0004 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 3000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0005 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 3500.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0006 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 4000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0007 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 4500.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0008 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 5000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0009 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 5500.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0010 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 6000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0011 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 6500.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0012 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 7000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0013 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 7500.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0014 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 8000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0015 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 8500.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0016 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 9000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0017 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + + 9500.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0018 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +10000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0019 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +10500.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0020 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +11000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0021 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +11500.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0022 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -72.30 +____.____ f9.4 Longitude [DEG] + + 41.15 +____.____ f9.4 Latitude [DEG] + + 1 + _ 1X,I1 Kind of trajectory (see file header) + + 1 + _ 1X,I1, Unit of z coordinate + +12000.0 +_____.___ f10.3 z-coordinate (see file header) + +4_0023 +________________________________________ character*40 comment +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/projects/MissionSupport/applications/WxTraj/src/orolininterpol.f b/projects/MissionSupport/applications/WxTraj/src/orolininterpol.f new file mode 100644 index 0000000..3e09ba5 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/orolininterpol.f @@ -0,0 +1,75 @@ + subroutine orolininterpol(yy,nxmax,nymax,nx,ny,xt,yt,yint) +C i i i i i i i o +***************************************************************************** +* * +* Interpolation of meteorological fields on 2-d model layers. * +* A bilinear interpolation interpolation is used. * +* * +* * +* Author: A. Stohl * +* * +* 30 May 1994 * +* * +***************************************************************************** +* * +* Variables: * +* * +* height(nzmax) heights of the model levels * +* ix,jy x,y coordinates of lower left subgrid point * +* nx,ny actual field dimensions in x,y and z direction * +* nxmax,nymax,nzmax maximum field dimensions in x,y and z direction * +* xt current x coordinate * +* yint the final interpolated value * +* yt current y coordinate * +* yy(0:nxmax-1,0:nymax-1) meteorological field used for interpolation * +* zt current z coordinate * +* * +***************************************************************************** + + implicit none + + integer nx,ny,nxmax,nymax,ix,jy,ixp,jyp + real yy(0:nxmax-1,0:nymax-1) + real ddx,ddy,rddx,rddy + real xt,yt,yint + + + +C If point at border of grid -> small displacement into grid +************************************************************ + + if (xt.ge.float(nx-1)) xt=float(nx-1)-0.00001 + if (yt.ge.float(ny-1)) yt=float(ny-1)-0.00001 + + + +*********************************************************************** +C 1.) Bilinear horizontal interpolation +C This has to be done separately for 2 fields (Temporal) +******************************************************** + +C Determine the lower left corner and its distance to the current position +************************************************************************** + + ix=int(xt) + jy=int(yt) + ixp=ix+1 + jyp=jy+1 + ddx=xt-float(ix) + ddy=yt-float(jy) + rddx=1.-ddx + rddy=1.-ddy + + +C Loop over 2 time steps +************************ + + yint=rddx*rddy*yy(ix ,jy ) + + + ddx*rddy*yy(ixp,jy ) + + +rddx* ddy*yy(ix ,jyp) + + + ddx* ddy*yy(ixp,jyp) + + + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/orolininterpol_nests.f b/projects/MissionSupport/applications/WxTraj/src/orolininterpol_nests.f new file mode 100644 index 0000000..9dc55a7 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/orolininterpol_nests.f @@ -0,0 +1,80 @@ + subroutine orolininterpoln(yy,maxnests,nxmax,nymax,ngrid,nxn,nyn, + +xt,yt,yint) +C i i i i i i i +C i i o +***************************************************************************** +* * +* Interpolation of nested meteorological fields on 2-d model layers. * +* A bilinear interpolation interpolation is used. * +* * +* * +* Author: A. Stohl * +* * +* 30 May 1994 * +* * +***************************************************************************** +* * +* Variables: * +* * +* height(nzmax) heights of the model levels * +* ix,jy x,y coordinates of lower left subgrid point * +* maxnests maximum allowed number of nests * +* ngrid currently used number of nests * +* nxn,nyn actual field dimensions in x,y and z direction * +* nxmax,nymax,nzmax maximum field dimensions in x,y and z direction * +* xt current x coordinate * +* yint the final interpolated value * +* yt current y coordinate * +* yy(0:nxmax-1,0:nymax-1) meteorological field used for interpolation * +* zt current z coordinate * +* * +***************************************************************************** + + implicit none + + integer maxnests,nxn(maxnests),nyn(maxnests),nxmax,nymax,ngrid + integer ix,jy,ixp,jyp + real yy(0:nxmax-1,0:nymax-1,maxnests) + real ddx,ddy,rddx,rddy + real xt,yt,yint + + + +C If point at border of grid -> small displacement into grid +************************************************************ + + if (xt.ge.float(nxn(ngrid)-1)) xt=float(nxn(ngrid)-1)-0.00001 + if (yt.ge.float(nyn(ngrid)-1)) yt=float(nyn(ngrid)-1)-0.00001 + + + +*********************************************************************** +C 1.) Bilinear horizontal interpolation +C This has to be done separately for 2 fields (Temporal) +******************************************************** + +C Determine the lower left corner and its distance to the current position +************************************************************************** + + ix=int(xt) + jy=int(yt) + ixp=ix+1 + jyp=jy+1 + ddx=xt-float(ix) + ddy=yt-float(jy) + rddx=1.-ddx + rddy=1.-ddy + + +C Loop over 2 time steps +************************ + + yint=rddx*rddy*yy(ix ,jy ,ngrid) + + + ddx*rddy*yy(ixp,jy ,ngrid) + + +rddx* ddy*yy(ix ,jyp,ngrid) + + + ddx* ddy*yy(ixp,jyp,ngrid) + + + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/pathnames b/projects/MissionSupport/applications/WxTraj/src/pathnames new file mode 100644 index 0000000..e6c6213 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/pathnames @@ -0,0 +1,9 @@ +/discover/nobackup/pcastell/workspace/flextra/flextra/options/ +/discover/nobackup/pcastell/workspace/flextra/flextra/output/ +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/das/ +/discover/nobackup/pcastell/workspace/flextra/flextra/AVAILABLE +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/das/ +/discover/nobackup/pcastell/workspace/flextra/flextra/AVAILABLE +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/das/ +/discover/nobackup/pcastell/workspace/flextra/flextra/AVAILABLE +============================================ diff --git a/projects/MissionSupport/applications/WxTraj/src/pathnames.fp b/projects/MissionSupport/applications/WxTraj/src/pathnames.fp new file mode 100644 index 0000000..4e6520f --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/pathnames.fp @@ -0,0 +1,9 @@ +/discover/nobackup/pcastell/workspace/flextra/flextra/options/ +/discover/nobackup/pcastell/workspace/flextra/flextra/output/ +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/forecast/Y2023/M08/D01/H12/ +/discover/nobackup/pcastell/workspace/flextra/flextra/AVAILABLE +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/forecast/Y2023/M08/D01/H12/ +/discover/nobackup/pcastell/workspace/flextra/flextra/AVAILABLE +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/forecast/Y2023/M08/D01/H12/ +/discover/nobackup/pcastell/workspace/flextra/flextra/AVAILABLE +============================================ diff --git a/projects/MissionSupport/applications/WxTraj/src/pathnames.save b/projects/MissionSupport/applications/WxTraj/src/pathnames.save new file mode 100644 index 0000000..4e6520f --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/pathnames.save @@ -0,0 +1,9 @@ +/discover/nobackup/pcastell/workspace/flextra/flextra/options/ +/discover/nobackup/pcastell/workspace/flextra/flextra/output/ +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/forecast/Y2023/M08/D01/H12/ +/discover/nobackup/pcastell/workspace/flextra/flextra/AVAILABLE +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/forecast/Y2023/M08/D01/H12/ +/discover/nobackup/pcastell/workspace/flextra/flextra/AVAILABLE +/discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp/forecast/Y2023/M08/D01/H12/ +/discover/nobackup/pcastell/workspace/flextra/flextra/AVAILABLE +============================================ diff --git a/projects/MissionSupport/applications/WxTraj/src/petters.f b/projects/MissionSupport/applications/WxTraj/src/petters.f new file mode 100644 index 0000000..727e5fb --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/petters.f @@ -0,0 +1,414 @@ + subroutine petters(minstep,nt,itime,xold,yold,zold,pold,hold, + +qqold,pvold,thold,xnew,ynew,znew,pnew,hnew,qqnew,pvnew,thnew, + +ntstep,nstop,levconst,init,lkind,lkindz,unc,trerroru, + +trerrorv,trerrorw) +C i i i i i i o o +C o o o o o o o o o o o +C o o i i i i i o +C o o +******************************************************************************** +* * +* Calculation of trajectories utilizing the Petterssen scheme. * +* The time step is determined by the Courant-Friedrichs-Lewy (CFL) criterion. * +* This means that the time step must be so small that the displacement within * +* this time step is smaller than 1 grid distance. Additionally, a temporal * +* CFL criterion is introduced: the time step must be smaller than the time * +* interval of the wind fields used for interpolation. * +* The CFL criterion is only used for the initialization of the iteration * +* scheme. Within the Petterssen iteration scheme this time step is not * +* corrected, but kept constant. * +* * +* Author: A. Stohl * +* * +* 1 February 1994 * +* * +* Update: 16 February 1997: limitation of the estimated truncation error * +* * +* Update: 29 July 1998: use of global data * +* * +* Literature: * +* Petterssen (1940): Weather Analysis and Forecasting. McGraw-Hill Book * +* Company, Inc. * +* Seibert P. (1993): Convergence and Accuracy of Numerical Methods for * +* Trajectory Calculation. J. Appl. Met. 32, 558-566. * +* * +******************************************************************************** +* * +* Variables: * +* corr correlation coefficient of random errors * +* epsu,epsv,epsw magnitude of random errors for uncertainty trajecories * +* idiff [s] Temporal distance between the windfields used for interpol* +* init .true. for first time step of trajectory * +* indwz index of the model layer beneath current position of traj.* +* itermax maximum number of iterations used in the integration schem* +* itime [s] current temporal position * +* ldirect Temporal direction of trajectories (-1=backward,1=forward)* +* levconst height of trajectory in Pa, m or K depending on type of t.* +* lkind kind of trajectory (e.g. isobaric, 3-dimensional) * +* lkindz unit of z coordinate (1:masl, 2:magl, 3:hPa) * +* minstep [s] minimum possible time step=not to exceed dimension maxtime* +* ngrid index which grid is to be used * +* nstop =greater 0, if trajectory calculation is finished * +* nt [s] Current age of trajectory * +* ntstep final time step of trajectory calculation * +* ntstep1 time step determined by horizontal CFL-criterion * +* ntstep2 time step determined by vertical CFL-criterion * +* ntstep3 time step determined by temporal CFL-criterion * +* pnew,hnew height at next time steps position in pressure and z coor * +* pold,hold height at current time steps position in p and z coordina * +* pvold,pvnew [Ks-1Pa-1] potential vorticity at old and new position * +* qqold,qqnew specific humidity at old and new position * +* thold,thnew potential temperature at old and new position * +* trerroru, trerrorv, trerrorw memory of random errors added at last timestep* +* unew,vnew,wnew Wind components at next time steps position of trajectory * +* uold,vold,wold Wind components at current position of trajectory * +* vvmax maximum of u and v, help variable * +* wheight(nwzmax) Heights of the model layers for w component * +* xhelp,yhelp,zhelp help variables * +* xnew,ynew,znew Next time step's spatial position of trajectory * +* xold,yold,zold Actual spatial position of trajectory * +* zdist vertical grid distance at current position of trajectory * +* * +* Constants: * +* cfl factor, by which the time step has to be smaller than the * +* spatial CFL-criterion * +* cflt factor, by which the time step has to be smaller than the * +* temporal CFL-criterion * +* deltahormax maximum horizontal distance between two iterations * +* deltavermax maximum vertical distance between two iterations * +* eps1 tiny number * +* itermax maximum number of iterations * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer i,j,nt,itime,nstop,idiff,indwz,ntstep,ntstep1,ntstep2 + integer ntstep3,minstep,lkind,lkindz,idummy,ngrid + real xold,yold,zold,xnew,ynew,znew,xhelp,yhelp,zhelp,uint,vint + real unew,vnew,wnew,uold,vold,wold,vvmax,zdist,levconst + real pold,hold,pnew,hnew,pvold,pvnew,thold,thnew,qqold,qqnew + real gasdev,xlon,ylat,xpol,ypol,gridsize + real cgszll,xpolold,ypolold,corr,trerroru,trerrorv,trerrorw + logical init,unc + save idummy + data idummy/-7/ + + nstop=0 + ntstep=0 + +C Determine whether lat/long grid or polarstereographic projection +C is to be used +C Furthermore, determine which nesting level to be used +****************************************************************** +c write (*,*) 'petters',nglobal,yold,switchnorthg + if (nglobal.and.(yold.gt.switchnorthg)) then + ngrid=-1 + else if (sglobal.and.(yold.lt.switchsouthg)) then + ngrid=-2 + else + ngrid=0 + do 12 j=numbnests,1,-1 + if ((xold.gt.xln(j)).and.(xold.lt.xrn(j)).and. + + (yold.gt.yln(j)).and.(yold.lt.yrn(j))) then + ngrid=j + goto 13 + endif +12 continue +13 continue + endif + + +C Get wind data at the current trajectory position +************************************************** + + call getwind(.true.,init,itime,levconst,xold,yold,zold,lkind, + +lkindz,2,ngrid,uint,vint,wold,idiff,indwz,nstop) + + if (nstop.gt.1) return + +C Transformation m/s --> grid units/time unit +********************************************* + + if (ngrid.ge.0) then ! mother domain + call utransform(uint,yold,uold) + call vtransform(vint,vold) + else if (ngrid.eq.-1) then ! around north pole + xlon=xlon0+xold*dx + ylat=ylat0+yold*dy + gridsize=1000.*cgszll(northpolemap,ylat,xlon) + uold=uint/gridsize + vold=vint/gridsize + else if (ngrid.eq.-2) then ! around south pole + xlon=xlon0+xold*dx + ylat=ylat0+yold*dy + gridsize=1000.*cgszll(southpolemap,ylat,xlon) + uold=uint/gridsize + vold=vint/gridsize + endif + + + +C Calculate the time step determined by the CFL criterion +C Three independent CFL-criteria are used: +C 1) In horizontal direction = displacement smaller than grid distance +C 2) In vertical direction = displacement smaller than grid distance +C 3) In temporal direction = distance between the 2 windfields used for interpol +C The final time step is the minimum of 1,2 and 3 +******************************************************************************** + + if (ngrid.lt.0) then + ntstep1=999999 + else + vvmax=max(abs(uold)*xresoln(ngrid),abs(vold)*yresoln(ngrid),eps1) + ntstep1=int(min(1./vvmax/cfl,999999.)) ! 1 + endif + + if (lkind.eq.1) then + zdist=wheight(indwz+1)-wheight(indwz) + if (abs(wold).lt.eps1) wold=eps1 + ntstep2=int(min(zdist/abs(wold)/cfl,999999.)) ! 2 + else + ntstep2=999999 + endif + + ntstep3=int(float(idiff)/cflt) ! 3 + + ntstep=min(ntstep1,ntstep2,ntstep3) + + if (ntstep.lt.1) ntstep=1 ! minimum step = 1 second + + +C Check, if such a short time step is possible. Under the assumption +C that all following time steps have the same length, check if this +C would lead to an exceedance of field dimensions. If this is the case +C increase the time step. However the time step cannot be greater than +C the time difference between 2 wind fields +********************************************************************** + + if ((inter.ne.1).and.(ntstep.lt.minstep)) then + ntstep=min(minstep,idiff) + write(*,*) 'Warning: time step exceeds CFL-criterion!' + endif + + if (ldirect.eq.-1) ntstep=-1*ntstep ! backward t. -> negative + + +C If the last step of trajectory is reached, give nstop code 1 +C Reduce the time step, so that trajectory ends exactly after lentra seconds +**************************************************************************** + + if (abs(nt+ntstep).ge.abs(lentra)) then + ntstep=ldirect*(abs(lentra-nt)) + nstop=1 + endif + + +C Calculate first guess position at time step nt+ntstep +******************************************************* + + if (ngrid.ge.0) then ! mother domain + xnew=xold+uold*float(ntstep) + ynew=yold+vold*float(ntstep) + else if (ngrid.eq.-1) then ! around north pole + call cll2xy(northpolemap,ylat,xlon,xpolold,ypolold) + xpol=xpolold+uold*float(ntstep) + ypol=ypolold+vold*float(ntstep) + call cxy2ll(northpolemap,xpol,ypol,ylat,xlon) + xnew=(xlon-xlon0)/dx + ynew=(ylat-ylat0)/dy + else if (ngrid.eq.-2) then ! around south pole + call cll2xy(southpolemap,ylat,xlon,xpolold,ypolold) + xpol=xpolold+uold*float(ntstep) + ypol=ypolold+vold*float(ntstep) + call cxy2ll(southpolemap,xpol,ypol,ylat,xlon) + xnew=(xlon-xlon0)/dx + ynew=(ylat-ylat0)/dy + endif + if(lkind.eq.1) then + znew=zold+wold*float(ntstep) + else + znew=zold + endif + + +C Check position: If trajectory outside model domain, terminate it +****************************************************************** + + if (znew.gt.heightmax) znew=heightmax + if (znew.lt.heightmin) znew=heightmin + + +C If global data are available, use cyclic boundary condition +************************************************************* + + if (xglobal) then + if (xnew.gt.float(nx-1)) xnew=xnew-float(nx-1) + if (xnew.lt.0.) xnew=xnew+float(nx-1) + endif + + + if ((xnew.lt.0.).or.(xnew.gt.float(nx-1)).or.(ynew.lt.0.).or. + +(ynew.gt.float(ny-1))) then + nstop=2 + return + endif + + +C Iteration. A maximum of itermax iterations is allowed. Iteration is +C terminated, when distance between two iterations is less than the maximum +C allowable distance deltadistmax +*************************************************************************** + + do 10 i=1,itermax + xhelp=xnew + yhelp=ynew + zhelp=znew + +C Check whether position is within a nest +***************************************** + + if (ngrid.ge.0) then + ngrid=0 + do 22 j=numbnests,1,-1 + if ((xnew.gt.xln(j)).and.(xnew.lt.xrn(j)).and. + + (ynew.gt.yln(j)).and.(ynew.lt.yrn(j))) then + ngrid=j + goto 23 + endif +22 continue +23 continue + endif + +C Get wind data at trajectory position at time step nt+ntstep +************************************************************* + + call getwind(.false.,init,itime+ntstep,levconst,xnew,ynew, + + znew,lkind,lkindz,i,ngrid,uint,vint,wnew,idiff,indwz,nstop) + + if (nstop.gt.1) return + +C Transformation m/s --> grid units/time unit and advection +*********************************************************** + + if (ngrid.ge.0) then + call utransform(uint,ynew,unew) + call vtransform(vint,vnew) + xnew=xold+(uold+unew)*float(ntstep)/2. + ynew=yold+(vold+vnew)*float(ntstep)/2. + else if (ngrid.eq.-1) then ! around north pole + xlon=xlon0+xnew*dx + ylat=ylat0+ynew*dy + gridsize=1000.*cgszll(northpolemap,ylat,xlon) + unew=uint/gridsize + vnew=vint/gridsize + xpol=xpolold+(uold+unew)*float(ntstep)/2. + ypol=ypolold+(vold+vnew)*float(ntstep)/2. + call cxy2ll(northpolemap,xpol,ypol,ylat,xlon) + xnew=(xlon-xlon0)/dx + ynew=(ylat-ylat0)/dy + else if (ngrid.eq.-2) then ! around south pole + xlon=xlon0+xnew*dx + ylat=ylat0+ynew*dy + gridsize=1000.*cgszll(southpolemap,ylat,xlon) + unew=uint/gridsize + vnew=vint/gridsize + xpol=xpolold+(uold+unew)*float(ntstep)/2. + ypol=ypolold+(vold+vnew)*float(ntstep)/2. + call cxy2ll(southpolemap,xpol,ypol,ylat,xlon) + xnew=(xlon-xlon0)/dx + ynew=(ylat-ylat0)/dy + endif + + if(lkind.eq.1) then + znew=zold+(wold+wnew)*float(ntstep)/2. + endif + +C Check position: If trajectory outside model domain, terminate it +****************************************************************** + + if (znew.gt.heightmax) znew=heightmax + if (znew.lt.heightmin) znew=heightmin + + +C If global data are available, use cyclic boundary condition +************************************************************* + + if (xglobal) then + if (xnew.gt.float(nx-1)) xnew=xnew-float(nx-1) + if (xnew.lt.0.) xnew=xnew+float(nx-1) + endif + + + if ((xnew.lt.0.).or.(xnew.gt.float(nx-1)).or.(ynew.lt.0.).or. + + (ynew.gt.float(ny-1))) then + nstop=2 + return + endif + + + +C If the distance between two iterations is less than the maximum allowable +C one (in vertical and horizontal direction), leave the loop. +*************************************************************************** + + if (lkind.eq.1) then + if ((sqrt((xhelp-xnew)*(xhelp-xnew)+(yhelp-ynew)*(yhelp-ynew)) + + .lt.deltahormax).and. + + (abs(zhelp-znew).lt.deltavermax*zdist)) goto 20 + else + if (sqrt((xhelp-xnew)*(xhelp-xnew)+(yhelp-ynew)*(yhelp-ynew)) + + .lt.deltahormax) goto 20 + endif + +10 continue + +20 continue + + +C Calculate random displacement for uncertainty trajectories +C using a Langevin equation +C For this, an autocorrelation of wind errors is calculated. +C This is not done near the poles! +************************************************************ + + if (unc.and.(ngrid.ge.0)) then + corr=exp(-1./(relaxtime*max(cfl,cflt))) + trerroru=corr*trerroru+gasdev(idummy)*epsu*sqrt(1.-corr**2) + xnew=xnew+trerroru*(uold+unew)*float(ntstep)/2. + trerrorv=corr*trerrorv+gasdev(idummy)*epsv*sqrt(1.-corr**2) + ynew=ynew+trerrorv*(vold+vnew)*float(ntstep)/2. + trerrorw=corr*trerrorw+gasdev(idummy)*epsw*sqrt(1.-corr**2) + znew=znew+trerrorw*(wold+wnew)*float(ntstep)/2. + if (xglobal) then + if (xnew.gt.float(nx-1)) xnew=xnew-float(nx-1) + if (xnew.lt.0.) xnew=xnew+float(nx-1) + endif + if ((xnew.lt.0.).or.(xnew.gt.float(nx-1)).or.(ynew.lt.0.).or. + + (ynew.gt.float(ny-1))) then + nstop=2 + return + endif + if (znew.gt.heightmax) znew=heightmax + if (znew.lt.heightmin) znew=heightmin + endif + + + +C Calculate vertical position of trajectory in pressure and z coordinates. +C Interpolate also additional meteo data (PV, THETA, Spec. Hum.) to +C trajectory position. +C This is always done for the new positions, only for the first position +C of the trajectory it is necessary to calculate the old positions. +************************************************************************* + + if (init) then + call getheight(itime,xold,yold,zold,pold,hold) + call getmet(itime,xold,yold,zold,qqold,pvold,thold) + endif + call getheight(itime+ntstep,xnew,ynew,znew,pnew,hnew) + call getmet(itime+ntstep,xnew,ynew,znew,qqnew,pvnew,thnew) + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/plot_example.py b/projects/MissionSupport/applications/WxTraj/src/plot_example.py new file mode 100644 index 0000000..97d6e22 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/plot_example.py @@ -0,0 +1,77 @@ +import metview as mv + + +if __name__ == "__main__": + + # (C) Copyright 2017- ECMWF. + # + # This software is licensed under the terms of the Apache Licence Version 2.0 + # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + # + # In applying this licence, ECMWF does not waive the privileges and immunities + # granted to it by virtue of its status as an intergovernmental organisation + # nor does it submit to any jurisdiction. + # + + + # read file containing the results of a FLEXTRA + # forward simulation with 5 trajectories started at the + # same location and height at different times + # (i.e. a FLEXTRA simulation with mode="normal") + filename = "output/TI_Seoul" + if mv.exist(filename): + f = mv.read(filename) + else: + f = mv.gallery.load_dataset(filename) + + # define visualiser + vis = mv.flextra_visualiser(flextra_data=f) +# vis = mv.flextra_visualizer(flextra_data=f,flextra_x_variable='Date',flextra_y_variables='Height') + + + # define coastlines + coast = mv.mcoast( + map_coastline_resolution="medium", + map_coastline_land_shade="on", + map_coastline_land_shade_colour="RGB(0.5569,0.5569,0.5569)", + map_coastline_sea_shade="on", + map_coastline_sea_shade_colour="RGB(0.8,0.8,0.8)", + map_boundaries="on", + map_boundaries_colour="burgundy", + ) + + # define view + view = mv.geoview( + map_area_definition="corners", + area=[30, 104, 45, 160], + coastlines=coast, + ) + + # define symbol plotting + sym = mv.msymb( + legend="on", + symbol_type="marker", + symbol_table_mode="advanced", + symbol_connect_line="on", + symbol_advanced_table_selection_type="interval", + symbol_advanced_table_min_value=1, + symbol_advanced_table_max_value=6, + symbol_advanced_table_interval=1, + symbol_advanced_table_max_level_colour="blue", + symbol_advanced_table_min_level_colour="magenta", + symbol_advanced_table_colour_direction="clockwise", + symbol_advanced_table_marker_list=[15, 16, 17, 18, 19], + symbol_advanced_table_height_list=0.5, + ) + + # define title + title = mv.mtext(text_font_size=0.6) + + # define legend + legend = mv.mlegend(legend_display_type="disjoint", legend_text_font_size=0.35) + + # define output + mv.setoutput(mv.pdf_output(output_name="flextra_forward")) + + # generate plot + mv.plot(view, legend, vis, sym, title) diff --git a/projects/MissionSupport/applications/WxTraj/src/plot_output.py b/projects/MissionSupport/applications/WxTraj/src/plot_output.py new file mode 100644 index 0000000..97d6e22 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/plot_output.py @@ -0,0 +1,77 @@ +import metview as mv + + +if __name__ == "__main__": + + # (C) Copyright 2017- ECMWF. + # + # This software is licensed under the terms of the Apache Licence Version 2.0 + # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. + # + # In applying this licence, ECMWF does not waive the privileges and immunities + # granted to it by virtue of its status as an intergovernmental organisation + # nor does it submit to any jurisdiction. + # + + + # read file containing the results of a FLEXTRA + # forward simulation with 5 trajectories started at the + # same location and height at different times + # (i.e. a FLEXTRA simulation with mode="normal") + filename = "output/TI_Seoul" + if mv.exist(filename): + f = mv.read(filename) + else: + f = mv.gallery.load_dataset(filename) + + # define visualiser + vis = mv.flextra_visualiser(flextra_data=f) +# vis = mv.flextra_visualizer(flextra_data=f,flextra_x_variable='Date',flextra_y_variables='Height') + + + # define coastlines + coast = mv.mcoast( + map_coastline_resolution="medium", + map_coastline_land_shade="on", + map_coastline_land_shade_colour="RGB(0.5569,0.5569,0.5569)", + map_coastline_sea_shade="on", + map_coastline_sea_shade_colour="RGB(0.8,0.8,0.8)", + map_boundaries="on", + map_boundaries_colour="burgundy", + ) + + # define view + view = mv.geoview( + map_area_definition="corners", + area=[30, 104, 45, 160], + coastlines=coast, + ) + + # define symbol plotting + sym = mv.msymb( + legend="on", + symbol_type="marker", + symbol_table_mode="advanced", + symbol_connect_line="on", + symbol_advanced_table_selection_type="interval", + symbol_advanced_table_min_value=1, + symbol_advanced_table_max_value=6, + symbol_advanced_table_interval=1, + symbol_advanced_table_max_level_colour="blue", + symbol_advanced_table_min_level_colour="magenta", + symbol_advanced_table_colour_direction="clockwise", + symbol_advanced_table_marker_list=[15, 16, 17, 18, 19], + symbol_advanced_table_height_list=0.5, + ) + + # define title + title = mv.mtext(text_font_size=0.6) + + # define legend + legend = mv.mlegend(legend_display_type="disjoint", legend_text_font_size=0.35) + + # define output + mv.setoutput(mv.pdf_output(output_name="flextra_forward")) + + # generate plot + mv.plot(view, legend, vis, sym, title) diff --git a/projects/MissionSupport/applications/WxTraj/src/pp.ecmwf.f b/projects/MissionSupport/applications/WxTraj/src/pp.ecmwf.f new file mode 100644 index 0000000..57979e6 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/pp.ecmwf.f @@ -0,0 +1,58 @@ + real function pp(psurf,eta) +*********************************************************************** +* * +* TRAJECTORY MODEL SUBROUTINE PP * +* * +*********************************************************************** +* * +* AUTHOR: G. WOTAWA * +* DATE: 1994-04-07 * +* LAST UPDATE: ---------- * +* * +*********************************************************************** +* * +* DESCRIPTION: This function computes the pressure as a function of * +* eta (ECMWF) and surface pressure. The interpolation * +* between the nearest model layers is performed linear * +* * +*********************************************************************** +* * +* INPUT: * +* * +* psurf surface pressure [Pa] * +* eta vertical coordinate eta (ECMWF) * +* * +*********************************************************************** +* * +* OUTPUT: * +* * +* pp pressure [Pa] * +* * +*********************************************************************** +* + include 'includepar' + include 'includecom' + + integer k + real psurf,eta,fract,pp1,pp2 + +* +* SEE BETWEEN WHICH MODEL LAYERS ETA IS SITUATED +* + do 10 k=2,nwz + + if(wheight(k).gt.eta) goto 20 + +10 continue + + k=nwz + +20 fract=(eta-wheight(k-1))/(wheight(k)-wheight(k-1)) + + pp1=akm(k-1)+bkm(k-1)*psurf + pp2=akm(k)+bkm(k)*psurf + + pp=pp1*(1.-fract)+pp2*fract + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/pvinterpol.f b/projects/MissionSupport/applications/WxTraj/src/pvinterpol.f new file mode 100644 index 0000000..02dedea --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/pvinterpol.f @@ -0,0 +1,47 @@ + subroutine pvinterpol + & (pv, xt,yt,itime1,itime2,itime, pvint) +C i i i i i i o + +C Special interpolation subroutine for pot. vorticity on a small subgrid +C In horizontal direction bilinear interpolation interpolation is used. +C Temporally a linear interpolation is used. +C +C Variables: +C pv (nx,ny,nt) potential vorticity on 2*2*2 subgrid +C xt,yt horizontal position in interval [0:1,0:1] +C to which the interpolation is to be made +C itime1,itime2 time in seconds for which PV is given +C itime time in seconds for which PV is desired +C pvint interpolated value of PV +C +C Author: Petra Seibert +C based on subroutine lininterpol.f by A. Stohl from 30 May 1994 +C Date: 3 May 1995 + + dimension pv(2,2,2), pvt(2) + +C bilinear horizontal interpolation + + ddx = xt + ddy = yt + + rddx = 1.-ddx + rddy = 1.-ddy + +C loop over 2 time levels + + do 20 n=1,2 + pvt(n) = rddx * rddy * pv(1,1,n) + + + ddx * rddy * pv(2,1,n) + + +rddx * ddy * pv(1,2,n) + + + ddx * ddy * pv(2,2,n) +20 continue + +C temporal interpolation (linear) + + dt1 = float( itime - itime1 ) + dt2 = float( itime2 - itime ) + pvint = (pvt(1) * dt2 + pvt(2) * dt1) / (dt1 + dt2) + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/random.f b/projects/MissionSupport/applications/WxTraj/src/random.f new file mode 100644 index 0000000..a8b4595 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/random.f @@ -0,0 +1,52 @@ +C Taken from Press et al., Numerical Recipes + + FUNCTION RAN1(IDUM) + INTEGER IDUM,IA,IM,IQ,IR,NTAB,NDIV + REAL RAN1,AM,EPS,RNMX + PARAMETER(IA=16807,IM=2147483647,AM=1./IM,IQ=127773,IR=2836, + +NTAB=32,NDIV=1+(IM-1)/NTAB,EPS=1.2E-7,RNMX=1.-EPS) + INTEGER J,K,IV(NTAB),IY + SAVE IV,IY + DATA IV/NTAB*0/,IY/0/ + IF (IDUM.LE.0.OR.IY.EQ.0) THEN + IDUM=MAX(-IDUM,1) + DO J=NTAB+8,1,-1 + K=IDUM/IQ + IDUM=IA*(IDUM-K*IQ)-IR*K + IF (IDUM.LT.0) IDUM=IDUM+IM + IF (J.LE.NTAB) IV(J)=IDUM + ENDDO + IY=IV(1) + ENDIF + K=IDUM/IQ + IDUM=IA*(IDUM-K*IQ)-IR*K + IF (IDUM.LT.0) IDUM=IDUM+IM + J=1+IY/NDIV + IY=IV(J) + IV(J)=IDUM + RAN1=MIN(AM*IY,RNMX) + RETURN + END + + + + FUNCTION GASDEV(IDUM) + INTEGER IDUM,ISET + REAL GASDEV + DATA ISET/0/ + SAVE ISET,GSET + IF (ISET.EQ.0) THEN +1 V1=2.*RAN1(IDUM)-1. + V2=2.*RAN1(IDUM)-1. + R=V1**2+V2**2 + IF(R.GE.1.0 .OR. R.EQ.0.0) GO TO 1 + FAC=SQRT(-2.*LOG(R)/R) + GSET=V1*FAC + GASDEV=V2*FAC + ISET=1 + ELSE + GASDEV=GSET + ISET=0 + ENDIF + RETURN + END diff --git a/projects/MissionSupport/applications/WxTraj/src/readavailable.f b/projects/MissionSupport/applications/WxTraj/src/readavailable.f new file mode 100644 index 0000000..3a6bf73 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/readavailable.f @@ -0,0 +1,281 @@ + subroutine readavailable(error) +C o +******************************************************************************** +* * +* This routine reads the dates and times for which windfields are available. * +* * +* Authors: A. Stohl * +* * +* 6 February 1994 * +* * +******************************************************************************** +* * +* Variables: * +* bdate beginning date as Julian date * +* beg beginning date for windfields * +* end ending date for windfields * +* error .true., if error ocurred in subprogram, else .false. * +* fname filename of wind field, help variable * +* ideltas [s] duration of modelling period * +* idiff time difference between 2 wind fields * +* idiffnorm normal time difference between 2 wind fields * +* idiffmax [s] maximum allowable time between 2 wind fields * +* jul julian date, help variable * +* ldirect -1 for backward, 1 for forward trajectories * +* numbnests actual number of nest levels * +* numbwf actual number of wind fields * +* wfname(numbwfmax) file names of needed wind fields * +* wfspec(numbwfmax) file specifications of wind fields (e.g., if on disc) * +* wftime(numbwfmax) [s]times of wind fields relative to beginning time * +* wfname1,wfspec1,wftime1 = same as above, but only local (help variables) * +* * +* Constants: * +* numbwfmax maximum number of wind fields * +* unitavailab unit connected to file AVAILABLE * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + logical error + integer i,k,idiff,ldat,ltim,wftime1(numbwfmax),numbwfn(maxnests) + integer wftime1n(maxnests,numbwfmax),wftimen(maxnests,numbwfmax) + double precision juldate,jul,beg,end + character*180 fname + character*10 spec, wfspec1(numbwfmax) + character*180 wfname1(numbwfmax) + character*18 wfname1n(maxnests,numbwfmax) + character*10 wfspec1n(maxnests,numbwfmax) + + + + error=.false. + + +C Windfields are only used, if they are within the modelling period. +C However, 1 additional day at the beginning and at the end is used for +C interpolation. -> Compute beginning and ending date for the windfields. +************************************************************************* + + if (ideltas.gt.0) then ! forward trajectories + beg=bdate-1. + end=bdate+dble(float(ideltas)/86400.)+dble(float(idiffmax)/ + + 86400.) + else ! backward trajectories + beg=bdate+dble(float(ideltas)/86400.)-dble(float(idiffmax)/ + + 86400.) + end=bdate+1. + endif + +C Open the wind field availability file and read available wind fields +C within the modelling period (mother grid) +********************************************************************** + + open(unitavailab,file=path(4)(1:len(4)),status='old', + +err=999) + + do i=1,3 + read(unitavailab,*) + end do + + numbwf=0 +100 read(unitavailab,'(i8,1x,i6,2(6x,a180))',end=99) ldat,ltim, + + fname,spec + + jul=juldate(ldat,ltim) + if ((jul.ge.beg).and.(jul.le.end)) then + numbwf=numbwf+1 + if (numbwf.gt.numbwfmax) then ! check exceedance of dimension + write(*,*) 'Number of wind fields needed is too great.' + write(*,*) 'Reduce modelling period (file "COMMAND") or' + write(*,*) 'reduce number of wind fields (file "AVAILABLE").' + goto 1000 + endif + + wfname1(numbwf)=fname(1:index(fname,' ')) + wfspec1(numbwf)=spec + wftime1(numbwf)=nint((jul-bdate)*86400.) + endif + goto 100 ! next wind field + +99 continue + + close(unitavailab) + + +C Open the wind field availability file and read available wind fields +C within the modelling period (nested grids) +********************************************************************** + + do k=1,numbnests + open(unitavailab,file=path(numpath+2*(k-1)+2) + + (1:len(numpath+2*(k-1)+2)),status='old',err=998) + + do i=1,3 + read(unitavailab,*) + end do + + numbwfn(k)=0 +700 read(unitavailab,'(i8,1x,i6,2(6x,a18))',end=699) ldat, + + ltim,fname,spec + jul=juldate(ldat,ltim) + if ((jul.ge.beg).and.(jul.le.end)) then + numbwfn(k)=numbwfn(k)+1 + if (numbwfn(k).gt.numbwfmax) then ! check exceedance of dimension + write(*,*) 'Number of nested wind fields is too great.' + write(*,*) 'Reduce modelling period (file "COMMAND") or' + write(*,*) 'reduce number of wind fields (file "AVAILABLE").' + goto 1000 + endif + + wfname1n(k,numbwfn(k))=fname + wfspec1n(k,numbwfn(k))=spec + wftime1n(k,numbwfn(k))=nint((jul-bdate)*86400.) + endif + goto 700 ! next wind field + +699 continue + + close(unitavailab) + end do + +C Check wind field times of file AVAILABLE (expected to be in temporal order) +***************************************************************************** + + if (numbwf.eq.0) then + write(*,*) ' #### TRAJECTORY MODEL ERROR! NO WIND FIELDS #### ' + write(*,*) ' #### AVAILABLE FOR SELECTED TIME PERIOD. #### ' + error=.TRUE. + return + endif + + do 150 i=2,numbwf + if (wftime1(i).le.wftime1(i-1)) then + write(*,*) 'FLEXTRA ERROR: FILE AVAILABLE IS CORRUPT.' + write(*,*) 'THE WIND FIELDS ARE NOT IN TEMPORAL ORDER.' + write(*,*) 'PLEASE CHECK FIELD ',wfname1(i) + error=.TRUE. + return + endif +150 continue + + +C Check wind field times of file AVAILABLE (expected to be in temporal order) +***************************************************************************** + + do 77 k=1,numbnests + if (numbwfn(k).eq.0) then + write(*,*) ' #### TRAJECTORY MODEL ERROR! NO WIND FIELDS #### ' + write(*,*) ' #### AVAILABLE FOR SELECTED TIME PERIOD. #### ' + error=.TRUE. + return + endif + + do 160 i=2,numbwfn(k) + if (wftime1n(k,i).le.wftime1n(k,i-1)) then + write(*,*) 'FLEXTRA ERROR: FILE AVAILABLE IS CORRUPT.' + write(*,*) 'THE NESTED WIND FIELDS ARE NOT IN TEMPORAL ORDER.' + write(*,*) 'PLEASE CHECK FIELD ',wfname1n(k,i) + write(*,*) 'AT NESTING LEVEL ',k + error=.TRUE. + return + endif +160 continue + +77 continue + + +C For backward trajectories, reverse the order of the windfields +**************************************************************** + + if (ideltas.ge.0) then + do i=1,numbwf + wfname(i)=wfname1(i) + wfspec(i)=wfspec1(i) + wftime(i)=wftime1(i) + end do + do k=1,numbnests + do i=1,numbwfn(k) + wfnamen(k,i)=wfname1n(k,i) + wfspecn(k,i)=wfspec1n(k,i) + wftimen(k,i)=wftime1n(k,i) + end do + end do + else + do i=1,numbwf + wfname(numbwf-i+1)=wfname1(i) + wfspec(numbwf-i+1)=wfspec1(i) + wftime(numbwf-i+1)=wftime1(i) + end do + do k=1,numbnests + do i=1,numbwfn(k) + wfnamen(k,numbwfn(k)-i+1)=wfname1n(k,i) + wfspecn(k,numbwfn(k)-i+1)=wfspec1n(k,i) + wftimen(k,numbwfn(k)-i+1)=wftime1n(k,i) + end do + end do + endif + + +C Check the time difference between the wind fields. If it is big, +C write a warning message. If it is too big, terminate the trajectory. +********************************************************************** + + do 350 i=2,numbwf + idiff=abs(wftime(i)-wftime(i-1)) + if (idiff.gt.idiffmax) then + write(*,*) 'FLEXTRA WARNING: TIME DIFFERENCE BETWEEN TWO' + write(*,*) 'WIND FIELDS IS TOO BIG FOR TRAJECTORY CALCULATION. + & ' + write(*,*) 'THEREFORE, TRAJECTORIES HAVE TO BE SKIPPED.' + else if (idiff.gt.idiffnorm) then + write(*,*) 'FLEXTRA WARNING: TIME DIFFERENCE BETWEEN TWO' + write(*,*) 'WIND FIELDS IS BIG. THIS MAY CAUSE A DEGRADATION' + write(*,*) 'OF TRAJECTORY QUALITY.' + endif +350 continue + + do k=1,numbnests + if (numbwfn(k).ne.numbwf) then + write(*,*) 'FLEXTRA ERROR: THE AVAILABLE FILES FOR THE' + write(*,*) 'NESTED WIND FIELDS ARE NOT CONSISTENT WITH' + write(*,*) 'THE AVAILABLE FILE OF THE MOTHER DOMAIN. ' + write(*,*) 'ERROR AT NEST LEVEL: ',k + goto 1000 + endif + do i=1,numbwf + if (wftimen(k,i).ne.wftime(i)) then + write(*,*) 'FLEXTRA ERROR: THE AVAILABLE FILES FOR THE' + write(*,*) 'NESTED WIND FIELDS ARE NOT CONSISTENT WITH' + write(*,*) 'THE AVAILABLE FILE OF THE MOTHER DOMAIN. ' + write(*,*) 'ERROR AT NEST LEVEL: ',k + goto 1000 + endif + end do + end do + + +C Reset the times of the wind fields that are kept in memory to no time +*********************************************************************** + + do i=1,3 + memind(i)=i + memtime(i)=999999999 + end do + return + +998 write(*,*) ' #### TRAJECTORY MODEL ERROR! FILE #### ' + write(*,'(a)') ' '//path(numpath+2*(k-1)+2) + +(1:len(numpath+2*(k-1)+2)) + write(*,*) ' #### CANNOT BE OPENED #### ' + error=.true. + return + +999 write(*,*) ' #### TRAJECTORY MODEL ERROR! FILE #### ' + write(*,'(a)') ' '//path(4)(1:len(4)) + write(*,*) ' #### CANNOT BE OPENED #### ' +1000 error=.true. + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/readcet.f b/projects/MissionSupport/applications/WxTraj/src/readcet.f new file mode 100644 index 0000000..60a10ab --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/readcet.f @@ -0,0 +1,185 @@ + subroutine readcet(error) +C o +*********************************************************************** +* * +* TRAJECTORY MODEL SUBROUTINE READCET * +* * +*********************************************************************** +* * +* AUTHOR: A. STOHL * +* DATE: 1999-01-11 * +* * +* Update: Vertical coordinate can now be given in meters above sea * +* level, meters above ground, and in hPa. * +* * +*********************************************************************** +* * +* DESCRIPTION: * +* * +* READING OF TRAJECTORY STARTING/ENDING POINTS FROM DATA FILE * +* * +* LINE a line of text * +* NUMPOINT number of trajectory starting/ending points * +* XPOINT(maxpoint) x-coordinates of starting/ending points * +* YPOINT(maxpoint) y-coordinates of starting/ending points * +* ZPOINT(maxpoint) z-coordinates of starting/ending points * +* KINDZ(maxpoint) kind of z coordinate (1:masl, 2:magl, 3:hPa) * +* KIND(maxpoint) kind of trajectory * +* COMPOINT(maxpoint) comment for trajectory output * +* * +*********************************************************************** +* + include 'includepar' + include 'includecom' + + integer isum + logical error,old + integer kindhelp,kindzhelp + real xhelpleft,xhelpright,yhelpleft,yhelpright,deltax + real deltay,zhelplower,zhelpupper,deltaz,xi,yj,zk + character*45 comhelp,line + + error=.false. +* +* OPENING OF FILE 'STARTCET' +* + + open(unitpoin,file=path(1)(1:len(1))//'STARTCET', + +status='old',err=999) + +C Check the format of the STARTCET file (either in free format, +C or using formatted mask) +C Use of formatted mask is assumed if line 28 contains the word '____' +********************************************************************** + + call skplin(27,unitpoin) + read (unitpoin,901) line +901 format (a) + if (index(line,'____') .eq. 0) then + old = .false. + else + old = .true. + endif + rewind(unitpoin) + +* +* READING OF STARTING/ENDING POINTS OF TRAJECTORIES +* + call skplin(26,unitpoin) + + read(unitpoin,*,err=998,end=998) xhelpleft + if (old) call skplin(2,unitpoin) + read(unitpoin,*,err=998,end=998) yhelpleft + if (old) call skplin(2,unitpoin) + read(unitpoin,*,err=998,end=998) xhelpright + if (old) call skplin(2,unitpoin) + read(unitpoin,*,err=998,end=998) yhelpright + if (old) call skplin(2,unitpoin) + read(unitpoin,*,err=998,end=998) deltax + if (old) call skplin(2,unitpoin) + read(unitpoin,*,err=998,end=998) deltay + if (old) call skplin(2,unitpoin) + read(unitpoin,*,err=998,end=998) kindhelp + if (old) call skplin(2,unitpoin) + read(unitpoin,*,err=998,end=998) kindzhelp + if (old) call skplin(2,unitpoin) + read(unitpoin,*,err=998,end=998) zhelplower + if (old) call skplin(2,unitpoin) + read(unitpoin,*,err=998,end=998) zhelpupper + if (old) call skplin(2,unitpoin) + read(unitpoin,*,err=998,end=998) deltaz + if (old) call skplin(2,unitpoin) + if (old) then + read(unitpoin,'(a40)',err=998,end=998) comhelp(1:40) + else + read(unitpoin,*,err=998,end=998) comhelp(1:40) + endif + if (old) call skplin(1,unitpoin) + close(unitpoin) +1 format(1x,a17,i6,a28) + + + if (zhelpupper.lt.zhelplower) stop 'Upper level must be greater + +than lower level' + + +C Forbid mixing layer trajectories +********************************** + + if (kindhelp.eq.3) then + write(*,*) '### Mixing layer trajectories not allowed ###' + write(*,*) '### for CET calculations. Select a ###' + write(*,*) '### different trajectory type! ###' + error=.true. + return + endif + + +C Check field dimension +*********************** + + isum=int(((xhelpright-xhelpleft)/deltax+1.)*((yhelpright- + +yhelpleft)/deltay+1.)*(abs(zhelpupper-zhelplower)/deltaz +1.)) + + + if (isum.gt.maxtra) then + write(*,*) ' #### TRAJECTORY MODEL ERROR! MODEL CAN NOT #### ' + write(*,*) ' #### KEEP SO MANY TRAJECTORIES IN MEMORY. #### ' + write(*,1) ' #### CURRENTLY: ',isum,' #### + + ' + write(*,1) ' #### MAXIMUM: ',maxtra,' #### + + ' + write(*,*) ' #### REDUCE CET DOMAIN OR RESOLUTION. #### ' + error=.true. + endif + + +C Initialize CET starting points +******************************** + + isum=0 + do 10 xi=xhelpleft,xhelpright,deltax + do 10 yj=yhelpleft,yhelpright,deltay + do 10 zk=zhelplower,zhelpupper,deltaz + isum=isum+1 + xpoint(isum)=xi + ypoint(isum)=yj + kind(isum)=kindhelp + kindz(isum)=kindzhelp + zpoint(isum)=zk + compoint(isum)(1:40)=comhelp(1:40) + +C Conversion from hPa to Pa, if z coordinate is given in pressure units + if (kindz(isum).eq.3) zpoint(isum)=zpoint(isum)*100. +10 continue + + numpoint=isum + + return + +998 error=.true. + write(*,*) '#### TRAJECTORY MODEL SUBROUTINE READCET: '// + & '#### ' + write(*,*) '#### FATAL ERROR - FILE "STARTCET" IS '// + & '#### ' + write(*,*) '#### CORRUPT. PLEASE CHECK YOUR INPUTS FOR '// + & '#### ' + write(*,*) '#### MISTAKES OR GET A NEW "STARTPOINTS"- '// + & '#### ' + write(*,*) '#### FILE ... '// + & '#### ' + return + +999 error=.true. + write(*,*) + write(*,*) ' ###########################################'// + & '###### ' + write(*,*) ' TRAJECTORY MODEL SUBROUTINE READCET:' + write(*,*) + write(*,*) ' FATAL ERROR - FILE STARTCET IS NOT AVAILABLE' + write(*,*) ' OR YOU ARE NOT PERMITTED FOR ANY ACCESS' + write(*,*) ' ###########################################'// + & '###### ' + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/readcommand.f b/projects/MissionSupport/applications/WxTraj/src/readcommand.f new file mode 100644 index 0000000..2ac8d8b --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/readcommand.f @@ -0,0 +1,206 @@ + subroutine readcommand(error) +C o +******************************************************************************** +* * +* This routine reads the user specifications for the current model run. * +* * +* Authors: A. Stohl * +* * +* 2 February 1994 * +* * +* 10 January 1999 Update to facilitate free formatted input * +* (P. Seibert + A. Stohl) * +******************************************************************************** +* * +* Variables: * +* bdate beginning date as Julian date * +* edate ending date as Julian date * +* error .true., if error ocurred in subprogram, else .false. * +* hhh hour * +* ibdate,ibtime beginnning date and time (YYYYMMDD, HHMISS) * +* ideltas [s] modelling period * +* iedate,ietime ending date and time (YYYYMMDD, HHMISS) * +* interv [s] interval between two trajectory calculations * +* ldirect -1 for backward, 1 for forward trajectories * +* lentra [s] length of one trajectory * +* line a line of text * +* ldim number of steps along the interpolated trajectory * +* mi minute * +* relaxtime time constant at which random errors are relaxed * +* ss second * +* * +* Constants: * +* unitcommand unit connected to file COMMAND * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + logical error,old + integer hhh,mi,ss + double precision edate,juldate + character*50 line + + +C Open the command file and read user options +********************************************* + + error=.false. + + open(unitcommand,file=path(1)(1:len(1))//'COMMAND',status='old', + +err=999) + +C Check the format of the COMMAND file (either in free format, +C or using formatted mask) +C Use of formatted mask is assumed if line 9 contains the word 'LABEL' +********************************************************************** + + call skplin(8,unitcommand) + read (unitcommand,901) line +901 format (a) + if (index(line,'LABEL') .eq. 0) then + old = .false. + else + old = .true. + endif + rewind(unitcommand) + +C Read parameters +***************** + + call skplin(6,unitcommand) + if (old) call skplin(1,unitcommand) + if (old) then + read(unitcommand,'(3x,a50)') runcomment + else + read(unitcommand,*) runcomment + endif + if (old) call skplin(3,unitcommand) + read(unitcommand,*) ldirect + if (old) call skplin(3,unitcommand) + read(unitcommand,*) lentra + if (old) call skplin(3,unitcommand) + read(unitcommand,*) ibdate,ibtime + if (old) call skplin(3,unitcommand) + read(unitcommand,*) iedate,ietime + if (old) call skplin(3,unitcommand) + read(unitcommand,*) interv + interv=max(interv,1) ! minimum interval 1 second + if (old) call skplin(3,unitcommand) + read(unitcommand,*) inter,interstep + if (old) call skplin(3,unitcommand) + read(unitcommand,*) numbunc,distunc,relaxtime,epsu,epsv,epsw + if (old) call skplin(3,unitcommand) + read(unitcommand,*) inpolkind + if (old) call skplin(3,unitcommand) + read(unitcommand,*) cfl + if (old) call skplin(3,unitcommand) + read(unitcommand,*) cflt + if (old) call skplin(3,unitcommand) + read(unitcommand,*) modecet + + close(unitcommand) + + +C Check input dates +******************* + + if (iedate.lt.ibdate) then + write(*,*) ' #### TRAJECTORY MODEL ERROR! BEGINNING DATE #### ' + write(*,*) ' #### IS LARGER THAN ENDING DATE. CHANGE #### ' + write(*,*) ' #### EITHER POINT 3 OR POINT 4 IN FILE #### ' + write(*,*) ' #### "COMMAND". #### ' + error=.true. + return + else if (iedate.eq.ibdate) then + if (ietime.lt.ibtime) then + write(*,*) ' #### TRAJECTORY MODEL ERROR! BEGINNING TIME #### ' + write(*,*) ' #### IS LARGER THAN ENDING TIME. CHANGE #### ' + write(*,*) ' #### EITHER POINT 3 OR POINT 4 IN FILE #### ' + write(*,*) ' #### "COMMAND". #### ' + error=.true. + return + + endif + endif + + +C Check CFL criterions +********************** + + if((cfl.lt.1.).or.(cflt.lt.1.)) then + write(*,*) ' #### TRAJECTORY MODEL ERROR! CFL CRITERION #### ' + write(*,*) ' #### MUST NOT BE SET LESS THEN 1 !!! #### ' + error=.true. + return + endif + + +C Conversion of format HHHMISS to seconds +***************************************** + + hhh=lentra/10000 + mi=(lentra-10000*hhh)/100 + ss=lentra-10000*hhh-100*mi + lentra=ldirect*(hhh*3600+60*mi+ss) + + hhh=interv/10000 + mi=(interv-10000*hhh)/100 + ss=interv-10000*hhh-100*mi + interv=hhh*3600+60*mi+ss + + +C Compute number of time steps along interpolated trajectory +************************************************************ + + if (interstep.lt.1) interstep=1 + ldim=ldirect*lentra/interstep+1 + + if ((inter.ge.0).and.(ldim.gt.maxitime)) then + write(*,*) ' #### TRAJECTORY MODEL ERROR! INTERPOLATION #### ' + write(*,*) ' #### TO SUCH A SHORT TIME STEP IS NOT #### ' + write(*,*) ' #### POSSIBLE. SET SSSSS IN POINT 7. OF FILE #### ' + write(*,*) ' #### "COMMAND" TO A GREATER VALUE. #### ' + error=.true. + return + endif + + if ((inter.eq.1).and.(maxtime.lt.2*ldim+1)) then + write(*,*) ' #### TRAJECTORY MODEL ERROR! INTERPOLATION #### ' + write(*,*) ' #### TO SUCH A SHORT TIME STEP IS NOT #### ' + write(*,*) ' #### SENSIBLE GIVEN CURRENT SETTING OF #### ' + write(*,*) ' #### MAXTRA. SET SSSSS IN POINT 7. OF FILE #### ' + write(*,*) ' #### "COMMAND" TO A GREATER VALUE. #### ' + error=.true. + return + endif + +C Compute modelling time in seconds and beginning date in Julian date +********************************************************************* + + if (ldirect.eq.1) then + bdate=juldate(ibdate,ibtime) + edate=juldate(iedate,ietime) + ideltas=nint(86400.*(edate-bdate))+lentra + else if (ldirect.eq.-1) then + bdate=juldate(iedate,ietime) + edate=juldate(ibdate,ibtime) + ideltas=nint(86400.*(edate-bdate))+lentra + else + write(*,*) ' #### TRAJECTORY MODEL ERROR! DIRECTION IN #### ' + write(*,*) ' #### FILE "COMMAND" MUST BE EITHER -1 OR 1. #### ' + error=.true. + return + endif + + + return + +999 write(*,*) ' #### TRAJECTORY MODEL ERROR! FILE "COMMAND" #### ' + write(*,*) ' #### CANNOT BE OPENED IN THE DIRECTORY #### ' + write(*,*) ' #### xxx/trajec/options #### ' + error=.true. + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/readflight.f b/projects/MissionSupport/applications/WxTraj/src/readflight.f new file mode 100644 index 0000000..7d9ca13 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/readflight.f @@ -0,0 +1,105 @@ + subroutine readflight(error) +C o +*********************************************************************** +* * +* TRAJECTORY MODEL SUBROUTINE READCET * +* * +*********************************************************************** +* * +* AUTHOR: A. STOHL * +* DATE: 1999-02-01 * +* * +* Update: Vertical coordinate can now be given in meters above sea * +* level, meters above ground, and in hPa. * +* * +*********************************************************************** +* * +* DESCRIPTION: * +* * +* READING OF TRAJECTORY STARTING/ENDING POINTS FROM DATA FILE * +* * +* LINE a line of text * +* NUMPOINT number of trajectory starting/ending points * +* XPOINT(maxpoint) x-coordinates of starting/ending points * +* YPOINT(maxpoint) y-coordinates of starting/ending points * +* ZPOINT(maxpoint) z-coordinates of starting/ending points * +* KINDZ(maxpoint) kind of z coordinate (1:masl, 2:magl, 3:hPa) * +* KIND(maxpoint) kind of trajectory * +* COMPOINT(maxpoint) comment for trajectory output * +* * +*********************************************************************** +* + include 'includepar' + include 'includecom' + + logical error + integer ldat,ltim + double precision juldate + + error=.false. + +* Open file 'STARTFLIGHT' +************************* + + open(unitpoin,file=path(1)(1:len(1))//'STARTFLIGHT', + +status='old',err=999) + + call skplin(27,unitpoin) + read(unitpoin,'(a)',err=998,end=998) compoint(1)(1:40) + read(unitpoin,*,err=998,end=998) kind(1) + read(unitpoin,*,err=998,end=998) kindz(1) + call skplin(1,unitpoin) + +C Read the first starting point +******************************* + + read(unitpoin,*,err=998,end=998) ldat,ltim + read(unitpoin,*,err=998,end=998) xpoint(1) + read(unitpoin,*,err=998,end=998) ypoint(1) + read(unitpoin,*,err=998,end=998) zpoint(1) + call skplin(1,unitpoin) + nextflight=nint(sngl(juldate(ldat,ltim)-bdate)*86400.) + if (kindz(1).eq.3) zpoint(1)=zpoint(1)*100. + + numpoint=1 + + +C Forbid mixing layer trajectories +********************************** + + if (kind(1).eq.3) then + write(*,*) '### Mixing layer trajectories not allowed ###' + write(*,*) '### for FLIGHT calculations. Select a ###' + write(*,*) '### different trajectory type! ###' + error=.true. + return + endif + + return + +998 error=.true. + write(*,*) '#### TRAJECTORY MODEL SUBROUTINE READFLIGHT: '// + & '#### ' + write(*,*) '#### FATAL ERROR - FILE "STARTFLIGHT" IS '// + & '#### ' + write(*,*) '#### CORRUPT. PLEASE CHECK YOUR INPUTS FOR '// + & '#### ' + write(*,*) '#### MISTAKES OR GET A NEW "STARTPOINTS"- '// + & '#### ' + write(*,*) '#### FILE ... '// + & '#### ' + return + +999 error=.true. + write(*,*) + write(*,*) ' ###########################################'// + & '###### ' + write(*,*) ' TRAJECTORY MODEL SUBROUTINE READFLIGHT:' + write(*,*) + write(*,*) ' FATAL ERROR - FILE STARTFLIGHT IS NOT AVAILABLE' + write(*,*) ' OR YOU ARE NOT PERMITTED FOR ANY ACCESS' + write(*,*) ' ###########################################'// + & '###### ' + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/readoro.f b/projects/MissionSupport/applications/WxTraj/src/readoro.f new file mode 100644 index 0000000..d977268 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/readoro.f @@ -0,0 +1,53 @@ + subroutine readoro(error) +C o +******************************************************************************** +* * +* This routine reads the orography used by the ECMWF model. * +* * +* Authors: A. Stohl * +* * +* 30 April 1994 * +* * +******************************************************************************** +* * +* Variables: * +* error .true., if file OROGRAPHY cannot be opened * +* nx,ny number of grid points in x and y direction, respectively* +* oro(0:nxmax-1,0:nymax-1) [m] orography of ECMWF model * +* * +* Constants: * +* unitoro unit connected to file OROGRAPHY * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer ix,jy + logical error + + + error=.false. + +C Open the orography file and read grid +*************************************** + + write(*,*) 'NOTICE: OROGRAPHY WAS READ FROM FILE "OROGRAPHY"' + + + open(unitoro,file=path(3)(1:len(3))//'OROGRAPHY', + +status='old',err=999) + do 10 ix=0,nx-1 + do 10 jy=0,ny-1 +10 read(unitoro,*) oro(ix,jy) + close(unitoro) + + return + +999 write(*,*) ' #### FLEXTRA MODEL ERROR! FILE "OROGRAPHY" #### ' + write(*,*) ' #### CANNOT BE OPENED IN THE DIRECTORY #### ' + write(*,*) ' #### xxx/trajec/windfields #### ' + error=.true. + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/readpaths.f b/projects/MissionSupport/applications/WxTraj/src/readpaths.f new file mode 100644 index 0000000..45a9a7d --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/readpaths.f @@ -0,0 +1,70 @@ + subroutine readpaths(error) +c o +******************************************************************************** +* * +* Reads the pathnames, where input/output files are expected to be. * +* The file pathnames must be available in the current working directory. * +* * +* Author: A. Stohl * +* * +* 1 February 1994 * +* * +******************************************************************************** +* * +* Variables: * +* error .true., if file pathnames does not exist * +* len(numpath) lengths of the path names * +* path(numpath) pathnames of input/output files * +* * +* Constants: * +* numpath number of pathnames to be read in * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer i + logical error + + error=.false. + +C Read the pathname information stored in unitpath +************************************************** + + open(unitpath,file=pathnames,status='old',err=999) + + do 10 i=1,numpath + read(unitpath,'(a)',err=998) path(i) +10 len(i)=index(path(i),' ')-1 + +C Check whether any nested subdomains are to be used +**************************************************** + + do 20 i=1,maxnests + read(unitpath,'(a)') path(numpath+2*(i-1)+1) + read(unitpath,'(a)') path(numpath+2*(i-1)+2) + if (path(numpath+2*(i-1)+1)(1:5).eq.'=====') goto 30 + len(numpath+2*(i-1)+1)=index(path(numpath+2*(i-1)+1),' ')-1 +20 len(numpath+2*(i-1)+2)=index(path(numpath+2*(i-1)+2),' ')-1 + + +C Determine number of available nested domains +********************************************** + +30 numbnests=i-1 + + + close(unitpath) + return + +998 write(*,*) ' #### TRAJECTORY MODEL ERROR! ERROR WHILE #### ' + write(*,*) ' #### READING FILE PATHNAMES. #### ' + +999 write(*,*) ' #### TRAJECTORY MODEL ERROR! FILE "pathnames"#### ' + write(*,*) ' #### CANNOT BE OPENED IN THE CURRENT WORKING #### ' + write(*,*) ' #### DIRECTORY. #### ' + error=.true. + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/readpoints.f b/projects/MissionSupport/applications/WxTraj/src/readpoints.f new file mode 100644 index 0000000..01820f2 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/readpoints.f @@ -0,0 +1,183 @@ + subroutine readpoints(error) +*********************************************************************** +* * +* TRAJECTORY MODEL SUBROUTINE READPOINTS * +* * +*********************************************************************** +* * +* AUTHOR: G. WOTAWA * +* DATE: 1994-02-03 * +* LAST UPDATE: 1996-06-21 A. Stohl * +* * +* Update: Vertical coordinate can now be given in meters above sea * +* level, meters above ground, and in hPa. * +* * +* 10 January 1999 Update to facilitate free formatted input * +* (P. Seibert + A. Stohl) * +* * +*********************************************************************** +* * +* DESCRIPTION: * +* * +* READING OF TRAJECTORY STARTING/ENDING POINTS FROM DATA FILE * +* * +* LINE a line of text * +* NUMPOINT number of trajectory starting/ending points * +* XPOINT(maxpoint) x-coordinates of starting/ending points * +* YPOINT(maxpoint) y-coordinates of starting/ending points * +* ZPOINT(maxpoint) z-coordinates of starting/ending points * +* KINDZ(maxpoint) kind of z coordinate (1:masl, 2:magl, 3:hPa) * +* KIND(maxpoint) kind of trajectory * +* COMPOINT(maxpoint) comment for trajectory output * +* * +*********************************************************************** +* + include 'includepar' + include 'includecom' + + integer isum + logical error,old + integer kindhelp,kindzhelp + real xhelp,yhelp,zhelp + character*45 comhelp,line + + error=.false. +* +* OPENING OF FILE 'STARTPOINTS' +* + + open(unitpoin,file=path(1)(1:len(1))//'STARTPOINTS', + & status='old',err=999) + +C Check the format of the STARTPOINTS file (either in free format, +C or using formatted mask) +C Use of formatted mask is assumed if line 28 contains the word '____' +********************************************************************** + + call skplin(27,unitpoin) + read (unitpoin,901) line +901 format (a) + if (index(line,'____') .eq. 0) then + old = .false. + else + old = .true. + endif + rewind(unitpoin) + +* +* READING OF STARTING/ENDING POINTS OF TRAJECTORIES +* + call skplin(26,unitpoin) + +10 continue + isum=0 +100 read(unitpoin,*,err=998,end=25) xhelp + if (old) call skplin(2,unitpoin) + read(unitpoin,*,err=998,end=25) yhelp + if (old) call skplin(2,unitpoin) + read(unitpoin,*,err=998,end=25) kindhelp + if (old) call skplin(2,unitpoin) + read(unitpoin,*,err=998,end=25) kindzhelp + if (old) call skplin(2,unitpoin) + read(unitpoin,*,err=998,end=25) zhelp + if (old) call skplin(2,unitpoin) + if (old) then + read(unitpoin,'(a40)',err=998,end=25) comhelp(1:40) + else + read(unitpoin,*,err=998,end=25) comhelp(1:40) + endif + if (old) call skplin(1,unitpoin) + call skplin(1,unitpoin) + + if((xhelp.eq.0.).and.(yhelp.eq.0.).and. + & (zhelp.eq.0.).and.(comhelp(1:8).eq.' ')) + & goto 25 + + + if ((kindhelp.eq.3).and.(kindzhelp.ne.2)) then + write(*,*) ' #### FLEXTRA MODEL ERROR! FOR MIXING LAYER #### ' + write(*,*) ' #### TRAJECTORIES, THE Z COORDINATE MUST BE #### ' + write(*,*) ' #### GIVEN IN METERS ABOVE GROUND. #### ' + error=.true. + return + endif + + + isum=isum+1 + if(isum.gt.maxpoint.or.isum*(numbunc+1).gt.maxpoint) then + error=.true. + write(*,*) '#### TRAJECTORY MODEL SUBROUTINE READPOINTS: '// + & '#### ' + write(*,*) '#### ERROR - TOO MANY STARTING POINTS '// + & '#### ' + write(*,*) '#### REDUCE NUMBER OF STARTING POINTS OR '// + & '#### ' + write(*,*) '#### CHANGE PARAMETERIZATION OF TRAJECTORY '// + & '#### ' + write(*,*) '#### MODEL !!! '// + & '#### ' + goto 25 + endif + xpoint(isum)=xhelp + ypoint(isum)=yhelp + kind(isum)=kindhelp + kindz(isum)=kindzhelp + zpoint(isum)=zhelp +C Conversion from hPa to Pa, if z coordinate is given in pressure units + if (kindz(isum).eq.3) zpoint(isum)=zpoint(isum)*100. + compoint(isum)(1:40)=comhelp(1:40) + goto 100 +1 format(1x,a17,i6,a28) +25 close(unitpoin) + numpoint=isum + + if ((numpoint*(numbunc+1)*(abs(lentra)/interv+1)).gt.maxtra) then + write(*,*) ' #### TRAJECTORY MODEL ERROR! MODEL CAN NOT #### ' + write(*,*) ' #### KEEP SO MANY TRAJECTORIES IN MEMORY. #### ' + write(*,1) ' #### MAXIMUM: ',maxtra,' #### + + ' + write(*,1) ' #### CURRENTLY: ',numpoint*(numbunc+1)*(abs(lentra) + + /interv+1),' #### ' + write(*,*) ' #### YOU HAVE 3 POSSIBILITIES: #### ' + write(*,*) ' #### 1) REDUCE NUMBER OF STARTING POINTS #### ' + write(*,*) ' #### (FILE "STARTPOINTS"). #### ' + write(*,*) ' #### 2) REDUCE THE LENGTH OF AN INDIVIDUAL #### ' + write(*,*) ' #### TRAJECTORY (FILE "COMMAND"). #### ' + write(*,*) ' #### 3) INCREASE THE TIME INTERVAL BETWEEN #### ' + write(*,*) ' #### TRAJECTORY STARTING TIMES (FILE #### ' + write(*,*) ' #### "COMMAND"). #### ' + error=.true. + endif + + + return + +998 error=.true. + write(*,*) '#### TRAJECTORY MODEL SUBROUTINE READPOINTS: '// + & '#### ' + write(*,*) '#### FATAL ERROR - FILE "STARTPOINTS" IS '// + & '#### ' + write(*,*) '#### CORRUPT. PLEASE CHECK YOUR INPUTS FOR '// + & '#### ' + write(*,*) '#### MISTAKES OR GET A NEW "STARTPOINTS"- '// + & '#### ' + write(*,*) '#### FILE ... '// + & '#### ' + return + +999 error=.true. + write(*,*) + write(*,*) ' ###########################################'// + & '###### ' + write(*,*) ' TRAJECTORY MODEL SUBROUTINE READPOINTS: ' + write(*,*) + write(*,*) ' FATAL ERROR - FILE CONTAINING TRAJECTORY ST'// + & 'ARTING ' + write(*,*) ' AND ENDING POINTS IS NOT AVAILABLE OR YOU A'// + & 'RE NOT' + write(*,*) ' PERMITTED FOR ANY ACCESS ' + write(*,*) ' ###########################################'// + & '###### ' + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/readwind.f b/projects/MissionSupport/applications/WxTraj/src/readwind.f new file mode 100755 index 0000000..fde800b --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/readwind.f @@ -0,0 +1,467 @@ + subroutine readwind(indj,n) +*********************************************************************** +* * +* TRAJECTORY MODEL SUBROUTINE READWIND * +* * +*********************************************************************** +* * +* AUTHOR: G. WOTAWA * +* DATE: 1997-08-05 * +* LAST UPDATE: ---------- * +* Update: 1998-07-29, global fields allowed * +* A. Stohl, G. Wotawa * +* 2011-06, implemented reading of grib2 format* +* analog to FLEXPART 8.22 routines * +* * +*********************************************************************** +* * +* DESCRIPTION: * +* * +* READING OF ECMWF METEOROLOGICAL FIELDS FROM INPUT DATA FILES. THE * +* INPUT DATA FILES ARE EXPECTED TO BE AVAILABLE IN GRIB CODE * +* * +* INPUT: * +* indj indicates number of the wind field to be read in * +* n temporal index for meteorological fields (1 to 3)* +* * +* IMPORTANT VARIABLES FROM COMMON BLOCK: * +* * +* wfname File name of data to be read in * +* nxfield,ny,nuvz,nwz expected field dimensions * +* nlev_ec number of vertical levels ecmwf model * +* uu,vv,ww wind fields * +* tt,qq temperature and specific humidity * +* ps surface pressure * +* * +*********************************************************************** + + use GRIB_API + + include 'includepar' + include 'includecom' + +!HSO parameters for grib_api + integer ifile + integer iret + integer igrib + integer gribVer,parCat,parNum,typSurf,valSurf,discipl + integer gotGrid + character*24 gribErrorMsg + character*20 gribFunction +!HSO end + + integer indj,i,j,k,n,levdiff2,ifield,iumax,iwmax,lunit + integer ix,jy,induvz,indwz + +* VARIABLES AND ARRAYS NEEDED FOR GRIB DECODING + +C dimension of isec2 at least (22+n), where n is the number of parallels or +C meridians in a quasi-regular (reduced) Gaussian or lat/long grid + +C dimension of zsec2 at least (10+nn), where nn is the number of vertical +C coordinate parameters + + integer isec0(2),isec1(56),isec2(22+nxmax+nymax),isec3(2) + integer isec4(64),inbuff(jpack),ilen,iswap,ierr,iword + real*4 nsss(0:nxmax-1,0:nymax-1),ewss(0:nxmax-1,0:nymax-1) + real zsec2(60+2*nuvzmax),zsec3(2),zsec4(jpunp) + real xaux,yaux,xaux0,yaux0 + real*8 xauxin,yauxin + real ylat,xlon,wdummy,ffpol,ddpol,xlonr + real uuaux,vvaux,uupolaux,vvpolaux + + character*1 yoper,opt + logical error + +!HSO grib api error messages + data gribErrorMsg/'Error reading grib file'/ + data gribFunction/'readwind'/ + + data yoper/'D'/ + + levdiff2=nlev_ec-nwz+1 + iumax=0 + iwmax=0 +* +* OPENING OF DATA FILE (GRIB CODE) +* + +5 call grib_open_file(ifile,path(3)(1:len(3)) + >//trim(wfname(indj)),'r',iret) + if (iret.ne.GRIB_SUCCESS) then + goto 888 ! ERROR DETECTED + endif + + gotGrid=0 + ifield=0 +10 ifield=ifield+1 +* +* GET NEXT FIELDS +* + call grib_new_from_file(ifile,igrib,iret) + if (iret.eq.GRIB_END_OF_FILE) then + goto 50 ! EOF DETECTED + elseif (iret.ne.GRIB_SUCCESS) then + goto 888 ! ERROR DETECTED + endif + +! first see if we read GRIB1 or GRIB2 + call grib_get_int(igrib,'editionNumber',gribVer,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + + if (gribVer.eq.1) then ! GRIB Edition 1 +c print*,'GRiB Edition 1' +c read the grib2 identifiers + call grib_get_int(igrib,'indicatorOfParameter',isec1(6),iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'level',isec1(8),iret) + call grib_check(iret,gribFunction,gribErrorMsg) + +c change code for etadot to code for omega + if (isec1(6).eq.77) then + isec1(6)=135 + endif + else +c print*,'GRiB Edition 2' +c read the grib2 identifiers + call grib_get_int(igrib,'discipline',discipl,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'parameterCategory',parCat,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'parameterNumber',parNum,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'typeOfFirstFixedSurface',typSurf,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'level',valSurf,iret) + call grib_check(iret,gribFunction,gribErrorMsg) +! convert to grib1 identifiers + isec1(6)=-1 + isec1(7)=-1 + isec1(8)=-1 + isec1(8)=valSurf ! level + if((parCat.eq.0).and.(parNum.eq.0).and.(typSurf.eq.105))then ! T + isec1(6)=130 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.2).and.(typSurf.eq.105))then ! U + isec1(6)=131 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.3).and.(typSurf.eq.105))then ! V + isec1(6)=132 ! indicatorOfParameter + elseif((parCat.eq.1).and.(parNum.eq.0).and.(typSurf.eq.105))then ! Q + isec1(6)=133 ! indicatorOfParameter + elseif((parCat.eq.3).and.(parNum.eq.0).and.(typSurf.eq.1))then !SP + isec1(6)=134 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.32)) then ! W, actually eta dot + isec1(6)=135 ! indicatorOfParameter + elseif((parCat.eq.3).and.(parNum.eq.0).and.(typSurf.eq.101))then !SLP + isec1(6)=151 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.2).and.(typSurf.eq.103))then ! 10U + isec1(6)=165 ! indicatorOfParamete + elseif((parCat.eq.2).and.(parNum.eq.3).and.(typSurf.eq.103))then ! 10V + isec1(6)=166 ! indicatorOfParameter + elseif((parCat.eq.0).and.(parNum.eq.0).and.(typSurf.eq.103))then ! 2T + isec1(6)=167 ! indicatorOfParameter + elseif((parCat.eq.0).and.(parNum.eq.6).and.(typSurf.eq.103))then ! 2D + isec1(6)=168 ! indicatorOfParameter + elseif((parCat.eq.1).and.(parNum.eq.11).and.(typSurf.eq.1))then ! SD + isec1(6)=141 ! indicatorOfParameter + elseif((parCat.eq.6).and.(parNum.eq.1)) then ! CC + isec1(6)=164 ! indicatorOfParameter + elseif((parCat.eq.1).and.(parNum.eq.9)) then ! LSP + isec1(6)=142 ! indicatorOfParameter + elseif((parCat.eq.1).and.(parNum.eq.10)) then ! CP + isec1(6)=143 ! indicatorOfParameter + elseif((parCat.eq.0).and.(parNum.eq.11).and.(typSurf.eq.1))then ! SHF + isec1(6)=146 ! indicatorOfParameter + elseif((parCat.eq.4).and.(parNum.eq.9).and.(typSurf.eq.1))then ! SR + isec1(6)=176 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.17)) then ! EWSS + isec1(6)=180 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.18)) then ! NSSS + isec1(6)=181 ! indicatorOfParameter + elseif((parCat.eq.3).and.(parNum.eq.4)) then ! ORO + isec1(6)=129 ! indicatorOfParameter + elseif((parCat.eq.3).and.(parNum.eq.7)) then ! SDO + isec1(6)=160 ! indicatorOfParameter + elseif((discipl.eq.2).and.(parCat.eq.0).and.(parNum.eq.0).and. + + (typSurf.eq.1)) then ! LSM + isec1(6)=172 ! indicatorOfParameter + else + print*,'***ERROR: undefined GRiB2 message found!',discipl, + + parCat,parNum,typSurf + endif + endif + +!HSO get the size and data of the values array + if (isec1(6).ne.-1) then + call grib_get_real4_array(igrib,'values',zsec4,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + endif + +!HSO get the required fields from section 2 in a gribex compatible manner + if (ifield.eq.1) then + call grib_get_int(igrib,'numberOfPointsAlongAParallel', + + isec2(2),iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'numberOfPointsAlongAMeridian', + + isec2(3),iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'numberOfVerticalCoordinateValues', + + isec2(12)) + call grib_check(iret,gribFunction,gribErrorMsg) +* CHECK GRID SPECIFICATIONS + if(isec2(2).ne.nxfield) stop 'READWIND: NX NOT CONSISTENT' + if(isec2(3).ne.ny) stop 'READWIND: NY NOT CONSISTENT' + if(isec2(12)/2-1.ne.nlev_ec) + + stop 'READWIND: VERTICAL DISCRETIZATION NOT CONSISTENT' + endif ! ifield + +!HSO get the second part of the grid dimensions only from GRiB1 messages + if ((gribVer.eq.1).and.(gotGrid.eq.0)) then + call grib_get_real8(igrib,'longitudeOfFirstGridPointInDegrees', + > xauxin,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_real8(igrib,'latitudeOfLastGridPointInDegrees', + > yauxin,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + xaux=xauxin + yaux=yauxin + xaux0=xlon0 + yaux0=ylat0 + if(xaux.lt.0.) xaux=xaux+360. + if(yaux.lt.0.) yaux=yaux+360. + if(xaux0.lt.0.) xaux0=xaux0+360. + if(yaux0.lt.0.) yaux0=yaux0+360. + if(abs(xaux-xaux0).gt.eps) + & stop 'READWIND: LOWER LEFT LONGITUDE NOT CONSISTENT' + if(abs(yaux-yaux0).gt.eps) + & stop 'READWIND: LOWER LEFT LATITUDE NOT CONSISTENT' + gotGrid=1 + endif ! gotGrid + + do 20 j=0,ny-1 + do 20 i=0,nxfield-1 + k=isec1(8) + if(isec1(6).eq.130) tt(i,j,nlev_ec-k+1,n)= !! TEMPERATURE + & zsec4(nxfield*(ny-j-1)+i+1) + if(isec1(6).eq.131) uu(i,j,nlev_ec-k+1,n)= !! U VELOCITY + & zsec4(nxfield*(ny-j-1)+i+1) + if(isec1(6).eq.132) vv(i,j,nlev_ec-k+1,n)= !! V VELOCITY + & zsec4(nxfield*(ny-j-1)+i+1) + if(isec1(6).eq.133) then + qq(i,j,nlev_ec-k+1,n)= !! SPEC. HUMIDITY + & zsec4(nxfield*(ny-j-1)+i+1) + if (qq(i,j,nlev_ec-k+1,n).lt.0.) qq(i,j,nlev_ec-k+1,n)=0. +c this is necessary because the gridded data may contain +c spurious negative values + endif + if(isec1(6).eq.134) ps(i,j,1,n)= !! SURF. PRESS. + & zsec4(nxfield*(ny-j-1)+i+1) + if(isec1(6).eq.135) ww(i,j,nlev_ec-k+1,n)= !! W VELOCITY + & zsec4(nxfield*(ny-j-1)+i+1) + if(isec1(6).eq.129) oro(i,j)= !! ECMWF OROGRAPHY + & zsec4(nxfield*(ny-j-1)+i+1)/ga + if(isec1(6).eq.131) iumax=max(iumax,nlev_ec-k+1) + if(isec1(6).eq.135) iwmax=max(iwmax,nlev_ec-k+1) + +20 continue + + call grib_release(igrib) + goto 10 !! READ NEXT LEVEL OR PARAMETER +* +* CLOSING OF INPUT DATA FILE +* +50 call grib_close_file(ifile) + +* error message if no fields found with correct first longitude in it + if (gotGrid.eq.0) then + print*,'***ERROR: input file needs to contain GRiB1 formatted'// + &'messages' + stop + endif + + if(levdiff2.eq.0) then + iwmax=nlev_ec+1 + do 60 j=0,ny-1 + do 60 i=0,nx-1 +60 ww(i,j,nlev_ec+1,n)=0. + endif + + +C For global fields, assign rightmost grid point the value of the +C leftmost point +***************************************************************** + + if (xglobal) then + do 70 j=0,ny-1 + oro(nx-1,j)=oro(0,j) + ps(nx-1,j,1,n)=ps(0,j,1,n) + do 71 induvz=1,nuvz + tt(nx-1,j,induvz,n)=tt(0,j,induvz,n) + qq(nx-1,j,induvz,n)=qq(0,j,induvz,n) + uu(nx-1,j,induvz,n)=uu(0,j,induvz,n) +71 vv(nx-1,j,induvz,n)=vv(0,j,induvz,n) + do 70 indwz=1,nwz +70 ww(nx-1,j,indwz,n)=ww(0,j,indwz,n) + endif + + +C If north pole is in the domain, calculate wind velocities in polar +C stereographic coordinates +******************************************************************** + + if (nglobal) then + do 74 jy=int(switchnorthg)-2,ny-1 + ylat=ylat0+float(jy)*dy + do 74 ix=0,nx-1 + xlon=xlon0+float(ix)*dx + do 74 induvz=1,nuvz +74 call cc2gll(northpolemap,ylat,xlon,uu(ix,jy,induvz,n), + + vv(ix,jy,induvz,n),uupol(ix,jy,induvz,n), + + vvpol(ix,jy,induvz,n)) + + + do 76 induvz=1,nuvz + +* CALCULATE FFPOL, DDPOL FOR CENTRAL GRID POINT + xlon=xlon0+float(nx/2-1)*dx + xlonr=xlon*pi/180. + ffpol=sqrt(uu(nx/2-1,ny-1,induvz,n)**2+ + & vv(nx/2-1,ny-1,induvz,n)**2) + if(vv(nx/2-1,ny-1,induvz,n).lt.0.) then + ddpol=atan(uu(nx/2-1,ny-1,induvz,n)/ + & vv(nx/2-1,ny-1,induvz,n))-xlonr + else + ddpol=pi+atan(uu(nx/2-1,ny-1,induvz,n)/ + & vv(nx/2-1,ny-1,induvz,n))-xlonr + endif + if(ddpol.lt.0.) ddpol=2.0*pi+ddpol + if(ddpol.gt.2.0*pi) ddpol=ddpol-2.0*pi + +* CALCULATE U,V FOR 180 DEG, TRANSFORM TO POLAR STEREOGRAPHIC GRID + xlon=180.0 + xlonr=xlon*pi/180. + ylat=90.0 + uuaux=-ffpol*sin(xlonr+ddpol) + vvaux=-ffpol*cos(xlonr+ddpol) + call cc2gll(northpolemap,ylat,xlon,uuaux,vvaux,uupolaux, + + vvpolaux) + + jy=ny-1 + do 76 ix=0,nx-1 + uupol(ix,jy,induvz,n)=uupolaux + vvpol(ix,jy,induvz,n)=vvpolaux +76 continue + + +* Fix: Set W at pole to the zonally averaged W of the next equator- +* ward parallel of latitude + + do 85 indwz=1,nwz + wdummy=0. + jy=ny-2 + do 80 ix=0,nx-1 +80 wdummy=wdummy+ww(ix,jy,indwz,n) + wdummy=wdummy/float(nx) + jy=ny-1 + do 85 ix=0,nx-1 +85 ww(ix,jy,indwz,n)=wdummy + + endif + +C If south pole is in the domain, calculate wind velocities in polar +C stereographic coordinates +******************************************************************** + + if (sglobal) then + do 77 jy=0,int(switchsouthg)+3 + ylat=ylat0+float(jy)*dy + do 77 ix=0,nx-1 + xlon=xlon0+float(ix)*dx + do 77 induvz=1,nuvz +77 call cc2gll(southpolemap,ylat,xlon,uu(ix,jy,induvz,n), + + vv(ix,jy,induvz,n),uupol(ix,jy,induvz,n), + + vvpol(ix,jy,induvz,n)) + + do 79 induvz=1,nuvz + +* CALCULATE FFPOL, DDPOL FOR CENTRAL GRID POINT + xlon=xlon0+float(nx/2-1)*dx + xlonr=xlon*pi/180. + ffpol=sqrt(uu(nx/2-1,0,induvz,n)**2+ + & vv(nx/2-1,0,induvz,n)**2) + if(vv(nx/2-1,0,induvz,n).lt.0.) then + ddpol=atan(uu(nx/2-1,0,induvz,n)/ + & vv(nx/2-1,0,induvz,n))+xlonr + else + ddpol=pi+atan(uu(nx/2-1,0,induvz,n)/ + & vv(nx/2-1,0,induvz,n))+xlonr + endif + if(ddpol.lt.0.) ddpol=2.0*pi+ddpol + if(ddpol.gt.2.0*pi) ddpol=ddpol-2.0*pi + +* CALCULATE U,V FOR 180 DEG, TRANSFORM TO POLAR STEREOGRAPHIC GRID + xlon=180.0 + xlonr=xlon*pi/180. + ylat=-90.0 + uuaux=+ffpol*sin(xlonr-ddpol) + vvaux=-ffpol*cos(xlonr-ddpol) + call cc2gll(northpolemap,ylat,xlon,uuaux,vvaux,uupolaux, + + vvpolaux) + + jy=0 + do 79 ix=0,nx-1 + uupol(ix,jy,induvz,n)=uupolaux +79 vvpol(ix,jy,induvz,n)=vvpolaux + + +* Fix: Set W at pole to the zonally averaged W of the next equator- +* ward parallel of latitude + + do 95 indwz=1,nwz + wdummy=0. + jy=1 + do 90 ix=0,nx-1 +90 wdummy=wdummy+ww(ix,jy,indwz,n) + wdummy=wdummy/float(nx) + jy=0 + do 95 ix=0,nx-1 +95 ww(ix,jy,indwz,n)=wdummy + endif + + if(iumax.ne.nuvz) stop 'READWIND: NUVZ NOT CONSISTENT' + if(iwmax.ne.nwz) stop 'READWIND: NWZ NOT CONSISTENT' + + +C Calculate potential temperature and potential vorticity on whole grid +*********************************************************************** + + call calcpv(n) + + + return +888 write(*,*) ' #### TRAJECTORY MODEL ERROR! WINDFIELD #### ' + write(*,*) ' #### ',wfname(indj),' #### ' + write(*,*) ' #### IS NOT GRIB FORMAT !!! #### ' + stop 'Execution terminated' + +999 write(*,*) ' #### TRAJECTORY MODEL ERROR! WINDFIELD #### ' + write(*,*) ' #### ',wfname(indj),' #### ' + write(*,*) ' #### CANNOT BE OPENED !!! #### ' + write(*,*) + write(*,'(a)') '!!! PLEASE INSERT A NEW CD-ROM AND !!!' + write(*,'(a)') '!!! PRESS ANY KEY TO CONTINUE... !!!' + write(*,'(a)') '!!! ...OR TERMINATE FLEXTRA PRESSING !!!' + write(*,'(a)') '!!! THE "X" KEY... !!!' + write(*,'(a)') '!!! PLEASE CHECK CD-ROM LABEL AND !!!' + write(*,'(a)') '!!! CORRECT FILE "PATHNAMES"... !!!' + write(*,*) + read(*,'(a)') opt + if(opt.eq.'X') then + stop 'Execution terminated' + else + call readpaths(error) + if(error) + & stop 'Error reading "pathnames" --> execution terminated' + goto 5 + endif + + end diff --git a/projects/MissionSupport/applications/WxTraj/src/readwind.geos.f b/projects/MissionSupport/applications/WxTraj/src/readwind.geos.f new file mode 100755 index 0000000..ba1d3d5 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/readwind.geos.f @@ -0,0 +1,383 @@ + subroutine readwind(indj,n) +*********************************************************************** +* * +* TRAJECTORY MODEL SUBROUTINE READWIND * +* * +*********************************************************************** +* * +* AUTHOR: G. WOTAWA * +* DATE: 1997-08-05 * +* LAST UPDATE: ---------- * +* Update: 1998-07-29, global fields allowed * +* A. Stohl, G. Wotawa * +* 2011-06, implemented reading of grib2 format* +* analog to FLEXPART 8.22 routines * +* * +*********************************************************************** +* * +! DESCRIPTION: * +! * +! READING OF ECMWF METEOROLOGICAL FIELDS FROM INPUT DATA FILES. THE * +! INPUT DATA FILES ARE EXPECTED TO BE AVAILABLE IN GRIB CODE * +! * +! INPUT: * +! indj indicates number of the wind field to be read in * +! n temporal index for meteorological fields (1 to 3)* +! * +! IMPORTANT VARIABLES FROM COMMON BLOCK: * +! * +! wfname File name of data to be read in * +! nxfield,ny,nuvz,nwz expected field dimensions * +! nlev_geos number of vertical levels geos model * +! uu,vv,ww wind fields * +! tt,qq temperature and specific humidity * +! ps surface pressure * +! oro orography (PHIS/gravity) * +! delp layer pressure thickness * +! * +!********************************************************************** + + use netcdf + + include 'includepar' + include 'includecom' + include 'netcdf.inc' + +! parameters for netcdf + integer ncid + integer varid + character*24 varname + + integer indj,i,j,k,z,n,levdiff2,ifield,iumax,iwmax,lunit + integer ix,jy,induvz,indwz + integer gotGrid + + real xaux,yaux,xaux0,yaux0 + character*24 attr + real ylat,xlon,wdummy,ffpol,ddpol,xlonr + real uuaux,vvaux,uupolaux,vvpolaux + real var(0:nxmax-1,0:nymax-1,nuvzmax,1) + real*8 lon(nxmax),lat(nymax) + + logical error + + levdiff2=nlev_geos-nwz+1 + +! +! OPENING OF DATA FILE (NETCDF CODE) +! + + call check(nf_open(path(3)(1:len(3))//trim(wfname(indj)), + + NF_NOWRITE,ncid), + + "opening file" // trim(wfname(indj))) + +! +! Read Inputs +! + +! U + call check(nf_inq_varid(ncid,'U',varid), + + "getting varid for U") + + call check(nf_get_var(ncid,varid,var), + + " reading U") +! flip Z direction + do 10 k=1,nlev_geos + z = nlev_geos - k + 1 + uu(:,:,k,n) = var(:,:,z,1) +10 continue +! V + call check(nf_inq_varid(ncid,'V',varid), + + "getting varid for V") + + call check(nf_get_var(ncid,varid,var), + + " reading V") +! flip Z direction + do 11 k=1,nlev_geos + z = nlev_geos - k + 1 + vv(:,:,k,n) = var(:,:,z,1) +11 continue +! OMEGA [W] + call check(nf_inq_varid(ncid,'OMEGA',varid), + + "getting varid for OMEGA") + + call check(nf_get_var(ncid,varid,var), + + " reading OMEGA [ww]") +! flip Z direction + do 12 k=1,nlev_geos + z = nlev_geos - k + 1 + ww(:,:,k,n) = var(:,:,z,1) +12 continue +! T + call check(nf_inq_varid(ncid,'T',varid), + + "getting varid for T") + + call check(nf_get_var(ncid,varid,var), + + " reading T") +! flip Z direction + do 13 k=1,nlev_geos + z = nlev_geos - k + 1 + tt(:,:,k,n) = var(:,:,z,1) +13 continue +! QV specific humidity + call check(nf_inq_varid(ncid,'QV',varid), + + "getting varid for QV") + + call check(nf_get_var(ncid,varid,var), + + " reading QV") +! flip Z direction + do 14 k=1,nlev_geos + z = nlev_geos - k + 1 + qq(:,:,k,n) = var(:,:,z,1) +14 continue +! PS + call check(nf_inq_varid(ncid,'PS',varid), + + "getting varid for PS") + + call check(nf_get_var(ncid,varid,ps(:,:,1,n)), + + " reading PS") + + +! CHECK GRID SPECIFICATIONS + gotGrid = 0 + call check(nf_inq_varid(ncid,'lon',varid), + + "getting varid for lon") + call check(nf_get_var(ncid,varid,lon), + + "reading lon") +! Westernmost Longitude + xaux = real(lon(1)) + + call check(nf_inq_varid(ncid,'lat',varid), + + "getting varid for lat") + call check(nf_get_var(ncid,varid,lat), + + "reading lat") +! Southernmost Latitude + yaux = real(lat(1)) + + xaux0=xlon0 + yaux0=ylat0 + + if(xaux.lt.0.) xaux=xaux+360. + if(yaux.lt.0.) yaux=yaux+360. + if(xaux0.lt.0.) xaux0=xaux0+360. + if(yaux0.lt.0.) yaux0=yaux0+360. + if(abs(xaux-xaux0).gt.eps) + & stop 'READWIND: LOWER LEFT LONGITUDE NOT CONSISTENT' + if(abs(yaux-yaux0).gt.eps) + & stop 'READWIND: LOWER LEFT LATITUDE NOT CONSISTENT' + gotGrid = 1 +! +! CLOSING OF INPUT DATA FILE +! + call check(nf_close(ncid),"closing" // trim(wfname(indj))) + +! error message if no fields found with correct first longitude in it + if (gotGrid.eq.0) then + print*,'***ERROR: input file has bad first lat/lon' + stop + endif + + if(levdiff2.eq.0) then + iwmax=nlev_geos+1 + do 60 j=0,ny-1 + do 60 i=0,nx-1 +60 ww(i,j,nlev_geos+1,n)=0. + endif + + +C For global fields, assign rightmost grid point the value of the +C leftmost point +***************************************************************** + + if (xglobal) then + do 70 j=0,ny-1 + oro(nx-1,j)=oro(0,j) + ps(nx-1,j,1,n)=ps(0,j,1,n) + do 71 induvz=1,nuvz + tt(nx-1,j,induvz,n)=tt(0,j,induvz,n) + qq(nx-1,j,induvz,n)=qq(0,j,induvz,n) + uu(nx-1,j,induvz,n)=uu(0,j,induvz,n) +71 vv(nx-1,j,induvz,n)=vv(0,j,induvz,n) + do 70 indwz=1,nwz +70 ww(nx-1,j,indwz,n)=ww(0,j,indwz,n) + endif + + +C If north pole is in the domain, calculate wind velocities in polar +C stereographic coordinates +******************************************************************** + + if (nglobal) then + do 74 jy=int(switchnorthg)-2,ny-1 + ylat=ylat0+float(jy)*dy + do 74 ix=0,nx-1 + xlon=xlon0+float(ix)*dx + do 74 induvz=1,nuvz +74 call cc2gll(northpolemap,ylat,xlon,uu(ix,jy,induvz,n), + + vv(ix,jy,induvz,n),uupol(ix,jy,induvz,n), + + vvpol(ix,jy,induvz,n)) + + + do 76 induvz=1,nuvz + +* CALCULATE FFPOL, DDPOL FOR CENTRAL GRID POINT + xlon=xlon0+float(nx/2-1)*dx + xlonr=xlon*pi/180. + ffpol=sqrt(uu(nx/2-1,ny-1,induvz,n)**2+ + & vv(nx/2-1,ny-1,induvz,n)**2) + if(vv(nx/2-1,ny-1,induvz,n).lt.0.) then + ddpol=atan(uu(nx/2-1,ny-1,induvz,n)/ + & vv(nx/2-1,ny-1,induvz,n))-xlonr + else + ddpol=pi+atan(uu(nx/2-1,ny-1,induvz,n)/ + & vv(nx/2-1,ny-1,induvz,n))-xlonr + endif + if(ddpol.lt.0.) ddpol=2.0*pi+ddpol + if(ddpol.gt.2.0*pi) ddpol=ddpol-2.0*pi + +* CALCULATE U,V FOR 180 DEG, TRANSFORM TO POLAR STEREOGRAPHIC GRID + xlon=180.0 + xlonr=xlon*pi/180. + ylat=90.0 + uuaux=-ffpol*sin(xlonr+ddpol) + vvaux=-ffpol*cos(xlonr+ddpol) + call cc2gll(northpolemap,ylat,xlon,uuaux,vvaux,uupolaux, + + vvpolaux) + + jy=ny-1 + do 76 ix=0,nx-1 + uupol(ix,jy,induvz,n)=uupolaux + vvpol(ix,jy,induvz,n)=vvpolaux +76 continue + + +* Fix: Set W at pole to the zonally averaged W of the next equator- +* ward parallel of latitude + + do 85 indwz=1,nwz + wdummy=0. + jy=ny-2 + do 80 ix=0,nx-1 +80 wdummy=wdummy+ww(ix,jy,indwz,n) + wdummy=wdummy/float(nx) + jy=ny-1 + do 85 ix=0,nx-1 +85 ww(ix,jy,indwz,n)=wdummy + + endif + +C If south pole is in the domain, calculate wind velocities in polar +C stereographic coordinates +******************************************************************** + + if (sglobal) then + do 77 jy=0,int(switchsouthg)+3 + ylat=ylat0+float(jy)*dy + do 77 ix=0,nx-1 + xlon=xlon0+float(ix)*dx + do 77 induvz=1,nuvz +77 call cc2gll(southpolemap,ylat,xlon,uu(ix,jy,induvz,n), + + vv(ix,jy,induvz,n),uupol(ix,jy,induvz,n), + + vvpol(ix,jy,induvz,n)) + + do 79 induvz=1,nuvz + +* CALCULATE FFPOL, DDPOL FOR CENTRAL GRID POINT + xlon=xlon0+float(nx/2-1)*dx + xlonr=xlon*pi/180. + ffpol=sqrt(uu(nx/2-1,0,induvz,n)**2+ + & vv(nx/2-1,0,induvz,n)**2) + if(vv(nx/2-1,0,induvz,n).lt.0.) then + ddpol=atan(uu(nx/2-1,0,induvz,n)/ + & vv(nx/2-1,0,induvz,n))+xlonr + else + ddpol=pi+atan(uu(nx/2-1,0,induvz,n)/ + & vv(nx/2-1,0,induvz,n))+xlonr + endif + if(ddpol.lt.0.) ddpol=2.0*pi+ddpol + if(ddpol.gt.2.0*pi) ddpol=ddpol-2.0*pi + +* CALCULATE U,V FOR 180 DEG, TRANSFORM TO POLAR STEREOGRAPHIC GRID + xlon=180.0 + xlonr=xlon*pi/180. + ylat=-90.0 + uuaux=+ffpol*sin(xlonr-ddpol) + vvaux=-ffpol*cos(xlonr-ddpol) + call cc2gll(northpolemap,ylat,xlon,uuaux,vvaux,uupolaux, + + vvpolaux) + + jy=0 + do 79 ix=0,nx-1 + uupol(ix,jy,induvz,n)=uupolaux +79 vvpol(ix,jy,induvz,n)=vvpolaux + + +* Fix: Set W at pole to the zonally averaged W of the next equator- +* ward parallel of latitude + + do 95 indwz=1,nwz + wdummy=0. + jy=1 + do 90 ix=0,nx-1 +90 wdummy=wdummy+ww(ix,jy,indwz,n) + wdummy=wdummy/float(nx) + jy=0 + do 95 ix=0,nx-1 +95 ww(ix,jy,indwz,n)=wdummy + endif + + +C Calculate potential temperature and potential vorticity on whole grid +*********************************************************************** + + call calcpv(n) + + + return +888 write(*,*) ' #### TRAJECTORY MODEL ERROR! WINDFIELD #### ' + write(*,*) ' #### ',wfname(indj),' #### ' + write(*,*) ' #### IS NOT GRIB FORMAT !!! #### ' + stop 'Execution terminated' + +999 write(*,*) ' #### TRAJECTORY MODEL ERROR! WINDFIELD #### ' + write(*,*) ' #### ',wfname(indj),' #### ' + write(*,*) ' #### CANNOT BE OPENED !!! #### ' + write(*,*) + write(*,'(a)') '!!! PLEASE INSERT A NEW CD-ROM AND !!!' + write(*,'(a)') '!!! PRESS ANY KEY TO CONTINUE... !!!' + write(*,'(a)') '!!! ...OR TERMINATE FLEXTRA PRESSING !!!' + write(*,'(a)') '!!! THE "X" KEY... !!!' + write(*,'(a)') '!!! PLEASE CHECK CD-ROM LABEL AND !!!' + write(*,'(a)') '!!! CORRECT FILE "PATHNAMES"... !!!' + write(*,*) + end +!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +! NAME +! check +! PURPOSE +! tests the return value of an NF90 call +! prints a message (loc) if the return value indicates an error +! INPUT +! status : NF90 return value to be checked +! loc : use character string indicating where in the code the +! NF90 call is +! OUTPUT +! Writes to the standard output the loc and the NF90 error +! HISTORY +! 27 April P. Castellanos +!;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + subroutine check(status, loc) + use netcdf + + include'netcdf.inc' + + integer, intent(in) :: status + character(len=*), intent(in) :: loc + + if(status /= NF_NOERR) then + write (*,*) "Error at ", loc + write (*,*) NF_STRERROR(status) + stop 2 + end if + + end diff --git a/projects/MissionSupport/applications/WxTraj/src/readwind_gfs.f b/projects/MissionSupport/applications/WxTraj/src/readwind_gfs.f new file mode 100644 index 0000000..151c0e3 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/readwind_gfs.f @@ -0,0 +1,581 @@ + subroutine readwind(indj,n) +*********************************************************************** +* * +* TRAJECTORY MODEL SUBROUTINE READWIND * +* * +*********************************************************************** +* * +* AUTHOR: G. WOTAWA * +* DATE: 1997-08-05 * +* LAST UPDATE: ---------- * +* Update: 1998-07-29, global fields allowed * +* A. Stohl, G. Wotawa * +* Update: 2001-01-05 NCEP Data Pressure levels * +* * +*********************************************************************** +* * +* DESCRIPTION: * +* * +* READING OF ECMWF METEOROLOGICAL FIELDS FROM INPUT DATA FILES. THE * +* INPUT DATA FILES ARE EXPECTED TO BE AVAILABLE IN GRIB CODE * +* * +* INPUT: * +* indj indicates number of the wind field to be read in * +* n temporal index for meteorological fields (1 to 3)* +* * +* IMPORTANT VARIABLES FROM COMMON BLOCK: * +* * +* wfname File name of data to be read in * +* nxfield,ny,nuvz,nwz expected field dimensions * +* nlev_ec number of vertical levels ecmwf model * +* uu,vv,ww wind fields * +* tt,qq temperature and specific humidity * +* ps surface pressure * +* * +*********************************************************************** + + include 'includepar' + include 'includecom' + include 'grib_api_f77.h' + + integer ii,indj,i,j,k,n,ifield,iumax + integer ix,jy,induvz,indwz,numpt,numpu,numpv,numpw,numprh + real help,temp,plev,ew,elev + +* VARIABLES AND ARRAYS NEEDED FOR GRIB DECODING + +C dimension of isec2 at least (22+n), where n is the number of parallels or +C meridians in a quasi-regular (reduced) Gaussian or lat/long grid + +C dimension of zsec2 at least (10+nn), where nn is the number of vertical +C coordinate parameters + + integer isec1(56),isec2(22+nxmax+nymax) + real zsec4(jpunp) + real xaux,yaux,xaux0,yaux0 + real ylat,xlon,wdummy,ffpol,ddpol,xlonr + real uuaux,vvaux,uupolaux,vvpolaux + + logical error + +! parameters for grib_api + integer ifile + integer iret + integer igrib + integer*4 isize + integer gribVer,parCat,parNum,typSurf,valSurf + real*8 zsecn4(jpunp*4) + real*8 xauxin,yauxin + + integer i179,i180,i181 + + iumax=0 +* +* OPENING OF DATA FILE (GRIB CODE) +* +* +* OPENING OF DATA FILE (GRIB CODE) +* +!HSO +! print*,'reading winds from ',path(3)(1:len(3)) +! >//trim(wfname(indj)),'|' +5 iret=grib_open_file(ifile,path(3)(1:len(3)) + >//trim(wfname(indj)),'r') + call grib_check(iret) +! turn on support for multi fields messages + call grib_check(grib_multi_support_on()) + + + numpt=0 + numpu=0 + numpv=0 + numpw=0 + numprh=0 + ifield=0 +10 ifield=ifield+1 +* +* GET NEXT FIELDS +* + + iret=grib_new_from_file(ifile,igrib) + if (igrib .eq. -1 ) then + if (iret .ne. -1) then + call grib_check(iret) + goto 888 ! ERROR DETECTED + endif + goto 50 ! EOF DETECTED + endif + +! first see if we read GRIB1 or GRIB2 + call grib_check(grib_get_int( igrib, + >'editionNumber',gribVer)) + +! get the size and data of the values array + call grib_check(grib_get_size(igrib,'values',isize)) + call grib_check(grib_get_real8_array(igrib,'values',zsecn4,isize)) + do i=1,isize + zsec4(i)=zsecn4(i) + enddo + + if (gribVer.eq.1) then ! GRIB Edition 1 + +! read the grib1 identifiers + call grib_check(grib_get_int( igrib, + >'indicatorOfParameter',isec1(6))) + call grib_check(grib_get_int( igrib, + >'indicatorOfTypeOfLevel',isec1(7))) + call grib_check(grib_get_int( igrib, + >'level',isec1(8))) + + else ! GRIB Edition 2 + +! read the grib2 identifiers + call grib_check(grib_get_int( igrib, + >'parameterCategory',parCat)) + call grib_check(grib_get_int( igrib, + >'parameterNumber',parNum)) + call grib_check(grib_get_int( igrib, + >'typeOfFirstFixedSurface',typSurf)) + call grib_check(grib_get_int( igrib, + >'scaledValueOfFirstFixedSurface',valSurf)) + +! convert to grib1 identifiers + isec1(6)=-1 + isec1(7)=-1 + isec1(8)=-1 + if ((parCat.eq.0).and.(parNum.eq.0).and.(typSurf.eq.100)) then ! T + isec1(6)=11 ! indicatorOfParameter + isec1(7)=100 ! indicatorOfTypeOfLevel + isec1(8)=valSurf/100 ! level, convert to hPa + elseif ((parCat.eq.2).and.(parNum.eq.2).and.(typSurf.eq.100)) then ! U + isec1(6)=33 ! indicatorOfParameter + isec1(7)=100 ! indicatorOfTypeOfLevel + isec1(8)=valSurf/100 ! level, convert to hPa + elseif ((parCat.eq.2).and.(parNum.eq.3).and.(typSurf.eq.100)) then ! V + isec1(6)=34 ! indicatorOfParameter + isec1(7)=100 ! indicatorOfTypeOfLevel + isec1(8)=valSurf/100 ! level, convert to hPa + elseif ((parCat.eq.2).and.(parNum.eq.8).and.(typSurf.eq.100)) then ! W + isec1(6)=39 ! indicatorOfParameter + isec1(7)=100 ! indicatorOfTypeOfLevel + isec1(8)=valSurf/100 ! level, convert to hPa + elseif ((parCat.eq.1).and.(parNum.eq.1).and.(typSurf.eq.100)) then ! RH + isec1(6)=52 ! indicatorOfParameter + isec1(7)=100 ! indicatorOfTypeOfLevel + isec1(8)=valSurf/100 ! level, convert to hPa + elseif ((parCat.eq.1).and.(parNum.eq.1).and.(typSurf.eq.103)) then ! RH2 + isec1(6)=52 ! indicatorOfParameter + isec1(7)=105 ! indicatorOfTypeOfLevel + isec1(8)=2 + elseif ((parCat.eq.0).and.(parNum.eq.0).and.(typSurf.eq.103)) then ! T2 + isec1(6)=11 ! indicatorOfParameter + isec1(7)=105 ! indicatorOfTypeOfLevel + isec1(8)=2 + elseif ((parCat.eq.2).and.(parNum.eq.2).and.(typSurf.eq.103)) then ! U10 + isec1(6)=33 ! indicatorOfParameter + isec1(7)=105 ! indicatorOfTypeOfLevel + isec1(8)=10 + elseif ((parCat.eq.2).and.(parNum.eq.3).and.(typSurf.eq.103)) then ! V10 + isec1(6)=34 ! indicatorOfParameter + isec1(7)=105 ! indicatorOfTypeOfLevel + isec1(8)=10 + elseif ((parCat.eq.3).and.(parNum.eq.1).and.(typSurf.eq.101)) then ! SLP + isec1(6)=2 ! indicatorOfParameter + isec1(7)=102 ! indicatorOfTypeOfLevel + isec1(8)=0 + elseif ((parCat.eq.3).and.(parNum.eq.0).and.(typSurf.eq.1)) then ! SP + isec1(6)=1 ! indicatorOfParameter + isec1(7)=1 ! indicatorOfTypeOfLevel + isec1(8)=0 + elseif ((parCat.eq.1).and.(parNum.eq.13).and.(typSurf.eq.1)) then ! SNOW + isec1(6)=66 ! indicatorOfParameter + isec1(7)=1 ! indicatorOfTypeOfLevel + isec1(8)=0 + elseif ((parCat.eq.0).and.(parNum.eq.0).and.(typSurf.eq.104)) then ! T sigma 0 + isec1(6)=11 ! indicatorOfParameter + isec1(7)=107 ! indicatorOfTypeOfLevel + isec1(8)=0.995 ! lowest sigma level + elseif ((parCat.eq.2).and.(parNum.eq.2).and.(typSurf.eq.104)) then ! U sigma 0 + isec1(6)=33 ! indicatorOfParameter + isec1(7)=107 ! indicatorOfTypeOfLevel + isec1(8)=0.995 ! lowest sigma level + elseif ((parCat.eq.2).and.(parNum.eq.3).and.(typSurf.eq.104)) then ! V sigma 0 + isec1(6)=34 ! indicatorOfParameter + isec1(7)=107 ! indicatorOfTypeOfLevel + isec1(8)=0.995 ! lowest sigma level + elseif ((parCat.eq.3).and.(parNum.eq.5).and.(typSurf.eq.1)) then ! TOPO + isec1(6)=7 ! indicatorOfParameter + isec1(7)=1 ! indicatorOfTypeOfLevel + isec1(8)=0 + elseif ((parCat.eq.0).and.(parNum.eq.0).and.(typSurf.eq.1)) then ! LSM + isec1(6)=81 ! indicatorOfParameter + isec1(7)=1 ! indicatorOfTypeOfLevel + isec1(8)=0 + elseif ((parCat.eq.3).and.(parNum.eq.196).and.(typSurf.eq.1)) then ! BLH + isec1(6)=221 ! indicatorOfParameter + isec1(7)=1 ! indicatorOfTypeOfLevel + isec1(8)=0 + elseif ((parCat.eq.1).and.(parNum.eq.7).and.(typSurf.eq.1)) then ! LSP/TP + isec1(6)=62 ! indicatorOfParameter + isec1(7)=1 ! indicatorOfTypeOfLevel + isec1(8)=0 + elseif ((parCat.eq.1).and.(parNum.eq.196).and.(typSurf.eq.1)) then ! CP + isec1(6)=63 ! indicatorOfParameter + isec1(7)=1 ! indicatorOfTypeOfLevel + isec1(8)=0 + endif + + endif ! gribVer + + +C Check whether we are on a little endian or on a big endian computer +********************************************************************* + +c if (inbuff(1).eq.1112101447) then ! little endian, swap bytes +c iswap=1+ilen/4 +c call swap32(inbuff,iswap) +c else if (inbuff(1).ne.1196575042) then ! big endian +c stop 'subroutine gridcheck: corrupt GRIB data' +c endif + +c if (ierr.ne.0) goto 10 ! ERROR DETECTED + + if(ifield.eq.1) then + +! get the required fields from section 2 +! store compatible to gribex input + call grib_check(grib_get_int( igrib, + >'numberOfPointsAlongAParallel',isec2(2))) + call grib_check(grib_get_int( igrib, + >'numberOfPointsAlongAMeridian',isec2(3))) + call grib_check(grib_get_real8(igrib, + >'longitudeOfFirstGridPointInDegrees',xauxin)) + call grib_check(grib_get_real8(igrib, + >'latitudeOfLastGridPointInDegrees',yauxin)) + xaux=xauxin + yaux=yauxin + +* CHECK GRID SPECIFICATIONS + + if(isec2(2).ne.nxfield) stop 'READWIND: NX NOT CONSISTENT' + if(isec2(3).ne.ny) stop 'READWIND: NY NOT CONSISTENT' + if(xaux.eq.0.) xaux=-179.0 ! NCEP DATA + xaux0=xlon0 + yaux0=ylat0 + if(xaux.lt.0.) xaux=xaux+360. + if(yaux.lt.0.) yaux=yaux+360. + if(xaux0.lt.0.) xaux0=xaux0+360. + if(yaux0.lt.0.) yaux0=yaux0+360. + if(abs(xaux-xaux0).gt.eps) + & stop 'READWIND: LOWER LEFT LONGITUDE NOT CONSISTENT' + if(abs(yaux-yaux0).gt.eps) + & stop 'READWIND: LOWER LEFT LATITUDE NOT CONSISTENT' + endif +!HSO end of edits + + i179=nint(179./dx) + i180=nint(179./dx)+1 + i181=i180+1 + + do 20 j=0,ny-1 + do 20 i=0,nxfield-1 + + if((isec1(6).eq.011).and.(isec1(7).eq.100)) then +* TEMPERATURE + if((i.eq.0).and.(j.eq.0)) then + do 21 ii=1,nuvz + if ((isec1(8)*100.0).eq.akz(ii)) numpt=ii +21 continue + endif + help=zsec4(nxfield*(ny-j-1)+i+1) + if(i.le.i180) then + tt(i179+i,j,numpt,n)=help + else + tt(i-i181,j,numpt,n)=help + endif + endif + + if((isec1(6).eq.033).and.(isec1(7).eq.100)) then +* U VELOCITY + if((i.eq.0).and.(j.eq.0)) then + do 22 ii=1,nuvz + if ((isec1(8)*100.0).eq.akz(ii)) numpu=ii +22 continue + endif + + help=zsec4(nxfield*(ny-j-1)+i+1) + if(i.le.i180) then + uu(i179+i,j,numpu,n)=help + else + uu(i-i181,j,numpu,n)=help + endif + endif + + if((isec1(6).eq.034).and.(isec1(7).eq.100)) then +* V VELOCITY + if((i.eq.0).and.(j.eq.0)) then + do 23 ii=1,nuvz + if ((isec1(8)*100.0).eq.akz(ii)) numpv=ii +23 continue + endif + help=zsec4(nxfield*(ny-j-1)+i+1) + if(i.le.i180) then + vv(i179+i,j,numpv,n)=help + else + vv(i-i181,j,numpv,n)=help + endif + endif + + if((isec1(6).eq.039).and.(isec1(7).eq.100)) then +* W VELOCITY + if((i.eq.0).and.(j.eq.0)) then + do 25 ii=1,nuvz + if ((isec1(8)*100.0).eq.akz(ii)) numpw=ii +25 continue + endif + help=zsec4(nxfield*(ny-j-1)+i+1) + if(i.le.i180) then + ww(i179+i,j,numpw,n)=help + else + ww(i-i181,j,numpw,n)=help + endif + endif + + if((isec1(6).eq.052).and.(isec1(7).eq.100)) then +* RELATIVE HUMIDITY -> CONVERT TO SPECIFIC HUMIDITY + if((i.eq.0).and.(j.eq.0)) then + do 24 ii=1,nuvz + if ((isec1(8)*100.0).eq.akz(ii)) numprh=ii +24 continue + endif + help=zsec4(nxfield*(ny-j-1)+i+1) + if(i.le.i180) then + qq(i179+i,j,numprh,n)=help + else + qq(i-i181,j,numprh,n)=help + endif + endif + + if((isec1(6).eq.001).and.(isec1(7).eq.001)) then +* SURFACE PRESSURE + help=zsec4(nxfield*(ny-j-1)+i+1) + if(i.le.i180) then + ps(i179+i,j,1,n)=help + else + ps(i-i181,j,1,n)=help + endif + endif + + if((isec1(6).eq.007).and.(isec1(7).eq.001)) then +* TOPOGRAPHY + help=zsec4(nxfield*(ny-j-1)+i+1) + if(i.le.i180) then + oro(i179+i,j)=help + else + oro(i-i181,j)=help + endif + endif + +20 continue + + if((isec1(6).eq.33).and.(isec1(7).eq.100)) iumax=iumax+1 + + if (igrib.ne.-1) then + call grib_check(grib_release(igrib)) + endif + + goto 10 !! READ NEXT LEVEL OR PARAMETER + +50 continue +* +* CLOSING OF INPUT DATA FILE +* + call grib_check(grib_close_file(ifile)) + + + +* TRANSFORM RH TO SPECIFIC HUMIDITY AS NEEDED + + do 65 j=0,ny-1 + do 65 i=0,nxfield-1 + do 65 k=1,nuvz + help=qq(i,j,k,n) + temp=tt(i,j,k,n) + plev=akm(k) + elev=ew(temp)*help/100.0 + qq(i,j,k,n)=xmwml*(elev/(plev-((1.0-xmwml)*elev))) +65 continue + +C For global fields, assign rightmost grid point the value of the +C leftmost point +***************************************************************** + + if (xglobal) then + do 70 j=0,ny-1 + oro(nx-1,j)=oro(0,j) + ps(nx-1,j,1,n)=ps(0,j,1,n) + do 71 induvz=1,nuvz + tt(nx-1,j,induvz,n)=tt(0,j,induvz,n) + qq(nx-1,j,induvz,n)=qq(0,j,induvz,n) + uu(nx-1,j,induvz,n)=uu(0,j,induvz,n) +71 vv(nx-1,j,induvz,n)=vv(0,j,induvz,n) + do 70 indwz=1,nwz +70 ww(nx-1,j,indwz,n)=ww(0,j,indwz,n) + endif + + +C If north pole is in the domain, calculate wind velocities in polar +C stereographic coordinates +******************************************************************** + + if (nglobal) then + do 74 jy=int(switchnorthg)-2,ny-1 + ylat=ylat0+float(jy)*dy + do 74 ix=0,nx-1 + xlon=xlon0+float(ix)*dx + do 74 induvz=1,nuvz +74 call cc2gll(northpolemap,ylat,xlon,uu(ix,jy,induvz,n), + + vv(ix,jy,induvz,n),uupol(ix,jy,induvz,n), + + vvpol(ix,jy,induvz,n)) + + + do 76 induvz=1,nuvz + +* CALCULATE FFPOL, DDPOL FOR CENTRAL GRID POINT + xlon=xlon0+float(nx/2-1)*dx + xlonr=xlon*pi/180. + ffpol=sqrt(uu(nx/2-1,ny-1,induvz,n)**2+ + & vv(nx/2-1,ny-1,induvz,n)**2) + if(vv(nx/2-1,ny-1,induvz,n).lt.0.) then + if(vv(nx/2-1,ny-1,induvz,n).gt.-0.00001) + & vv(nx/2-1,ny-1,induvz,n)=-0.00001 + ddpol=atan(uu(nx/2-1,ny-1,induvz,n)/ + & vv(nx/2-1,ny-1,induvz,n))-xlonr + else + if(vv(nx/2-1,ny-1,induvz,n).lt. 0.00001) + & vv(nx/2-1,ny-1,induvz,n)= 0.00001 + ddpol=pi+atan(uu(nx/2-1,ny-1,induvz,n)/ + & vv(nx/2-1,ny-1,induvz,n))-xlonr + endif + if(ddpol.lt.0.) ddpol=2.0*pi+ddpol + if(ddpol.gt.2.0*pi) ddpol=ddpol-2.0*pi + +* CALCULATE U,V FOR 180 DEG, TRANSFORM TO POLAR STEREOGRAPHIC GRID + xlon=180.0 + xlonr=xlon*pi/180. + ylat=90.0 + uuaux=-ffpol*sin(xlonr+ddpol) + vvaux=-ffpol*cos(xlonr+ddpol) + call cc2gll(northpolemap,ylat,xlon,uuaux,vvaux,uupolaux, + + vvpolaux) + + jy=ny-1 + do 76 ix=0,nx-1 + uupol(ix,jy,induvz,n)=uupolaux + vvpol(ix,jy,induvz,n)=vvpolaux +76 continue + + +* Fix: Set W at pole to the zonally averaged W of the next equator- +* ward parallel of latitude + + do 85 indwz=1,nwz + wdummy=0. + jy=ny-2 + do 80 ix=0,nx-1 +80 wdummy=wdummy+ww(ix,jy,indwz,n) + wdummy=wdummy/float(nx) + jy=ny-1 + do 85 ix=0,nx-1 +85 ww(ix,jy,indwz,n)=wdummy + + endif + +C If south pole is in the domain, calculate wind velocities in polar +C stereographic coordinates +******************************************************************** + + if (sglobal) then + do 77 jy=0,int(switchsouthg)+3 + ylat=ylat0+float(jy)*dy + do 77 ix=0,nx-1 + xlon=xlon0+float(ix)*dx + do 77 induvz=1,nuvz +77 call cc2gll(southpolemap,ylat,xlon,uu(ix,jy,induvz,n), + + vv(ix,jy,induvz,n),uupol(ix,jy,induvz,n), + + vvpol(ix,jy,induvz,n)) + + do 79 induvz=1,nuvz + +* CALCULATE FFPOL, DDPOL FOR CENTRAL GRID POINT + xlon=xlon0+float(nx/2-1)*dx + xlonr=xlon*pi/180. + ffpol=sqrt(uu(nx/2-1,0,induvz,n)**2+ + & vv(nx/2-1,0,induvz,n)**2) + if(vv(nx/2-1,0,induvz,n).lt.0.) then + if(vv(nx/2-1,0,induvz,n).gt.-0.00001) + & vv(nx/2-1,0,induvz,n)=-0.00001 + ddpol=atan(uu(nx/2-1,0,induvz,n)/ + & vv(nx/2-1,0,induvz,n))+xlonr + else + if(vv(nx/2-1,0,induvz,n).lt. 0.00001) + & vv(nx/2-1,0,induvz,n)= 0.00001 + ddpol=pi+atan(uu(nx/2-1,0,induvz,n)/ + & vv(nx/2-1,0,induvz,n))+xlonr + endif + if(ddpol.lt.0.) ddpol=2.0*pi+ddpol + if(ddpol.gt.2.0*pi) ddpol=ddpol-2.0*pi + +* CALCULATE U,V FOR 180 DEG, TRANSFORM TO POLAR STEREOGRAPHIC GRID + xlon=180.0 + xlonr=xlon*pi/180. + ylat=-90.0 + uuaux=+ffpol*sin(xlonr-ddpol) + vvaux=-ffpol*cos(xlonr-ddpol) + call cc2gll(northpolemap,ylat,xlon,uuaux,vvaux,uupolaux, + + vvpolaux) + + jy=0 + do 79 ix=0,nx-1 + uupol(ix,jy,induvz,n)=uupolaux +79 vvpol(ix,jy,induvz,n)=vvpolaux + + +* Fix: Set W at pole to the zonally averaged W of the next equator- +* ward parallel of latitude + + do 95 indwz=1,nwz + wdummy=0. + jy=1 + do 90 ix=0,nx-1 +90 wdummy=wdummy+ww(ix,jy,indwz,n) + wdummy=wdummy/float(nx) + jy=0 + do 95 ix=0,nx-1 +95 ww(ix,jy,indwz,n)=wdummy + endif + + WRITE(*,*) WFTIME(INDJ),' SEC ',WFTIME(INDJ)/3600,' HRS ', + +WFTIME(INDJ)/3600/24,' DAYS ', WFNAME(INDJ) + if(iumax.ne.nuvz) stop 'READWIND: NUVZ NOT CONSISTENT' + if(iumax.ne.nwz) stop 'READWIND: NWZ NOT CONSISTENT' + + +C Calculate potential temperature and potential vorticity on whole grid +*********************************************************************** + + call calcpv(n) + + + return +888 write(*,*) ' #### TRAJECTORY MODEL ERROR! WINDFIELD #### ' + write(*,*) ' #### ',wfname(indj),' #### ' + write(*,*) ' #### IS NOT GRIB FORMAT !!! #### ' + stop 'Execution terminated' + +999 write(*,*) ' #### TRAJECTORY MODEL ERROR! WINDFIELD #### ' + write(*,*) ' #### ',wfname(indj),' #### ' + write(*,*) ' #### CANNOT BE OPENED !!! #### ' + error=1 + + end diff --git a/projects/MissionSupport/applications/WxTraj/src/readwind_nests.f b/projects/MissionSupport/applications/WxTraj/src/readwind_nests.f new file mode 100755 index 0000000..21103ea --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/readwind_nests.f @@ -0,0 +1,312 @@ + subroutine readwind_nests(indj,n) +C i i +************************************************************************ +* * +* This routine reads the wind fields for the nested model domains. * +* It is similar to subroutine readwind, which reads the mother +* domain. * +* * +* Authors: A. Stohl, G. Wotawa * +* * +* 30 December 1998 * +* * +* Update: * +* 2011-06, implemented reading of grib2 format* +* analog to FLEXPART8.22 routines * +************************************************************************ + + use grib_api + include 'includepar' + include 'includecom' + + integer indj,i,j,k,l,n,levdiff2,ifield,iumax,iwmax + +!HSO parameters for grib_api + integer ifile + integer iret + integer igrib + integer gribVer,parCat,parNum,typSurf,valSurf,discipl + integer gotGrid + character*24 gribErrorMsg + character*20 gribFunction +!HSO end + +* VARIABLES AND ARRAYS NEEDED FOR GRIB DECODING + +C dimension of isec2 at least (22+n), where n is the number of parallels or +C meridians in a quasi-regular (reduced) Gaussian or lat/long grid + +C dimension of zsec2 at least (10+nn), where nn is the number of vertical +C coordinate parameters + + integer isec0(2),isec1(56),isec2(22+nxmaxn+nymaxn),isec3(2) + integer isec4(64),inbuff(jpack),ilen,iswap,ierr,lunit,iword + real zsec2(60+2*nuvzmax),zsec3(2),zsec4(jpunp) + real xaux,yaux,xaux0,yaux0 + real*8 xauxin,yauxin + + character*1 yoper + logical error + + data yoper/'D'/ +!HSO grib api error messages + data gribErrorMsg/'Error reading grib file'/ + data gribFunction/'readwind_nests'/ + + do 100 l=1,numbnests + levdiff2=nlev_ec-nwz+1 + iumax=0 + iwmax=0 + + ifile=0 + igrib=0 + iret=0 +* +* OPENING OF DATA FILE (GRIB CODE) +* +5 call grib_open_file(ifile,path(numpath+2*(l-1)+1) + + (1:len(numpath+2*(l-1)+1))//trim(wfnamen(l,indj)),'r') + if (iret.ne.GRIB_SUCCESS) then + goto 888 ! ERROR DETECTED + endif + + gotGrid=0 + ifield=0 +C loop fields +10 ifield=ifield+1 +* +* GET NEXT FIELDS +* + call grib_new_from_file(ifile,igrib,iret) + if (iret.eq.GRIB_END_OF_FILE) then + goto 50 ! EOF DETECTED + elseif (iret.ne.GRIB_SUCCESS) then + goto 888 ! ERROR DETECTED + endif + +! first see if we read GRIB1 or GRIB2 + call grib_get_int(igrib,'editionNumber',gribVer,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + + if (gribVer.eq.1) then ! GRIB Edition 1 +c print*,'GRiB Edition 1' +c read the grib2 identifiers + call grib_get_int(igrib,'indicatorOfParameter',isec1(6), + + iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'level',isec1(8),iret) + call grib_check(iret,gribFunction,gribErrorMsg) +c change code for etadot to code for omega + if (isec1(6).eq.77) then + isec1(6)=135 + endif + else +c print*,'GRiB Edition 2' +c read the grib2 identifiers + call grib_get_int(igrib,'discipline',discipl,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'parameterCategory',parCat,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'parameterNumber',parNum,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'typeOfFirstFixedSurface',typSurf, + + iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'level',valSurf,iret) + call grib_check(iret,gribFunction,gribErrorMsg) +! convert to grib1 identifiers + isec1(6)=-1 + isec1(7)=-1 + isec1(8)=-1 + isec1(8)=valSurf ! level + if((parCat.eq.0).and.(parNum.eq.0).and.(typSurf.eq.105))then ! T + isec1(6)=130 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.2).and.(typSurf.eq.105)) + + then ! U + isec1(6)=131 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.3).and.(typSurf.eq.105)) + + then ! V + isec1(6)=132 ! indicatorOfParameter + elseif((parCat.eq.1).and.(parNum.eq.0).and.(typSurf.eq.105)) + + then ! Q + isec1(6)=133 ! indicatorOfParameter + elseif((parCat.eq.3).and.(parNum.eq.0).and.(typSurf.eq.1))then !SP + isec1(6)=134 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.32)) then ! W, actually eta dot + isec1(6)=135 ! indicatorOfParameter + elseif((parCat.eq.3).and.(parNum.eq.0).and.(typSurf.eq.101)) + + then !SLP + isec1(6)=151 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.2).and.(typSurf.eq.103)) + + then ! 10U + isec1(6)=165 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.3).and.(typSurf.eq.103)) + + then ! 10V + isec1(6)=166 ! indicatorOfParameter + elseif((parCat.eq.0).and.(parNum.eq.0).and.(typSurf.eq.103)) + + then ! 2T + isec1(6)=167 ! indicatorOfParameter + elseif((parCat.eq.0).and.(parNum.eq.6).and.(typSurf.eq.103)) + + then ! 2D + isec1(6)=168 ! indicatorOfParameter + elseif((parCat.eq.1).and.(parNum.eq.11).and.(typSurf.eq.1)) + + then ! SD + isec1(6)=141 ! indicatorOfParameter + elseif((parCat.eq.6).and.(parNum.eq.1)) then ! CC + isec1(6)=164 ! indicatorOfParameter + elseif((parCat.eq.1).and.(parNum.eq.9)) then ! LSP + isec1(6)=142 ! indicatorOfParameter + elseif((parCat.eq.1).and.(parNum.eq.10)) then ! CP + isec1(6)=143 ! indicatorOfParameter + elseif((parCat.eq.0).and.(parNum.eq.11).and.(typSurf.eq.1)) + + then ! SHF + isec1(6)=146 ! indicatorOfParameter + elseif((parCat.eq.4).and.(parNum.eq.9).and.(typSurf.eq.1)) + + then ! SR + isec1(6)=176 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.17)) then ! EWSS + isec1(6)=180 ! indicatorOfParameter + elseif((parCat.eq.2).and.(parNum.eq.18)) then ! NSSS + isec1(6)=181 ! indicatorOfParameter + elseif((parCat.eq.3).and.(parNum.eq.4)) then ! ORO + isec1(6)=129 ! indicatorOfParameter + elseif((parCat.eq.3).and.(parNum.eq.7)) then ! SDO + isec1(6)=160 ! indicatorOfParameter + elseif((discipl.eq.2).and.(parCat.eq.0).and.(parNum.eq.0).and. + + (typSurf.eq.1)) then ! LSM + isec1(6)=172 ! indicatorOfParameter + else + print*,'***ERROR: undefined GRiB2 message found!',discipl, + + parCat,parNum,typSurf + endif + endif ! GRIB version + +!HSO get the size and data of the values array + if (isec1(6).ne.-1) then + call grib_get_real4_array(igrib,'values',zsec4,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + endif + +!HSO get the required fields from section 2 in a gribex compatible manner + if(ifield.eq.1) then + call grib_get_int(igrib,'numberOfPointsAlongAParallel', + + isec2(2),iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'numberOfPointsAlongAMeridian', + 1 isec2(3),iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_int(igrib,'numberOfVerticalCoordinateValues', + + isec2(12)) + call grib_check(iret,gribFunction,gribErrorMsg) +* CHECK GRID SPECIFICATIONS + if(isec2(2).ne.nxn(l)) stop + + 'READWIND: NX NOT CONSISTENT FOR A NESTING LEVEL' + if(isec2(3).ne.nyn(l)) stop + + 'READWIND: NY NOT CONSISTENT FOR A NESTING LEVEL' + if(isec2(12)/2-1.ne.nlev_ec) stop 'READWIND: VERTICAL DISCRET + +IZATION NOT CONSISTENT FOR A NESTING LEVEL' + endif ! ifield +!HSO get the second part of the grid dimensions only from GRiB1 messages + if ((gribVer.eq.1).and.(gotGrid.eq.0)) then + call grib_get_real8(igrib,'longitudeOfFirstGridPointInDegrees' + + ,xauxin,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + call grib_get_real8(igrib,'latitudeOfLastGridPointInDegrees', + + yauxin,iret) + call grib_check(iret,gribFunction,gribErrorMsg) + xaux=xauxin + yaux=yauxin + xaux0=xlon0n(l) + yaux0=ylat0n(l) + if(xaux.lt.0.) xaux=xaux+360. + if(yaux.lt.0.) yaux=yaux+360. + if(xaux0.lt.0.) xaux0=xaux0+360. + if(yaux0.lt.0.) yaux0=yaux0+360. + if(xaux.ne.xaux0) + + stop 'READWIND: LOWER LEFT LONGITUDE NOT CONSISTENT FOR A NES + +TING LEVEL' + if(yaux.ne.yaux0) + + stop 'READWIND: LOWER LEFT LATITUDE NOT CONSISTENT FOR A NEST + +ING LEVEL' + gotGrid=1 + endif + + do 20 j=0,nyn(l)-1 + do 20 i=0,nxn(l)-1 + k=isec1(8) + if(isec1(6).eq.130) ttn(i,j,nlev_ec-k+1,n,l)= !! TEMPERATURE + & zsec4(nxn(l)*(nyn(l)-j-1)+i+1) + if(isec1(6).eq.131) uun(i,j,nlev_ec-k+1,n,l)= !! U VELOCITY + & zsec4(nxn(l)*(nyn(l)-j-1)+i+1) + if(isec1(6).eq.132) vvn(i,j,nlev_ec-k+1,n,l)= !! V VELOCITY + & zsec4(nxn(l)*(nyn(l)-j-1)+i+1) + if(isec1(6).eq.133) then + qqn(i,j,nlev_ec-k+1,n,l)= !! HUMIDITY + & zsec4(nxn(l)*(nyn(l)-j-1)+i+1) + if (qqn(i,j,nlev_ec-k+1,n,l).lt.0.) + & qqn(i,j,nlev_ec-k+1,n,l)=0. +c this is necessary because the gridded data may contain +c spurious negative values + endif + if(isec1(6).eq.134) psn(i,j,1,n,l)= !! SURF. PRESS. + & zsec4(nxn(l)*(nyn(l)-j-1)+i+1) + if(isec1(6).eq.135) wwn(i,j,nlev_ec-k+1,n,l)= !! W VELOCITY + & zsec4(nxn(l)*(nyn(l)-j-1)+i+1) + if(isec1(6).eq.129) oron(i,j,l)= !! ECMWF OROGRAPHY + & zsec4(nxn(l)*(nyn(l)-j-1)+i+1)/ga + if(isec1(6).eq.131) iumax=max(iumax,nlev_ec-k+1) + if(isec1(6).eq.135) iwmax=max(iwmax,nlev_ec-k+1) +20 continue + + call grib_release(igrib) + goto 10 !! READ NEXT LEVEL OR PARAMETER +* +* CLOSING OF INPUT DATA FILE +* +50 call grib_close_file(ifile) +* error message if no fields found with correct first longitude in it + if (gotGrid.eq.0) then + print*,'***ERROR: input file needs to contain GRiB1 formatted' + + //'messages' + stop + endif + + if(levdiff2.eq.0) then + iwmax=nlev_ec+1 + do 60 j=0,nyn(l)-1 + do 60 i=0,nxn(l)-1 +60 wwn(i,j,nlev_ec+1,n,l)=0. + endif + + + if(iumax.ne.nuvz) stop + + 'READWIND: NUVZ NOT CONSISTENT FOR A NESTING LEVEL' + if(iwmax.ne.nwz) stop + + 'READWIND: NWZ NOT CONSISTENT FOR A NESTING LEVEL' + + + +C Calculate potential temperature and potential vorticity on whole grid +*********************************************************************** + call calcpv_nests(l,n) + +100 continue ! END OF NESTS LOOP + + return +888 write(*,*) ' #### TRAJECTORY MODEL ERROR! WINDFIELD #### ' + write(*,*) ' #### ',wfname(indj),' #### ' + write(*,*) ' #### IS NOT GRIB FORMAT !!! #### ' + stop 'Execution terminated' + + +999 write(*,*) + write(*,*) ' ###########################################'// + & '###### ' + write(*,*) ' TRAJECTORY MODEL SUBROUTINE GRIDCHECK:' + write(*,*) ' CAN NOT OPEN INPUT DATA FILE '//wfnamen(l,indj) + write(*,*) ' FOR NESTING LEVEL ',l + write(*,*) ' ###########################################'// + & '###### ' + error=.true. + + end diff --git a/projects/MissionSupport/applications/WxTraj/src/readwind_nests_gfs.f b/projects/MissionSupport/applications/WxTraj/src/readwind_nests_gfs.f new file mode 100644 index 0000000..ce50fb1 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/readwind_nests_gfs.f @@ -0,0 +1,22 @@ + subroutine readwind_nests(indj,n) +C i i +******************************************************************************** +* * +* This routine reads the wind fields for the nested model domains. * +* It is similar to subroutine readwind, which reads the mother domain. * +* * +* Authors: A. Stohl, G. Wotawa * +* * +* 30 December 1998 * +******************************************************************************** + + + include 'includepar' + include 'includecom' + + integer indj, n + + IF(NUMBNESTS.NE.0) + & STOP 'SORRY: FLEXTRA (NCEP) CAN NOT BE OPERATED WITH NESTING' + + end diff --git a/projects/MissionSupport/applications/WxTraj/src/run_flextra_run_ops.csh b/projects/MissionSupport/applications/WxTraj/src/run_flextra_run_ops.csh new file mode 100755 index 0000000..1b3cbfc --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/run_flextra_run_ops.csh @@ -0,0 +1,35 @@ +#!/bin/csh + + +source ./g5_modules + +#set YEAR_TABLE = ( 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 ) +#set MONTH_TABLE = ( 01 02 03 04 05 06 07 08 09 10 11 12 ) + +set YEAR_TABLE = ( 2019 ) +set MONTH_TABLE = ( 02 ) + +#set DAY_TABLE = ( 01 02 03 04 05 ) +#set DAY_TABLE = ( 06 07 08 09 10 ) +#set DAY_TABLE = ( 11 12 13 14 15 ) +#set DAY_TABLE = ( 16 17 18 19 20 ) +#set DAY_TABLE = ( 21 22 23 24 25 ) +#set DAY_TABLE = ( 26 27 28 ) +#set DAY_TABLE = ( 26 27 28 29 30 31) +set DAY_TABLE = ( 19 22 28 ) + +set ALT_TABLE = ( 100 ) +#set ALT_TABLE = ( 1000 ) + +foreach YYYY ( `echo $YEAR_TABLE` ) + foreach MM ( `echo $MONTH_TABLE` ) + foreach DD ( `echo $DAY_TABLE` ) + set ISODATE = ${YYYY}-${MM}-${DD}T00:00:00 + foreach AA ( `echo $ALT_TABLE` ) + echo 'nohup python3 -u ./flextra_run_ops.py --alts='${AA}' --days=5 '${ISODATE}' start_points.csv >& nohup.'${ISODATE}_${AA}'.log' + nohup python3 -u ./flextra_run_ops.py --days=5 ${ISODATE} start_points.csv >& nohup.${ISODATE}_${AA}.log & + end + end + end +end + diff --git a/projects/MissionSupport/applications/WxTraj/src/setup_env b/projects/MissionSupport/applications/WxTraj/src/setup_env new file mode 100755 index 0000000..0652a47 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/setup_env @@ -0,0 +1,17 @@ +#!/usr/bin/sh +#======================================================================= +# name - setup_env.sh +# purpose - +# This script can be "sourced" from the c shell to set environment + + +# Set Python PATH +#----------------- +setenv PYTHONPATH /discover/nobackup/pcastell/workspace/simplekml:/home/dao_ops/gmao_packages/Workflow/Shared:/home/dao_ops/gmao_packages/WxTraj/src + +setenv PATH "${PATH}:/home/dao_ops/gmao_packages/WxTraj/bin" + +# source AeroApps modules +source ./g5_modules + + diff --git a/projects/MissionSupport/applications/WxTraj/src/skplin.f b/projects/MissionSupport/applications/WxTraj/src/skplin.f new file mode 100644 index 0000000..18629f7 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/skplin.f @@ -0,0 +1,26 @@ + subroutine skplin(nlines,iunit) +C i i +******************************************************************************** +* * +* This routine reads nlines from unit iunit and discards them +* * +* Authors: Petra Seibert +* * +* 31 Dec 1998 +* * +******************************************************************************** +* * +* Variables: +* +* iunit unit number from which lines are to be skipped +* nlines number of lines to be skipped +* +********************************************************************************* + + integer i,iunit, nlines + + do 10 i=1,nlines +10 read(iunit,*) + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/start_points.csv b/projects/MissionSupport/applications/WxTraj/src/start_points.csv new file mode 100644 index 0000000..f5e67b9 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/start_points.csv @@ -0,0 +1,2 @@ +name,lon,lat +Seoul,126.99,37.55 diff --git a/projects/MissionSupport/applications/WxTraj/src/start_points_all.csv b/projects/MissionSupport/applications/WxTraj/src/start_points_all.csv new file mode 100644 index 0000000..c5d6591 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/start_points_all.csv @@ -0,0 +1,5 @@ +name,lon,lat +Seoul,126.99,37.55 +Manila,120.98,14.599 +Kuala_Lampur,101.6841,3.1319 +Bangkok,100.5018,13.7563 diff --git a/projects/MissionSupport/applications/WxTraj/src/subtractoro.f b/projects/MissionSupport/applications/WxTraj/src/subtractoro.f new file mode 100644 index 0000000..38d5406 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/subtractoro.f @@ -0,0 +1,80 @@ + subroutine subtractoro() +******************************************************************************** +* * +* This routine subtracts the height of the orography from the height above * +* sea level to give height above the model ground. * +* * +* Author: A. Stohl * +* * +* 30 April 1994 * +* * +******************************************************************************** +* * +* Variables: * +* dist distance of starting point to grid points * +* maxnests maximum number of nesting levels * +* ngrid nesting level to be used * +* numpoint actual number of starting points * +* oro(0:nxmax-1,0:nymax-1) orography (mother domain) * +* oron(0:nxmaxn-1,0:nymaxn-1,maxnests) orography (nested grids) * +* orohelp interpolated orography * +* sweight weight for linear interpolation * +* xpoint,ypoint,zpoint(maxpoint) x,y,z coordinates of starting points * +* * +* Constants: * +* maxpoint maximum number of starting points * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer j,k,ngrid + real orohelp,xtn,ytn + + + do 10 k=1,numpoint ! loop over all starting points + +C Only subtract for those trajectories with z coordinates given in masl +*********************************************************************** + + if (kindz(k).eq.1) then + +C Determine which nesting level to be used +****************************************** + + ngrid=0 + do 12 j=numbnests,1,-1 + if ((xpoint(k).gt.xln(j)).and.(xpoint(k).lt.xrn(j)).and. + + (ypoint(k).gt.yln(j)).and.(ypoint(k).lt.yrn(j))) then + ngrid=j + goto 13 + endif +12 continue +13 continue + + +C Interpolate orography to position of starting point +***************************************************** + + if (ngrid.eq.0) then + call orolininterpol(oro,nxmax,nymax,nx,ny,xpoint(k), + + ypoint(k),orohelp) + else + xtn=(xpoint(k)-xln(ngrid))*xresoln(ngrid) + ytn=(ypoint(k)-yln(ngrid))*yresoln(ngrid) + call orolininterpoln(oron,maxnests,nxmaxn,nymaxn,ngrid, + + nxn,nyn,xtn,ytn,orohelp) + endif + + +C Subtract orography from height, but don't accept negative heights +******************************************************************* + + zpoint(k)=zpoint(k)-orohelp + zpoint(k)=max(0.,zpoint(k)) + endif +10 continue + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/timemanager.f b/projects/MissionSupport/applications/WxTraj/src/timemanager.f new file mode 100644 index 0000000..b4b18c3 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/timemanager.f @@ -0,0 +1,331 @@ + subroutine timemanager() + +******************************************************************************** +* * +* Handles the computation of trajectories, i.e. determines which * +* trajectories have to be computed at what time. * +* * +* Pointers (field numb(maxtra) are used to keep track of the trajectories. * +* The pointers are kept sorted in the order of the next necessary time step, * +* i.e., numb(1) points to the first trajectory that needs a time step. * +* After doing the time step, the pointers are resorted, e.g., numb(2) * +* changes to numb(1), numb(3) to numb(2), etc. Numb(1) is inserted between * +* those two pointers, which need a time step before and after numb(1). * +* * +* * +* Author: A. Stohl * +* * +* 6 February 1994 * +* * +******************************************************************************** +* * +* Variables: * +* ideltas [s] modelling period * +* init .true. for first time step of trajectory, false .else. * +* interv [s] interval between two trajectory starting times * +* itime [s] actual temporal position of calculation * +* ittra(maxtra,maxtime) temporal positions of trajectories * +* kind(maxtra) type of trajectory (e.g. isobaric, 3-d, model layers,..) * +* kindz(maxtra) unit of height coordinate (1:masl, 2:magl, 3:hPa) * +* ldirect Temporal direction of trajectories (-1=backward,1=forward)* +* lentra temporal length of one trajectory * +* levmem(maxtra) [K] height of isentropic trajectories * +* minstep minimum time step (to prevent exceedance of dimensions) * +* nextflight [s] next time, initialization of FLIGHT trajectories is due * +* npoint(maxtra) index, which starting point the trajectory has * +* nstop = greater than 0 when trajectory calculation is finished * +* ntstep [s] time step of integration scheme * +* nttra(maxtra) number of time steps which are already computed * +* numb(maxtra) pointer, which allows the identification of trajectories * +* number help variable * +* numtra actual number of trajectories in memory * +* xpoint(maxpoint), ypoint(maxpoint),zpoint(maxpoint) = * +* xpoint(maxpoint), ypoint(maxpoint),zpoint(maxpoint) = * +* starting positions of trajectories * +* xtra(maxtra,maxtime), ytra(maxtra,maxtime), ztra(maxtra,maxtime) = * +* spatial positions of trajectories * +* * +* Constants: * +* maxtra maximum number of trajectories * +* maxtime maximum number of time steps * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer i,j,itime,ntstep,nstop(maxtra),lhelp,minstep,numb(maxtra) + integer number,idummy,ldat,ltim,ninterv1,ninterv2,ninterv3 + real levmem(maxtra),gasdev + logical init,unc,error + double precision juldate + save idummy + + data idummy/-7/ + + + do 5 i=1,maxtra +5 nttra(i)=0 + numtra=0 ! first: no trajectories + + +C Loop over the whole modelling period in time steps of seconds +*************************************************************** + + do 10 itime=0,ideltas,ldirect + if (mod(itime,3600).eq.0) write(*,*) itime,' SECONDS SIMULATED' + + +C Check whether some trajectories have already finished. If so, call output +C and make memory available for new trajectory. +*************************************************************************** + + if (numtra.gt.0) then + + i=1 +33 continue + number=numb(i) + + if (abs(ittra(number,nttra(number))).gt.abs(itime)) goto 37 + if ((nstop(number).gt.0).and. ! trajectory terminated + + (ittra(number,nttra(number)).eq.itime)) then ! output time +c if (modecet.ne.2) then ! don't make output for CETs + call trajout(number,nstop(number)) ! output of trajectory + nttra(number)=0 ! reinitialize + do 35 j=i,numtra-1 ! resort the pointers +35 numb(j)=numb(j+1) +c endif + numtra=numtra-1 ! forget one trajectory + i=i-1 + endif + if (i.lt.numtra) then + i=i+1 + goto 33 + else + goto 37 + endif + +37 continue + endif + + + +C Check whether new trajectories have to be started +C 1nd if: check if time within modeling period +C 2nd if: check if the interval interv has passed by (for NORMAL +C trajectories) or if a FLIGHT traj. is due to be started +***************************************************************** + + if (abs(itime).le.abs(ideltas-lentra)) then + if (modecet.eq.3) then ! FLIGHT mode +41 continue + if ((nextflight.eq.itime).and.(numtra.lt.maxtra)) then + do 43 i=numtra,1,-1 ! shift pointers +43 numb(i+1)=numb(i) + numtra=numtra+1 ! increase number of traj. + + j=1 ! initialize FLIGHT traj. +42 continue + if (nttra(j).eq.0) then + numb(1)=j + npoint(j)=1 + levmem(j)=zpoint(1) + xtra(j,1)=xpoint(1) + ytra(j,1)=ypoint(1) + ztra(j,1)=zpoint(1) + ittra(j,1)=itime + nttra(j)=1 + kind(j)=kind(1) + kindz(j)=kindz(1) + else + j=j+1 + if (j.gt.maxtra) stop 'timemanager: too many trajectorie + +s. Increase parameter maxtra and re-start' + goto 42 + endif + +C Read the next FLIGHT traj. +**************************** + + read(unitpoin,*,err=15,end=15) ldat,ltim + read(unitpoin,*,err=15,end=15) xpoint(1) + read(unitpoin,*,err=15,end=15) ypoint(1) + read(unitpoin,*,err=15,end=15) zpoint(1) + read(unitpoin,*,err=15,end=15) + nextflight=nint(sngl(juldate(ldat,ltim)-bdate)*86400.) + call coordtrafo(error) + if (error) stop + call subtractoro() + if (kindz(1).eq.3) zpoint(1)=zpoint(1)*100. + + goto 41 + endif + + else if (mod(itime,interv).eq.0) then !non-FLIGHT mode, initialization due + do 40 i=numtra,1,-1 ! shift pointers +40 numb(i+numpoint)=numb(i) + numtra=numtra+numpoint ! increase number of traj. + + +C Initialize new trajectories +***************************** + + j=1 + do 50 i=1,numpoint ! search for available memory +55 continue + if (nttra(j).eq.0) then + numb(i)=j + npoint(j)=i + levmem(j)=zpoint(i) + xtra(j,1)=xpoint(i) + ytra(j,1)=ypoint(i) + ztra(j,1)=zpoint(i) + ittra(j,1)=itime + nttra(j)=1 + kind(j)=kind(i) + kindz(j)=kindz(i) + randerroru(j)=gasdev(idummy)*epsu + randerrorv(j)=gasdev(idummy)*epsv + randerrorw(j)=gasdev(idummy)*epsw + else + j=j+1 + goto 55 + endif +50 continue + + endif + endif + + + +C Check whether a time step of the first trajectory is necessary +**************************************************************** + +15 continue + if (numtra.gt.0) then + + number=numb(1) + + if (ittra(number,nttra(number)).eq.itime) then + +C minstep is the minimum possible time step. It is necessary to +C guarantee that the sum of all time steps along the trajectory +C is smaller than maxtime (otherwise exceedance of dimensions). +*************************************************************** + + lhelp=itime-ittra(number,1) ! "age" of trajectory + minstep=abs(lentra-lhelp)/(maxtime-nttra(number))+1 + + +C Mark first time step of trajectory with variable init=.TRUE. +************************************************************** + + if (nttra(number).eq.1) then + init=.true. + else + init=.false. + endif + + +C Determine whether current trajectory is an uncertainty trajectory +******************************************************************* + + if (compoint(npoint(number))(41:41).eq.'U') then + unc=.TRUE. + else + unc=.FALSE. + endif + + +C Calculate the next step of the trajectory +******************************************* + + call petters(minstep,lhelp,itime,xtra(number,nttra(number)), + + ytra(number,nttra(number)),ztra(number,nttra(number)), + + ptra(number,nttra(number)),htra(number,nttra(number)), + + qqtra(number,nttra(number)),pvtra(number,nttra(number)), + + thtra(number,nttra(number)), + + xtra(number,nttra(number)+1),ytra(number,nttra(number)+1), + + ztra(number,nttra(number)+1),ptra(number,nttra(number)+1), + + htra(number,nttra(number)+1),qqtra(number,nttra(number)+1), + + pvtra(number,nttra(number)+1),thtra(number,nttra(number)+1), + + ntstep,nstop(number), + + levmem(number),init,kind(number),kindz(number),unc, + + randerroru(number),randerrorv(number),randerrorw(number)) + + ittra(number,nttra(number)+1)=ittra(number,nttra(number))+ + + ntstep + + nttra(number)=nttra(number)+1 ! one more time step + + +C If output is only due with constant time steps, disregard all points +C not needed for interpolation: delete previous time step +********************************************************************** + + if ((inter.eq.1).and.(nttra(number).ge.3)) then + ninterv1=abs(ittra(number,nttra(number))-ittra(number,1))/ + + interstep + ninterv2=abs(ittra(number,nttra(number)-1)-ittra(number,1))/ + + interstep + ninterv3=abs(ittra(number,nttra(number)-2)-ittra(number,1))/ + + interstep + if ((ninterv1.eq.ninterv2).and.(ninterv1.eq.ninterv3)) then + ittra(number,nttra(number)-1)=ittra(number,nttra(number)) + xtra(number,nttra(number)-1)=xtra(number,nttra(number)) + ytra(number,nttra(number)-1)=ytra(number,nttra(number)) + ztra(number,nttra(number)-1)=ztra(number,nttra(number)) + ptra(number,nttra(number)-1)=ptra(number,nttra(number)) + htra(number,nttra(number)-1)=htra(number,nttra(number)) + qqtra(number,nttra(number)-1)=qqtra(number,nttra(number)) + pvtra(number,nttra(number)-1)=pvtra(number,nttra(number)) + thtra(number,nttra(number)-1)=thtra(number,nttra(number)) + nttra(number)=nttra(number)-1 + endif + endif + +C If field dimension is reached, trajectory has to be terminated +**************************************************************** + + if (nttra(number).eq.maxtime) nstop(number)=5 + + +C If trajectory has ended, give the next time step the time of normal +C length of trajectory and wait for output of trajectory +********************************************************************* + + if (nstop(number).gt.0) then + ittra(number,nttra(number))=ittra(number,1)+lentra + endif + + +C Shift the trajectories in a way that the current trajectory can be +C inserted at the right position. +C The position is determined by the time, when the next integration step +C is necessary. +************************************************************************* + + do 20 i=1,numtra-1 + if (abs(ittra(numb(i+1),nttra(numb(i+1)))).lt. + + abs(ittra(number,nttra(number)))) then + numb(i)=numb(i+1) + else + numb(i)=number ! insert the pointer + goto 15 ! leave loop + endif +20 continue + +C The next statement can only be reached, when the current trajectory is the +C last one that needs an integration step. +**************************************************************************** + + numb(numtra)=number + goto 15 ! check next trajectory + endif + endif + + +10 continue + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/trajinterpol.f b/projects/MissionSupport/applications/WxTraj/src/trajinterpol.f new file mode 100644 index 0000000..29afac7 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/trajinterpol.f @@ -0,0 +1,115 @@ + subroutine trajinterpol(numb,ldimi,orotra,orotraint) +C i o +******************************************************************************** +* * +* This routine interpolates the trajectories to a constant time step. * +* * +* Author: A. Stohl * +* * +* 11 February 1994 * +* * +* 27 February 1999 Correction by Wuyin Lin to the cyclic * +* boundary conditions * +* * +******************************************************************************** +* * +* Variables: * +* numb number of trajectory to be interpolated * +* * +* * +* Constants: * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer numb,i,j,k,ldimi + real orotra(maxtime),orotraint(maxitime),xtmp1,xtmp2 + + ldimi=1 + do 10 i=1,ldim +10 ittraint(i)=ittra(numb,1)+(i-1)*ldirect*interstep + + xtraint(1)=xtra(numb,1) + ytraint(1)=ytra(numb,1) + ztraint(1)=ztra(numb,1) + ptraint(1)=ptra(numb,1) + htraint(1)=htra(numb,1) + qqtraint(1)=qqtra(numb,1) + pvtraint(1)=pvtra(numb,1) + thtraint(1)=thtra(numb,1) + orotraint(1)=orotra(1) + + k=2 + do 20 i=2,ldim + do 30 j=k,nttra(numb) + if (abs(ittra(numb,j)).ge.abs(ittraint(i)))then + +C Linear interpolation +C For x coordinate, special treatment when using cyclic boundary +C conditions to keep values below 360 deg +**************************************************************** + + ldimi=i + xtmp1=xtra(numb,j-1) + xtmp2=xtra(numb,j) + if (xglobal) then + if (abs(xtra(numb,j-1)-xtra(numb,j)).gt.180.) then + if (xtra(numb,j-1).lt.xtra(numb,j)) then + xtmp1=xtra(numb,j-1)+360. + else + xtmp2=xtra(numb,j)+360. + endif + endif + endif + + xtraint(i)=(float(abs(ittra(numb,j)-ittraint(i)))* + + xtmp1+float(abs(ittra(numb,j-1)-ittraint(i)))* + + xtmp2)/float(abs(ittra(numb,j)-ittra(numb,j-1))) + + if (xtraint(i).gt.360.) xtraint(i)=xtraint(i)-360. + + + ytraint(i)=(float(abs(ittra(numb,j)-ittraint(i)))* + + ytra(numb,j-1)+float(abs(ittra(numb,j-1)-ittraint(i)))* + + ytra(numb,j))/float(abs(ittra(numb,j)-ittra(numb,j-1))) + + ztraint(i)=(float(abs(ittra(numb,j)-ittraint(i)))* + + ztra(numb,j-1)+float(abs(ittra(numb,j-1)-ittraint(i)))* + + ztra(numb,j))/float(abs(ittra(numb,j)-ittra(numb,j-1))) + + ptraint(i)=(float(abs(ittra(numb,j)-ittraint(i)))* + + ptra(numb,j-1)+float(abs(ittra(numb,j-1)-ittraint(i)))* + + ptra(numb,j))/float(abs(ittra(numb,j)-ittra(numb,j-1))) + + htraint(i)=(float(abs(ittra(numb,j)-ittraint(i)))* + + htra(numb,j-1)+float(abs(ittra(numb,j-1)-ittraint(i)))* + + htra(numb,j))/float(abs(ittra(numb,j)-ittra(numb,j-1))) + + qqtraint(i)=(float(abs(ittra(numb,j)-ittraint(i)))* + + qqtra(numb,j-1)+float(abs(ittra(numb,j-1)-ittraint(i)))* + + qqtra(numb,j))/float(abs(ittra(numb,j)-ittra(numb,j-1))) + + pvtraint(i)=(float(abs(ittra(numb,j)-ittraint(i)))* + + pvtra(numb,j-1)+float(abs(ittra(numb,j-1)-ittraint(i)))* + + pvtra(numb,j))/float(abs(ittra(numb,j)-ittra(numb,j-1))) + + thtraint(i)=(float(abs(ittra(numb,j)-ittraint(i)))* + + thtra(numb,j-1)+float(abs(ittra(numb,j-1)-ittraint(i)))* + + thtra(numb,j))/float(abs(ittra(numb,j)-ittra(numb,j-1))) + + orotraint(i)=(float(abs(ittra(numb,j)-ittraint(i)))* + + orotra(j-1)+float(abs(ittra(numb,j-1)-ittraint(i)))* + + orotra(j))/float(abs(ittra(numb,j)-ittra(numb,j-1))) + + k=j + + goto 20 + endif +30 continue + +20 continue + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/trajout.f b/projects/MissionSupport/applications/WxTraj/src/trajout.f new file mode 100644 index 0000000..ea4229f --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/trajout.f @@ -0,0 +1,196 @@ + subroutine trajout(numb,nstop) +C i i +******************************************************************************** +* * +* This routine writes the output files. * +* * +* Authors: A. Stohl * +* * +* 2 February 1994 * +* * +******************************************************************************** +* * +* Variables: * +* bdate beginning date of modelling period * +* * +* idate,itime date and time,help variables * +* inter output with flexible (0,2) or constant time step (1,2) * +* ldim number of interpolated time steps * +* maxnests maximum number of nesting levels * +* ngrid nesting level to be used * +* npoint(maxtra) number of starting point for each trajectory * +* nstop error code * +* nttra(maxtra) number of time steps along the trajectory * +* numb number of trajectory to be written to output file * +* juldat Julian starting date of trajectory * +* xtra,ytra,ztra(maxtra,maxtime) grid coordinates of trajectory (flexible) * +* xtraint,ytraint,ztraint(maxitime) grid coordinates of trajectory (flexible) * +* * +* Constants: * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer nstop,numb,idate,itime,i,j,ldimi,ngrid + real orotra(maxtime),orotraint(maxitime),xtn,ytn + double precision juldat + + +C If serious error has occurred, reduce the number of time steps by 1. +C This has to be done to exclude unrealistic values. +********************************************************************** + + if (nstop.gt.1) nttra(numb)=nttra(numb)-1 + + +C Add the height of the orography to give height above sea level +**************************************************************** + + do 10 i=1,nttra(numb) + +C Determine which nesting level to be used +****************************************** + + ngrid=0 + do 12 j=numbnests,1,-1 + if ((xtra(numb,i).gt.xln(j)).and.(xtra(numb,i).lt.xrn(j)).and. + + (ytra(numb,i).gt.yln(j)).and.(ytra(numb,i).lt.yrn(j))) then + ngrid=j + goto 13 + endif +12 continue +13 continue + + if (ngrid.eq.0) then + call orolininterpol(oro,nxmax,nymax,nx,ny,xtra(numb,i), + + ytra(numb,i),orotra(i)) + else + xtn=(xtra(numb,i)-xln(ngrid))*xresoln(ngrid) + ytn=(ytra(numb,i)-yln(ngrid))*yresoln(ngrid) + call orolininterpoln(oron,maxnests,nxmaxn,nymaxn,ngrid, + + nxn,nyn,xtn,ytn,orotra(i)) + endif +10 htra(numb,i)=htra(numb,i)+orotra(i) + + +C Conversion of grid coordinates to geografical coordinates +*********************************************************** + + do 30 i=1,nttra(numb) + call lamphi_ecmwf(xtra(numb,i),ytra(numb,i),xtra(numb,i), + + ytra(numb,i)) +30 ptra(numb,i)=ptra(numb,i)/100. ! conversion Pa -> hPa + + +C If trajectory information is wanted with constant time step, interpolate the +C trajectory to constant time step +****************************************************************************** + + if (inter.ge.1) then + call trajinterpol(numb,ldimi,orotra,orotraint) + endif + + +C Calculate starting date and time of trajectory +************************************************ + + juldat=bdate+dble(float(ittra(numb,1)))/86400. + call caldate(juldat,idate,itime) + + +C Output of normal (non-CET) trajectories +***************************************** + + if (modecet.eq.1) then + + +C Output of trajectories with flexible time step +************************************************ + + if ((inter.eq.0).or.(inter.eq.2)) then + if (nttra(numb).eq.1) nttra(numb)=0 + write(unittraj+npoint(numb),'(a6,i8,a9,i8,a16,i1,a16,i5)') + + 'DATE: ',idate,' TIME:',itime,' STOP INDEX: ',nstop, + + ' # OF POINTS:',nttra(numb) + write(unittraj+npoint(numb),67) ' SECS', + + ' LONGIT',' LATIT',' ETA',' PRESS',' Z',' Z-ORO', + +' PV',' THETA',' Q' + do 40 i=1,nttra(numb) +40 write(unittraj+npoint(numb),66) + + ittra(numb,i)-ittra(numb,1),xtra(numb,i),ytra(numb,i), + + ztra(numb,i)*zdirect,ptra(numb,i),htra(numb,i), + + htra(numb,i)-orotra(i),pvtra(numb,i),thtra(numb,i), + + qqtra(numb,i) + endif + + +C Output of trajectories with constant time step +************************************************ + + if (inter.ge.1) then + if (ldimi.eq.1) ldimi=0 + write(unittraji+npoint(numb),'(a6,i8,a9,i8,a16,i1,a16,i5)') + + 'DATE: ',idate,' TIME:',itime,' STOP INDEX: ',nstop, + + ' # OF POINTS:',ldimi + write(unittraji+npoint(numb),67) ' SECS', + + ' LONGIT',' LATIT',' ETA',' PRESS',' Z',' Z-ORO', + +' PV',' THETA',' Q' + do 50 i=1,ldimi +50 write(unittraji+npoint(numb),66) + + ittraint(i)-ittraint(1),xtraint(i),ytraint(i),ztraint(i)* + + zdirect,ptraint(i),htraint(i),htraint(i)-orotraint(i), + + pvtraint(i),thtraint(i),qqtraint(i) + endif + +C Output of CET or FLIGHT trajectories +************************************** + + else + +C Output of trajectories with flexible time step +************************************************ + + if ((inter.eq.0).or.(inter.eq.2)) then + if (nttra(numb).eq.1) nttra(numb)=0 + write(unittraj,'(a6,i8,a9,i8,a16,i1,a16,i5)') + + 'DATE: ',idate,' TIME:',itime,' STOP INDEX: ',nstop, + + ' # OF POINTS:',nttra(numb) + write(unittraj,67) ' SECS', + + ' LONGIT',' LATIT',' ETA',' PRESS',' Z',' Z-ORO', + +' PV',' THETA',' Q' + do 140 i=1,nttra(numb) +140 write(unittraj,66) + + ittra(numb,i)-ittra(numb,1),xtra(numb,i),ytra(numb,i), + + ztra(numb,i)*zdirect,ptra(numb,i),htra(numb,i), + + htra(numb,i)-orotra(i),pvtra(numb,i),thtra(numb,i), + + qqtra(numb,i) + endif + + +C Output of trajectories with constant time step +************************************************ + + if (inter.ge.1) then + if (ldimi.eq.1) ldimi=0 + write(unittraji,'(a6,i8,a9,i8,a16,i1,a16,i5)') + + 'DATE: ',idate,' TIME:',itime,' STOP INDEX: ',nstop, + + ' # OF POINTS:',ldimi + write(unittraji,67) ' SECS', + + ' LONGIT',' LATIT',' ETA',' PRESS',' Z',' Z-ORO', + +' PV',' THETA',' Q' + do 150 i=1,ldimi +150 write(unittraji,66) + + ittraint(i)-ittraint(1),xtraint(i),ytraint(i),ztraint(i)* + + zdirect,ptraint(i),htraint(i),htraint(i)-orotraint(i), + + pvtraint(i),thtraint(i),qqtraint(i) + endif + + endif + +66 format(i9,2f9.4,f7.4,f7.1,2f8.1,f8.3,f6.1,e9.2) +67 format(a9,a9,a9,a7,a7,a8,a8,a8,a6,a9) + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/uncertcoor.f b/projects/MissionSupport/applications/WxTraj/src/uncertcoor.f new file mode 100644 index 0000000..26a543d --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/uncertcoor.f @@ -0,0 +1,59 @@ + subroutine uncertcoor() +******************************************************************************** +* * +* This routine calculates the starting positions of the uncertainty traject. * +* * +* Authors: A. Stohl * +* * +* 16 February 1994 * +* * +******************************************************************************** +* * +* Variables: * +* compoint(maxpoint) comment for each starting point * +* numbunc number of uncertainty trajectories * +* numpoint actual number of starting points * +* phi angle, help variable * +* xpoint,ypoint,zpoint(maxpoint) x,y,z coordinates of starting points * +* * +* Constants: * +* maxpoint maximum number of starting points * +* pi PI=3.14 * +* * +******************************************************************************** + + include 'includepar' + include 'includecom' + + integer i,j,k + character*4 ii + real phi + + + do 20 i=1,numbunc + phi=float(i)*2.*pi/float(numbunc) + do 20 j=1,numpoint + k=numpoint*i+j + write(ii,'(i4.4)') i + compoint(k)=compoint(j)(1:40)//'U'//ii + xpoint(k)=xpoint(j)+distunc*sin(phi) + ypoint(k)=ypoint(j)+distunc*cos(phi) + zpoint(k)=zpoint(j) + kind(k)=kind(j) + kindz(k)=kindz(j) + + +C Check if starting positions are inside grid +********************************************* + + if (xpoint(k).gt.float(nx-1)) xpoint(k)=float(nx-1)-.00001 + if (ypoint(k).gt.float(ny-1)) ypoint(k)=float(ny-1)-.00001 + if (xpoint(k).lt.0.) xpoint(k)=.00001 + if (ypoint(k).lt.0.) ypoint(k)=.00001 + +20 continue + + numpoint=numpoint*(1+numbunc) + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/utransform.f b/projects/MissionSupport/applications/WxTraj/src/utransform.f new file mode 100644 index 0000000..7e43661 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/utransform.f @@ -0,0 +1,45 @@ + subroutine utransform(uint,yt,dxdt) +*********************************************************************** +* * +* TRAJECTORY MODEL SUBROUTINE UTRANSFORM * +* * +*********************************************************************** +* * +* AUTHOR: G. WOTAWA * +* DATE: 1994-02-14 * +* LAST UPDATE: 1996-03-21 A. Stohl * +* Runtime optimization * +* * +* * +*********************************************************************** +* * +* DESCRIPTION: This subroutine transforms the interpolated zonal * +* wind [m/s] to [grid units/time unit] * +* xthelp help variable computed in readgrid * +* * +*********************************************************************** +* * +* INPUT: * +* * +* uint interpolated zonal wind component [m/s] * +* * +*********************************************************************** +* * +* OUTPUT: * +* * +* dxdt total differential in x direction [grid units/time unit] * +* * +*********************************************************************** +* + include 'includepar' + include 'includecom' + + real uint,yt,dxdt,fact,pih + parameter(pih=pi/180.) + + fact=max(cos((yt*dy+ylat0)*pih),1.e-4) + + dxdt=uint/fact*xthelp + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/vtransform.f b/projects/MissionSupport/applications/WxTraj/src/vtransform.f new file mode 100644 index 0000000..c7f462f --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/vtransform.f @@ -0,0 +1,41 @@ + subroutine vtransform(vint,dydt) +*********************************************************************** +* * +* TRAJECTORY MODEL SUBROUTINE VTRANSFORM * +* * +*********************************************************************** +* * +* AUTHOR: G. WOTAWA * +* DATE: 1994-02-14 * +* LAST UPDATE: 1996-03-21 * +* Runtime optimization * +* * +*********************************************************************** +* * +* DESCRIPTION: This subroutine transforms the interpolated meridional * +* wind [m/s] to [grid units/time unit] * +* ythelp help variable computed in readgrid * +* * +*********************************************************************** +* * +* INPUT: * +* * +* vint interpolated meridional wind component [m/s] * +* * +*********************************************************************** +* * +* OUTPUT: * +* * +* dydt total differential in y direction [grid units/time unit] * +* * +*********************************************************************** +* + include 'includepar' + include 'includecom' + + real vint,dydt + + dydt=vint*ythelp + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/wtransform.f b/projects/MissionSupport/applications/WxTraj/src/wtransform.f new file mode 100644 index 0000000..4bab4ac --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/wtransform.f @@ -0,0 +1,106 @@ + subroutine wtransform(wint,psint,zt,indwz,dzdt) +*********************************************************************** +* * +* TRAJECTORY MODEL SUBROUTINE WTRANSFORM * +* * +*********************************************************************** +* * +* AUTHOR: G. WOTAWA * +* DATE: 1994-02-14 * +* LAST UPDATE: 1994-05-04 * +* * +*********************************************************************** +* * +* DESCRIPTION: This subroutine transforms the interpolated vertical * +* wind from Pa/s to eta coordinte (vertical wind velocity is * +* given as d(eta)/dt * dp/d(eta) [Pa/s]) * +* * +*********************************************************************** +* * +* INPUT: * +* * +* wint interpolated vertical wind component [Pa/s] * +* psint interpolated surface pressure [Pa] * +* zt vertical position of coordinate [eta] * +* indwz index which shows between which model layers trajectory is * +* situated * +* * +*********************************************************************** +* * +* OUTPUT: * +* * +* dzdt total differential in z direction [eta/time unit] * +* * +*********************************************************************** +* + include 'includepar' + include 'includecom' + + integer indwz + real wint,psint,zt,dzdt,p1,p2,eta1,eta2 + real dpdeta,dpdeta1,dpdeta2,fract + +*********************************************************************** +* * +* CALCULATION OF dp/d(eta): CENTERED DIFFERENCES SCHEME USED * +* * +*********************************************************************** + + +*********************************************************************** +* * +* CALCULATE dp/d(eta) FOR LEVEL (FIRST LEVEL) * +* * +*********************************************************************** + + if(indwz.eq.1) then + p1=akm(1)+bkm(1)*psint + p2=akm(2)+bkm(2)*psint + eta1=wheight(1)*zdirect + eta2=wheight(2)*zdirect + else + p1=akm(indwz-1)+bkm(indwz-1)*psint + p2=akm(indwz+1)+bkm(indwz+1)*psint + eta1=wheight(indwz-1)*zdirect + eta2=wheight(indwz+1)*zdirect + endif + dpdeta1=(p2-p1)/(eta2-eta1) + +*********************************************************************** +* * +* CALCULATE dp/d(eta) FOR LEVEL (SECOND LEVEL) * +* * +*********************************************************************** + + if(indwz+1.eq.nwz) then + p1=akm(nwz-1)+bkm(nwz-1)*psint + p2=akm(nwz)+bkm(nwz)*psint + eta1=wheight(nwz-1)*zdirect + eta2=wheight(nwz)*zdirect + else + p1=akm(indwz)+bkm(indwz)*psint + p2=akm(indwz+2)+bkm(indwz+2)*psint + eta1=wheight(indwz)*zdirect + eta2=wheight(indwz+2)*zdirect + endif + dpdeta2=(p2-p1)/(eta2-eta1) + +*********************************************************************** +* * +* LINEAR INTERPOLATION BETWEEN FIRST AND SECOND LEVEL * +* * +*********************************************************************** + + fract=(zt-wheight(indwz))/(wheight(indwz+1)-wheight(indwz)) + dpdeta=dpdeta1*(1.-fract)+dpdeta2*fract + +*********************************************************************** +* * +* TRANSFORMATION OF TO d(eta)/dt (ECMWF COORDINATES) * +* * +*********************************************************************** + + dzdt=wint*zdirect/dpdeta + + return + end diff --git a/projects/MissionSupport/applications/WxTraj/src/zztrafo.f b/projects/MissionSupport/applications/WxTraj/src/zztrafo.f new file mode 100644 index 0000000..aa8e08b --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/src/zztrafo.f @@ -0,0 +1,88 @@ + subroutine zztrafo(ngrid,xt,yt,zt,itime1,itime2,itime,indexf, + +psint,ht) +*********************************************************************** +* * +* TRAJECTORY MODEL SUBROUTINE ZZTRAFO * +* * +*********************************************************************** +* * +* AUTHOR: G. WOTAWA * +* DATE: 1994-04-07 * +* LAST UPDATE: 1999-01-07 Adaptation to nesting * +* * +*********************************************************************** +* * +* DESCRIPTION: This subroutine transforms the vertical coordinate * +* eta (ECMWF) to geometric height [m] above model * +* orography (relative height) * +* Method: vertical integration of hydrostatic equation * +* * +* REMARK: For the calculation of geometric height, the virtual * +* temperature difference has been neglected. The gas constant * +* for dry air has been used. * +* * +*********************************************************************** +* * +* INPUT: * +* * +* ngrid number of nesting level to be used * +* xt x-coordinate of point [grid units] * +* yt y-coordinate of point [grid units] * +* zt z-coordinate of point [eta (ECMWF)] * +* itime1 time [s] of first windfield * +* itime2 time [s] of second windfield * +* itime time [s] of calculation * +* indexf time index of field xx * +* psint surface pressure at point (xt,yt) [Pa] * +* * +*********************************************************************** +* * +* OUTPUT: * +* * +* ht geometric height [m] * +* * +*********************************************************************** +* + include 'includepar' + include 'includecom' + + integer itime1,itime2,itime,indexf,i,k,ngrid + real xt,yt,zt,ht,psint,fract,pp1,pp2,tv + + real tlev(nuvzmax) + real zzlev1,zzlev2 + + do 10 k=2,nwz + if(zt.le.wheight(k)) goto 20 +10 continue + k=nwz +20 fract=(zt-wheight(k-1))/(wheight(k)-wheight(k-1)) +* +* calculate interpolated vertical temperature profile on model levels +* + do 30 i=1,k-1 + if (ngrid.gt.0) then + call levlininterpoln(ttn,maxnests,nxmaxn,nymaxn,nuvzmax,ngrid, + + nxn,nyn,memind,xt,yt,i,itime1,itime2,itime,indexf,tlev(i)) + else + call levlininterpol(tt,nxmax,nymax,nuvzmax,nx,ny,memind, + + xt,yt,i,itime1,itime2,itime,indexf,tlev(i)) + endif +30 continue +* +* calculate layer indices between which zt is situated +* + zzlev1=0 + do 40 i=2,k-1 + pp1=akm(i-1)+bkm(i-1)*psint + pp2=akm(i)+bkm(i)*psint + tv=tlev(i-1) +40 zzlev1=zzlev1+r_air/ga*log(pp1/pp2)*tv + pp1=akm(k-1)+bkm(k-1)*psint + pp2=akm(k) +bkm(k)*psint + tv=tlev(k-1) + zzlev2=zzlev1+r_air/ga*log(pp1/pp2)*tv + + ht=zzlev1*(1.-fract)+zzlev2*fract + return + end diff --git a/projects/MissionSupport/applications/WxTraj/templates/inst3_3d_asm_Nv.tmpl b/projects/MissionSupport/applications/WxTraj/templates/inst3_3d_asm_Nv.tmpl new file mode 100644 index 0000000..08e52f3 --- /dev/null +++ b/projects/MissionSupport/applications/WxTraj/templates/inst3_3d_asm_Nv.tmpl @@ -0,0 +1,42 @@ +dset /discover/nobackup/projects/gmao/gmao_ops/pub//f5295_fp//%%ch +CHSUB $T1 $T2 das/Y%%y4/M%%m2/D%%d2/GEOS.fp.asm.inst3_3d_asm_Nv.%%y4%%m2%%d2_%%h2%%n2.V01.nc4 +CHSUB $T3 $T4 forecast/Y%Y/M%m/D%d/H%H/GEOS.fp.fcst.inst3_3d_asm_Nv.%Y%m%d_%H+%%y4%%m2%%d2_%%h2%%n2.V01.nc4 +OPTIONS template +title GEOS5 FP 3d assimilated state on native levels +undef 1e+15 +dtype netcdf +xdef 1152 linear -180 0.3125 +ydef 721 linear -90 0.25 +zdef 72 levels 1 2 3 4 5 6 7 + 8 9 10 11 12 13 14 + 15 16 17 18 19 20 21 + 22 23 24 25 26 27 28 + 29 30 31 32 33 34 35 + 36 37 38 39 40 41 42 + 43 44 45 46 47 48 49 + 50 51 52 53 54 55 56 + 57 58 59 60 61 62 63 + 64 65 66 67 68 69 70 + 71 72 +tdef $T3 linear $START_DATE 180mn +vars 19 +EPV=>epv 72 t,z,y,x ertels_potential_vorticity +U=>u 72 t,z,y,x eastward_wind +O3=>o3 72 t,z,y,x ozone_mass_mixing_ratio +V=>v 72 t,z,y,x northward_wind +T=>t 72 t,z,y,x air_temperature +RH=>rh 72 t,z,y,x relative_humidity_after_moist +QL=>ql 72 t,z,y,x mass_fraction_of_cloud_liquid_water +QR=>qr 72 t,z,y,x mass_fraction_of_falling_rain +QI=>qi 72 t,z,y,x mass_fraction_of_cloud_ice_water +PHIS=>phis 0 t,y,x surface geopotential height +PL=>pl 72 t,z,y,x mid_level_pressure +OMEGA=>omega 72 t,z,y,x vertical_pressure_velocity +QV=>qv 72 t,z,y,x specific_humidity +QS=>qs 72 t,z,y,x mass_fraction_of_falling_snow +SLP=>slp 0 t,y,x sea_level_pressure +CLOUD=>cloud 72 t,z,y,x cloud_fraction_for_radiation +H=>h 72 t,z,y,x mid_layer_heights +PS=>ps 0 t,y,x surface_pressure +DELP=>delp 72 t,z,y,x pressure_thickness +endvars diff --git a/projects/MissionSupport/derived_collections/eta2hgt/bin/eta2hgt.py b/projects/MissionSupport/derived_collections/eta2hgt/bin/eta2hgt.py new file mode 100755 index 0000000..62a590f --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2hgt/bin/eta2hgt.py @@ -0,0 +1,75 @@ +#! /usr/bin/env python + +import os +import sys +import numpy as np +from netCDF4 import Dataset + +import interface +import geos.netcdf as gnc +import geos.eta2hgt as gh + +request = interface.parse_args(sys.argv[1:]) +strict = request.get('strict', False) +feet = request.get('feet' , False) +ground = request.get('ground', False) +alt = request.get('alt', False) + + +in_file = request['iname'] +hgt_file = request['hname'] +out_file = request['oname'] +vars = request['vars'].split(',') +levels = [float(lev) for lev in request['levels'].split(',')] + +fh_in = Dataset(in_file, mode='r') +fh_hgt = Dataset(hgt_file, mode='r') +fh_out = gnc.Dataset(out_file) + +# Write global attributes +# ======================= + +fh_out.write_global_attr(fh_in.__dict__, + Title='My Title', + History='File written by eta2hgt.py', + Filename=os.path.basename(out_file)) + +# Write dimensions +# ================ + +dims = ('time', 'lev', 'lat', 'lon') + +time = fh_in.variables['time'] +lat = fh_in.variables['lat'] +lon = fh_in.variables['lon'] +lev = fh_in.variables['lev'] + +tyme = np.zeros( (1,), dtype=np.int32) +levs = np.asarray(levels, dtype=np.float32) + +fh_out.write_var('time', tyme, ('time',), time.__dict__) + +units = 'm' +if feet: units = 'ft' + +fh_out.write_var('lev', levs[:], ('lev',), lev.__dict__, + positive='up', + units=units, + coordinate='height', + standard_name='constant_height') + +fh_out.write_var('lat', lat[:], ('lat',), lat.__dict__) +fh_out.write_var('lon', lon[:], ('lon',), lon.__dict__) + +# Write variables +# =============== + +e2h = gh.ETA2HGT(fh_in, fh_hgt, levels, strict=strict, feet=feet, + ground=ground, alt=alt) + +for name in vars: + print(name) + var, attr = e2h.createVariable(name) + fh_out.write_var(name, var, dims, attr) + +fh_out.close() diff --git a/projects/MissionSupport/derived_collections/eta2hgt/bin/eta2hgt.sh b/projects/MissionSupport/derived_collections/eta2hgt/bin/eta2hgt.sh new file mode 100755 index 0000000..cad3dcd --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2hgt/bin/eta2hgt.sh @@ -0,0 +1,130 @@ +#!/bin/sh + +if [ $# -ne 4 ]; then + echo "Usage: $0 [ccyymmdd] [hhmmss] [flen] [hinc]" + exit 1 +else + idate=$1 + itime=$2 + flen=`expr $3 + 100 | cut -c2,3` + hinc=$4 +fi + +fcst_dt=`timetag $idate $itime "{%Y%m%dT%H%M%S}%+d00"` +start_dt=$fcst_dt +if [ $flen -eq 30 ]; then + end_dt=`timetag $idate $itime "{%Y%m%dT%H%M%S}%+H$flen"` +else + end_dt=`timetag $idate $itime "{%Y%m%dT%H%M%S}%+d$flen"` +fi +yyyymmddhh=`timetag $idate $itime "{%Y %m %d %H}%+d00"` + +DEST=/discover/nobackup/projects/gmao/merra2/data/pub/supplemental + +# ********************* +# Create Nz collections +# ********************* + +# Define Height Levels and ETA file +# containing vertical coordinate information +# ========================================== + +#LEVELS="0,500,1000,1500,2000,2500,3000,3500,4000,4500,5000,5500,6000,6500,7000,7500,8000,8500,9000,9500,10000" +LEVELS="0,50,100,200,300,400,500,1000,1500,2000,2500,3000,3500,4000,4500,5000,5500,6000,6500,7000,7500,8000,8500,9000,9500,10000" +HNAME=/discover/nobackup/projects/gmao/gmao_ops/pub/fp/forecast/Y%%Y/M%%m/D%%d/H%%H/GEOS.fp.fcst.inst3_3d_asm_Nv.%%Y%%m%%d_%%H+%Y%m%d_%H00.V01.nc4 + +# inst3_3d_aer_Nv +# =============== + +VARS="BCOC,PM25,PM,DUST" + +INAME=/discover/nobackup/projects/gmao/gmao_ops/pub/fp/forecast/Y%%Y/M%%m/D%%d/H%%H/GEOS.fp.fcst.inst3_3d_aer_Nv.%%Y%%m%%d_%%H+%Y%m%d_%H00.V01.nc4 +ONAME=$DEST/fp/forecast/Y%%Y/M%%m/D%%d/H%%H/GEOS.fp.fcst.inst3_3d_aer_Nz.%%Y%%m%%d_%%H+%Y%m%d_%H00.V01.nc4 + +eta2hgt_iter.py --iname $INAME --hname $HNAME --oname $ONAME \ + --vars $VARS --levels $LEVELS \ + --fcst_dt $fcst_dt \ + --start_dt $start_dt \ + --end_dt $end_dt \ + --t_deltat $hinc \ + --strict + +# inst3_3d_asm_Nv +# =============== + +VARS="QL,QI,U,V,RH,THETA,AGL" + +INAME=/discover/nobackup/projects/gmao/gmao_ops/pub/fp/forecast/Y%%Y/M%%m/D%%d/H%%H/GEOS.fp.fcst.inst3_3d_asm_Nv.%%Y%%m%%d_%%H+%Y%m%d_%H00.V01.nc4 +ONAME=$DEST/fp/forecast/Y%%Y/M%%m/D%%d/H%%H/GEOS.fp.fcst.inst3_3d_asm_Nz.%%Y%%m%%d_%%H+%Y%m%d_%H00.V01.nc4 + +eta2hgt_iter.py --iname $INAME --hname $HNAME --oname $ONAME \ + --vars $VARS --levels $LEVELS \ + --fcst_dt $fcst_dt \ + --start_dt $start_dt \ + --end_dt $end_dt \ + --t_deltat $hinc \ + --strict + +# ********************* +# Create Nh collections +# ********************* + +# Define Height Levels and ETA file +# containing vertical coordinate information +# ========================================== + +LEVELS="1000,2000,4000,6000" +HNAME=/discover/nobackup/projects/gmao/gmao_ops/pub/fp/forecast/Y%%Y/M%%m/D%%d/H%%H/GEOS.fp.fcst.inst3_3d_asm_Nv.%%Y%%m%%d_%%H+%Y%m%d_%H00.V01.nc4 + +# inst3_3d_aer_Nv +# =============== + +VARS="BCOC,PM25,PM,DUST" + +INAME=/discover/nobackup/projects/gmao/gmao_ops/pub/fp/forecast/Y%%Y/M%%m/D%%d/H%%H/GEOS.fp.fcst.inst3_3d_aer_Nv.%%Y%%m%%d_%%H+%Y%m%d_%H00.V01.nc4 +ONAME=$DEST/fp/forecast/Y%%Y/M%%m/D%%d/H%%H/GEOS.fp.fcst.inst3_3d_aer_Nh.%%Y%%m%%d_%%H+%Y%m%d_%H00.V01.nc4 + +eta2hgt_iter.py --iname $INAME --hname $HNAME --oname $ONAME \ + --vars $VARS --levels $LEVELS \ + --fcst_dt $fcst_dt \ + --start_dt $start_dt \ + --end_dt $end_dt \ + --t_deltat $hinc \ + --strict --feet --ground --alt + +# inst3_3d_asm_Nv +# =============== + +VARS="QL,QI,U,V,RH,THETA" + +INAME=/discover/nobackup/projects/gmao/gmao_ops/pub/fp/forecast/Y%%Y/M%%m/D%%d/H%%H/GEOS.fp.fcst.inst3_3d_asm_Nv.%%Y%%m%%d_%%H+%Y%m%d_%H00.V01.nc4 +ONAME=$DEST/fp/forecast/Y%%Y/M%%m/D%%d/H%%H/GEOS.fp.fcst.inst3_3d_asm_Nh.%%Y%%m%%d_%%H+%Y%m%d_%H00.V01.nc4 + +eta2hgt_iter.py --iname $INAME --hname $HNAME --oname $ONAME \ + --vars $VARS --levels $LEVELS \ + --fcst_dt $fcst_dt \ + --start_dt $start_dt \ + --end_dt $end_dt \ + --t_deltat $hinc \ + --strict --feet --ground --alt + +# ******************************** +# Create the Opendap control files +# ******************************** + +#g5_ddf.pl -c -v -d $DEST $DEST $yyyymmddhh + +/home/dao_ops/GEOSadas-CURRENT/GEOSadas/Linux/bin_ops/g5_ddf.pl -c -v \ + -d $DEST/fp $DEST/fp $yyyymmddhh + +COLLECTIONS="inst3_3d_aer_Nz inst3_3d_asm_Nz inst3_3d_aer_Nh inst3_3d_asm_Nh" + +tnode=`timetag $idate $itime "{%Y%m%d_%H}%+d00"` + +for collection in $COLLECTIONS; do + file=$DEST/fp/opendap/fcast/$collection/$collection.$tnode + cat $file | sed 's@data/pub/supplemental@pub/supplemental@g' > $file.portal + +done + +exit 0 diff --git a/projects/MissionSupport/derived_collections/eta2hgt/bin/eta2hgt_iter.py b/projects/MissionSupport/derived_collections/eta2hgt/bin/eta2hgt_iter.py new file mode 100755 index 0000000..665cf27 --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2hgt/bin/eta2hgt_iter.py @@ -0,0 +1,28 @@ +#! /usr/bin/env python + +import os +import sys + +import interface +from taskmanager import * + +task = TaskManager() +request = interface.parse_args(sys.argv[1:]) +template = ' '.join(sys.argv[1:]) + +fcst_dt = request['fcst_dt'] +start_dt = request['start_dt'] +end_dt = request['end_dt'] +t_deltat = request['t_deltat'] + +t = start_dt +while t <= end_dt: + + args = t.strftime(template) + args = fcst_dt.strftime(args) + + task.spawn('eta2hgt.py ' + args) + + t += t_deltat + +task.wait() diff --git a/projects/MissionSupport/derived_collections/eta2hgt/bin/test.py b/projects/MissionSupport/derived_collections/eta2hgt/bin/test.py new file mode 100755 index 0000000..5ee6cf9 --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2hgt/bin/test.py @@ -0,0 +1,33 @@ +#! /usr/bin/env python + +import os +import sys +import numpy as np +from netCDF4 import Dataset + +in_file = sys.argv[1] +out_file = sys.argv[2] + +fh_in = Dataset(in_file, mode='r') +fh_out = Dataset(out_file, "w", format="NETCDF4") + +fh_out.setncatts(fh_in.__dict__) + +for name in fh_in.dimensions: + + variable = fh_in.variables[name] + fh_out.createDimension(name, variable.size) + v = fh_out.createVariable(name, variable.datatype, variable.dimensions) + v.setncatts(variable.__dict__) + v[:] = variable[:] + +for name, variable in fh_in.variables.iteritems(): + + if name in fh_in.dimensions: continue + + v = fh_out.createVariable(name, variable.datatype, variable.dimensions) + v.setncatts(variable.__dict__) + + v[:] = 0.0 + +fh_out.close() diff --git a/projects/MissionSupport/derived_collections/eta2hgt/bin/test.sh b/projects/MissionSupport/derived_collections/eta2hgt/bin/test.sh new file mode 100755 index 0000000..e37442a --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2hgt/bin/test.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +if [ $# -ne 2 ]; then + echo "Usage: $0 [ccyymmdd] [hhmmss]" + exit 1 +else + idate=$1 + itime=$2 +fi + +hour=`expr $itime / 10000` +if [ $hour -eq 0 ]; then + flen=10 +else + if [$hour -eq 12 ]; then + flen=5 + else + flen=30 + fi +fi + + +echo $flen diff --git a/projects/MissionSupport/derived_collections/eta2hgt/bin/test2.py b/projects/MissionSupport/derived_collections/eta2hgt/bin/test2.py new file mode 100755 index 0000000..dac4d08 --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2hgt/bin/test2.py @@ -0,0 +1,12 @@ +#! /usr/bin/env python + +import os +import sys +import numpy as np +from netCDF4 import Dataset + +vout = np.full((3,3,4), -9999.0, np.float32) +vout = np.ndarray((3,3,4), dtype=np.float32) +vout[:] = -9999.0 + +print vout diff --git a/projects/MissionSupport/derived_collections/eta2hgt/bin/test3.py b/projects/MissionSupport/derived_collections/eta2hgt/bin/test3.py new file mode 100644 index 0000000..8c90f49 --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2hgt/bin/test3.py @@ -0,0 +1,4 @@ +import netCDF4 as nc + +URL = 'https://opendap.nccs.nasa.gov/dods/gmao/geos-cf/fcast/aqc_tavg_1hr_g1440x721_v1.latest' +f = nc.Dataset(URL, 'r') diff --git a/projects/MissionSupport/derived_collections/eta2hgt/cron/eta2hgt.d b/projects/MissionSupport/derived_collections/eta2hgt/cron/eta2hgt.d new file mode 100755 index 0000000..128700d --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2hgt/cron/eta2hgt.d @@ -0,0 +1,76 @@ +#!/bin/sh + +if [ $# -ne 2 ]; then + echo "Usage: $0 [ccyymmdd] [hhmmss]" + exit 1 +else + idate=$1 + itime=$2 +fi + +exec >/dev/null 2>&1 + +SENTINEL=/discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/inst1_2d_hwl_Nx/inst1_2d_hwl_Nx.%Y%m%d_%H +#SENTINEL=/discover/nobackup/projects/gmao/gmao_ops/pub/f516_fp/forecast/Y%Y/M%m/D%d/H%H/GEOS.fp.fcst.inst1_2d_hwl_Nx.%Y%m%d_%H+%%Y%%m%%d_%%H%%M.V01.nc4 + +while [ 1 ]; do + + hour=`expr $itime / 10000` + if [ $hour -eq 0 ]; then + flen=10 + else + if [ $hour -eq 12 ]; then + flen=5 + else + flen=30 + fi + fi + + if [ $flen -eq 30 ]; then + edattim=`timetag $idate $itime {%Y%m%d_%H%M%S}%+H$flen` + else + edattim=`timetag $idate $itime {%Y%m%d_%H%M%S}%+d$flen` + fi + edate=`echo $edattim | cut -d'_' -f1` + etime=`echo $edattim | cut -d'_' -f2` + sentinel=`timetag $idate $itime $SENTINEL` + sentinel=`timetag $edate $etime $sentinel` + + if [ -f $sentinel ]; then + + sleep 300 + + cat < eta2hgt.j + #!/bin/csh -fx + + #SBATCH --job-name=eta2hgt_v3.0 + #SBATCH --account=s1321 + #SBATCH --time=2:00:00 + #SBATCH --qos=daohi + #SBATCH --ntasks=28 + #SBATCH --export=NONE + #SBATCH --constraint=mil + #SBATCH --output=/discover/nobackup/dao_ops/jardizzo/FLUID/eta2hgt_v3.0_${idate}_${itime}.log + + limit stacksize unlimited + cd /home/dao_ops/jardizzo/FLUID/we-can/utils/eta2hgt_v3.0_sles15 + source modules + + eta2hgt.sh $idate $itime $flen 3 +EOF + + sbatch eta2hgt.j + + dattim=`timetag $idate $itime {%Y%m%d_%H%M%S}%+H06` + idate=`echo $dattim | cut -d'_' -f1` + itime=`echo $dattim | cut -d'_' -f2` + + else + + sleep 300 + + fi + +done + +exit 0 diff --git a/projects/MissionSupport/derived_collections/eta2hgt/cron/eta2hgt.j b/projects/MissionSupport/derived_collections/eta2hgt/cron/eta2hgt.j new file mode 100644 index 0000000..4f9eea8 --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2hgt/cron/eta2hgt.j @@ -0,0 +1,16 @@ +#!/bin/csh -fx + +#SBATCH --job-name=eta2hgt_v3.0 +#SBATCH --account=s1321 +#SBATCH --time=2:00:00 +#SBATCH --qos=daohi +#SBATCH --ntasks=28 +#SBATCH --export=NONE +#SBATCH --constraint=mil +#SBATCH --output=/discover/nobackup/dao_ops/jardizzo/FLUID/eta2hgt_v3.0_20260228_000000.log + +limit stacksize unlimited +cd /home/dao_ops/jardizzo/FLUID/we-can/utils/eta2hgt_v3.0_sles15 +source modules + +eta2hgt.sh 20260228 000000 10 3 diff --git a/projects/MissionSupport/derived_collections/eta2hgt/cron/patch.j b/projects/MissionSupport/derived_collections/eta2hgt/cron/patch.j new file mode 100644 index 0000000..802ffb0 --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2hgt/cron/patch.j @@ -0,0 +1,16 @@ +#!/bin/csh -fx + +#SBATCH --job-name=eta2hgt_v3.0 +#SBATCH --account=s1321 +#SBATCH --time=1:50:00 +#SBATCH --qos=daohi +#SBATCH --ntasks=28 +#SBATCH --export=NONE +#SBATCH --constraint=hasw +#SBATCH --output=/discover/nobackup/dao_ops/jardizzo/FLUID/eta2hgt_v3.0_20210902_000000.log + +limit stacksize unlimited +cd /home/dao_ops/jardizzo/FLUID/we-can/utils/eta2hgt_v3.0 +source modules + +eta2hgt.sh 20210902 0 10 3 diff --git a/projects/MissionSupport/derived_collections/eta2hgt/g5_modules b/projects/MissionSupport/derived_collections/eta2hgt/g5_modules new file mode 100755 index 0000000..127239b --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2hgt/g5_modules @@ -0,0 +1,486 @@ +#!/bin/csh -f +######################################################################## +# +# Name: g5_modules +# +# Purposes - +# * provide single location for BASEDIR and module values +# * initialize the following: +# - set BASEDIR +# - update LD_LIBRARY_PATH with BASEDIR lib +# - load library modules +# * echo expected BASEDIR and library module values when queried +# +# Notes: +# 1. The script will not function correctly if the scriptname +# definition within the script is incorrect. +# 2. Type "g5_modules help" for usage information. +# +# Perl Notes: +# ========== +# 1. You cannot "source" this file from a perl script. +# 2. Instead use the following in your perl script: +# #-------------------------------- +# use Env; +# do "g5_modules_perl_wrapper"; +# #-------------------------------- +# 3. Use the g5_modules_perl_wrapper file located in the build's bin +# directory, where a copy of g5_modules also resides. This is important +# since g5_modules_perl_wrapper uses g5_modules and expects it to be in +# the same directory. +# +# Bash Notes: +# ========== +# If you are in a bash shell, then source the g5_modules.sh script. +# > source g5_modules.sh +# +# REVISION HISTORY +# 31Aug2007 Stassi Initial version of code +# 15Oct2007 Stassi Expand list of machines and include defaults +# 15Dec2007 Stassi Added LD_LIBRARY_PATH functionality +# 21Jul2008 Takacs New modules and BASEDIR on discover after OS upgrade +# 13Apr2009 Stassi Updated for pleiades +# 22Apr2010 Kokron Updated for Fortuna-2.1 on pleiades +# 21Jul2011 Kokron Overlay older MKL module as on discover to gain reproducible results from dgeev in GSI +# 24Aug2012 Stassi Added sh option to write bash source-able file +# 03Nov2016 Thompson Remove JIBB +######################################################################## + +# NOTE: Spell out scriptname--DO NOT SET EQUAL TO $0! +#---------------------------------------------------- +set scriptname = g5_modules +if ( $scriptname == "$0:t" ) then + set sourced = 0 +else + set sourced = 1 +endif + +# check for improper usage +#------------------------- +if (! $sourced && ! $#argv) goto usage # not sourced and no args +if ( $sourced && $#argv) goto usage # sourced with args + +# get architecture, machine, and node information +#------------------------------------------------ +set arch = `uname -s` +set mach = `uname -m` +set node = `uname -n` + +# Find site +# --------- + +if (($node =~ discover*) || ($node =~ borg*) || \ + ($node =~ dali*) || ($node =~ warp*)) then + + set site = "NCCS" + +else if (($node =~ pfe*) || ($node =~ p4fe*) || \ + ($node =~ r[0-9]*i[0-9]*n[0-9]*) || \ + ($node =~ bridge*) || ($node =~ maia*)) then + set site = "NAS" + +else if ($node =~ janus*) then + set site = "GMAO.janus" + +else if ( $node =~ bender* ) then + set site = "ACDL.bender" + +else if ( $node =~ *niteroi* ) then + set site = "GMAO.niteroi" + +else if ( -d /ford1/share/gmao_SIteam/ && -d /ford1/local/ && $arch == Linux ) then + set site = "GMAO.desktop" + +else + set site = $node + +endif + +alias echo2 "echo \!* > /dev/stderr" + +# get values +#----------- +if ($mach == x86_64) goto X86_64 + +# ERROR -- unknown architecture/machine +#-------------------------------------- +echo2 "${scriptname}: >>>WARNING<<< unrecognizable arch/machine = $arch/$mach" +echo 0 # indicating error condition +exit 8 + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +# X86_64 values (Linux) +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +X86_64: + +#==================# +# X86_64 default # +#==================# + +set modinit = DUMMY + +set loadmodules = 0 +set usemodules = 0 + +#========# +# NCCS # +#========# +if ( $site == NCCS ) then + + # Are we on SLES12... + if ( -e /etc/os-release ) then + + set mod1 = GEOSenv + + set mod2 = comp/gcc/6.5.0 + set mod3 = comp/intel/19.1.0.166 + + set mod4 = mpi/impi/19.1.0.166 + + set mod5 = python/GEOSpyD/Ana2019.10_py2.7 + + set basedir = /discover/swdev/gmao_SIteam/Baselibs/ESMA-Baselibs-6.0.11-SLES12/x86_64-unknown-linux-gnu/ifort_19.1.0.166-intelmpi_19.1.0.166 + + set mods = ( $mod1 $mod2 $mod3 $mod4 $mod5 ) + + set usemod1 = /discover/swdev/gmao_SIteam/modulefiles-SLES12 + + # or SLES 11? + else + + set mod1 = GEOSenv + + set mod2 = other/comp/gcc-6.3 + set mod3 = comp/intel-18.0.5.274 + + set mod4 = mpi/impi-18.0.5.274 + + set mod5 = lib/mkl-18.0.5.274 + set mod6 = other/python/GEOSpyD/Ana2019.10_py2.7 + + set basedir = /discover/swdev/gmao_SIteam/Baselibs/ESMA-Baselibs-6.0.11-SLES11/x86_64-unknown-linux-gnu/ifort_18.0.5.274-intelmpi_18.0.5.274 + + set mods = ( $mod1 $mod2 $mod3 $mod4 $mod5 $mod6 ) + + set usemod1 = /discover/swdev/gmao_SIteam/modulefiles-SLES11 + + endif + + set modinit = /usr/share/modules/init/csh + set loadmodules = 0 + + set usemods = ( $usemod1 ) + set usemodules = 1 + +#=======# +# NAS # +#=======# +else if ( $site == NAS ) then + + set basedir = /nobackup/gmao_SIteam/Baselibs/ESMA-Baselibs-6.0.11/x86_64-unknown-linux-gnu/ifort_2018.5.274-mpt_2.17r13-gcc_6.3.0 + + set mod1 = GEOSenv + + set mod2 = comp-gcc/6.3.0 + set mod3 = 2018.5.274.modulefile + set mod4 = mpi-hpe/mpt.2.17r13 + set mod5 = math-mkl/2018.5.274 + set mod6 = python/GEOSpyD/Ana2019.10_py2.7 + + set mods = ( $mod1 $mod2 $mod3 $mod4 $mod5 $mod6 ) + set modinit = /usr/share/modules/init/tcsh + set loadmodules = 0 + + set usemod1 = /u/scicon/tools/modulefiles + set usemod2 = /nobackup/gmao_SIteam/modulefiles + set usemod3 = /nasa/intel/Compiler/2018.5.274 + set usemods = ( $usemod1 $usemod2 $usemod3 ) + set usemodules = 1 + +#=========# +# JANUS # +#=========# +else if ( $site == GMAO.janus ) then + set basedir=/ford1/share/gmao_SIteam/Baselibs/ESMA-Baselibs-6.0.11/x86_64-unknown-linux-gnu/pgfortran_17.10-openmpi_3.0.0-gcc_6.3.0 + set mod1 = comp/gcc/6.3.0 + set mod2 = comp/pgi/17.10-gcc_6.3.0 + set mod3 = mpi/openmpi/3.0.0/pgi-17.10_gcc-6.3.0 + set mod4 = lib/mkl/17.0.4.196 + set mod5 = other/python/canopy + + set mod6 = other/git/latest + set mod7 = other/cmake/latest + + setenv ESMA_FC pgfortran + setenv GPU_CC_REV cc20 + setenv PGI_LOCALRC /ford1/share/gmao_SIteam/PGILocalRC/linux86-64/17.10/bin/localrc.60300 + + set mods = ( $mod1 $mod2 $mod3 $mod4 $mod5 $mod6 $mod7 ) + set modinit = /usr/share/Modules/init/tcsh + set loadmodules = 0 + set usemodules = 1 + +#===========# +# Bender # +#===========# +else if ( $site == ACDL.bender ) then + set basedir=/ford1/share/gmao_SIteam/Baselibs/GMAO-Baselibs-5_0_0/x86_64-unknown-linux-gnu/ifort_13.1.1.163-openmpi_1.8.1 + set BASEBIN=$basedir/$arch/bin + set PYBIN = /share/dasilva/epd/epd-7.3-2-rh5-x86_64/bin + set IFCBIN = /opt/intel/composer_xe_2013.5.192/bin + set MPIBIN = /ford1/share/gmao_SIteam/MPI/openmpi-1.8.1-ifort-13.1.1.163/bin + source $IFCBIN/ifortvars.csh intel64 + setenv MKLPATH $MKLROOT/lib + set path = ( $BASEBIN $MPIBIN $PYBIN $path ) + set loadmodules = 0 + set usemodules = 0 + +#===========# +# Niteroi # +#===========# +else if ( $site == GMAO.niteroi ) then + set basedir = /Users/mathomp4/Baselibs/GMAO-Baselibs-5_0_0/x86_64-apple-darwin14.0.0/ifort_15.0.1.108-openmpi_1.8.3 + set BASEBIN = $basedir/$arch/bin + set PYBIN = /Library/Frameworks/EPD64.framework/Versions/7.3/bin + set IFCPATH = /opt/intel/composer_xe_2015.1.108 + set MPIBIN = /Users/mathomp4/MPI/openmpi/1.8.3/ifort-15.0.1.108 + source $IFCPATH/bin/compilervars.csh intel64 + setenv MKLPATH $MKLROOT/lib + set path = ( $BASEBIN $MPIBIN $PYBIN $path ) + set loadmodules = 0 + set usemodules = 0 + +#=================# +# GMAO DESKTOP # +#=================# +else if ( $site == GMAO.desktop ) then + + set basedir=/ford1/share/gmao_SIteam/Baselibs/ESMA-Baselibs-6.0.11/x86_64-unknown-linux-gnu/ifort_18.0.5.274-openmpi_4.0.0-gcc_6.3.0 + + set mod1 = GEOSenv + + set mod2 = comp/gcc/6.3.0 + set mod3 = comp/intel/18.0.5.274 + set mod4 = mpi/openmpi/4.0.0/intel-18.0.5.274_gcc-6.3.0 + set mod5 = lib/mkl/18.0.5.274 + set mod6 = other/python/GEOSpyD/Ana2019.10_py2.7 + + set mods = ( $mod1 $mod2 $mod3 $mod4 $mod5 $mod6 ) + set modinit = /usr/share/Modules/init/tcsh + set loadmodules = 0 + + set usemod1 = /ford1/share/gmao_SIteam/modulefiles + set usemods = ( $usemod1 ) + set usemodules = 1 + +endif + +goto ACTION + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +# perform requested action +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +ACTION: + +#===================# +# ECHO VALUE(s) # +#===================# +set wrapper = 0 +if ( $#argv > 0 ) then + + if ( $1 == basedir ) then + echo $basedir + + else if ( $1 == modules ) then + echo $mods + + else if ( $1 == modinit ) then + echo $modinit + + else if ( $1 == loadmodules ) then + echo $loadmodules + + else if ( $1 == usemodules ) then + echo $usemods + + else if ( $1 == ESMA_FC ) then + echo $ESMA_FC + + else if ( $1 == site ) then + echo $site + + else if ( $1 == sh ) then + set wrapper = 1 + goto SETVALUES + + else if ( $1 == help ) then + goto usage + + else + echo2 "${scriptname}: >>>ERROR<<< unrecognizable option -- $1" + echo2 Type "$scriptname help" for usage information. + echo 0 # indicating error condition + exit 9 + endif + + exit +endif + +SETVALUES: +#================# +# SET VALUES # +#================# +#------------------------------------------------------------------------- +# set environment variables, BASEDIR and LD_LIBRARY_PATH; and load modules +#------------------------------------------------------------------------- + +# setenv BASEDIR +#--------------- +if ($?basedir) then + if (! $wrapper) echo -n "${scriptname}: Setting BASEDIR" + setenv BASEDIR $basedir +else if ($?BASEDIR) then + if (! $wrapper) echo -n "${scriptname}: BASEDIR found in environment" +else + echo + echo "BASEDIR not found in environment or set by ${scriptname}" + exit 3 +endif + +# add BASEDIR lib to LD_LIBRARY_PATH, if not already there +#--------------------------------------------------------- +if ($?LD_LIBRARY_PATH) then + echo $LD_LIBRARY_PATH | grep $BASEDIR/$arch/lib > /dev/null + if ($status) then # == 1, if not found + setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:$BASEDIR/$arch/lib + endif +else + setenv LD_LIBRARY_PATH $BASEDIR/$arch/lib +endif + +# add individual $ld_libraries to LD_LIBRARY_PATH, if not already there +#---------------------------------------------------------------------- +if ($?ld_libraries) then + foreach lib ( $ld_libraries ) + if ($LD_LIBRARY_PATH !~ *$lib*) then + setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:$lib + endif + end +endif + +if ($?LD_LIBRARY64_PATH) then + echo $LD_LIBRARY64_PATH | grep $BASEDIR/$arch/lib > /dev/null + if ($status) then # == 1, if not found + setenv LD_LIBRARY64_PATH ${LD_LIBRARY64_PATH}:$BASEDIR/$arch/lib + endif +endif + +# load library modules +#--------------------- +if (-e $modinit) then + + if (! $wrapper) echo -n " and modules" + source $modinit + module purge + + if ($loadmodules) module load modules + + if ($usemodules) then + foreach usemod ( $usemods ) + module use -a $usemod + end + endif + + foreach mod ( $mods ) + module load $mod + end + +endif +if (! $wrapper) echo " for $node" + +# write sh commands to a .g5_modules.sh file +#------------------------------------------- +if ($wrapper) then + set outfil = ".g5_modules.sh" + + if ($?BASEDIR) then + echo "export BASEDIR=$BASEDIR" >! $outfil + endif + if ($?LD_LIBRARY_PATH) then + echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH" >> $outfil + endif + if ($?LD_LIBRARY64_PATH) then + echo "export LD_LIBRARY64_PATH=$LD_LIBRARY64_PATH" >> $outfil + endif + + set modulecmd = `which modulecmd` + if ($status) set modulecmd = "/usr/bin/modulecmd" + set modinit_sh = `echo $modinit | sed "s|/csh|/sh|"` + + if (-e $modulecmd) then + if (-e $modinit_sh) then + echo 'source '$modinit_sh >> $outfil + endif + echo 'eval `'$modulecmd sh purge'`' >> $outfil + if ($loadmodules) then + echo 'eval `'$modulecmd sh load modules'`' >> $outfil + endif + foreach mod ($mods) + echo 'eval `'$modulecmd sh load $mod'`' >> $outfil + end + endif + +endif +exit + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +# usage information # +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +usage: + +more < + +OPTIONS + + help echo usage + basedir echo expected value for BASEDIR environment variable + modules echo expected list of modules + modinit echo location of csh module initialization script + loadmodules echo logical indicating whether "module load modules" + is needed prior to loading other modules + usemodules echo logical indicating whether "module use directory(s)" + is needed prior to loading other modules + ESMA_FC echo value of ESMA_FC if set + site echo site as detected by $scriptname + sh write sh version of g5_modules to file named, ".g5_modules.sh" + +EOF +exit 1 diff --git a/projects/MissionSupport/derived_collections/eta2hgt/modules b/projects/MissionSupport/derived_collections/eta2hgt/modules new file mode 100755 index 0000000..b973229 --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2hgt/modules @@ -0,0 +1,19 @@ +#!/bin/csh -f + +limit stacksize unlimited + +source /usr/share/modules/init/csh + +module purge +source /home/dao_ops/GEOSadas-CURRENT/GEOSadas/Linux/bin/g5_modules + +setenv GAVERSION 2.1.0.oga.1 + +setenv MYPYTHON /discover/nobackup/projects/gmao/share/dasilva/Python/epd-7.3-2-rh5-x86_64/bin + +set path = ( . /home/dao_ops/GEOSadas-CURRENT/GEOSadas/Linux/bin \ + $SHARE/dasilva/opengrads/Contents $MYPYTHON \ + ~adasilva/bin $SHARE/dasilva/bin /usr/local/bin \ + $path ) + +exit 0 diff --git a/projects/MissionSupport/derived_collections/eta2hgt/src/geos/__init__.py b/projects/MissionSupport/derived_collections/eta2hgt/src/geos/__init__.py new file mode 100644 index 0000000..1f356cc --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2hgt/src/geos/__init__.py @@ -0,0 +1 @@ +__version__ = '1.0.0' diff --git a/projects/MissionSupport/derived_collections/eta2hgt/src/geos/eta2hgt.py b/projects/MissionSupport/derived_collections/eta2hgt/src/geos/eta2hgt.py new file mode 100644 index 0000000..e99c5de --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2hgt/src/geos/eta2hgt.py @@ -0,0 +1,277 @@ +import math +import numpy as np +import collections +import geos.interpolator as gterp + +class ETA2HGT(object): + + def __init__(self, fh_in, fh_hgt, levels, strict, **kwargs): + + self.fh1 = fh_in + self.fh2 = fh_hgt + self.levels = list(levels) + self.strict = strict + + self.set_const(fh_hgt.variables['lat'][:]) + + if (kwargs.get('alt', False)): + self.hgt = self.altimetric(fh_hgt.variables['H'][0,:,:,:]) + self.phis = self.altimetric(fh_hgt.variables['PHIS'][0,:,:]/self.g0) + else: + self.hgt = fh_hgt.variables['H'][0,:,:,:] + self.phis = fh_hgt.variables['PHIS'][0,:,:] / self.g0 + + if (kwargs.get('feet', False)): + self.hgt /= 0.3048 + self.phis /= 0.3048 + + if (kwargs.get('ground', False)): + self.hgt = self.hgt - self.phis + + self.handler = {'default' : self.default, + 'AGL' : self.createAGL, + 'THETA' : self.createTHETA, + 'PM25' : self.createPM25, + 'PM' : self.createPM, + 'BCOC' : self.createBCOC, + 'DUST' : self.createDUST + } + + def set_const(self, lat): + + deg2rad = np.pi / 180.0 + rad_lat = lat[:] * deg2rad + sin_lat = np.sin(rad_lat) + sin2_lat = np.sin(2.0*rad_lat) + + self.g0 = 9.80665 + + self.zg = 9.780356 * (1.0 + \ + 0.0052885 * sin_lat * sin_lat - \ + 0.0000059 * sin2_lat * sin2_lat) + + self.zre = 2.0 * self.zg / (3.085462e-6 + \ + 2.27e-9 * np.cos(2.0*rad_lat) - \ + 2.0e-12 * np.cos(4.0*rad_lat)) + + def altimetric(self, geophgt): + + if len(geophgt.shape) == 2: + return self.altimetric2D(geophgt) + else: + return self.altimetric3D(geophgt) + + def altimetric2D(self, geophgt): + + jm, im = geophgt.shape + + for j in range(0,jm): + + g = self.zg[j] + re = self.zre[j] + ratio = g / self.g0 + + h = geophgt[j,:] + geophgt[j,:] = (re * h) / (re * ratio - h) + + return geophgt + + def altimetric3D(self, geophgt): + + km, jm, im = geophgt.shape + + for j in range(0,jm): + + g = self.zg[j] + re = self.zre[j] + ratio = g / self.g0 + + h = geophgt[:,j,:] + geophgt[:,j,:] = (re * h) / (re * ratio - h) + + return geophgt + + def createVariable(self, name): + + handler = self.handler.get(name, self.default) + return handler(name) + + def default(self, name): + + transform = gterp.Interpolator() + + Q = self.fh1.variables[name] + q = Q[0,:,:,:] + var = transform.vinterp(q, self.hgt, self.levels, strict=self.strict) + + attr = collections.OrderedDict(Q.__dict__) + + return (var, attr) + + def createAGL(self, name): + + transform = gterp.Interpolator() + + agl = self.hgt - self.phis + var = transform.vinterp(agl, self.hgt, self.levels, strict=self.strict) + + H = self.fh2.variables['H'] + attr = collections.OrderedDict(H.__dict__) + attr.update( list({'long_name':'above_ground_level', + 'standard_name':'above_ground_level', + 'units':'m'}.items()) ) + + return (var, attr) + + def createTHETA(self, name): + + transform = gterp.Interpolator() + + KAPPA = 0.286 + LC = 586.0 + CP2 = 0.240 + + T = self.fh2.variables['T'][0,:,:,:] + Q = self.fh2.variables['QV'][0,:,:,:] + P = self.fh2.variables['PL'][0,:,:,:] + + theta = T * (100000.0/P)**KAPPA + theta = theta * np.exp((LC*Q) / (CP2*T) ) + var = transform.vinterp(theta,self.hgt, self.levels, strict=self.strict) + + D = self.fh2.variables['T'] + attr = collections.OrderedDict(D.__dict__) + attr.update( list({'long_name':'equivalent_potential_temperature', + 'standard_name':'equivalent_potential_temperature', + 'units':'K'}.items()) ) + + return (var, attr) + + def createPM25(self, name): + + transform = gterp.Interpolator() + + du_coeff = math.log(1.25)/math.log(1.8) + no3_coeff = 80.043 / 62.0 + ss_coeff = math.log(2.5) / math.log(3) + so4_coeff = 132.14 / 96.06 + + pm25 = self.fh1.variables['BCPHILIC'][0,:,:,:] + \ + self.fh1.variables['BCPHOBIC'][0,:,:,:] + + pm25 += self.fh1.variables['OCPHILIC'][0,:,:,:] + \ + self.fh1.variables['OCPHOBIC'][0,:,:,:] + + pm25 += self.fh1.variables['DU001'][0,:,:,:] + \ + self.fh1.variables['DU002'][0,:,:,:] * du_coeff + + pm25 += self.fh1.variables['NO3AN1'][0,:,:,:] * no3_coeff +# self.fh1.variables['NO3AN2'][0,:,:,:] * no3_coeff + \ +# self.fh1.variables['NO3AN3'][0,:,:,:] * no3_coeff + + pm25 += self.fh1.variables['SS001'][0,:,:,:] + \ + self.fh1.variables['SS002'][0,:,:,:] + \ + self.fh1.variables['SS003'][0,:,:,:] * ss_coeff + + pm25 += self.fh1.variables['SO4'][0,:,:,:] * so4_coeff + + pm25 *= self.fh1.variables['AIRDENS'][0,:,:,:] + + var = transform.vinterp(pm25, self.hgt, self.levels, strict=self.strict) + + D = self.fh1.variables['BCPHILIC'] + attr = collections.OrderedDict(D.__dict__) + attr.update( list({'long_name':'particulate_matter_2p5_micrometers', + 'standard_name':'particulate_matter_2p5_micrometers' + }.items()) ) + + return (var, attr) + + def createPM(self, name): + + transform = gterp.Interpolator() + + du_coeff = math.log(1.25)/math.log(1.8) + no3_coeff = 80.043 / 62.0 + ss_coeff = math.log(2.5) / math.log(3) + so4_coeff = 132.14 / 96.06 + + pm = self.fh1.variables['BCPHILIC'][0,:,:,:] + \ + self.fh1.variables['BCPHOBIC'][0,:,:,:] + + pm += self.fh1.variables['OCPHILIC'][0,:,:,:] + \ + self.fh1.variables['OCPHOBIC'][0,:,:,:] + + pm += self.fh1.variables['DU001'][0,:,:,:] + \ + self.fh1.variables['DU002'][0,:,:,:] + \ + self.fh1.variables['DU003'][0,:,:,:] + \ + self.fh1.variables['DU004'][0,:,:,:] + \ + self.fh1.variables['DU005'][0,:,:,:] + + pm += self.fh1.variables['NO3AN1'][0,:,:,:] * no3_coeff + \ + self.fh1.variables['NO3AN2'][0,:,:,:] * no3_coeff + \ + self.fh1.variables['NO3AN3'][0,:,:,:] * no3_coeff + + pm += self.fh1.variables['SS001'][0,:,:,:] + \ + self.fh1.variables['SS002'][0,:,:,:] + \ + self.fh1.variables['SS003'][0,:,:,:] + \ + self.fh1.variables['SS004'][0,:,:,:] + \ + self.fh1.variables['SS005'][0,:,:,:] + + pm += self.fh1.variables['SO4'][0,:,:,:] * so4_coeff + + pm *= self.fh1.variables['AIRDENS'][0,:,:,:] + + var = transform.vinterp(pm, self.hgt, self.levels, strict=self.strict) + + D = self.fh1.variables['BCPHILIC'] + attr = collections.OrderedDict(D.__dict__) + attr.update( list({'long_name':'particulate_matter_total_micrometers', + 'standard_name':'particulate_matter_total_micrometers' + }.items()) ) + + return (var, attr) + + def createDUST(self, name): + + transform = gterp.Interpolator() + + dust = self.fh1.variables['DU001'][0,:,:,:] + \ + self.fh1.variables['DU002'][0,:,:,:] + \ + self.fh1.variables['DU003'][0,:,:,:] + \ + self.fh1.variables['DU004'][0,:,:,:] + \ + self.fh1.variables['DU005'][0,:,:,:] + + dust *= self.fh1.variables['AIRDENS'][0,:,:,:] + + var = transform.vinterp(dust, self.hgt, self.levels, strict=self.strict) + + D = self.fh1.variables['DU001'] + attr = collections.OrderedDict(D.__dict__) + attr.update( list({'long_name':'dust_total_micrometers', + 'standard_name':'dust_total_micrometers' + }.items()) ) + + return (var, attr) + + def createBCOC(self, name): + + transform = gterp.Interpolator() + + bcoc = self.fh1.variables['BCPHILIC'][0,:,:,:] + \ + self.fh1.variables['BCPHOBIC'][0,:,:,:] + + bcoc += self.fh1.variables['OCPHILIC'][0,:,:,:] + \ + self.fh1.variables['OCPHOBIC'][0,:,:,:] + + bcoc *= self.fh1.variables['AIRDENS'][0,:,:,:] + + var = transform.vinterp(bcoc, self.hgt, self.levels, strict=self.strict) + + D = self.fh1.variables['BCPHILIC'] + attr = collections.OrderedDict(D.__dict__) + attr.update( list({'long_name':'Black+Organic Carbon Mass', + 'standard_name':'Black+Organic Carbon Mass', + 'units':'kg m-3'}.items()) ) + + return (var, attr) diff --git a/projects/MissionSupport/derived_collections/eta2hgt/src/geos/interpolator.py b/projects/MissionSupport/derived_collections/eta2hgt/src/geos/interpolator.py new file mode 100644 index 0000000..4138fcf --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2hgt/src/geos/interpolator.py @@ -0,0 +1,59 @@ +import numpy as np + +class Interpolator(object): + + def __init__(self, undef=1.0e+15): + + self.undef = undef + + def vinterp(self, var, vcoord, levels, strict=True): + + nlev = len(levels) + km, jm, im = var.shape + +# vout = np.full((nlev,jm,im), self.undef, var.dtype) + vout = np.ndarray((nlev,jm,im), dtype=var.dtype) + vout[:] = self.undef + + for j in range(0,jm): + + for i in range(0,im): + + vc = vcoord[:,j,i].tolist() + v = var[:,j,i].tolist() + + for k, lev in enumerate(levels): + + l1, l2, found = self.vfind(lev, vc) + if not found and strict: continue + + vout[k,j,i] = self.interp(v[l1], v[l2], vc[l1], vc[l2], lev) + + return vout + + def vfind(self, lev, levels): + + nlev = len(levels) + + if levels[0] < levels[1]: + + if lev < levels[0]: return (0, 1, False) + if lev > levels[-1]: return (-2, -1, False) + + for k in range(1, nlev): + if levels[k] >= lev: return (k-1, k, True) + + else: + + if lev > levels[0]: return (0, 1, False) + if lev < levels[-1]: return (-2, -1, False) + + for k in range(1, nlev): + if levels[k] <= lev: return (k-1, k, True) + + def interp(self, q1, q2, loc1, loc2, newloc): + + slope = (q2 - q1) / (loc2 - loc1) + intercept = q1 - slope * loc1 + + return slope * newloc + intercept diff --git a/projects/MissionSupport/derived_collections/eta2hgt/src/geos/netcdf.py b/projects/MissionSupport/derived_collections/eta2hgt/src/geos/netcdf.py new file mode 100644 index 0000000..64bfb30 --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2hgt/src/geos/netcdf.py @@ -0,0 +1,42 @@ +import os +import collections +from netCDF4 import Dataset as dset + +class Dataset(object): + + def __init__(self, fname, **kwargs): + + self.fname = fname + self.name = os.path.basename(fname) + self.path = os.path.dirname(fname) + + try: + os.makedirs(self.path, 0o755) + except: + pass + + self.fh = dset(fname, "w", format="NETCDF4") + + return + + def write_global_attr(self, attr, **kwargs): + + attr = collections.OrderedDict(attr) + attr.update(list(kwargs.items())) + self.fh.setncatts(attr) + + def write_var(self, name, var, dims, attr, **kwargs): + + attr = collections.OrderedDict(attr) + attr.update(list(kwargs.items())) + + if dims and len(dims) == 1: + self.fh.createDimension(name , var.size) + + vh = self.fh.createVariable(name, var.dtype, dims) + vh.setncatts(attr) + + vh[:] = var + + + def close(self): self.fh.close() diff --git a/projects/MissionSupport/derived_collections/eta2hgt/src/interface.py b/projects/MissionSupport/derived_collections/eta2hgt/src/interface.py new file mode 100644 index 0000000..0622ddf --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2hgt/src/interface.py @@ -0,0 +1,101 @@ + +import os +import sys +import argparse +import datetime as dt + +def parse_args(args=None): + + parser = argparse.ArgumentParser() + +# # required +# required = parser.add_argument_group('required arguments') + +# required.add_argument( +# '--rc', metavar='RESOURCE FILE', required=True, +# help='Name of resource file' +# ) + + # optional + parser.add_argument( + '-i', '--iname', metavar='INPUT', default='', + help='Input filename (default: %(default)s)',required=True + ) + parser.add_argument( + '-o', '--oname', metavar='ONAME', default='', + help='Output filename (default: %(default)s)',required=True + ) + parser.add_argument( + '--hname', metavar='HNAME', default='',required=True, + help='Name of file containing heights (ETA) (default: %(default)s)' + ) + parser.add_argument( + '-v', '--vars', metavar='VARS', default='',required=True, + help='Comma-separated list of variables (default: %(default)s)' + ) + parser.add_argument( + '-l', '--levels', metavar='LEVELS', default='',required=True, + help='Comma-separated list of levels (default: %(default)s)' + ) + parser.add_argument( + '--time_dt', metavar='YYYYMMDDTHHMMSS', default=None, + help='Time in ISO format' + ) + parser.add_argument( + '--fcst_dt', metavar='YYYYMMDDTHHMMSS', default=None, + help='Forecast start time in ISO format' + ) + parser.add_argument( + '--start_dt', metavar='YYYYMMDDTHHMMSS', default=None, + help='Start time in ISO format' + ) + parser.add_argument( + '--end_dt', metavar='YYYYMMDDTHHMMSS', default=None, + help='Ending time in ISO format' + ) + parser.add_argument( + '--t_deltat', metavar='HOURS', type=int, default='3', + help='Time increment in hours (default: %(default)s)' + ) + parser.add_argument( + '--strict', action='store_true', help='Do not extrapolate' + ) + parser.add_argument( + '--ground', action='store_true', help='Use ground as reference' + ) + parser.add_argument( + '--feet', action='store_true', help='Levels in units of feet' + ) + parser.add_argument( + '--alt', action='store_true', help='Use altimetric height' + ) + + if not len(args): + parser.print_help() + sys.exit(1) + + args = vars(parser.parse_args(args)) + + if args['time_dt'] is None: + now = dt.datetime.utcnow() + hour = int(now.hour / 12) * 12 + hhmmss = "%06d"%(hour*10000,) + args['time_dt'] = now.strftime('%Y%m%dT' + hhmmss) + + if args['start_dt'] is None: + args['start_dt'] = args['time_dt'] + else: + args['time_dt'] = args['start_dt'] + + if args['end_dt'] is None: + args['end_dt'] = args['start_dt'] + + if args['fcst_dt']: + args['fcst_dt'] = dt.datetime.strptime(args['fcst_dt'],'%Y%m%dT%H%M%S') + + args['time_dt'] = dt.datetime.strptime(args['time_dt'],'%Y%m%dT%H%M%S') + args['start_dt'] = dt.datetime.strptime(args['start_dt'],'%Y%m%dT%H%M%S') + args['end_dt'] = dt.datetime.strptime(args['end_dt'],'%Y%m%dT%H%M%S') + args['t_deltat'] = dt.timedelta(hours=args['t_deltat']) + + return args diff --git a/projects/MissionSupport/derived_collections/eta2hgt/src/taskmanager.py b/projects/MissionSupport/derived_collections/eta2hgt/src/taskmanager.py new file mode 100755 index 0000000..9abe184 --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2hgt/src/taskmanager.py @@ -0,0 +1,111 @@ +"""Defines classes and methods for managing multiple tasks in parallel. + +**See Also:** + Modules: subprocess, multiprocessing +""" + + +# should move print statements outside of module + +import time +import shlex +import subprocess +import multiprocessing + +class TaskManager(object): + """Provides methods for managing multiple tasks in parallel. + + **Args:** + none + + **Raises:** + none + """ + + def __init__(self): # bad default + self.max_task = multiprocessing.cpu_count() + print('Using ' + str(self.max_task) + ' processors.') + self.task = {} + self.command = {} + + def spawn(self, command): + """Executes the specified command as a new task. + + **Args:** + command : string : input + Command to be executed. + + **Returns:** + none + + **Raises:** + none + + **Notes:** + 1. This method will wait for a processor to become available. There + is currently no option to specify the wait time or query + interval. + """ + + while self.load() >= self.max_task: + time.sleep(1) + + cmd = shlex.split(command) + + p = subprocess.Popen( + cmd, stdout=None, stderr=None, shell=False + ) + process = str(p.pid) + self.task[process] = p + self.command[process] = command + + def load(self): + """Determines the number of tasks (load) currently executing. + + **Args:** + none + + **Returns:** + ntasks : integer + Number of tasks currently executing. + + **Raises:** + none + + **Notes:** + none + """ + + ntask = len(self.task) + processes = list(self.task.keys()) + + for process in processes: + p = self.task[process] + + if p.poll() == None: + continue + + if p.returncode != 0: + print(str(self.command[process]) + 'ended with rc=' + str(p.returncode)) + del self.task[process] + del self.command[process] + + ntask -= 1 + + return ntask + + def wait(self): + """Waits for all tasks to complete. + + **Args:** + none + + **Returns:** + none + + **Raises:** + none + """ + + while self.load() > 0: + time.sleep(1) diff --git a/projects/MissionSupport/derived_collections/eta2prs/bin/aerosol.py b/projects/MissionSupport/derived_collections/eta2prs/bin/aerosol.py new file mode 100755 index 0000000..0dc89ef --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2prs/bin/aerosol.py @@ -0,0 +1,54 @@ +#! /usr/bin/env python + +import os +import sys +import numpy as np +from netCDF4 import Dataset + +import interface +import geos.netcdf as gnc +import geos.aerosol as ga + +request = interface.parse_args(sys.argv[1:]) + +in_file = request['iname'] +out_file = request['oname'] +vars = request['vars'].split(',') + +fh_in = Dataset(in_file, mode='r') +fh_out = gnc.Dataset(out_file) + +# Write global attributes +# ======================= + +fh_out.write_global_attr(fh_in.__dict__, + Title='My Title', + History='File written by aerosol.py', + Filename=os.path.basename(out_file)) + +# Write dimensions +# ================ + +dims = ('time', 'lev', 'lat', 'lon') + +time = fh_in.variables['time'] +lat = fh_in.variables['lat'] +lon = fh_in.variables['lon'] +lev = fh_in.variables['lev'] + +fh_out.write_var('time', time[:], ('time',), time.__dict__) +fh_out.write_var('lev', lev[:], ('lev',), lev.__dict__) +fh_out.write_var('lat', lat[:], ('lat',), lat.__dict__) +fh_out.write_var('lon', lon[:], ('lon',), lon.__dict__) + +# Write variables +# =============== + +aer = ga.Aerosol(fh_in) + +for name in vars: + print(name) + var, attr = aer.createVariable(name) + fh_out.write_var(name, var, dims, attr) + +fh_out.close() diff --git a/projects/MissionSupport/derived_collections/eta2prs/bin/eta2prs.py b/projects/MissionSupport/derived_collections/eta2prs/bin/eta2prs.py new file mode 100755 index 0000000..cc20cdd --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2prs/bin/eta2prs.py @@ -0,0 +1,29 @@ +#! /usr/bin/env python + +import os +import sys +from multiprocessing import Pool + +import interface +from handlers import * + +request = interface.parse_args(sys.argv[1:]) + +fcst_dt = request['fcst_dt'] +start_dt = request['start_dt'] +end_dt = request['end_dt'] +t_deltat = request['t_deltat'] + +args = [] +t = start_dt +while t <= end_dt: + + request['time_dt'] = t + args.append(dict(request)) + + t += t_deltat + +pool = Pool(8) +pool.map(eta2prs_process, args) + +sys.exit(0) diff --git a/projects/MissionSupport/derived_collections/eta2prs/bin/eta2prs.sh b/projects/MissionSupport/derived_collections/eta2prs/bin/eta2prs.sh new file mode 100755 index 0000000..604254e --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2prs/bin/eta2prs.sh @@ -0,0 +1,63 @@ +#!/bin/sh + +if [ $# -ne 4 ]; then + echo "Usage: $0 [ccyymmdd] [hhmmss] [flen] [hinc]" + exit 1 +else + idate=$1 + itime=$2 + flen=`expr $3 + 100 | cut -c2,3` + hinc=$4 +fi + +fcst_dt=`timetag $idate $itime "{%Y%m%dT%H%M%S}%+d00"` +start_dt=$fcst_dt +if [ $flen -eq 30 ]; then + end_dt=`timetag $idate $itime "{%Y%m%dT%H%M%S}%+H$flen"` +else + end_dt=`timetag $idate $itime "{%Y%m%dT%H%M%S}%+d$flen"` +fi +yyyymmddhh=`timetag $idate $itime "{%Y %m %d %H}%+d00"` + +DEST=/discover/nobackup/projects/gmao/merra2/data/pub/supplemental/fp_Np + +# ********************* +# Create Np collections +# ********************* + +# inst3_3d_aer_Nv +# =============== + +VARS="PM25,PM10,PM,DUST,BCOC" +LEVELS="1000,975,950,925,900,850,800,750,700,650,600,550,500,450,400,350,300,250,200,150,100,70,50,30,20,10" + +NVFILE=/discover/nobackup/projects/gmao/gmao_ops/pub/fp/forecast/Y%%Y/M%%m/D%%d/H%%H/GEOS.fp.fcst.inst3_3d_aer_Nv.%%Y%%m%%d_%%H+%Y%m%d_%H00.V01.nc4 +NPFILE=$DEST/forecast/Y%%Y/M%%m/D%%d/H%%H/GEOS.fp.fcst.inst3_3d_aer_Np + +eta2prs.py --iname $NVFILE --oname $NPFILE \ + --levels "$LEVELS" \ + --vars "$VARS" \ + --fcst_dt $fcst_dt \ + --start_dt $start_dt \ + --end_dt $end_dt \ + --t_deltat $hinc + +# ******************************** +# Create the Opendap control files +# ******************************** + +g5_ddf.pl -c -v -d $DEST $DEST $yyyymmddhh + +files=`find $DEST/opendap/ -type f ! -name "*.portal"` + +for pathname in $files; do + + if [ ! -f $pathname.portal ]; then +# cat $pathname | sed 's@data/pub/supplemental@pub/supplemental@g' > $pathname.portal + cat $pathname | sed s'@dset ^../../../@dset /discover/nobackup/projects/gmao/merra2/pub/supplemental/fp_Np@g' > $pathname.portal + + fi + +done + +exit 0 diff --git a/projects/MissionSupport/derived_collections/eta2prs/cron/eta2prs.d b/projects/MissionSupport/derived_collections/eta2prs/cron/eta2prs.d new file mode 100755 index 0000000..c7f73d3 --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2prs/cron/eta2prs.d @@ -0,0 +1,76 @@ +#!/bin/sh + +if [ $# -ne 2 ]; then + echo "Usage: $0 [ccyymmdd] [hhmmss]" + exit 1 +else + idate=$1 + itime=$2 +fi + +#exec >/dev/null 2>&1 + +SENTINEL=/discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast/inst1_2d_hwl_Nx/inst1_2d_hwl_Nx.%Y%m%d_%H +#SENTINEL=/discover/nobackup/projects/gmao/gmao_ops/pub/f516_fp/forecast/Y%Y/M%m/D%d/H%H/GEOS.fp.fcst.inst1_2d_hwl_Nx.%Y%m%d_%H+%%Y%%m%%d_%%H%%M.V01.nc4 + +while [ 1 ]; do + + hour=`expr $itime / 10000` + if [ $hour -eq 0 ]; then + flen=10 + else + if [ $hour -eq 12 ]; then + flen=5 + else + flen=30 + fi + fi + + if [ $flen -eq 30 ]; then + edattim=`timetag $idate $itime {%Y%m%d_%H%M%S}%+H$flen` + else + edattim=`timetag $idate $itime {%Y%m%d_%H%M%S}%+d$flen` + fi + edate=`echo $edattim | cut -d'_' -f1` + etime=`echo $edattim | cut -d'_' -f2` + sentinel=`timetag $idate $itime $SENTINEL` + sentinel=`timetag $edate $etime $sentinel` + + if [ -f $sentinel ]; then + + sleep 300 + + cat < eta2prs.j + #!/bin/csh -fx + + #SBATCH --job-name=eta2prs_v1.0 + #SBATCH --account=g2538 + #SBATCH --time=1:30:00 + #SBATCH --qos=daohi + #SBATCH --ntasks=28 + #SBATCH --export=NONE + #SBATCH --constraint=mil + #SBATCH --output=/discover/nobackup/dao_ops/jardizzo/FLUID/eta2prs_v1.0_${idate}_${itime}.log + + limit stacksize unlimited + cd /home/dao_ops/jardizzo/FLUID/we-can/utils/eta2prs_v1.0_sles15 + source modules + + eta2prs.sh $idate $itime $flen 3 +EOF + + sbatch eta2prs.j + + dattim=`timetag $idate $itime {%Y%m%d_%H%M%S}%+H06` + idate=`echo $dattim | cut -d'_' -f1` + itime=`echo $dattim | cut -d'_' -f2` + + else + + sleep 300 + + fi + +done + +exit 0 diff --git a/projects/MissionSupport/derived_collections/eta2prs/cron/eta2prs.j b/projects/MissionSupport/derived_collections/eta2prs/cron/eta2prs.j new file mode 100644 index 0000000..58b9a28 --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2prs/cron/eta2prs.j @@ -0,0 +1,16 @@ +#!/bin/csh -fx + +#SBATCH --job-name=eta2prs_v1.0 +#SBATCH --account=g2538 +#SBATCH --time=1:30:00 +#SBATCH --qos=daohi +#SBATCH --ntasks=28 +#SBATCH --export=NONE +#SBATCH --constraint=mil +#SBATCH --output=/discover/nobackup/dao_ops/jardizzo/FLUID/eta2prs_v1.0_20260228_000000.log + +limit stacksize unlimited +cd /home/dao_ops/jardizzo/FLUID/we-can/utils/eta2prs_v1.0_sles15 +source modules + +eta2prs.sh 20260228 000000 10 3 diff --git a/projects/MissionSupport/derived_collections/eta2prs/g5_modules b/projects/MissionSupport/derived_collections/eta2prs/g5_modules new file mode 100644 index 0000000..362b5a8 --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2prs/g5_modules @@ -0,0 +1,442 @@ +#!/bin/csh -f +######################################################################## +# +# Name: g5_modules +# +# Purposes - +# * provide single location for BASEDIR and module values +# * initialize the following: +# - set BASEDIR +# - update LD_LIBRARY_PATH with BASEDIR lib (if useldlibs is set) +# - load library modules +# * echo expected BASEDIR and library module values when queried +# +# Notes: +# 1. The script will not function correctly if the scriptname +# definition within the script is incorrect. +# 2. Type "g5_modules help" for usage information. +# +# Perl Notes: +# ========== +# 1. You cannot "source" this file from a perl script. +# 2. Instead use the following in your perl script: +# #-------------------------------- +# use Env; +# do "g5_modules_perl_wrapper"; +# #-------------------------------- +# 3. Use the g5_modules_perl_wrapper file located in the build's bin +# directory, where a copy of g5_modules also resides. This is important +# since g5_modules_perl_wrapper uses g5_modules and expects it to be in +# the same directory. +# +# Bash Notes: +# ========== +# If you are in a bash shell, then source the g5_modules.sh script. +# > source g5_modules.sh +# +# REVISION HISTORY +# 31Aug2007 Stassi Initial version of code +# 15Oct2007 Stassi Expand list of machines and include defaults +# 15Dec2007 Stassi Added LD_LIBRARY_PATH functionality +# 21Jul2008 Takacs New modules and BASEDIR on discover after OS upgrade +# 13Apr2009 Stassi Updated for pleiades +# 22Apr2010 Kokron Updated for Fortuna-2.1 on pleiades +# 21Jul2011 Kokron Overlay older MKL module as on discover to gain reproducible results from dgeev in GSI +# 24Aug2012 Stassi Added sh option to write bash source-able file +# 03Nov2016 Thompson Remove JIBB +######################################################################## + +# NOTE: Spell out scriptname--DO NOT SET EQUAL TO $0! +#---------------------------------------------------- +set scriptname = g5_modules +if ( $scriptname == "$0:t" ) then + set sourced = 0 +else + set sourced = 1 +endif + +# check for improper usage +#------------------------- +if (! $sourced && ! $#argv) goto usage # not sourced and no args +if ( $sourced && $#argv) goto usage # sourced with args + +# get architecture, machine, and node information +#------------------------------------------------ +set arch = `uname -s` +set mach = `uname -m` +set node = `uname -n` + +# Find site +# --------- + +if (($node =~ discover*) || ($node =~ borg*) || \ + ($node =~ dali*) || ($node =~ warp*)) then + + set site = "NCCS" + + # NCCS now has both SLES15 and SLES12 machines + set OS_VERSION=`grep VERSION_ID /etc/os-release | cut -d= -f2 | cut -d. -f1 | sed 's/"//g'` + +else if (($node =~ pfe*) || ($node =~ afe*) || \ + ($node =~ r[0-9]*i[0-9]*n[0-9]*) || \ + ($node =~ r[0-9]*c[0-9]*t[0-9]*n[0-9]*)) then + + # We are on NAS... + set site = "NAS" + +else if ( -d /ford1/share/gmao_SIteam/ && -d /ford1/local/ && $arch == Linux ) then + set site = "GMAO.desktop" + +else + set site = $node + +endif + +alias echo2 "echo \!* > /dev/stderr" + +# get values +#----------- +if ($mach == x86_64) goto X86_64 +if ($mach == arm64) goto ARM64 + +# ERROR -- unknown architecture/machine +#-------------------------------------- +echo2 "${scriptname}: >>>WARNING<<< unrecognizable arch/machine = $arch/$mach" +echo 0 # indicating error condition +exit 8 + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +# X86_64 values (Linux) +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +X86_64: + +#==================# +# X86_64 default # +#==================# + +set modinit = DUMMY + +set usemodules = 0 +set useldlibs = 0 + +#========# +# NCCS # +#========# +if ( $site == NCCS ) then + + set mod1 = GEOSenv + + if ( $OS_VERSION == 12 ) then + + set mod2 = comp/gcc/11.2.0 + set mod3 = comp/intel/2021.6.0 + set mod4 = mpi/impi/2021.6.0 + set mod5 = python/GEOSpyD/Min23.5.2-0_py3.11_AND_Min4.8.3_py2.7 + set basedir = /discover/swdev/gmao_SIteam/Baselibs/ESMA-Baselibs-7.24.0/x86_64-pc-linux-gnu/ifort_2021.6.0-intelmpi_2021.6.0-SLES12 + set usemod1 = /discover/swdev/gmao_SIteam/modulefiles-SLES12 + + else + + set mod2 = comp/gcc/11.4.0 + set mod3 = comp/intel/2021.6.0 + set mod4 = mpi/impi/2021.13 + set mod5 = python/GEOSpyD/Min23.5.2-0_py3.11 + set basedir = /discover/swdev/gmao_SIteam/Baselibs/ESMA-Baselibs-7.24.0/x86_64-pc-linux-gnu/ifort_2021.6.0-intelmpi_2021.13.0-SLES15 + set usemod1 = /discover/swdev/gmao_SIteam/modulefiles-SLES15 + + endif + + set mods = ( $mod1 $mod2 $mod3 $mod4 $mod5 ) + set modinit = /usr/share/modules/init/csh + + set usemods = ( $usemod1 ) + set usemodules = 1 + + set useldlibs = 1 + +#=======# +# NAS # +#=======# +else if ( $site == NAS ) then + + set mod1 = GEOSenv + + set basedir = /nobackup/gmao_SIteam/Baselibs/ESMA-Baselibs-7.24.0/x86_64-pc-linux-gnu/ifort_2022.1.0-mpt_2.28_25Apr23_rhel87 + set mod2 = comp-gcc/11.2.0-TOSS4 + set mod3 = comp-intel/2022.1.0 + set mod4 = mpi-hpe/mpt + + set mod5 = python/GEOSpyD/Min23.5.2-0_py3.11_AND_Min4.8.3_py2.7 + + set mods = ( $mod1 $mod2 $mod3 $mod4 $mod5 ) + set modinit = /usr/share/modules/init/tcsh + + set usemod1 = /u/scicon/tools/modulefiles + set usemod2 = /nobackup/gmao_SIteam/modulefiles + set usemod3 = /nasa/modulefiles/testing + set usemods = ( $usemod1 $usemod2 $usemod3 ) + set usemodules = 1 + + set useldlibs = 1 + +#=================# +# GMAO DESKTOP # +#=================# +else if ( $site == GMAO.desktop ) then + + set basedir=/ford1/share/gmao_SIteam/Baselibs/ESMA-Baselibs-7.24.0/x86_64-pc-linux-gnu/ifort_2022.1.0-intelmpi_2022.1.0 + + set mod1 = GEOSenv + + set mod2 = comp/gcc/11.2.0 + set mod3 = comp/intel/2022.1.0 + set mod4 = mpi/impi/2022.1.0 + set mod5 = other/python/GEOSpyD/Min23.5.2-0_py3.11_AND_Min4.8.3_py2.7 + + set mods = ( $mod1 $mod2 $mod3 $mod4 $mod5 ) + set modinit = /usr/share/Modules/init/tcsh + + set usemod1 = /ford1/share/gmao_SIteam/modulefiles + set usemods = ( $usemod1 ) + set usemodules = 1 + + # Testing shows adding BASEDIR lib to LD_LIBRARY_PATH + # causes issues with the TCL modules on the GMAO machines + set useldlibs = 0 + +endif + +goto ACTION + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +# ARM64 values +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +ARM64: + +#=================# +# ARM64 default # +#=================# + +set modinit = DUMMY + +set usemodules = 0 +set useldlibs = 0 + +goto ACTION + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +# perform requested action +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +ACTION: + +#===================# +# ECHO VALUE(s) # +#===================# +set wrapper = 0 +if ( $#argv > 0 ) then + + if ( $1 == basedir ) then + echo $basedir + + else if ( $1 == modules ) then + echo $mods + + else if ( $1 == modinit ) then + echo $modinit + + else if ( $1 == usemodules ) then + echo $usemods + + else if ( $1 == useldlibs ) then + echo $useldlibs + + else if ( $1 == ESMA_FC ) then + echo $ESMA_FC + + else if ( $1 == site ) then + echo $site + + else if ( $1 == sh ) then + set wrapper = 1 + goto SETVALUES + + else if ( $1 == help ) then + goto usage + + else + echo2 "${scriptname}: >>>ERROR<<< unrecognizable option -- $1" + echo2 Type "$scriptname help" for usage information. + echo 0 # indicating error condition + exit 9 + endif + + exit +endif + +SETVALUES: +#================# +# SET VALUES # +#================# +#------------------------------------------------------------------------- +# set environment variables, BASEDIR and LD_LIBRARY_PATH; and load modules +#------------------------------------------------------------------------- + +# setenv BASEDIR +#--------------- +if ($?basedir) then + if (! $wrapper) echo -n "${scriptname}: Setting BASEDIR" + setenv BASEDIR $basedir +else if ($?BASEDIR) then + if (! $wrapper) echo -n "${scriptname}: BASEDIR found in environment" +else + echo + echo "BASEDIR not found in environment or set by ${scriptname}" + exit 3 +endif + +# add BASEDIR lib to LD_LIBRARY_PATH, if not already there +#--------------------------------------------------------- + +if ($useldlibs) then + if ($?LD_LIBRARY_PATH) then + echo $LD_LIBRARY_PATH | grep $BASEDIR/$arch/lib > /dev/null + if ($status) then # == 1, if not found + setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:$BASEDIR/$arch/lib + endif + else + setenv LD_LIBRARY_PATH $BASEDIR/$arch/lib + endif + +# add individual $ld_libraries to LD_LIBRARY_PATH, if not already there +#---------------------------------------------------------------------- + if ($?ld_libraries) then + foreach lib ( $ld_libraries ) + if ($LD_LIBRARY_PATH !~ *$lib*) then + setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:$lib + endif + end + endif + + if ($?LD_LIBRARY64_PATH) then + echo $LD_LIBRARY64_PATH | grep $BASEDIR/$arch/lib > /dev/null + if ($status) then # == 1, if not found + setenv LD_LIBRARY64_PATH ${LD_LIBRARY64_PATH}:$BASEDIR/$arch/lib + endif + endif +endif + +# Set UDUNITS2_XML_PATH +# --------------------- +setenv UDUNITS2_XML_PATH $BASEDIR/$arch/share/udunits/udunits2.xml + +# load library modules +#--------------------- +if (-e $modinit) then + + if (! $wrapper) echo -n " and modules" + source $modinit + module purge + + if ($usemodules) then + foreach usemod ( $usemods ) + module use -a $usemod + end + endif + + foreach mod ( $mods ) + module load $mod + end + + if ($?XTRAMODS2LOAD) then + set xmods = (`echo $XTRAMODS2LOAD | cut -d: -f1- --output-delimiter=" "`) + foreach mod ( $xmods ) + module load $mod + end + endif + +endif +if (! $wrapper) echo " for $node" + +# write sh commands to a .g5_modules.sh file +#------------------------------------------- +if ($wrapper) then + set outfil = ".g5_modules.sh" + + if ($?BASEDIR) then + echo "export BASEDIR=$BASEDIR" >! $outfil + endif + if ($?LD_LIBRARY_PATH) then + echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH" >> $outfil + endif + if ($?LD_LIBRARY64_PATH) then + echo "export LD_LIBRARY64_PATH=$LD_LIBRARY64_PATH" >> $outfil + endif + if ($?UDUNITS2_XML_PATH) then + echo "export UDUNITS2_XML_PATH=$UDUNITS2_XML_PATH" >> $outfil + endif + + set modulecmd = `which modulecmd` + if ($status) set modulecmd = "/usr/bin/modulecmd" + set modinit_sh = `echo $modinit | sed "s|/csh|/sh|"` + + if (-e $modulecmd) then + if (-e $modinit_sh) then + echo 'source '$modinit_sh >> $outfil + endif + echo 'eval `'$modulecmd sh purge'`' >> $outfil + foreach mod ($mods) + echo 'eval `'$modulecmd sh load $mod'`' >> $outfil + end + endif + +endif +exit + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +# usage information # +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~# +usage: + +more < + +OPTIONS + + help echo usage + basedir echo expected value for BASEDIR environment variable + modules echo expected list of modules + modinit echo location of csh module initialization script + useldlibs echo logical indicating whether BASEDIR lib should be + added to LD_LIBRARY_PATH + usemodules echo logical indicating whether "module use directory(s)" + is needed prior to loading other modules + ESMA_FC echo value of ESMA_FC if set + site echo site as detected by $scriptname + sh write sh version of g5_modules to file named, ".g5_modules.sh" + +EOF +exit 1 diff --git a/projects/MissionSupport/derived_collections/eta2prs/modules b/projects/MissionSupport/derived_collections/eta2prs/modules new file mode 100644 index 0000000..708148e --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2prs/modules @@ -0,0 +1,19 @@ +#!/bin/csh -f + +limit stacksize unlimited + +source /usr/share/modules/init/csh + +module purge +source g5_modules + +setenv GAVERSION 2.1.0.oga.1 + +setenv MYPYTHON /discover/nobackup/projects/gmao/share/dasilva/Python/epd-7.3-2-rh5-x86_64/bin + +set path = ( . /home/dao_ops/GEOSadas-CURRENT/GEOSadas/Linux/bin \ + $SHARE/dasilva/opengrads/Contents $MYPYTHON \ + ~adasilva/bin $SHARE/dasilva/bin /usr/local/bin \ + $path ) + +exit 0 diff --git a/projects/MissionSupport/derived_collections/eta2prs/src/geos/__init__.py b/projects/MissionSupport/derived_collections/eta2prs/src/geos/__init__.py new file mode 100644 index 0000000..1f356cc --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2prs/src/geos/__init__.py @@ -0,0 +1 @@ +__version__ = '1.0.0' diff --git a/projects/MissionSupport/derived_collections/eta2prs/src/geos/aerosol.py b/projects/MissionSupport/derived_collections/eta2prs/src/geos/aerosol.py new file mode 100644 index 0000000..8c6a175 --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2prs/src/geos/aerosol.py @@ -0,0 +1,209 @@ +import math +import numpy as np +import collections + +class Aerosol(object): + + def __init__(self, fh_in, fh_alt=None, **kwargs): + + self.fh1 = fh_in + self.fh2 = fh_alt + + self.handler = {'default' : self.default, + 'PM25' : self.createPM25, + 'PM10' : self.createPM10, + 'PM' : self.createPM, + 'DUST' : self.createDUST, + 'BCOC' : self.createBCOC + } + + def createVariable(self, name): + + handler = self.handler.get(name, self.default) + return handler(name) + + def default(self, name): + + Q = self.fh1.variables[name] + var = Q[0,:,:,:] + + attr = collections.OrderedDict(Q.__dict__) + + return (var, attr) + + def createTHETA(self, name): + + KAPPA = 0.286 + LC = 586.0 + CP2 = 0.240 + + T = self.fh2.variables['T'][0,:,:,:] + Q = self.fh2.variables['QV'][0,:,:,:] + P = self.fh2.variables['PL'][0,:,:,:] + + theta = T * (100000.0/P)**KAPPA + theta = theta * np.exp((LC*Q) / (CP2*T) ) + + D = self.fh2.variables['T'] + attr = collections.OrderedDict(D.__dict__) + attr.update( list({'long_name':'equivalent_potential_temperature', + 'standard_name':'equivalent_potential_temperature', + 'units':'K'}.items()) ) + + return (theta, attr) + + def createPM25(self, name): + + du_coeff = math.log(1.25)/math.log(1.8) + no3_coeff = 80.043 / 62.0 + ss_coeff = math.log(2.5) / math.log(3) + so4_coeff = 132.14 / 96.06 + fn1 = 0.138 + + pm25 = self.fh1.variables['BCPHILIC'][0,:,:,:] + \ + self.fh1.variables['BCPHOBIC'][0,:,:,:] + + pm25 += self.fh1.variables['OCPHILIC'][0,:,:,:] + \ + self.fh1.variables['OCPHOBIC'][0,:,:,:] + + pm25 += self.fh1.variables['DU001'][0,:,:,:] + \ + self.fh1.variables['DU002'][0,:,:,:] * du_coeff + + pm25 += self.fh1.variables['NI001'][0,:,:,:] * no3_coeff + \ + self.fh1.variables['NI002'][0,:,:,:] * no3_coeff * fn1 + + pm25 += self.fh1.variables['SS001'][0,:,:,:] + \ + self.fh1.variables['SS002'][0,:,:,:] + \ + self.fh1.variables['SS003'][0,:,:,:] * ss_coeff + + pm25 += self.fh1.variables['SO4'][0,:,:,:] * so4_coeff + + pm25 *= self.fh1.variables['AIRDENS'][0,:,:,:] + + D = self.fh1.variables['BCPHILIC'] + attr = collections.OrderedDict(D.__dict__) + attr.update( list({'long_name':'particulate_matter_2p5_micrometers', + 'standard_name':'particulate_matter_2p5_micrometers' + }.items()) ) + + return (pm25, attr) + + def createPM10(self, name): + + du_coeff = math.log(1.10)/math.log(1.8) + du_coeff2 = math.log(1.667)/math.log(2.0) + no3_coeff = 80.043 / 62.0 + ss_coeff = math.log(2.5) / math.log(3) + so4_coeff = 132.14 / 96.06 + fn1 = 0.138 + fn2 = 0.808 + fn3 = 0.164 + + pm10 = self.fh1.variables['BCPHILIC'][0,:,:,:] + \ + self.fh1.variables['BCPHOBIC'][0,:,:,:] + + pm10 += self.fh1.variables['OCPHILIC'][0,:,:,:] + \ + self.fh1.variables['OCPHOBIC'][0,:,:,:] + + pm10 += self.fh1.variables['DU001'][0,:,:,:] + \ + self.fh1.variables['DU002'][0,:,:,:] + \ + self.fh1.variables['DU003'][0,:,:,:] + \ + self.fh1.variables['DU004'][0,:,:,:] * du_coeff2 + + pm10 += self.fh1.variables['NI001'][0,:,:,:] * no3_coeff + \ + self.fh1.variables['NI002'][0,:,:,:] * no3_coeff * fn2 + \ + self.fh1.variables['NI003'][0,:,:,:] * no3_coeff * fn3 + + pm10 += self.fh1.variables['SS001'][0,:,:,:] + \ + self.fh1.variables['SS002'][0,:,:,:] + \ + self.fh1.variables['SS003'][0,:,:,:] + \ + self.fh1.variables['SS004'][0,:,:,:] + + pm10 += self.fh1.variables['SO4'][0,:,:,:] * so4_coeff + + pm10 *= self.fh1.variables['AIRDENS'][0,:,:,:] + + D = self.fh1.variables['BCPHILIC'] + attr = collections.OrderedDict(D.__dict__) + attr.update( list({'long_name':'particulate_matter_10_micrometers', + 'standard_name':'particulate_matter_10_micrometers' + }.items()) ) + + return (pm10, attr) + + def createPM(self, name): + + du_coeff = math.log(1.25)/math.log(1.8) + no3_coeff = 80.043 / 62.0 + ss_coeff = math.log(2.5) / math.log(3) + so4_coeff = 132.14 / 96.06 + + pm = self.fh1.variables['BCPHILIC'][0,:,:,:] + \ + self.fh1.variables['BCPHOBIC'][0,:,:,:] + + pm += self.fh1.variables['OCPHILIC'][0,:,:,:] + \ + self.fh1.variables['OCPHOBIC'][0,:,:,:] + + pm += self.fh1.variables['DU001'][0,:,:,:] + \ + self.fh1.variables['DU002'][0,:,:,:] + \ + self.fh1.variables['DU003'][0,:,:,:] + \ + self.fh1.variables['DU004'][0,:,:,:] + \ + self.fh1.variables['DU005'][0,:,:,:] + + pm += self.fh1.variables['NI001'][0,:,:,:] * no3_coeff + \ + self.fh1.variables['NI002'][0,:,:,:] * no3_coeff + \ + self.fh1.variables['NI003'][0,:,:,:] * no3_coeff + + pm += self.fh1.variables['SS001'][0,:,:,:] + \ + self.fh1.variables['SS002'][0,:,:,:] + \ + self.fh1.variables['SS003'][0,:,:,:] + \ + self.fh1.variables['SS004'][0,:,:,:] + \ + self.fh1.variables['SS005'][0,:,:,:] + + pm += self.fh1.variables['SO4'][0,:,:,:] * so4_coeff + + pm *= self.fh1.variables['AIRDENS'][0,:,:,:] + + D = self.fh1.variables['BCPHILIC'] + attr = collections.OrderedDict(D.__dict__) + attr.update( list({'long_name':'particulate_matter_total_micrometers', + 'standard_name':'particulate_matter_total_micrometers' + }.items()) ) + + return (pm, attr) + + def createDUST(self, name): + + dust = self.fh1.variables['DU001'][0,:,:,:] + \ + self.fh1.variables['DU002'][0,:,:,:] + \ + self.fh1.variables['DU003'][0,:,:,:] + \ + self.fh1.variables['DU004'][0,:,:,:] + \ + self.fh1.variables['DU005'][0,:,:,:] + + dust *= self.fh1.variables['AIRDENS'][0,:,:,:] + + D = self.fh1.variables['DU001'] + attr = collections.OrderedDict(D.__dict__) + attr.update( list({'long_name':'dust_total_micrometers', + 'standard_name':'dust_total_micrometers' + }.items()) ) + + return (dust, attr) + + def createBCOC(self, name): + + bcoc = self.fh1.variables['BCPHILIC'][0,:,:,:] + \ + self.fh1.variables['BCPHOBIC'][0,:,:,:] + + bcoc += self.fh1.variables['OCPHILIC'][0,:,:,:] + \ + self.fh1.variables['OCPHOBIC'][0,:,:,:] + + bcoc *= self.fh1.variables['AIRDENS'][0,:,:,:] + + D = self.fh1.variables['BCPHILIC'] + attr = collections.OrderedDict(D.__dict__) + attr.update( list({'long_name':'Black+Organic Carbon Mass', + 'standard_name':'Black+Organic Carbon Mass', + 'units':'kg m-3'}.items()) ) + + return (bcoc, attr) diff --git a/projects/MissionSupport/derived_collections/eta2prs/src/geos/netcdf.py b/projects/MissionSupport/derived_collections/eta2prs/src/geos/netcdf.py new file mode 100644 index 0000000..64bfb30 --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2prs/src/geos/netcdf.py @@ -0,0 +1,42 @@ +import os +import collections +from netCDF4 import Dataset as dset + +class Dataset(object): + + def __init__(self, fname, **kwargs): + + self.fname = fname + self.name = os.path.basename(fname) + self.path = os.path.dirname(fname) + + try: + os.makedirs(self.path, 0o755) + except: + pass + + self.fh = dset(fname, "w", format="NETCDF4") + + return + + def write_global_attr(self, attr, **kwargs): + + attr = collections.OrderedDict(attr) + attr.update(list(kwargs.items())) + self.fh.setncatts(attr) + + def write_var(self, name, var, dims, attr, **kwargs): + + attr = collections.OrderedDict(attr) + attr.update(list(kwargs.items())) + + if dims and len(dims) == 1: + self.fh.createDimension(name , var.size) + + vh = self.fh.createVariable(name, var.dtype, dims) + vh.setncatts(attr) + + vh[:] = var + + + def close(self): self.fh.close() diff --git a/projects/MissionSupport/derived_collections/eta2prs/src/handlers.py b/projects/MissionSupport/derived_collections/eta2prs/src/handlers.py new file mode 100644 index 0000000..49c532e --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2prs/src/handlers.py @@ -0,0 +1,51 @@ +import os +import shlex +import ftplib +import subprocess +from shutil import copyfile +from multiprocessing import Pool + +def eta2prs_process(request): + + fdt = request['fcst_dt'] + tdt = request['time_dt'] + + # Execute command to convert model-level to pressure-level + + levels = request['levels'].replace(',',' ') + + iname = tdt.strftime(request['iname']) + iname = fdt.strftime(iname) + + oname = tdt.strftime(request['oname']) + oname = fdt.strftime(oname) + + odir = os.path.dirname(oname) + + try: + os.makedirs(odir, 0o755) + except: + pass + + cmd = 'eta2prs.x -tag ' + oname + ' -levs ' + levels + \ + ' -hdf .TRUE. -noquads -eta ' + iname + + cmd = shlex.split(cmd) + + subprocess.call(cmd) + + # Execute command to create aerosol files + + time = tdt.strftime('%Y%m%d_%H%M') + ftime = fdt.strftime('%Y%m%d_%H') + iname = oname + '.' + time + 'z.nc4' + oname = oname + '.' + ftime + '+' + time + '.V01.nc4' + + vars = request['vars'] + cmd = ['aerosol.py', '--iname',iname,'--oname',oname,'--vars',vars] + + subprocess.call(cmd) + + # Remove the intermediate pressure-level file. + + os.remove(iname) diff --git a/projects/MissionSupport/derived_collections/eta2prs/src/interface.py b/projects/MissionSupport/derived_collections/eta2prs/src/interface.py new file mode 100644 index 0000000..056d28d --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2prs/src/interface.py @@ -0,0 +1,88 @@ + +import os +import sys +import argparse +import datetime as dt + +def parse_args(args=None): + + levels = [ 1000,975,950,925,900,850,800,750,700,650, + 600,550,500,450,400,350,300,250,200,150, + 100,70,50,30,20,10 + ] + myvars = "PM25,PM10,PM,DUST,BCOC" + + mylevels = ','.join([str(v) for v in levels]) + + parser = argparse.ArgumentParser() + + parser.add_argument( + '-i', '--iname', metavar='INPUT', default='', + help='Input filename (default: %(default)s)',required=True + ) + parser.add_argument( + '-o', '--oname', metavar='ONAME', default='', + help='Output filename (default: %(default)s)',required=True + ) + parser.add_argument( + '--aname', metavar='ANAME', default='', + help='Name of file containing meteorology (default: %(default)s)' + ) + parser.add_argument( + '-v', '--vars', metavar='VARS', default=myvars, + help='Comma-separated list of variables (default: %(default)s)' + ) + parser.add_argument( + '-l', '--levels', metavar='LEVELS', default=mylevels, + help='Comma-separated list of levels (default: %(default)s)' + ) + parser.add_argument( + '--time_dt', metavar='YYYYMMDDTHHMMSS', default=None, + help='Time in ISO format' + ) + parser.add_argument( + '--fcst_dt', metavar='YYYYMMDDTHHMMSS', default=None, + help='Forecast start time in ISO format' + ) + parser.add_argument( + '--start_dt', metavar='YYYYMMDDTHHMMSS', default=None, + help='Start time in ISO format' + ) + parser.add_argument( + '--end_dt', metavar='YYYYMMDDTHHMMSS', default=None, + help='Ending time in ISO format' + ) + parser.add_argument( + '--t_deltat', metavar='HOURS', type=int, default='3', + help='Time increment in hours (default: %(default)s)' + ) + + if not len(args): + parser.print_help() + sys.exit(1) + + args = vars(parser.parse_args(args)) + + if args['time_dt'] is None: + now = dt.datetime.utcnow() + hour = int(now.hour / 12) * 12 + hhmmss = "%06d"%(hour*10000,) + args['time_dt'] = now.strftime('%Y%m%dT' + hhmmss) + + if args['start_dt'] is None: + args['start_dt'] = args['time_dt'] + else: + args['time_dt'] = args['start_dt'] + + if args['end_dt'] is None: + args['end_dt'] = args['start_dt'] + + if args['fcst_dt']: + args['fcst_dt'] = dt.datetime.strptime(args['fcst_dt'],'%Y%m%dT%H%M%S') + + args['time_dt'] = dt.datetime.strptime(args['time_dt'],'%Y%m%dT%H%M%S') + args['start_dt'] = dt.datetime.strptime(args['start_dt'],'%Y%m%dT%H%M%S') + args['end_dt'] = dt.datetime.strptime(args['end_dt'],'%Y%m%dT%H%M%S') + args['t_deltat'] = dt.timedelta(hours=args['t_deltat']) + + return args diff --git a/projects/MissionSupport/derived_collections/eta2prs/src/interpolator.py b/projects/MissionSupport/derived_collections/eta2prs/src/interpolator.py new file mode 100644 index 0000000..0131bf2 --- /dev/null +++ b/projects/MissionSupport/derived_collections/eta2prs/src/interpolator.py @@ -0,0 +1,57 @@ +import numpy as np + +class Interpolator(object): + + def __init__(self, undef=1.0e+15): + + self.undef = undef + + def vinterp(self, var, vcoord, levels, strict=True): + + nlev = len(levels) + km, jm, im = var.shape + + vout = np.full((nlev,jm,im), self.undef, var.dtype) + + for j in range(0,jm): + + for i in range(0,im): + + vc = vcoord[:,j,i].tolist() + v = var[:,j,i].tolist() + + for k, lev in enumerate(levels): + + l1, l2, found = self.vfind(lev, vc) + if not found and strict: continue + + vout[k,j,i] = self.interp(v[l1], v[l2], vc[l1], vc[l2], lev) + + return vout + + def vfind(self, lev, levels): + + nlev = len(levels) + + if levels[0] < levels[1]: + + if lev < levels[0]: return (0, 1, False) + if lev > levels[-1]: return (-2, -1, False) + + for k in range(1, nlev): + if levels[k] >= lev: return (k-1, k, True) + + else: + + if lev > levels[0]: return (0, 1, False) + if lev < levels[-1]: return (-2, -1, False) + + for k in range(1, nlev): + if levels[k] <= lev: return (k-1, k, True) + + def interp(self, q1, q2, loc1, loc2, newloc): + + slope = (q2 - q1) / (loc2 - loc1) + intercept = q1 - slope * loc1 + + return slope * newloc + intercept diff --git a/projects/MissionSupport/missions/SARP/README b/projects/MissionSupport/missions/SARP/README new file mode 100644 index 0000000..cbeb5ac --- /dev/null +++ b/projects/MissionSupport/missions/SARP/README @@ -0,0 +1,11 @@ +OVERVIEW +========= + +These codes were written under time pressure and there is room for optimization. First, the YAML config files can be optimized to reduce redundant parameter specifications. Second, the handlers can become registered components that a generalized application could invoke without the need for a special driver for SARP or any other mission. The "wxplot" utility (bundled with WxMap) can be used to achieve this optimization and there is the potential to eliminate the need for any specialized drivers. The YAML config files can be augmented to specify the handler for every playlist theme. + +SPECIAL NOTES on CYLC +===================== + +The cylc implementation requires that the suite.rc file be located at the root location of the software package. A utility is needed to stage all file dependencies with the suite.rc file relocated for the cylc implementation to work. This utility does exist - "cylc_submit". Please inquire. + +As of this writing, the HTML CSS file must be customized and put into place for any new installment of a mission. The css files can be further abstracted to remove this dependency (i.e. install a cental css file for all missions and remove references to mission-dependent banner files etc.). diff --git a/projects/MissionSupport/missions/SARP/bin/sarp_plot.py b/projects/MissionSupport/missions/SARP/bin/sarp_plot.py new file mode 100755 index 0000000..db37cda --- /dev/null +++ b/projects/MissionSupport/missions/SARP/bin/sarp_plot.py @@ -0,0 +1,36 @@ +#! /usr/bin/env python + +import os +import sys + +import subprocess +from multiprocessing import Pool + +import MSinterface +from player import Player +from myutils import read_yaml +from handlers import make_sarp, make_html, make_sarp_stations + +# Retrieve command-line arguments. + +ui = MSinterface.Interface("Creates SARP movies") +args = ui.get_args() +arg_dt = args["time_dt"] + +# Get configuration. +# ================== + +config = read_yaml(args["config"]) +PLAYLIST = config.get("PLAYLIST") + +for play in PLAYLIST: + + cfg = config[play] + iterator = Player(cfg, time_dt=arg_dt, tloop=False) + ntasks = cfg.get("ntasks", 24) + pool = Pool(ntasks) + pool.map(make_sarp, iterator) + + request = next(iter(iterator)) + make_sarp_stations(request) + make_html(request) diff --git a/projects/MissionSupport/missions/SARP/config/inputs-cf.yml b/projects/MissionSupport/missions/SARP/config/inputs-cf.yml new file mode 100644 index 0000000..b102d5a --- /dev/null +++ b/projects/MissionSupport/missions/SARP/config/inputs-cf.yml @@ -0,0 +1,52 @@ +# Directory path to gridded forecast files (NetCDF) +FC_FILE_PATH: /css/gmao/geos-cf/NRTv2/pub/fcst/Y%iy4/M%im2/D%id2 + +# Directory path to gridded forecast control files +FC_GRID_PATH: /css/gmao/geos-cf/NRTv2/pub/opendap/fcst + +collections: &COLLECTIONS + + chm_tavg_1hr_glo_L1440x721_slv: + + src: $FC_FILE_PATH + min_count: 120 + offset: 30 + + files: + + - "GEOS.cf.fcst.chm_tavg_1hr_glo_L1440x721_slv.%iy4%im2%id2_%ih2z+*nc4" + + chm_inst_1hr_glo_L1440x721_p23: + + src: $FC_FILE_PATH + min_count: 120 + offset: 60 + + files: + + - "GEOS.cf.fcst.chm_inst_1hr_glo_L1440x721_p23.%iy4%im2%id2_%ih2z+*nc4" + + met_tavg_1hr_glo_L1440x721_slv: + + src: $FC_FILE_PATH + min_count: 120 + offset: 30 + + files: + + - "GEOS.cf.fcst.met_tavg_1hr_glo_L1440x721_slv.%iy4%im2%id2_%ih2z+*nc4" + +get_data: + +# <<: *COLLECTIONS + + opendap: + + src: $FC_GRID_PATH + min_count: 3 + + files: + + - $FC_GRID_PATH/met_tavg_1hr_glo_L1440x721_slv/met_tavg_1hr_glo_L1440x721_slv.%iy4%im2%id2_%ih2z + - $FC_GRID_PATH/chm_inst_1hr_glo_L1440x721_p23/chm_inst_1hr_glo_L1440x721_p23.%iy4%im2%id2_%ih2z + - $FC_GRID_PATH/chm_tavg_1hr_glo_L1440x721_slv/chm_tavg_1hr_glo_L1440x721_slv.%iy4%im2%id2_%ih2z diff --git a/projects/MissionSupport/missions/SARP/config/inputs-fp.yml b/projects/MissionSupport/missions/SARP/config/inputs-fp.yml new file mode 100644 index 0000000..7bb5b3b --- /dev/null +++ b/projects/MissionSupport/missions/SARP/config/inputs-fp.yml @@ -0,0 +1,102 @@ + +# Directory path to gridded forecast files (NetCDF) +FC_FILE_PATH: /discover/nobackup/projects/gmao/gmao_ops/pub/fp/forecast/Y%iy4/M%im2/D%id2/H%ih2 + +# Directory path to gridded forecast control files +FC_GRID_PATH: /discover/nobackup/projects/gmao/yotc/pub/fp/opendap/fcast + +collections: &COLLECTIONS + + inst3_2d_met_Nx: + + src: $FC_FILE_PATH + min_count: 41 + vars: [CLDLOW,CLDMID,CLDHGH,PRECTOT,PRECCON,PRECSNO] + + files: + + - "GEOS.fp.fcst.inst3_2d_met_Nx.%iy4%im2%id2_%ih2+*nc4" + + tavg1_2d_slv_Nx: + + src: $FC_FILE_PATH + min_count: 123 + vars: [U2M,V2M,T2M,SLP] + offset: 30 + + files: + + - "GEOS.fp.fcst.tavg1_2d_slv_Nx.%iy4%im2%id2_%ih2+*nc4" + + inst1_2d_hwl_Nx: + + src: $FC_FILE_PATH + min_count: 123 + vars: [SSEXTTAU,DUEXTTAU,BCEXTTAU,OCEXTTAU,SUEXTTAU,NIEXTTAU, DUSMASS25,SSSMASS25,OCSMASS,BCSMASS,NISMASS25,SO4SMASS,COSC] + + files: + + - "GEOS.fp.fcst.inst1_2d_hwl_Nx.%iy4%im2%id2_%ih2+*nc4" + + inst3_3d_ext_Np: + + src: $FC_FILE_PATH + min_count: 41 + vars: [BCEXT,OCEXT,SSEXT,SUEXT,DUEXT] + levs: 950-300 + + files: + + - "GEOS.fp.fcst.inst3_3d_ext_Np.%iy4%im2%id2_%ih2+*nc4" + + inst3_3d_aer_Np: + + src: $FC_FILE_PATH + min_count: 41 + vars: [BC,OC,SS,SO4,DU,NI] + levs: 950-300 + + files: + + - "GEOS.fp.fcst.inst3_3d_aer_Np.%iy4%im2%id2_%ih2+*nc4" + + inst3_3d_chm_Np: + + src: $FC_FILE_PATH + min_count: 41 + vars: [CO,CO2,AIRDENS] + levs: 950-300 + + files: + + - "GEOS.fp.fcst.inst3_3d_chm_Np.%iy4%im2%id2_%ih2+*nc4" + + inst3_3d_asm_Np: + + src: $FC_FILE_PATH + min_count: 41 + vars: [U,V,RH] + levs: 950-300 + + files: + + - "GEOS.fp.fcst.inst3_3d_asm_Np.%iy4%im2%id2_%ih2+*nc4" + +get_data: + + <<: *COLLECTIONS + + opendap: + + src: $FC_GRID_PATH + min_count: 7 + + files: + + - $FC_GRID_PATH/inst3_2d_met_Nx/inst3_2d_met_Nx.%iy4%im2%id2_%ih2 + - $FC_GRID_PATH/tavg1_2d_slv_Nx/tavg1_2d_slv_Nx.%iy4%im2%id2_%ih2 + - $FC_GRID_PATH/inst1_2d_hwl_Nx/inst1_2d_hwl_Nx.%iy4%im2%id2_%ih2 + - $FC_GRID_PATH/inst3_3d_ext_Np/inst3_3d_ext_Np.%iy4%im2%id2_%ih2 + - $FC_GRID_PATH/inst3_3d_aer_Np/inst3_3d_aer_Np.%iy4%im2%id2_%ih2 + - $FC_GRID_PATH/inst3_3d_chm_Np/inst3_3d_chm_Np.%iy4%im2%id2_%ih2 + - $FC_GRID_PATH/inst3_3d_asm_Np/inst3_3d_asm_Np.%iy4%im2%id2_%ih2 diff --git a/projects/MissionSupport/missions/SARP/config/sarp-cf.yml b/projects/MissionSupport/missions/SARP/config/sarp-cf.yml new file mode 100644 index 0000000..d5df300 --- /dev/null +++ b/projects/MissionSupport/missions/SARP/config/sarp-cf.yml @@ -0,0 +1,73 @@ +DATA_DIR: /discover/nobackup/dao_ops/jardizzo/FLUID/SARP +PUB_DIR: /discover/nobackup/projects/gmao/yotc/pub/fp/.internal/SARP +PLAYLIST: [custom-2] + +custom-2: + + ntasks: 24 + model: GEOS-CF + collection: custom-2 + themes: [custom-2_mission, SARP-2026] + stream: GEOSCFFC + regions: [sarp] + fcst_dt: PT0H + start_dt: PT3H + end_dt: P4DT21H + t_deltat: PT3H + frame_rate: 4 + geometry: 1024x768 + quality: 25 + codec: libx264 + ftitle: "GEOS-CF Forecast Initialized on %B %d, %Y at %HZ" + fdate: "%Y%m%d_%H" + data_dir: $DATA_DIR/$model/$fdate/$collection + pub_dir: $PUB_DIR/$model/$fdate/$collection + oname: $data_dir/$region/$field/$level/nasa.gmao.sarp.$collection.$field.$level.$region.$fdate.%Y%m%dT%H.png + mname: $pub_dir/$region/movies/nasa.gmao.sarp.$collection.$field.$level.$region.$fdate.mp4 + station_plot: "--theme custom-2_mission --theme SARP-2026 --stream GEOSCFFC --fcst_dt $fcst_dt --time_dt $start_dt --t_deltat $t_deltat --field pm25du --level 700 --region sarp --oname $pub_dir/$region/images/stations.png --lights_off --fullframe --plot_only" + station_plot_title: "Dust PM2.5 at 700mb" + station_gram: "https://fluid.nccs.nasa.gov/gram/cf_pm25" + + playlist: + + gases: + section: Gases + levels: [1000,975,950,925,900,850,800,750,700,650,600,550,500,450,400,350,300,250,200,150,100] + fields: [ch4,hcho,co,no2,o3,pan,isop,so2,noy,nh3] + + pm25: + section: Particulate Matter (2.5) + levels: [1000,975,950,925,900,850,800,750,700,650,600,550,500,450,400,350,300,250,200,150,100] + fields: [pm25,pm25bc,pm25oc,pm25ss,pm25su,pm25du,pm25ni,pm25soa] + + met-1: + section: Single-Level Meteorology + levels: [0] + fields: [cldtt,zpbl,ps,slp] + + met-2: + section: Multi-Level Meteorology + levels: [1000,975,950,925,900,850,800,750,700,650,600,550,500,450,400,350,300,250,200,150,100] + fields: [h,t,th,q,rh,u,v,wspd,omega,epv] + + aerosols: + + section: Aerosols (550nm) + levels: [0] + fields: [aod550_bc,aod550_oc,aod550_dust,aod550_ss,aod550_sna] + + totcol: + + section: Total Column + levels: [0] + fields: [totcol_co,totcol_no2,totcol_o3,totcol_so2] + + tropcol: + section: Tropospheric Column + levels: [0] + fields: [tropcol_co,tropcol_no2,tropcol_o3,tropcol_so2,tropcol_hcho] + + surface: + section: Surface Concentrations + levels: [0] + fields: [cosfc,no2sfc,o3sfc,so2sfc,hchosfc] diff --git a/projects/MissionSupport/missions/SARP/config/sarp-fp.yml b/projects/MissionSupport/missions/SARP/config/sarp-fp.yml new file mode 100644 index 0000000..1158c0b --- /dev/null +++ b/projects/MissionSupport/missions/SARP/config/sarp-fp.yml @@ -0,0 +1,138 @@ +DATA_DIR: /discover/nobackup/dao_ops/jardizzo/FLUID/SARP +PUB_DIR: /discover/nobackup/projects/gmao/yotc/pub/fp/.internal/SARP +PLAYLIST: [wxmapschem2d, wxmapschem3d, weather] + +wxmapschem3d: + + ntasks: 24 + model: GEOS-FP + collection: chem3d + themes: [chem3d_mission, SARP-2026] + stream: G5FPFC + regions: [sarp] + fcst_dt: PT0H + start_dt: PT00H + end_dt: P5DT0H + t_deltat: PT3H + frame_rate: 4 + geometry: 1024x768 + quality: 25 + codec: libx264 + ftitle: "GEOS-FP Forecast Initialized on %B %d, %Y at %HZ" + fdate: "%Y%m%d_%H" + data_dir: $DATA_DIR/$model/$fdate/$collection + pub_dir: $PUB_DIR/$model/$fdate/$collection + oname: $data_dir/$region/$field/$level/nasa.gmao.sarp.$collection.$field.$level.$region.$fdate.%Y%m%dT%H.png + mname: $pub_dir/$region/movies/nasa.gmao.sarp.$collection.$field.$level.$region.$fdate.mp4 + station_plot: "--theme chem3d_mission --theme SARP-2026 --stream G5FPFC --fcst_dt $fcst_dt --time_dt $start_dt --t_deltat PT3H --field du --level 700 --region sarp --oname $pub_dir/$region/images/stations.png --lights_off --fullframe --plot_only" + station_plot_title: "Dust at 700mb" + station_gram: "https://fluid.nccs.nasa.gov/gram/du" + + playlist: + + chem3d-1: + + section: Aerosols + levels: [50, 70, 100, 150, 200, 300, 400, 500, 600, 700, 850, 925] + fields: [bc,oc,du,pm,pm25,pm10,ss,so4,no3] + + chem3d-2: + section: Carbon Monoxide + levels: [50, 70, 100, 150, 200, 300, 400, 500, 600, 700, 850, 925] + fields: [co,cobbae,cobbaf,cobbla,cobbna,cobbot,coffas,coffeu,coffna] + + chem3d-3: + section: Other Gases + levels: [50, 70, 100, 150, 200, 300, 400, 500, 600, 700, 850, 925] + fields: [so2,cfc12strat,cfc12trop] + +wxmapschem2d: + + ntasks: 24 + model: GEOS-FP + collection: chem2d + themes: [chem2d_mission, SARP-2026] + stream: G5FPFC + regions: [sarp] + fcst_dt: PT0H + start_dt: PT00H + end_dt: P5DT0H + t_deltat: PT3H + frame_rate: 4 + geometry: 1024x768 + quality: 25 + codec: libx264 + ftitle: "GEOS-FP Forecast Initialized on %B %d, %Y at %HZ" + fdate: "%Y%m%d_%H" + data_dir: $DATA_DIR/$model/$fdate/$collection + pub_dir: $PUB_DIR/$model/$fdate/$collection + oname: $data_dir/$region/$field/$level/nasa.gmao.sarp.$collection.$field.$level.$region.$fdate.%Y%m%dT%H.png + mname: $pub_dir/$region/movies/nasa.gmao.sarp.$collection.$field.$level.$region.$fdate.mp4 + station_plot: "--theme chem2d_mission --theme SARP-2026 --stream G5FPFC --fcst_dt $fcst_dt --time_dt $start_dt --t_deltat PT3H --field duaot --region sarp --level 0 --oname $pub_dir/$region/images/stations.png --lights_off --fullframe --plot_only" + station_plot_title: "Dust AOT" + station_gram: "https://fluid.nccs.nasa.gov/gram/du" + + playlist: + + chem2d-1: + section: Aerosols + levels: [0] + fields: [bcaot,bcsmass,ocaot,ocsmass,bcocaot,bcocsmass,duaot,ssaot,suaot,fineaot,niaot,totaot] + + chem2d-2: + section: Carbon Monoxide + levels: [0] + fields: [cobbae,cobbaf,cobbla,cobbna,cocl,conbas,conbeu,conbna,cosc] + + chem2d-3: + section: Other Gases + levels: [0] + fields: [nismass,so2cmass,so2smass,to3] + +weather: + + ntasks: 24 + model: GEOS-FP + collection: weather + themes: [weather_mission, SARP-2026] + stream: G5FPFC + regions: [sarp] + fcst_dt: PT0H + start_dt: PT00H + end_dt: P5DT0H + t_deltat: PT3H + frame_rate: 4 + geometry: 1024x768 + quality: 25 + codec: libx264 + ftitle: "GEOS-FP Forecast Initialized on %B %d, %Y at %HZ" + fdate: "%Y%m%d_%H" + data_dir: $DATA_DIR/$model/$fdate/$collection + pub_dir: $PUB_DIR/$model/$fdate/$collection + oname: $data_dir/$region/$field/$level/nasa.gmao.sarp.$collection.$field.$level.$region.$fdate.%Y%m%dT%H.png + mname: $pub_dir/$region/movies/nasa.gmao.sarp.$collection.$field.$level.$region.$fdate.mp4 + station_plot: "--theme weather_mission --theme SARP-2026 --stream G5FPFC --fcst_dt $fcst_dt --time_dt $start_dt --t_deltat PT3H --field precip --level 0 --region sarp --oname $pub_dir/$region/images/stations.png --lights_off --fullframe --plot_only" + station_plot_title: "Precipitation / Cloud Fraction" + station_gram: "https://fluid.nccs.nasa.gov/gram/meteo" + + playlist: + + weather-1: + section: Precip/Clouds + levels: [0] + fields: [precip,cldlow,cldmid,cldhgh,cldtot,cldprs,taulow,taumid,tauhgh] + + weather-2: + section: Aerosols + levels: [0] + fields: [fineaot,dustaot] + + weather-3: + section: Single-Level Meteorology + levels: [0] + fields: [pblh,tropp,wstar,svent] + + weather-4: + section: Multi-Level Meteorology + levels: [925, 850, 700, 600, 500, 400, 300, 200, 150, 100, 70, 50] + fields: [cldwat,dumass,rh,tmpu,wspd,vort,omega,epv] diff --git a/projects/MissionSupport/missions/SARP/cylc/sarp.j b/projects/MissionSupport/missions/SARP/cylc/sarp.j new file mode 100644 index 0000000..5ba18cd --- /dev/null +++ b/projects/MissionSupport/missions/SARP/cylc/sarp.j @@ -0,0 +1,31 @@ +#!/bin/csh + +#SBATCH --job-name=WxSARP +#SBATCH --account=g2538 +#SBATCH --time=1:15:00 +#SBATCH --qos=daohi +#SBATCH --ntasks=28 +#SBATCH --export=NONE +#SBATCH --constraint=mil +#SBATCH --output=/discover/nobackup/dao_ops/jardizzo/FLUID/sarp.log + +module purge +module use -a /discover/swdev/gmao_SIteam/modulefiles-SLES15 + +module load GEOSenv +module load comp/gcc/11.4.0 +module load comp/intel/2021.6.0 +module load mpi/impi/2021.13 +module load ffmpeg/5.0 +module load ImageMagick +module load python/GEOSpyD/Min24.4.0-0_py3.11 + +setenv GAVERSION 2.1.0.oga.1 +setenv PYTHONPATH /discover/nobackup/jardizzo/Shared/WxMap_v2.0/lib:/home/dao_ops/cylc8-workflows/SARP/lib + +setenv PATH "${PATH}:/discover/nobackup/jardizzo/Shared/WxMap_v2.0/utils:/home/dao_ops/cylc8-workflows/SARP/bin:$SHARE/dasilva/opengrads/Contents" + +umask 022 + +#sarp_plot.py 20260503T00 sarp-cf.yml +sarp_plot.py 20260504T00 sarp-fp.yml diff --git a/projects/MissionSupport/missions/SARP/cylc/suite.rc b/projects/MissionSupport/missions/SARP/cylc/suite.rc new file mode 100644 index 0000000..d331ae3 --- /dev/null +++ b/projects/MissionSupport/missions/SARP/cylc/suite.rc @@ -0,0 +1,69 @@ +[cylc] + UTC mode = True +[scheduling] + initial cycle point = 2026-05-05T00 + # final cycle point = 2026-04-30T12 + max active cycle points = 2 + [[xtriggers]] + clock_1 = wall_clock(offset=PT6H) + [[dependencies]] + [[[T00,T12]]] # validity (hours) + graph = """ + @clock_1 => getGEOSFP => plotGEOSFP + """ + [[[T09]]] + graph = """ + @clock_1 => getGEOSCF => plotGEOSCF + """ +[runtime] + [[root]] # suite defaults + + [[[environment]]] + + datetime = $CYLC_TASK_CYCLE_POINT + input_fp_config = $CYLC_SUITE_DEF_PATH/config/inputs-fp.yml + input_cf_config = $CYLC_SUITE_DEF_PATH/config/inputs-cf.yml + sarp_fp_config = $CYLC_SUITE_DEF_PATH/config/sarp-fp.yml + sarp_cf_config = $CYLC_SUITE_DEF_PATH/config/sarp-cf.yml + + [[[events]]] + mail to = joseph.v.ardizzone@nasa.gov + mail events = failed + + [[getGEOSFP]] + pre-script = "source $CYLC_SUITE_DEF_PATH/modules" + script = "get_data.py $datetime $input_fp_config" + [[[job]]] + execution retry delays = 60*PT15M, 72*PT1H + + [[getGEOSCF]] + pre-script = "source $CYLC_SUITE_DEF_PATH/modules" + script = "get_data.py $datetime $input_cf_config" + [[[job]]] + execution retry delays = 60*PT15M, 72*PT1H + + [[plotGEOSFP]] + pre-script = "source $CYLC_SUITE_DEF_PATH/modules" + script = "sarp_plot.py $datetime $sarp_fp_config" + [[[job]]] + batch system = slurm + execution time limit = PT1H + [[[directives]]] + --account = g2538 + --qos = daohi + --constraint = mil + --ntasks = 28 + --job-name = WxSARPFP + + [[plotGEOSCF]] + pre-script = "source $CYLC_SUITE_DEF_PATH/modules" + script = "sarp_plot.py $datetime $sarp_cf_config" + [[[job]]] + batch system = slurm + execution time limit = PT1H + [[[directives]]] + --account = g2538 + --qos = daohi + --constraint = mil + --ntasks = 28 + --job-name = WxSARPCF diff --git a/projects/MissionSupport/missions/SARP/html/css/styles.css b/projects/MissionSupport/missions/SARP/html/css/styles.css new file mode 100644 index 0000000..d5468b0 --- /dev/null +++ b/projects/MissionSupport/missions/SARP/html/css/styles.css @@ -0,0 +1,38 @@ +#banner { + background-image: url('https://portal.nccs.nasa.gov/datashare/gmao/geos-fp/.internal/MERRA-2/ENSO_Composite/images/banner.png'); /* Replace with your image path */ + background-repeat: no-repeat; /* Optional: Prevents image from repeating */ + background-position: center center; /* Optional: Centers the image */ + background-size: cover; /* Optional: Scales the image to cover the cell */ + } + +#SARP-banner { + background-image: url('https://portal.nccs.nasa.gov/datashare/gmao/geos-fp/.internal/SARP/images/SARP.banner.png'); /* Replace with your image path */ + background-repeat: no-repeat; /* Optional: Prevents image from repeating */ + background-position: center center; /* Optional: Centers the image */ + background-size: cover; /* Optional: Scales the image to cover the cell */ + } + +html { + font-family: Arial, sans-serif; + font-size: 16px; +} + +.ImageBorder { + padding: 1px; + border: thick solid white; +} + +.table-spacing { + margin-bottom: 40px; +} + +.srp-btn { + background-color: #199319; + color: white; + padding: 2px 2px; + text-decoration: none; +} + +.srp-btn:hover { + background-color: #223094; +} diff --git a/projects/MissionSupport/missions/SARP/modules b/projects/MissionSupport/missions/SARP/modules new file mode 100644 index 0000000..ffd5006 --- /dev/null +++ b/projects/MissionSupport/missions/SARP/modules @@ -0,0 +1,20 @@ +source /usr/share/lmod/lmod/init/bash + +module purge + +module use -a /discover/swdev/gmao_SIteam/modulefiles-SLES15 + +module load GEOSenv +module load comp/gcc/11.4.0 +module load comp/intel/2021.6.0 +module load mpi/impi/2021.13 +module load ffmpeg/5.0 +module load ImageMagick +module load python/GEOSpyD/Min24.4.0-0_py3.11 + +export GAVERSION=2.1.0.oga.1 +export PYTHONPATH=$CYLC_SUITE_DEF_PATH/src:/discover/nobackup/jardizzo/Shared/WxMap_v2.0/lib:/home/dao_ops/gmao_packages/Workflow/Shared + +export PATH="${PATH}:$CYLC_SUITE_DEF_PATH/bin:/home/dao_ops/gmao_packages/Workflow/Shared:/discover/nobackup/jardizzo/Shared/WxMap_v2.0/utils:$SHARE/dasilva/opengrads/Contents" + +umask 022 diff --git a/projects/MissionSupport/missions/SARP/src/MSinterface.py b/projects/MissionSupport/missions/SARP/src/MSinterface.py new file mode 100755 index 0000000..e6a9df6 --- /dev/null +++ b/projects/MissionSupport/missions/SARP/src/MSinterface.py @@ -0,0 +1,42 @@ +import re +import argparse +import datetime as dt + + +class Interface(object): + + def __init__(self, description): + + self.parser = argparse.ArgumentParser(description=description) + + self.parser.add_argument( + "datetime", + metavar="datetime", + type=str, + help="ISO datetime as ccyy-mm-ddThh:mm:ss", + ) + self.parser.add_argument( + "config", metavar="config", type=str, help="configuration file (.yml)" + ) + self.parser.add_argument( + "--tau", metavar="tau", type=int, required=False, help="hours", default=0 + ) + + def get_args(self): + + args = self.parser.parse_args() + + dattim = re.sub("[^0-9]", "", args.datetime + "000000")[0:14] + idate = int(dattim[0:8]) + itime = int(dattim[8:14]) + tau = args.tau + time_dt = dt.datetime.strptime(dattim, "%Y%m%d%H%M%S") + + return { + "datetime": args.datetime, + "config": args.config, + "date": idate, + "time": itime, + "tau": args.tau, + "time_dt": time_dt, + } diff --git a/projects/MissionSupport/missions/SARP/src/handlers.py b/projects/MissionSupport/missions/SARP/src/handlers.py new file mode 100644 index 0000000..cdae567 --- /dev/null +++ b/projects/MissionSupport/missions/SARP/src/handlers.py @@ -0,0 +1,156 @@ +import os +import glob +import shlex +import shutil +import subprocess + +from myutils import str_replace +from html_templates import * + + +def make_sarp(request): + + make_images(request) + make_movie(request) + remove_images(request) + + +def make_sarp_stations(request): + + defs = get_defs(request) + + # Create station image + + cmd = str_replace("wxmap.py $station_plot", **defs) + print(cmd) + subprocess.call(cmd, shell=True, executable="/bin/bash") + + +def make_images(request): + + defs = get_defs(request) + + options = [] + if request.get("plot_only", 0): + options.append("--plot_only") + if request.get("lights_off", 0): + options.append("--lights_off") + + cmd = "wxmap.py --theme $themes --stream $stream --fcst_dt $fcst_dt --start_dt $start_dt --end_dt $end_dt --t_deltat $t_deltat --field $field --region $region --level $level --oname $oname --geometry $geometry" + + cmd = str_replace(cmd, **defs) + cmd = cmd + " " + " ".join(options) + subprocess.call(cmd, shell=True, executable="/bin/bash") + + +def make_movie(request): + + defs = get_defs(request) + + # Create movie file + + iname = str_replace(request["oname"], **defs) + defs["pattern"] = os.path.join(os.path.dirname(iname), "*.png") + + mname = str_replace(request["mname"], **defs) + odir = os.path.dirname(mname) + os.makedirs(odir, mode=0o755, exist_ok=True) + + cmd = 'ffmpeg -loglevel debug -threads 6 -pattern_type glob -r $frame_rate -i "$pattern" -y -r $frame_rate -s $geometry -c:v libx264 -pix_fmt yuv420p -preset ultrafast -crf $quality $mname' + + cmd = str_replace(cmd, **defs) + + subprocess.call(cmd, shell=True, executable="/bin/bash") + + +def remove_images(request): + + defs = get_defs(request) + + oname = str_replace(request["oname"], **defs) + dir = os.path.dirname(oname) + + files = glob.glob(os.path.join(dir, "*.png")) + + for file in files: + os.remove(file) + + +def make_html(request): + + level_labels = {0: "SLV"} + defs = get_defs(request) + regions = request["regions"] + + stream = request["stream"] + + for region in regions: + + defs["region"] = region + hname = os.path.join("$pub_dir", "$region", "index.html") + hname = str_replace(hname, **defs) + + with open(hname, "w") as f: + + header = str_replace(html_header, **defs) + f.write(header) + + stations = str_replace(sarp_stations, **defs) + f.write(stations) + + f.write('') + + playlist = request["playlist"] + for p, plist in playlist.items(): + + play = dict(request) + play.update(plist) + + fields = play["fields"] + levels = play["levels"] + + defs["section"] = play["section"] + section = str_replace(html_section, **defs) + f.write(section) + + for field in fields: + f.write("\n") + defs["field"] = field + defs["FIELD"] = field.upper() + row_header = str_replace(html_row_header, **defs) + f.write(row_header) + for level in levels: + defs["button"] = level_labels.get(level, str(level)) + defs["level"] = str(level) + row = str_replace(html_row, **defs) + f.write(row) + f.write("\n") + + trailer = str_replace(html_trailer, **defs) + f.write(trailer) + + +def get_defs(request): + + data_dir = request["data_dir"] + pub_dir = request["pub_dir"] + fcst_dt = request["fcst_dt"] + start_dt = request["start_dt"] + end_dt = request["end_dt"] + themes = request["themes"] + data_dir = request["data_dir"] + pub_dir = request["pub_dir"] + fdate = request["fdate"] + ftitle = request["ftitle"] + + defs = dict(request) + defs["data_dir"] = fcst_dt.strftime(data_dir) + defs["pub_dir"] = fcst_dt.strftime(pub_dir) + defs["fcst_dt"] = fcst_dt.strftime("%Y%m%dT%H%M") + defs["start_dt"] = start_dt.strftime("%Y%m%dT%H%M") + defs["end_dt"] = end_dt.strftime("%Y%m%dT%H%M") + defs["themes"] = " --theme ".join(themes) + defs["fdate"] = fcst_dt.strftime(fdate) + defs["ftitle"] = fcst_dt.strftime(ftitle) + + return defs diff --git a/projects/MissionSupport/missions/SARP/src/html_templates.py b/projects/MissionSupport/missions/SARP/src/html_templates.py new file mode 100644 index 0000000..58f761d --- /dev/null +++ b/projects/MissionSupport/missions/SARP/src/html_templates.py @@ -0,0 +1,84 @@ +html_header = """ + + + + +
+ + + +
+

SARP-2026
Collection: $collection

+

+

$ftitle

+
+""" + +html_row_header = """ +

 $FIELD

+ +""" + +html_row = """ +$button + +""" + +html_trailer = """ + + +""" + +html_section = """ + + +


$section

+ + +""" + +sarp_stations = """ + + + + + + + + + +
+


SARP Stations

+
+

$station_plot_title

+
+ +
+ + + Salton Sea + CW3E Scripps Pier + Armstrong Palmdale + Rosamond Dry Lake + SantaMonicaColg AERO + CalTech AERO + San Diego + Los Angeles + Riesel Brushy Creek + Stiles Turkey Creek + TAMU Farm Brazos River + Danciger Linnville Bayou + Sargent Caney Creek + Univ Houston + Mont Belview Refineries + Bayport Petrochem + Texas City Refineries + Luling Gas Fields + WA Parish Power Plant + Freeport Refineries + Beaumont Petrochem + Beaumont Bulk Storage + Port Aransas Field Site + White Family Ranch + +""" diff --git a/projects/MissionSupport/missions/SARP/src/player.py b/projects/MissionSupport/missions/SARP/src/player.py new file mode 100644 index 0000000..9f60fea --- /dev/null +++ b/projects/MissionSupport/missions/SARP/src/player.py @@ -0,0 +1,66 @@ +from myutils import parse_duration + + +class Player(object): + + def __init__(self, config, tloop=True, **kwargs): + + self.config = dict(config) + self.config.update(kwargs) + self.tloop = tloop + + def __iter__(self): + + playlist = self.config["playlist"] + + for p, plist in playlist.items(): + + fields = plist.get("fields", []) + + for field in fields: + + play = dict(self.config) + play.update(plist) + + levels = play.get("levels", [0]) + regions = play.get("regions", []) + + fcst_dt = play.get("fcst_dt", "PT0H") + start_dt = play.get("start_dt", "PT0H") + end_dt = play.get("end_dt", "PT0H") + t_deltat = play.get("t_deltat", "PT1H") + time_dt = play["time_dt"] + + fcst_dt = time_dt + parse_duration(fcst_dt) + start_dt = time_dt + parse_duration(start_dt) + end_dt = time_dt + parse_duration(end_dt) + delta_t = parse_duration(t_deltat) + + t_start = start_dt + if not self.tloop: + t_start = end_dt + + for level in levels: + + for region in regions: + + t = t_start + while t <= end_dt: + + play.update( + { + "field": field, + "region": region, + "level": level, + "t_start": t, + "t_end": t, + "t_deltat": t_deltat, + "fcst_dt": fcst_dt, + "start_dt": start_dt, + "end_dt": end_dt, + } + ) + + yield dict(play) + + t += delta_t