Index: /trunk/data_nodist/rtklib_example.pos
===================================================================
--- /trunk/data_nodist/rtklib_example.pos	(revision 15247)
+++ /trunk/data_nodist/rtklib_example.pos	(revision 15247)
@@ -0,0 +1,162 @@
+% program   : RTKLIB ver.demo5 b31
+% inp file  : rover_2019-06-08_08-03-52.obs
+% inp file  : 2019-06-08-00_00_00-GNSS-1.obs
+% inp file  : 2019-06-08-00_00_00-GNSS-1.nav
+% inp file  : 2019-06-08-00_00_00-GNSS-1.sbs
+% obs start : 2019/06/08 08:03:55.5 GPST (week2056 547435.5s)
+% obs end   : 2019/06/08 09:46:21.0 GPST (week2056 553581.0s)
+% pos mode  : kinematic
+% freqs     : L1
+% solution  : combined
+% elev mask : 15.0 deg
+% dynamics  : on
+% tidecorr  : off
+% ionos opt : sbas
+% tropo opt : sbas
+% ephemeris : broadcast
+% navi sys  : gps galileo beidou sbas
+% amb res   : fix and hold
+% val thres : 3.0
+% antenna1  :                       ( 0.0000  0.0000  0.0000)
+% antenna2  :                       ( 0.0000  0.0000  0.0000)
+% ref pos   : 47.060027749  -1.350495019   84.8600
+%
+% (lat/lon/height=WGS84/ellipsoidal,Q=1:fix,2:float,3:sbas,4:dgps,5:single,6:ppp,ns=# of satellites)
+%  GPST                  latitude(deg) longitude(deg)  height(m)   Q  ns   sdn(m)   sde(m)   sdu(m)  sdne(m)  sdeu(m)  sdun(m) age(s)  ratio
+2019/06/08 08:23:12.000   46.948881673   -1.484757046    92.3955   5   2   1.5620   0.9325   0.8167  -0.7246   0.7583   0.6573   0.00    0.0
+2019/06/08 08:23:12.300   46.948848788   -1.484833804    92.4220   5   3   1.4758   1.0096   0.8814  -0.6942   0.8505   0.6116   0.30    0.0
+2019/06/08 08:23:12.600   46.948813792   -1.484909829    92.4091   5   2   2.1081   1.2813   1.0397  -1.1106   0.9987   0.7367   0.60    0.0
+2019/06/08 08:23:12.900   46.948779140   -1.484986229    92.3736   5   2   2.8326   1.6742   1.2982  -1.5630   1.2565   0.8884   0.90    0.0
+2019/06/08 08:23:13.200   46.948744854   -1.485062975    92.2902   5   2   3.6159   2.1241   1.6466  -1.9920   1.5901   1.1395   0.20    0.0
+2019/06/08 08:23:13.500   46.948713060   -1.485139149    92.3189   5  18   3.9457   2.4259   2.0200  -1.9980   1.9244   1.4795   0.50    0.0
+2019/06/08 08:23:13.800   46.948683857   -1.485217312    92.2626   5  19   3.5354   2.4717   2.2715  -1.2931   2.1249   1.7616   0.80    0.0
+2019/06/08 08:23:14.100   46.948655272   -1.485293384    92.2833   5  18   2.7312   2.4024   2.2404   0.6702   2.0525   1.7913   0.10    0.0
+2019/06/08 08:23:14.400   46.948626092   -1.485367358    92.3972   5  17   1.9236   2.1953   1.9196   0.9413   1.7132   1.5611   0.40    0.0
+2019/06/08 08:23:14.700   46.948596651   -1.485443253    92.5788   5  17   1.2701   1.6139   1.4645   0.8161   1.3018   1.2056   0.70    0.0
+2019/06/08 08:23:15.000   46.948566957   -1.485520023    92.7400   5   2   0.7828   0.9580   0.9790   0.5956   0.8588   0.8204   0.00    0.0
+2019/06/08 08:23:15.300   46.948537341   -1.485595237    92.9436   5  17   0.5342   0.6179   0.7083   0.4817   0.6250   0.5978   0.30    0.0
+2019/06/08 08:23:15.600   46.948507439   -1.485669909    93.1221   2   4   0.4058   0.3567   0.4900   0.3239   0.3941   0.4355  -0.40    0.0
+2019/06/08 08:23:15.900   46.948477526   -1.485744397    93.2623   2   4   0.3750   0.2358   0.4073   0.2477   0.2858   0.3832  -0.10    0.0
+2019/06/08 08:23:16.200   46.948451394   -1.485815546    93.9011   2   4   0.1836   0.1904   0.2316   0.1661   0.2067   0.1962   0.20    0.0
+2019/06/08 08:23:16.500   46.948420724   -1.485888453    94.0974   2   5   0.1830   0.1916   0.2330   0.1664   0.2080   0.1964   0.50    0.0
+2019/06/08 08:23:16.800   46.948391572   -1.485959494    94.4561   2   7   0.4220   0.5231   0.6166   0.4615   0.5667   0.5058   0.80    0.0
+2019/06/08 08:23:17.100   46.948360137   -1.486034550    94.4872   2   4   0.2895   0.3457   0.4102   0.3043   0.3748   0.3384   0.10    0.0
+2019/06/08 08:23:17.400   46.948329481   -1.486109424    94.5336   2   4   0.1836   0.1926   0.2334   0.1667   0.2087   0.1967   0.40    0.0
+2019/06/08 08:23:17.700   46.948298931   -1.486185006    94.5665   2   4   0.1085   0.0631   0.0879   0.0371   0.0652   0.0840   0.70    0.0
+2019/06/08 08:23:18.000   46.948267189   -1.486259346    94.6620   2   5   0.0962   0.0322   0.0516  -0.0415   0.0183   0.0569   0.00    0.0
+2019/06/08 08:23:18.300   46.948235607   -1.486333906    94.6421   2   4   0.2189   0.0339   0.1793  -0.0163   0.0414   0.1920   0.30    0.0
+2019/06/08 08:23:18.600   46.948203828   -1.486408026    94.6782   2   6   0.1748   0.0331   0.1452  -0.0129   0.0408   0.1523   0.60    0.0
+2019/06/08 08:23:18.900   46.948173813   -1.486480502    94.9764   2   4   0.3824   0.4814   0.5612   0.4198   0.5184   0.4584   0.90    0.0
+2019/06/08 08:23:19.200   46.948142054   -1.486555005    95.0866   2   4   0.2469   0.3051   0.3520   0.2596   0.3256   0.2872   0.20    0.0
+2019/06/08 08:23:19.500   46.948111316   -1.486628980    95.2515   2   4   0.1534   0.1644   0.1890   0.1326   0.1721   0.1581   0.50    0.0
+2019/06/08 08:23:19.800   46.948081159   -1.486705093    95.4092   5   2   0.1457   0.1190   0.0889  -0.1016  -0.0312   0.0990   0.80    0.0
+2019/06/08 08:23:20.100   46.948049752   -1.486779356    95.5462   2   5   0.0794   0.0282   0.0311  -0.0447  -0.0157   0.0367   0.10    0.0
+2019/06/08 08:23:20.400   46.948018473   -1.486853406    95.6833   1   8   0.0337   0.0077   0.0232  -0.0093   0.0056   0.0195  -0.60  137.6
+2019/06/08 08:23:20.700   46.947987581   -1.486927517    95.8484   1   8   0.0335   0.0076   0.0230  -0.0092   0.0055   0.0195  -0.30  137.0
+2019/06/08 08:23:21.000   46.947956648   -1.487001576    96.0348   1  10   0.0297   0.0059   0.0221  -0.0034  -0.0010   0.0217   0.00   92.2
+2019/06/08 08:23:21.300   46.947925845   -1.487075406    96.2532   1   8   0.0337   0.0077   0.0234  -0.0092   0.0057   0.0197  -0.70  135.9
+2019/06/08 08:23:21.600   46.947895282   -1.487149661    96.4196   1   9   0.0247   0.0071   0.0229  -0.0045   0.0061   0.0181  -0.40  134.6
+2019/06/08 08:23:21.900   46.947864473   -1.487223475    96.5978   1  10   0.0215   0.0065   0.0191  -0.0074   0.0003   0.0134  -0.10  134.6
+2019/06/08 08:23:22.200   46.947833612   -1.487297245    96.8061   1  13   0.0183   0.0053   0.0181  -0.0040  -0.0045   0.0148  -0.80  128.1
+2019/06/08 08:23:22.500   46.947802999   -1.487371032    97.0089   1  13   0.0126   0.0047   0.0150   0.0039   0.0020   0.0094  -0.50  127.6
+2019/06/08 08:23:22.800   46.947772308   -1.487444560    97.1732   1  13   0.0127   0.0047   0.0151   0.0040   0.0021   0.0095  -0.20  126.7
+2019/06/08 08:23:23.100   46.947741714   -1.487518109    97.3565   1  13   0.0128   0.0048   0.0152   0.0040   0.0021   0.0096  -0.90  125.9
+2019/06/08 08:23:23.400   46.947711032   -1.487591384    97.5293   1  14   0.0107   0.0048   0.0141   0.0034   0.0012   0.0071  -0.60  125.0
+2019/06/08 08:23:23.700   46.947680523   -1.487664603    97.7282   1  14   0.0108   0.0048   0.0141   0.0034   0.0014   0.0073  -0.30  124.9
+2019/06/08 08:23:24.000   46.947650144   -1.487737769    97.9333   1  15   0.0096   0.0048   0.0143   0.0026   0.0017   0.0077   0.00  125.0
+2019/06/08 08:23:24.300   46.947619881   -1.487810960    98.1183   1  15   0.0099   0.0049   0.0149   0.0025   0.0021   0.0080  -0.70  124.5
+2019/06/08 08:23:24.600   46.947589696   -1.487884018    98.2902   1  16   0.0100   0.0050   0.0147   0.0029   0.0037   0.0081  -0.40  123.9
+2019/06/08 08:23:24.900   46.947559590   -1.487956933    98.4752   1  16   0.0098   0.0045   0.0130   0.0013  -0.0010   0.0069  -0.10  137.4
+2019/06/08 08:23:25.200   46.947529477   -1.488029847    98.6622   1  17   0.0109   0.0047   0.0137   0.0003  -0.0015   0.0080  -0.80  136.7
+2019/06/08 08:23:25.500   46.947499576   -1.488102578    98.8544   1  15   0.0089   0.0045   0.0129   0.0035   0.0024   0.0057  -0.50   73.4
+2019/06/08 08:23:25.800   46.947469669   -1.488174974    99.0530   1  15   0.0099   0.0047   0.0134   0.0041   0.0028   0.0065  -0.20   73.2
+2019/06/08 08:23:26.100   46.947439940   -1.488246965    99.2417   1  15   0.0123   0.0054   0.0145   0.0055   0.0034   0.0079  -0.90   73.2
+2019/06/08 08:23:26.400   46.947410461   -1.488318266    99.4118   1  14   0.0070   0.0043   0.0133   0.0015  -0.0020   0.0052  -0.60    8.0
+2019/06/08 08:23:26.700   46.947381409   -1.488388829    99.5938   1  14   0.0070   0.0043   0.0132   0.0015  -0.0020   0.0052  -0.30    7.1
+2019/06/08 08:23:27.000   46.947352691   -1.488458625    99.7872   1  15   0.0063   0.0043   0.0125   0.0014  -0.0021   0.0038   0.00    6.2
+2019/06/08 08:23:27.300   46.947324244   -1.488527733    99.9706   1  14   0.0071   0.0043   0.0133   0.0015  -0.0021   0.0052  -0.70    5.1
+2019/06/08 08:23:27.600   46.947296226   -1.488596072   100.1577   1  13   0.0100   0.0044   0.0133   0.0031  -0.0017   0.0059  -0.40   35.8
+2019/06/08 08:23:27.900   46.947268321   -1.488663688   100.3222   1  15   0.0079   0.0043   0.0132   0.0020  -0.0019   0.0054  -0.10   35.9
+2019/06/08 08:23:28.200   46.947240770   -1.488730576   100.4869   1  14   0.0082   0.0044   0.0133   0.0022  -0.0020   0.0055  -0.80   35.7
+2019/06/08 08:23:28.500   46.947213627   -1.488796733   100.6640   1  14   0.0087   0.0044   0.0133   0.0024  -0.0019   0.0056  -0.50   35.7
+2019/06/08 08:23:28.800   46.947187024   -1.488862157   100.8461   1  14   0.0058   0.0031   0.0094   0.0015  -0.0014   0.0039   0.80    3.3
+2019/06/08 08:23:29.100   46.947160479   -1.488926923   101.0013   1  13   0.0101   0.0045   0.0135   0.0031  -0.0017   0.0061  -0.90   35.6
+2019/06/08 08:23:29.400   46.947134042   -1.488990886   101.1503   1  12   0.0168   0.0051   0.0169  -0.0050  -0.0054   0.0133  -0.60   39.7
+2019/06/08 08:23:29.700   46.947108031   -1.489054173   101.2854   1  12   0.0167   0.0051   0.0168  -0.0050  -0.0054   0.0132  -0.30   39.5
+2019/06/08 08:23:30.000   46.947082224   -1.489116615   101.3942   1  12   0.0166   0.0051   0.0166  -0.0049  -0.0053   0.0129   0.00   39.4
+2019/06/08 08:23:30.300   46.947056636   -1.489178225   101.5024   1  13   0.0078   0.0049   0.0123  -0.0011  -0.0033   0.0019  -0.70   28.5
+2019/06/08 08:23:30.600   46.947031462   -1.489239141   101.6234   1  13   0.0078   0.0048   0.0122  -0.0011  -0.0033   0.0019  -0.40   28.3
+2019/06/08 08:23:30.900   46.947006703   -1.489299195   101.7315   1  15   0.0057   0.0043   0.0119   0.0013  -0.0022   0.0019  -0.10   30.6
+2019/06/08 08:23:31.200   46.946982244   -1.489358199   101.8311   1  17   0.0053   0.0041   0.0108   0.0019   0.0016  -0.0023  -0.80   26.2
+2019/06/08 08:23:31.500   46.946958266   -1.489416160   101.9290   1  17   0.0037   0.0029   0.0077   0.0013   0.0009  -0.0016   0.50    3.2
+2019/06/08 08:23:31.800   46.946934936   -1.489472728   102.0272   1  17   0.0037   0.0029   0.0076   0.0013   0.0010  -0.0016   0.80    3.4
+2019/06/08 08:23:32.100   46.946912367   -1.489527620   102.1292   1  17   0.0037   0.0029   0.0076   0.0013   0.0010  -0.0016   0.10    3.6
+2019/06/08 08:23:32.400   46.946890498   -1.489580948   102.1976   1  17   0.0037   0.0029   0.0076   0.0013   0.0011  -0.0016   0.40    3.8
+2019/06/08 08:23:32.700   46.946869563   -1.489632203   102.2186   1  17   0.0037   0.0029   0.0076   0.0013   0.0011  -0.0016   0.70    3.9
+2019/06/08 08:23:33.000   46.946849138   -1.489681670   102.2612   1  17   0.0037   0.0029   0.0076   0.0013   0.0011  -0.0016   0.00    4.0
+2019/06/08 08:23:33.300   46.946829528   -1.489729623   102.3151   1  17   0.0037   0.0029   0.0076   0.0013   0.0011  -0.0016   0.30    4.0
+2019/06/08 08:23:33.600   46.946810716   -1.489775875   102.3531   1  17   0.0037   0.0029   0.0076   0.0013   0.0011  -0.0016   0.60    3.9
+2019/06/08 08:23:33.900   46.946792608   -1.489820405   102.3917   1  17   0.0037   0.0029   0.0076   0.0013   0.0011  -0.0016   0.90    3.9
+2019/06/08 08:23:34.200   46.946775284   -1.489863010   102.4276   1  17   0.0037   0.0029   0.0076   0.0013   0.0011  -0.0016   0.20    4.0
+2019/06/08 08:23:34.500   46.946758754   -1.489903736   102.4626   1  17   0.0037   0.0029   0.0076   0.0013   0.0011  -0.0016   0.50    4.0
+2019/06/08 08:23:34.800   46.946743124   -1.489942634   102.4919   1  17   0.0037   0.0029   0.0076   0.0013   0.0011  -0.0016   0.80    4.1
+2019/06/08 08:23:35.100   46.946728301   -1.489979865   102.5196   1  17   0.0037   0.0029   0.0076   0.0013   0.0011  -0.0016   0.10    4.2
+2019/06/08 08:23:35.400   46.946714037   -1.490016005   102.5495   1  17   0.0037   0.0029   0.0076   0.0013   0.0011  -0.0016   0.40    4.2
+2019/06/08 08:23:35.700   46.946700337   -1.490051753   102.5751   1  17   0.0037   0.0029   0.0076   0.0013   0.0011  -0.0016   0.70    4.1
+2019/06/08 08:23:36.000   46.946687282   -1.490087043   102.5893   1  17   0.0037   0.0029   0.0076   0.0013   0.0011  -0.0016   0.00    4.1
+2019/06/08 08:23:36.300   46.946675206   -1.490122194   102.6039   1  17   0.0037   0.0029   0.0076   0.0013   0.0010  -0.0016   0.30    4.0
+2019/06/08 08:23:36.600   46.946664218   -1.490157135   102.6100   1  17   0.0037   0.0029   0.0076   0.0013   0.0010  -0.0016   0.60    4.0
+2019/06/08 08:23:36.900   46.946654547   -1.490192058   102.6157   1  17   0.0037   0.0029   0.0077   0.0013   0.0009  -0.0016   0.90    4.0
+2019/06/08 08:23:37.200   46.946646387   -1.490227094   102.6310   1  17   0.0037   0.0029   0.0077   0.0013   0.0006  -0.0016   0.20    4.0
+2019/06/08 08:23:37.500   46.946639497   -1.490262108   102.6329   1  17   0.0037   0.0029   0.0077   0.0013   0.0007  -0.0016   0.50   15.7
+2019/06/08 08:23:37.800   46.946634042   -1.490296841   102.6423   1  17   0.0037   0.0029   0.0077   0.0013   0.0009  -0.0016   0.80   19.5
+2019/06/08 08:23:38.100   46.946630103   -1.490331688   102.6637   1  17   0.0037   0.0029   0.0076   0.0013   0.0012  -0.0016   0.10    4.2
+2019/06/08 08:23:38.400   46.946627826   -1.490365889   102.6749   1  17   0.0037   0.0029   0.0075   0.0013   0.0012  -0.0016   0.40    5.6
+2019/06/08 08:23:38.700   46.946626703   -1.490399806   102.7107   1  17   0.0037   0.0028   0.0075   0.0013   0.0012  -0.0016   0.70    6.1
+2019/06/08 08:23:39.000   46.946626273   -1.490433169   102.7399   1  17   0.0037   0.0028   0.0075   0.0013   0.0012  -0.0016   0.00    7.2
+2019/06/08 08:23:39.300   46.946625842   -1.490465991   102.7637   1  17   0.0037   0.0028   0.0075   0.0013   0.0012  -0.0016   0.30    8.3
+2019/06/08 08:23:39.600   46.946624440   -1.490498049   102.7787   1  17   0.0037   0.0028   0.0075   0.0013   0.0012  -0.0016   0.60    9.3
+2019/06/08 08:23:39.900   46.946621492   -1.490529109   102.7954   1  17   0.0037   0.0029   0.0076   0.0013   0.0012  -0.0016   0.90   10.2
+2019/06/08 08:23:40.200   46.946616562   -1.490558861   102.8229   1  17   0.0037   0.0029   0.0076   0.0013   0.0012  -0.0016   0.20   11.1
+2019/06/08 08:23:40.500   46.946609691   -1.490587045   102.8559   1  17   0.0037   0.0028   0.0075   0.0013   0.0012  -0.0016   0.50   11.9
+2019/06/08 08:23:40.800   46.946601054   -1.490613433   102.8822   1  17   0.0037   0.0029   0.0076   0.0013   0.0012  -0.0016   0.80   12.6
+2019/06/08 08:23:41.100   46.946590936   -1.490637955   102.9026   1  17   0.0037   0.0029   0.0076   0.0013   0.0012  -0.0016   0.10   13.3
+2019/06/08 08:23:41.400   46.946579179   -1.490660846   102.9391   1  17   0.0037   0.0028   0.0075   0.0013   0.0012  -0.0016   0.40   13.9
+2019/06/08 08:23:41.700   46.946565835   -1.490682088   102.9728   1  17   0.0037   0.0028   0.0075   0.0013   0.0012  -0.0016   0.70   14.6
+2019/06/08 08:23:42.000   46.946550982   -1.490701548   102.9992   1  17   0.0037   0.0028   0.0075   0.0013   0.0012  -0.0016   0.00   15.2
+2019/06/08 08:23:42.300   46.946534768   -1.490718963   103.0185   1  17   0.0037   0.0028   0.0075   0.0013   0.0012  -0.0016   0.30   15.8
+2019/06/08 08:23:42.600   46.946517469   -1.490735032   103.0480   1  17   0.0037   0.0028   0.0075   0.0013   0.0012  -0.0016   0.60   16.6
+2019/06/08 08:23:42.900   46.946499385   -1.490750275   103.0747   1  17   0.0037   0.0029   0.0076   0.0013   0.0012  -0.0016   0.90   17.3
+2019/06/08 08:23:43.200   46.946480595   -1.490765402   103.0989   1  17   0.0037   0.0029   0.0076   0.0013   0.0012  -0.0016   0.20   18.0
+2019/06/08 08:23:43.500   46.946461523   -1.490781680   103.1120   1  17   0.0037   0.0028   0.0075   0.0013   0.0012  -0.0016   0.50   18.5
+2019/06/08 08:23:43.800   46.946442853   -1.490800186   103.1095   1  17   0.0037   0.0029   0.0076   0.0013   0.0012  -0.0016   0.80   19.1
+2019/06/08 08:23:44.100   46.946424525   -1.490821206   103.0997   1  17   0.0037   0.0029   0.0076   0.0013   0.0012  -0.0016   0.10   19.5
+2019/06/08 08:23:44.400   46.946406628   -1.490844711   103.1119   1  17   0.0037   0.0028   0.0075   0.0013   0.0012  -0.0016   0.40   20.0
+2019/06/08 08:23:44.700   46.946389229   -1.490870854   103.1357   1  17   0.0037   0.0028   0.0075   0.0013   0.0012  -0.0016   0.70   20.4
+2019/06/08 08:23:45.000   46.946372374   -1.490899368   103.1703   1  17   0.0037   0.0028   0.0075   0.0013   0.0012  -0.0016   0.00   20.8
+2019/06/08 08:23:45.300   46.946355778   -1.490930115   103.2158   1  17   0.0037   0.0028   0.0075   0.0013   0.0012  -0.0016   0.30   21.2
+2019/06/08 08:23:45.600   46.946339212   -1.490962585   103.2553   1  17   0.0037   0.0028   0.0075   0.0013   0.0012  -0.0016   0.60   21.6
+2019/06/08 08:23:45.900   46.946322282   -1.490996481   103.2969   1  17   0.0037   0.0029   0.0076   0.0013   0.0012  -0.0016   0.90   21.7
+2019/06/08 08:23:46.200   46.946305180   -1.491031989   103.3320   1  17   0.0037   0.0029   0.0076   0.0013   0.0012  -0.0016   0.20   21.8
+2019/06/08 08:23:46.500   46.946287882   -1.491069052   103.3601   1  17   0.0037   0.0028   0.0075   0.0013   0.0012  -0.0016   0.50   21.7
+2019/06/08 08:23:46.800   46.946270381   -1.491107601   103.3968   1  17   0.0037   0.0029   0.0076   0.0013   0.0012  -0.0016   0.80   21.7
+2019/06/08 08:23:47.100   46.946252592   -1.491147668   103.4255   1  17   0.0037   0.0029   0.0076   0.0013   0.0012  -0.0016   0.10   21.8
+2019/06/08 08:23:47.400   46.946234548   -1.491189067   103.4520   1  17   0.0037   0.0028   0.0075   0.0013   0.0012  -0.0016   0.40   21.9
+2019/06/08 08:23:47.700   46.946216030   -1.491231732   103.4873   1  17   0.0038   0.0029   0.0076   0.0014   0.0012  -0.0017   0.70   21.9
+2019/06/08 08:23:48.000   46.946197195   -1.491275571   103.5232   1  17   0.0038   0.0028   0.0075   0.0014   0.0012  -0.0017   0.00   22.0
+2019/06/08 08:23:48.300   46.946177930   -1.491320586   103.5652   1  17   0.0038   0.0029   0.0076   0.0013   0.0012  -0.0017   0.30   22.1
+2019/06/08 08:23:48.600   46.946158233   -1.491366724   103.6035   1  17   0.0039   0.0029   0.0076   0.0013   0.0012  -0.0018   0.60   22.2
+2019/06/08 08:23:48.900   46.946138209   -1.491413777   103.6433   1  17   0.0042   0.0029   0.0078   0.0014   0.0011  -0.0010   0.90   22.6
+2019/06/08 08:23:49.200   46.946117683   -1.491462037   103.6847   1  16   0.0052   0.0030   0.0082   0.0015   0.0010   0.0026   0.20   24.4
+2019/06/08 08:23:49.500   46.946097297   -1.491511020   103.7377   1  16   0.0054   0.0030   0.0083   0.0015   0.0008   0.0026   0.50   24.0
+2019/06/08 08:23:49.800   46.946075948   -1.491561273   103.8107   1  13   0.0100   0.0032   0.0097  -0.0014  -0.0018   0.0065   0.80   34.5
+2019/06/08 08:23:50.100   46.946054697   -1.491612349   103.8796   1  13   0.0102   0.0033   0.0100  -0.0018  -0.0022   0.0069   0.10   34.8
+2019/06/08 08:23:50.400   46.946033161   -1.491664327   103.9328   1  12   0.0119   0.0036   0.0118  -0.0035  -0.0038   0.0093   0.40   33.7
+2019/06/08 08:23:50.700   46.946011583   -1.491717409   103.9911   1  12   0.0119   0.0036   0.0119  -0.0035  -0.0038   0.0093   0.70   34.2
+2019/06/08 08:23:51.000   46.945989770   -1.491771400   104.0243   1  12   0.0118   0.0036   0.0119  -0.0035  -0.0038   0.0093   0.00   34.5
+2019/06/08 08:23:51.300   46.945967777   -1.491826229   104.0479   1  12   0.0119   0.0036   0.0118  -0.0035  -0.0038   0.0093   0.30   34.6
+2019/06/08 08:23:51.600   46.945945285   -1.491881652   104.0770   1  13   0.0107   0.0035   0.0113  -0.0027  -0.0033   0.0082   0.60   34.7
+2019/06/08 08:23:51.900   46.945922570   -1.491937907   104.1243   1  13   0.0107   0.0035   0.0113  -0.0027  -0.0033   0.0083   0.90   34.7
+2019/06/08 08:23:52.200   46.945899358   -1.491994688   104.1614   1  12   0.0119   0.0036   0.0119  -0.0035  -0.0038   0.0093   0.20   34.8
+2019/06/08 08:23:52.500   46.945875976   -1.492051575   104.2057   1  12   0.0119   0.0036   0.0119  -0.0035  -0.0038   0.0093   0.50   35.0
+2019/06/08 08:23:52.800   46.945852764   -1.492108071   104.2518   1  12   0.0119   0.0036   0.0119  -0.0036  -0.0038   0.0093   0.80   35.3
Index: /trunk/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java	(revision 15246)
+++ /trunk/src/org/openstreetmap/josm/actions/ExtensionFileFilter.java	(revision 15247)
@@ -27,4 +27,5 @@
 import org.openstreetmap.josm.gui.io.importexport.OsmChangeImporter;
 import org.openstreetmap.josm.gui.io.importexport.OsmImporter;
+import org.openstreetmap.josm.gui.io.importexport.RtkLibImporter;
 import org.openstreetmap.josm.gui.io.importexport.WMSLayerImporter;
 import org.openstreetmap.josm.gui.widgets.AbstractFileChooser;
@@ -65,4 +66,5 @@
                 GpxImporter.class,
                 NMEAImporter.class,
+                RtkLibImporter.class,
                 NoteImporter.class,
                 JpgImporter.class,
Index: /trunk/src/org/openstreetmap/josm/data/gpx/GpxConstants.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/gpx/GpxConstants.java	(revision 15246)
+++ /trunk/src/org/openstreetmap/josm/data/gpx/GpxConstants.java	(revision 15247)
@@ -165,3 +165,38 @@
     Collection<String> FIX_VALUES = Collections.unmodifiableList(
             Arrays.asList("none", "2d", "3d", "dgps", "pps", "rtk", "float rtk", "estimated", "manual", "simulated"));
+
+    /**
+     * The flag which indicates the solution quality.<ul>
+     * <li>1 : Fixed, solution by carrier‐based relative positioning and the integer ambiguity is properly resolved.</li>
+     * <li>2 : Float, solution by carrier‐based relative positioning but the integer ambiguity is not resolved.</li>
+     * <li>3 : Reserved</li>
+     * <li>4 : DGPS, solution by code‐based DGPS solutions or single point positioning with SBAS corrections</li>
+     * <li>5 : Single, solution by single point positioning</li></ul>
+     * @since 15247
+     */
+    String RTKLIB_Q = "Q";
+    /** N (north) component of the standard deviations in m. */
+    String RTKLIB_SDN = "sdn";
+    /** E (east) component of the standard deviations in m. */
+    String RTKLIB_SDE = "sde";
+    /** U (up) component of the standard deviations in m. */
+    String RTKLIB_SDU = "sdu";
+    /**
+     * The absolute value of sdne means square root of the absolute value of NE component of the estimated covariance matrix.
+     * The sign represents the sign of the covariance. */
+    String RTKLIB_SDNE = "sdne";
+    /**
+     * The absolute value of sdeu means square root of the absolute value of EU component of the estimated covariance matrix.
+     * The sign represents the sign of the covariance. */
+    String RTKLIB_SDEU = "sdeu";
+    /**
+     * The absolute value of sdun means square root of the absolute value of UN component of the estimated covariance matrix.
+     * The sign represents the sign of the covariance. */
+    String RTKLIB_SDUN = "sdun";
+    /** The time difference between the observation data epochs of the rover receiver and the base station in second. */
+    String RTKLIB_AGE = "age";
+    /**
+     * The ratio factor of ʺratio‐testʺ for standard integer ambiguity validation strategy.
+     * The value means the ratio of the squared sum of the residuals with the second best integer vector to with the best integer vector. */
+    String RTKLIB_RATIO = "ration";
 }
Index: /trunk/src/org/openstreetmap/josm/gui/io/importexport/RtkLibImporter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/io/importexport/RtkLibImporter.java	(revision 15247)
+++ /trunk/src/org/openstreetmap/josm/gui/io/importexport/RtkLibImporter.java	(revision 15247)
@@ -0,0 +1,114 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.io.importexport;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.swing.JOptionPane;
+import javax.swing.SwingUtilities;
+
+import org.openstreetmap.josm.actions.ExtensionFileFilter;
+import org.openstreetmap.josm.gui.HelpAwareOptionPane;
+import org.openstreetmap.josm.gui.MainApplication;
+import org.openstreetmap.josm.gui.Notification;
+import org.openstreetmap.josm.gui.io.importexport.GpxImporter.GpxImporterData;
+import org.openstreetmap.josm.gui.layer.GpxLayer;
+import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
+import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.io.Compression;
+import org.openstreetmap.josm.io.rtklib.RtkLibPosReader;
+import org.openstreetmap.josm.spi.preferences.Config;
+import org.xml.sax.SAXException;
+
+/**
+ * File importer allowing to import RTKLib files (*.pos files).
+ * @since 15247
+ */
+public class RtkLibImporter extends FileImporter {
+
+    /**
+     * The RtkLib file filter (*.pos files).
+     */
+    public static final ExtensionFileFilter FILE_FILTER = ExtensionFileFilter.newFilterWithArchiveExtensions(
+            "pos", "pos", tr("RTKLib Positioning Solution Files"), false);
+
+    /**
+     * Constructs a new {@code RtkLibImporter}.
+     */
+    public RtkLibImporter() {
+        super(FILE_FILTER);
+    }
+
+    @Override
+    public void importData(File file, ProgressMonitor progressMonitor) throws IOException {
+        final String fn = file.getName();
+        try (InputStream fis = Compression.getUncompressedFileInputStream(file)) {
+            final RtkLibPosReader r = buildAndParse(fis);
+            if (r.getNumberOfCoordinates() > 0) {
+                r.getGpxData().storageFile = file;
+                final GpxLayer gpxLayer = new GpxLayer(r.getGpxData(), fn, true);
+                final File fileFinal = file;
+
+                GuiHelper.runInEDT(() -> {
+                    MainApplication.getLayerManager().addLayer(gpxLayer);
+                    if (Config.getPref().getBoolean("marker.makeautomarkers", true)) {
+                        MarkerLayer ml = new MarkerLayer(r.getGpxData(), tr("Markers from {0}", fn), fileFinal, gpxLayer);
+                        if (!ml.data.isEmpty()) {
+                            MainApplication.getLayerManager().addLayer(ml);
+                        }
+                    }
+                });
+            }
+            showRtkLibInfobox(r.getNumberOfCoordinates() > 0, r);
+        }
+    }
+
+    private static void showRtkLibInfobox(boolean success, RtkLibPosReader r) {
+        final StringBuilder msg = new StringBuilder(160).append("<html>")
+           .append(tr("Coordinates imported: {0}", r.getNumberOfCoordinates()))
+           .append("</html>");
+        if (success) {
+            SwingUtilities.invokeLater(() -> new Notification(
+                    "<h3>" + tr("RTKLib import success:") + "</h3>" + msg.toString())
+                    .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                    .show());
+        } else {
+            HelpAwareOptionPane.showMessageDialogInEDT(
+                    MainApplication.getMainFrame(),
+                    msg.toString(),
+                    tr("RTKLib import failure!"),
+                    JOptionPane.ERROR_MESSAGE, null);
+        }
+    }
+
+    /**
+     * Replies the new GPX and marker layers corresponding to the specified RTKLib file.
+     * @param is input stream to RTKLib data
+     * @param associatedFile RTKLib file
+     * @param gpxLayerName The GPX layer name
+     * @param markerLayerName The marker layer name
+     * @return the new GPX and marker layers corresponding to the specified RTKLib file
+     * @throws IOException if an I/O error occurs
+     */
+    public static GpxImporterData loadLayers(InputStream is, final File associatedFile,
+            final String gpxLayerName, String markerLayerName) throws IOException {
+        final RtkLibPosReader r = buildAndParse(is);
+        final boolean parsedProperly = r.getNumberOfCoordinates() > 0;
+        r.getGpxData().storageFile = associatedFile;
+        return GpxImporter.loadLayers(r.getGpxData(), parsedProperly, gpxLayerName, markerLayerName);
+    }
+
+    static RtkLibPosReader buildAndParse(InputStream fis) throws IOException {
+        final RtkLibPosReader r = new RtkLibPosReader(fis);
+        try {
+            r.parse(true);
+        } catch (SAXException e) {
+            throw new IOException(e);
+        }
+        return r;
+    }
+}
Index: /trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java	(revision 15246)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java	(revision 15247)
@@ -79,4 +79,5 @@
 import org.openstreetmap.josm.gui.io.importexport.JpgImporter;
 import org.openstreetmap.josm.gui.io.importexport.NMEAImporter;
+import org.openstreetmap.josm.gui.io.importexport.RtkLibImporter;
 import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.gui.layer.Layer;
@@ -267,5 +268,6 @@
             ExtensionFileFilter gpxFilter = GpxImporter.getFileFilter();
             AbstractFileChooser fc = new FileChooserManager(true, null).createFileChooser(false, null,
-                    Arrays.asList(gpxFilter, NMEAImporter.FILE_FILTER), gpxFilter, JFileChooser.FILES_ONLY).openFileChooser();
+                    Arrays.asList(gpxFilter, NMEAImporter.FILE_FILTER, RtkLibImporter.FILE_FILTER), gpxFilter, JFileChooser.FILES_ONLY)
+                    .openFileChooser();
             if (fc == null)
                 return;
Index: /trunk/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java	(revision 15246)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java	(revision 15247)
@@ -126,4 +126,5 @@
     /** Colors (without custom alpha channel, if given) for HDOP painting. **/
     private ColorScale hdopScale;
+    private ColorScale qualityScale;
     private ColorScale dateScale;
     private ColorScale directionScale;
@@ -177,4 +178,13 @@
     private static Color[] heatMapLutColorJosmRed2Blue = createColorFromResource("red2blue");
 
+    private static Color[] rtkLibQualityColors = new Color[] {
+        Color.GREEN, // Fixed, solution by carrier‐based relative positioning and the integer ambiguity is properly resolved.
+        Color.ORANGE, // Float, solution by carrier‐based relative positioning but the integer ambiguity is not resolved.
+        Color.PINK, // Reserved
+        Color.BLUE, // DGPS, solution by code‐based DGPS solutions or single point positioning with SBAS corrections
+        Color.RED, // Single, solution by single point positioning
+        Color.CYAN // PPP
+    };
+
     // user defined heatmap color
     private Color[] heatMapLutColor = createColorLut(0, Color.BLACK, Color.WHITE);
@@ -188,4 +198,5 @@
         /** Colors (without custom alpha channel, if given) for HDOP painting. **/
         hdopScale = ColorScale.createHSBScale(256).makeReversed().addTitle(tr("HDOP"));
+        qualityScale = ColorScale.createFixedScale(rtkLibQualityColors).addTitle(tr("Quality"));
         dateScale = ColorScale.createHSBScale(256).addTitle(tr("Time"));
         directionScale = ColorScale.createCyclicScale(256).setIntervalCount(4).addTitle(tr("Direction"));
@@ -228,5 +239,9 @@
          * Color using a heatmap instead of normal lines
          */
-        HEATMAP;
+        HEATMAP,
+        /**
+         * Color by quality (RTKLib)
+         */
+        QUALITY;
 
         static ColorMode fromIndex(final int index) {
@@ -343,4 +358,5 @@
         dateScale.setNoDataColor(neutralColor);
         hdopScale.setNoDataColor(neutralColor);
+        qualityScale.setNoDataColor(neutralColor);
         directionScale.setNoDataColor(neutralColor);
 
@@ -557,4 +573,5 @@
             velocityScale.setRange(0, colorTracksTune);
             hdopScale.setRange(0, hdoprange);
+            qualityScale.setRange(1, rtkLibQualityColors.length);
         }
         double now = System.currentTimeMillis()/1000.0;
@@ -586,6 +603,7 @@
 
                 if (colored == ColorMode.HDOP) {
-                    Float hdop = (Float) trkPnt.get(GpxConstants.PT_HDOP);
-                    color = hdopScale.getColor(hdop);
+                    color = hdopScale.getColor((Float) trkPnt.get(GpxConstants.PT_HDOP));
+                } else if (colored == ColorMode.QUALITY) {
+                    color = qualityScale.getColor((Integer) trkPnt.get(GpxConstants.RTKLIB_Q));
                 }
                 if (oldWp != null) { // other coloring modes need segment for calcuation
@@ -1506,4 +1524,6 @@
         if (colored == ColorMode.HDOP) {
             hdopScale.drawColorBar(g, w-30, 50, 20, 100, 1.0);
+        } else if (colored == ColorMode.QUALITY) {
+            qualityScale.drawColorBar(g, w-30, 50, 20, 100, 1.0);
         } else if (colored == ColorMode.VELOCITY) {
             SystemOfMeasurement som = SystemOfMeasurement.getSystemOfMeasurement();
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java	(revision 15246)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java	(revision 15247)
@@ -65,4 +65,5 @@
     private final JRadioButton colorTypeDirection = new JRadioButton(tr("Direction (red = west, yellow = north, green = east, blue = south)"));
     private final JRadioButton colorTypeDilution = new JRadioButton(tr("Dilution of Position (red = high, green = low, if available)"));
+    private final JRadioButton colorTypeQuality = new JRadioButton(tr("Quality (RTKLib only, if available)"));
     private final JRadioButton colorTypeTime = new JRadioButton(tr("Track date"));
     private final JRadioButton colorTypeHeatMap = new JRadioButton(tr("Heat Map (dark = few, bright = many)"));
@@ -249,4 +250,5 @@
         colorGroup.add(colorTypeDirection);
         colorGroup.add(colorTypeDilution);
+        colorGroup.add(colorTypeQuality);
         colorGroup.add(colorTypeTime);
         colorGroup.add(colorTypeHeatMap);
@@ -257,4 +259,6 @@
         colorTypeDilution.setToolTipText(
                 tr("Colors points and track segments by dilution of position (HDOP). Your capture device needs to log that information."));
+        colorTypeQuality.setToolTipText(
+                tr("Colors points and track segments by RTKLib quality flag (Q). Your capture device needs to log that information."));
         colorTypeTime.setToolTipText(tr("Colors points and track segments by its timestamp."));
         colorTypeHeatMap.setToolTipText(tr("Collected points and track segments for a position and displayed as heat map."));
@@ -277,4 +281,5 @@
         add(colorTypeDirection, GBC.eol().insets(40, 0, 0, 0));
         add(colorTypeDilution, GBC.eol().insets(40, 0, 0, 0));
+        add(colorTypeQuality, GBC.eol().insets(40, 0, 0, 0));
         add(colorTypeTime, GBC.eol().insets(40, 0, 0, 0));
         add(colorTypeHeatMap, GBC.std().insets(40, 0, 0, 0));
@@ -341,4 +346,5 @@
         ExpertToggleAction.addVisibilitySwitcher(colorTypeDirection);
         ExpertToggleAction.addVisibilitySwitcher(colorTypeDilution);
+        ExpertToggleAction.addVisibilitySwitcher(colorTypeQuality);
         ExpertToggleAction.addVisibilitySwitcher(colorTypeHeatMapLowerLimit);
         ExpertToggleAction.addVisibilitySwitcher(colorTypeHeatMapLowerLimitLabel);
@@ -445,4 +451,5 @@
             case 4: colorTypeTime.setSelected(true); break;
             case 5: colorTypeHeatMap.setSelected(true); break;
+            case 6: colorTypeQuality.setSelected(true); break;
             default: Logging.warn("Unknown color type: " + colorType);
             }
@@ -525,4 +532,6 @@
         } else if (colorTypeHeatMap.isSelected()) {
             Config.getPref().putInt("draw.rawgps.colors"+layerNameDot, 5);
+        } else if (colorTypeQuality.isSelected()) {
+            Config.getPref().putInt("draw.rawgps.colors"+layerNameDot, 6);
         } else {
             Config.getPref().putInt("draw.rawgps.colors"+layerNameDot, 0);
Index: /trunk/src/org/openstreetmap/josm/io/OsmServerLocationReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmServerLocationReader.java	(revision 15246)
+++ /trunk/src/org/openstreetmap/josm/io/OsmServerLocationReader.java	(revision 15247)
@@ -62,5 +62,7 @@
         TASKING_MANAGER("https?://.*/api/v\\p{Digit}+/project/\\p{Digit}+/tasks_as_gpx?.*"),
 
+        /** External GPX script */
         EXTERNAL_GPX_SCRIPT("https?://.*exportgpx.*"),
+        /** External GPX file */
         EXTERNAL_GPX_FILE  ("https?://.*/(.*\\.gpx)");
 
@@ -116,4 +118,13 @@
     public OsmServerLocationReader(String url) {
         this.url = url;
+    }
+
+    /**
+     * Returns the URL to fetch
+     * @return the URL to fetch
+     * @since 15247
+     */
+    public final String getUrl() {
+        return url;
     }
 
Index: /trunk/src/org/openstreetmap/josm/io/nmea/NmeaReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/nmea/NmeaReader.java	(revision 15246)
+++ /trunk/src/org/openstreetmap/josm/io/nmea/NmeaReader.java	(revision 15247)
@@ -213,4 +213,8 @@
     }
 
+    /**
+     * Returns the number of coordinates that have been successfuly read.
+     * @return the number of coordinates that have been successfuly read
+     */
     public int getNumberOfCoordinates() {
         return ps.success;
Index: /trunk/src/org/openstreetmap/josm/io/rtklib/RtkLibPosReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/rtklib/RtkLibPosReader.java	(revision 15247)
+++ /trunk/src/org/openstreetmap/josm/io/rtklib/RtkLibPosReader.java	(revision 15247)
@@ -0,0 +1,124 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.io.rtklib;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Locale;
+import java.util.Objects;
+
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.gpx.GpxConstants;
+import org.openstreetmap.josm.data.gpx.GpxData;
+import org.openstreetmap.josm.data.gpx.ImmutableGpxTrack;
+import org.openstreetmap.josm.data.gpx.WayPoint;
+import org.openstreetmap.josm.io.IGpxReader;
+import org.openstreetmap.josm.tools.Logging;
+import org.xml.sax.SAXException;
+
+/**
+ * Reads a RTKLib Positioning Solution file.
+ * <p>
+ * See <a href="https://github.com/tomojitakasu/RTKLIB/blob/rtklib_2.4.3/doc/manual_2.4.2.pdf">RTKLIB Manual</a>.
+ * @since 15247
+ */
+public class RtkLibPosReader implements IGpxReader {
+
+    private static final int IDX_DATE = 0;
+    private static final int IDX_TIME = 1;
+    private static final int IDX_LAT = 2;
+    private static final int IDX_LON = 3;
+    private static final int IDX_HEIGHT = 4;
+    private static final int IDX_Q = 5;
+    private static final int IDX_NS = 6;
+    private static final int IDX_SDN = 7;
+    private static final int IDX_SDE = 8;
+    private static final int IDX_SDU = 9;
+    private static final int IDX_SDNE = 10;
+    private static final int IDX_SDEU = 11;
+    private static final int IDX_SDUN = 12;
+    private static final int IDX_AGE = 13;
+    private static final int IDX_RATIO = 14;
+
+    private final SimpleDateFormat dateTimeFmt = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS", Locale.ENGLISH); // 2019/06/08 08:23:15.000
+
+    private final InputStream source;
+    private GpxData data;
+    private int success; // number of successfully parsed lines
+
+    /**
+     * Constructs a new {@code RtkLibPosReader}
+     * @param source RTKLib .pos file input stream
+     * @throws IOException if an I/O error occurs
+     */
+    public RtkLibPosReader(InputStream source) throws IOException {
+        this.source = Objects.requireNonNull(source);
+    }
+
+    @Override
+    public boolean parse(boolean tryToFinish) throws SAXException, IOException {
+        data = new GpxData();
+        Collection<Collection<WayPoint>> currentTrack = new ArrayList<>();
+        Collection<WayPoint> waypoints = new ArrayList<>();
+        try (BufferedReader rd = new BufferedReader(new InputStreamReader(source, StandardCharsets.UTF_8))) {
+            String line = null;
+            do {
+                line = rd.readLine();
+                if (line != null) {
+                    if (line.startsWith("% ref pos   :")) {
+                        // TODO add marker
+                    } else if (!line.startsWith("%")) {
+                        try {
+                            String[] fields = line.split("[ ]+");
+                            WayPoint currentwp = new WayPoint(new LatLon(
+                                    Double.parseDouble(fields[IDX_LAT]),
+                                    Double.parseDouble(fields[IDX_LON])));
+                            currentwp.put(GpxConstants.PT_ELE, fields[IDX_HEIGHT]);
+                            currentwp.setTime(dateTimeFmt.parse(fields[IDX_DATE]+" "+fields[IDX_TIME]));
+                            currentwp.put(GpxConstants.RTKLIB_Q, Integer.parseInt(fields[IDX_Q]));
+                            currentwp.put(GpxConstants.PT_SAT, fields[IDX_NS]);
+                            currentwp.put(GpxConstants.RTKLIB_SDN, fields[IDX_SDN]);
+                            currentwp.put(GpxConstants.RTKLIB_SDE, fields[IDX_SDE]);
+                            currentwp.put(GpxConstants.RTKLIB_SDE, fields[IDX_SDU]);
+                            currentwp.put(GpxConstants.RTKLIB_SDNE, fields[IDX_SDNE]);
+                            currentwp.put(GpxConstants.RTKLIB_SDEU, fields[IDX_SDEU]);
+                            currentwp.put(GpxConstants.RTKLIB_SDUN, fields[IDX_SDUN]);
+                            currentwp.put(GpxConstants.RTKLIB_AGE, fields[IDX_AGE]);
+                            currentwp.put(GpxConstants.RTKLIB_RATIO, fields[IDX_RATIO]);
+                            double sdn = Double.parseDouble(fields[IDX_SDN]);
+                            double sde = Double.parseDouble(fields[IDX_SDN]);
+                            currentwp.put(GpxConstants.PT_HDOP, (float) Math.sqrt(sdn*sdn + sde*sde));
+                            waypoints.add(currentwp);
+                            success++;
+                        } catch (ParseException | IllegalArgumentException e) {
+                            Logging.error(e);
+                        }
+                    }
+                }
+            } while (line != null);
+        }
+        currentTrack.add(waypoints);
+        data.tracks.add(new ImmutableGpxTrack(currentTrack, Collections.<String, Object>emptyMap()));
+        return true;
+    }
+
+    @Override
+    public GpxData getGpxData() {
+        return data;
+    }
+
+    /**
+     * Returns the number of coordinates that have been successfuly read.
+     * @return the number of coordinates that have been successfuly read
+     */
+    public int getNumberOfCoordinates() {
+        return success;
+    }
+}
Index: /trunk/src/org/openstreetmap/josm/io/rtklib/package-info.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/rtklib/package-info.java	(revision 15247)
+++ /trunk/src/org/openstreetmap/josm/io/rtklib/package-info.java	(revision 15247)
@@ -0,0 +1,9 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides the classes for reading RTKLib Positioning Solution files.
+ * <p>
+ * See <a href="https://github.com/tomojitakasu/RTKLIB/blob/rtklib_2.4.3/doc/manual_2.4.2.pdf">RTKLIB Manual</a>.
+ * @since 15247
+ */
+package org.openstreetmap.josm.io.rtklib;
Index: /trunk/src/org/openstreetmap/josm/io/session/GpxTracksSessionImporter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/session/GpxTracksSessionImporter.java	(revision 15246)
+++ /trunk/src/org/openstreetmap/josm/io/session/GpxTracksSessionImporter.java	(revision 15247)
@@ -15,4 +15,5 @@
 import org.openstreetmap.josm.gui.io.importexport.GpxImporter;
 import org.openstreetmap.josm.gui.io.importexport.NMEAImporter;
+import org.openstreetmap.josm.gui.io.importexport.RtkLibImporter;
 import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.gui.layer.Layer;
@@ -48,4 +49,6 @@
                 if (NMEAImporter.FILE_FILTER.acceptName(fileStr)) {
                     importData = NMEAImporter.loadLayers(in, support.getFile(fileStr), support.getLayerName(), null);
+                } else if (RtkLibImporter.FILE_FILTER.acceptName(fileStr)) {
+                    importData = RtkLibImporter.loadLayers(in, support.getFile(fileStr), support.getLayerName(), null);
                 } else {
                     importData = GpxImporter.loadLayers(in, support.getFile(fileStr), support.getLayerName(), null, progressMonitor);
Index: /trunk/src/org/openstreetmap/josm/tools/ColorScale.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/tools/ColorScale.java	(revision 15246)
+++ /trunk/src/org/openstreetmap/josm/tools/ColorScale.java	(revision 15247)
@@ -22,4 +22,18 @@
     private ColorScale() {
 
+    }
+
+    /**
+     * Gets a fixed color range.
+     * @param colors the fixed colors list
+     * @return The scale
+     * @since 15247
+     */
+    public static ColorScale createFixedScale(Color[] colors) {
+        ColorScale sc = new ColorScale();
+        sc.colors = Utils.copyArray(colors);
+        sc.setRange(0, colors.length - 1);
+        sc.addBounds();
+        return sc;
     }
 
Index: /trunk/test/unit/org/openstreetmap/josm/io/rtklib/RtkLibPosReaderTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/io/rtklib/RtkLibPosReaderTest.java	(revision 15247)
+++ /trunk/test/unit/org/openstreetmap/josm/io/rtklib/RtkLibPosReaderTest.java	(revision 15247)
@@ -0,0 +1,72 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.io.rtklib;
+
+import static org.junit.Assert.assertEquals;
+
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.TimeZone;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.gpx.GpxConstants;
+import org.openstreetmap.josm.data.gpx.WayPoint;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+import org.openstreetmap.josm.tools.date.DateUtils;
+
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
+/**
+ * Unit tests of {@link RtkLibPosReader} class.
+ */
+public class RtkLibPosReaderTest {
+    /**
+     * Set the timezone and timeout.
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules();
+
+    private final SimpleDateFormat iso8601 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
+
+    /**
+     * Forces the timezone.
+     */
+    @Before
+    public void setUp() {
+        iso8601.setTimeZone(DateUtils.UTC);
+    }
+
+    /**
+     * Tests reading a RTKLib pos file.
+     * @throws Exception if any error occurs
+     */
+    @Test
+    public void testReader() throws Exception {
+        TimeZone.setDefault(TimeZone.getTimeZone("Europe/Berlin"));
+        RtkLibPosReader in = new RtkLibPosReader(Files.newInputStream(Paths.get("data_nodist/rtklib_example.pos")));
+        in.parse(true);
+        assertEquals(137, in.getNumberOfCoordinates());
+
+        List<WayPoint> wayPoints = new ArrayList<>(in.getGpxData().tracks.iterator().next().getSegments().iterator().next().getWayPoints());
+        assertEquals(DateUtils.fromString("2019-06-08T06:23:12.000Z"), wayPoints.get(0).get(GpxConstants.PT_TIME));
+        assertEquals(DateUtils.fromString("2019-06-08T06:23:12.300Z"), wayPoints.get(1).get(GpxConstants.PT_TIME));
+        assertEquals(DateUtils.fromString("2019-06-08T06:23:12.600Z"), wayPoints.get(2).get(GpxConstants.PT_TIME));
+        assertEquals(wayPoints.get(0).getDate(), wayPoints.get(0).get(GpxConstants.PT_TIME));
+
+        assertEquals("2019-06-08T06:23:12.000Z", iso8601.format(wayPoints.get(0).getDate()));
+        assertEquals("2019-06-08T06:23:12.300Z", iso8601.format(wayPoints.get(1).getDate()));
+        assertEquals("2019-06-08T06:23:12.600Z", iso8601.format(wayPoints.get(2).getDate()));
+
+        assertEquals(new LatLon(46.948881673, -1.484757046), wayPoints.get(0).getCoor());
+        assertEquals(5, wayPoints.get(0).get(GpxConstants.RTKLIB_Q));
+        assertEquals("92.3955", wayPoints.get(0).get(GpxConstants.PT_ELE));
+        assertEquals("2", wayPoints.get(0).get(GpxConstants.PT_SAT));
+        assertEquals("2.2090015", wayPoints.get(0).get(GpxConstants.PT_HDOP).toString().trim());
+    }
+}
