3 import java.text.ParseException;
4 import org.w3c.dom.Element;
6 public class Complementation {
7 public static final Double R = (6378137D + 6356752.314D)/2D; // 6367444.657m
8 //public static final double dLat = 0.00453D; // 1km距離を表す緯度(差分)
9 //public static final double dLon = 0.005588D; // 1km距離を表す経度(差分)
11 public TagTrkpt imaTag = null;
12 public TagTrkpt maeTag = null;
13 public static boolean param_GpxOutputSpeed = false;
14 public static boolean param_GpxOverwriteMagvar = false;
19 * <trkpt lat="34.976635" lon="138.466228">
21 * <magvar>359</magvar>
23 * <time>2016-07-02T08:25:18Z</time>
28 * @throws ParseException
30 public Complementation(Element imaE, Element maeE) throws ParseException {
31 this.imaTag = new TagTrkpt(imaE);
33 this.maeTag = new TagTrkpt(maeE);
39 * 緯度・経度と時間差から速度(km/h)を求める
42 public void complementationSpeed() {
43 if (imaTag.speedStr != null) {
45 Double.parseDouble(imaTag.speedStr);
47 catch (NumberFormatException e) {
48 // 数字以外なら<speed>エレメントを削除する
49 imaTag.removeElement("speed");
50 imaTag.speedStr = null;
54 if (imaTag.speedStr == null) {
55 double d = Coords.calcDistHubeny(imaTag.lat, imaTag.lon, maeTag.lat, maeTag.lon);
56 String str = Double.toString((d * 3600) / (imaTag.time.getTime() - maeTag.time.getTime()));
57 int iDot = str.indexOf('.');
59 str = str.substring(0, iDot+2);
61 imaTag.appendElement("speed", str);
62 imaTag.speedStr = new String(str);
67 * 経度(longitude)と経度から進行方向を求める
75 * @throws ParseException
77 public void complementationMagvar() throws ParseException {
78 if (imaTag.magvarStr != null) {
80 Double.parseDouble(imaTag.magvarStr);
82 catch (NumberFormatException e) {
83 // 数字以外なら<magvar>エレメントを削除する
84 imaTag.removeElement("magvar");
85 imaTag.magvarStr = null;
89 if (imaTag.magvarStr == null) {
90 Double r = Math.cos(Math.toRadians((imaTag.lat + maeTag.lat) / 2)) * R;
91 Double x = Math.toRadians(imaTag.lon - maeTag.lon) * r;
92 Double y = Math.toRadians(imaTag.lat - maeTag.lat) * R;
93 double rad = Math.toDegrees(Math.atan2(y, x));
100 rad = 360 - (rad - 90);
112 String str = Double.toString(rad);
113 int iDot = str.indexOf('.');
115 str = str.substring(0, iDot);
117 imaTag.appendElement("magvar", str);
118 imaTag.magvarStr = new String(str);