3 import java.text.ParseException;
5 public class Complementation {
6 public static final Double R = (6378137D + 6356752.314D)/2D; // 6367444.657m
8 public TagTrkpt imaTag = null;
9 public TagTrkpt maeTag = null;
10 public static boolean param_GpxOutputSpeed = false;
11 public static boolean param_GpxOverwriteMagvar = false;
16 * @throws java.text.ParseException
18 * <trkpt lat="34.976635" lon="138.466228">
20 * <magvar>359</magvar>
22 * <time>2016-07-02T08:25:18Z</time>
27 * @throws ParseException
29 public Complementation(TagTrkpt imaE, TagTrkpt maeE) throws ParseException {
30 this.imaTag = new TagTrkpt(imaE.trkpt);
32 this.maeTag = new TagTrkpt(maeE.trkpt);
37 * 緯度・経度と時間差から速度(km/h)を求める
40 public void complementationSpeed() {
41 if (imaTag.speedStr != null) {
43 Double.parseDouble(imaTag.speedStr);
45 catch (NumberFormatException e) {
46 // 数字以外なら<speed>エレメントを削除する
47 imaTag.removeElement("speed");
48 imaTag.speedStr = null;
52 if (imaTag.speedStr == null) {
53 double d = GeoDistance.calcDistHubeny(imaTag.lat, imaTag.lon, maeTag.lat, maeTag.lon);
54 String str = Double.toString((d * 3600) / (imaTag.time.getTime() - maeTag.time.getTime()));
55 int iDot = str.indexOf('.');
57 str = str.substring(0, iDot+2);
59 imaTag.appendElement("speed", str);
60 imaTag.speedStr = str;
65 * 経度(longitude)と経度から進行方向を求める
66 * @throws ParseException
68 public void complementationMagvar() throws ParseException {
69 if (imaTag.magvarStr != null) {
71 Double.parseDouble(imaTag.magvarStr);
73 catch (NumberFormatException e) {
74 // 数字以外なら<magvar>エレメントを削除する
75 imaTag.removeElement("magvar");
76 imaTag.magvarStr = null;
80 if (imaTag.magvarStr == null) {
81 Double r = Math.cos(Math.toRadians((imaTag.lat + maeTag.lat) / 2)) * R;
82 Double x = Math.toRadians(imaTag.lon - maeTag.lon) * r;
83 Double y = Math.toRadians(imaTag.lat - maeTag.lat) * R;
84 double rad = Math.toDegrees(Math.atan2(y, x));
91 rad = 360 - (rad - 90);
103 String str = Double.toString(rad);
104 int iDot = str.indexOf('.');
106 str = str.substring(0, iDot);
108 imaTag.appendElement("magvar", str);
109 imaTag.magvarStr = str;