Add compatibility to read GPX file generated by Canimap.
This commit is contained in:
parent
684f8f0d06
commit
11df4593ab
|
|
@ -26,6 +26,25 @@ public class ImportGpx extends Gpx {
|
|||
|
||||
private static final String TAG = Traces.class.getName();
|
||||
|
||||
private static final String BALISE_GPX = "gpx";
|
||||
private static final String BALISE_WPT = "wpt";
|
||||
private static final String BALISE_TRK = "trk";
|
||||
private static final String BALISE_TRKSEQ = "trkseg";
|
||||
private static final String BALISE_TRKPT = "trkpt";
|
||||
private static final String BALISE_RTE = "rte";
|
||||
private static final String BALISE_RTEPT = "rtept";
|
||||
private static final String BALISE_NAME = "name";
|
||||
private static final String BALISE_TIME = "time";
|
||||
private static final String BALISE_EXTENSIONS = "extensions";
|
||||
private static final String BALISE_EXTENSIONS_FOUND = "found";
|
||||
|
||||
private static final String BALISE_ATTR_POINT_LAT = "lat";
|
||||
private static final String BALISE_ATTR_POINT_LON = "lon";
|
||||
|
||||
|
||||
private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
|
||||
private static final String PATTERN_DATE = "([0-9]{4}-[0-9]{2}-[0-9]{2})T([0-9]{2}:[0-9]{2}:[0-9]{2})Z";
|
||||
|
||||
private String traceName = "";
|
||||
|
||||
public ImportGpx(File filePath) {
|
||||
|
|
@ -53,16 +72,18 @@ public class ImportGpx extends Gpx {
|
|||
private List<MyLocation> readGpx(XmlPullParser parser) throws XmlPullParserException, IOException {
|
||||
List<MyLocation> entries = new ArrayList<>();
|
||||
|
||||
parser.require(XmlPullParser.START_TAG, null, "gpx");
|
||||
parser.require(XmlPullParser.START_TAG, null, BALISE_GPX);
|
||||
while (parser.next() != XmlPullParser.END_TAG) {
|
||||
if (parser.getEventType() != XmlPullParser.START_TAG) {
|
||||
continue;
|
||||
}
|
||||
String name = parser.getName();
|
||||
if (name.equals("wpt")) {
|
||||
if (name.equals(BALISE_WPT)) {
|
||||
entries.add(readWaypoint(parser));
|
||||
} else if (name.equals("trk")) {
|
||||
} else if (name.equals(BALISE_TRK)) {
|
||||
entries.addAll(readTrk(parser));
|
||||
} else if (name.equals(BALISE_RTE)) {
|
||||
entries.addAll(readRte(parser));
|
||||
} else {
|
||||
skip(parser);
|
||||
}
|
||||
|
|
@ -73,13 +94,13 @@ public class ImportGpx extends Gpx {
|
|||
private List<MyLocation> readTrk(XmlPullParser parser) throws XmlPullParserException, IOException {
|
||||
List<MyLocation> entries = new ArrayList<>();
|
||||
|
||||
parser.require(XmlPullParser.START_TAG, null, "trk");
|
||||
parser.require(XmlPullParser.START_TAG, null, BALISE_TRK);
|
||||
while (parser.next() != XmlPullParser.END_TAG) {
|
||||
if (parser.getEventType() != XmlPullParser.START_TAG) {
|
||||
continue;
|
||||
}
|
||||
String name = parser.getName();
|
||||
if (name.equals("trkseg")) {
|
||||
if (name.equals(BALISE_TRKSEQ)) {
|
||||
entries = readTrkseq(parser);
|
||||
} else {
|
||||
skip(parser);
|
||||
|
|
@ -91,15 +112,15 @@ public class ImportGpx extends Gpx {
|
|||
private List<MyLocation> readTrkseq(XmlPullParser parser) throws XmlPullParserException, IOException {
|
||||
List<MyLocation> entries = new ArrayList<>();
|
||||
|
||||
parser.require(XmlPullParser.START_TAG, null, "trkseg");
|
||||
parser.require(XmlPullParser.START_TAG, null, BALISE_TRKSEQ);
|
||||
while (parser.next() != XmlPullParser.END_TAG) {
|
||||
if (parser.getEventType() != XmlPullParser.START_TAG) {
|
||||
continue;
|
||||
}
|
||||
String name = parser.getName();
|
||||
if (name.equals("trkpt")) {
|
||||
if (name.equals(BALISE_TRKPT)) {
|
||||
entries.add(readTrkpt(parser));
|
||||
} else if (name.equals("name")) {
|
||||
} else if (name.equals(BALISE_NAME)) {
|
||||
traceName = readName(parser);
|
||||
} else {
|
||||
skip(parser);
|
||||
|
|
@ -110,10 +131,37 @@ public class ImportGpx extends Gpx {
|
|||
|
||||
|
||||
private MyLocation readTrkpt(XmlPullParser parser) throws XmlPullParserException, IOException {
|
||||
parser.require(XmlPullParser.START_TAG, null, "trkpt");
|
||||
parser.require(XmlPullParser.START_TAG, null, BALISE_TRKPT);
|
||||
return readPoint(parser);
|
||||
}
|
||||
|
||||
String latStr = parser.getAttributeValue(null, "lat");
|
||||
String lonStr = parser.getAttributeValue(null, "lon");
|
||||
|
||||
private List<MyLocation> readRte(XmlPullParser parser) throws XmlPullParserException, IOException {
|
||||
List<MyLocation> entries = new ArrayList<>();
|
||||
|
||||
parser.require(XmlPullParser.START_TAG, null, BALISE_RTE);
|
||||
while (parser.next() != XmlPullParser.END_TAG) {
|
||||
if (parser.getEventType() != XmlPullParser.START_TAG) {
|
||||
continue;
|
||||
}
|
||||
String name = parser.getName();
|
||||
if (name.equals(BALISE_RTEPT)) {
|
||||
entries.add(readRteptseq(parser));
|
||||
} else {
|
||||
skip(parser);
|
||||
}
|
||||
}
|
||||
return entries;
|
||||
}
|
||||
|
||||
private MyLocation readRteptseq(XmlPullParser parser) throws XmlPullParserException, IOException {
|
||||
parser.require(XmlPullParser.START_TAG, null, BALISE_RTEPT);
|
||||
return readPoint(parser);
|
||||
}
|
||||
|
||||
private MyLocation readPoint(XmlPullParser parser) throws XmlPullParserException, IOException {
|
||||
String latStr = parser.getAttributeValue(null, BALISE_ATTR_POINT_LAT);
|
||||
String lonStr = parser.getAttributeValue(null, BALISE_ATTR_POINT_LON);
|
||||
double lat = Double.parseDouble(latStr);
|
||||
double lon = Double.parseDouble(lonStr);
|
||||
long time = -1;
|
||||
|
|
@ -123,7 +171,7 @@ public class ImportGpx extends Gpx {
|
|||
continue;
|
||||
}
|
||||
String name = parser.getName();
|
||||
if (name.equals("time")) {
|
||||
if (name.equals(BALISE_TIME)) {
|
||||
time = readTime(parser);
|
||||
} else {
|
||||
skip(parser);
|
||||
|
|
@ -134,10 +182,10 @@ public class ImportGpx extends Gpx {
|
|||
|
||||
|
||||
private MyLocation readWaypoint(XmlPullParser parser) throws XmlPullParserException, IOException {
|
||||
parser.require(XmlPullParser.START_TAG, null, "wpt");
|
||||
parser.require(XmlPullParser.START_TAG, null, BALISE_WPT);
|
||||
|
||||
String latStr = parser.getAttributeValue(null, "lat");
|
||||
String lonStr = parser.getAttributeValue(null, "lon");
|
||||
String latStr = parser.getAttributeValue(null, BALISE_ATTR_POINT_LAT);
|
||||
String lonStr = parser.getAttributeValue(null, BALISE_ATTR_POINT_LON);
|
||||
double lat = Double.parseDouble(latStr);
|
||||
double lon = Double.parseDouble(lonStr);
|
||||
long time = -1;
|
||||
|
|
@ -148,9 +196,9 @@ public class ImportGpx extends Gpx {
|
|||
continue;
|
||||
}
|
||||
String name = parser.getName();
|
||||
if (name.equals("time")) {
|
||||
if (name.equals(BALISE_TIME)) {
|
||||
time = readTime(parser);
|
||||
} else if (name.equals("extensions")) {
|
||||
} else if (name.equals(BALISE_EXTENSIONS)) {
|
||||
isFound = readExtensions(parser);
|
||||
} else {
|
||||
skip(parser);
|
||||
|
|
@ -162,11 +210,11 @@ public class ImportGpx extends Gpx {
|
|||
|
||||
private long readTime(XmlPullParser parser) throws XmlPullParserException, IOException {
|
||||
long ret = 0;
|
||||
parser.require(XmlPullParser.START_TAG, null, "time");
|
||||
parser.require(XmlPullParser.START_TAG, null, BALISE_TIME);
|
||||
String timeStr = readText(parser);
|
||||
|
||||
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
Pattern pattern = Pattern.compile("([0-9]{4}-[0-9]{2}-[0-9]{2})T([0-9]{2}:[0-9]{2}:[0-9]{2})Z");
|
||||
SimpleDateFormat formater = new SimpleDateFormat(DATE_FORMAT);
|
||||
Pattern pattern = Pattern.compile(PATTERN_DATE);
|
||||
Matcher matcher = pattern.matcher(timeStr);
|
||||
|
||||
while (matcher.find()) {
|
||||
|
|
@ -179,20 +227,20 @@ public class ImportGpx extends Gpx {
|
|||
}
|
||||
}
|
||||
}
|
||||
parser.require(XmlPullParser.END_TAG, null, "time");
|
||||
parser.require(XmlPullParser.END_TAG, null, BALISE_TIME);
|
||||
return ret;
|
||||
}
|
||||
|
||||
private boolean readExtensions(XmlPullParser parser) throws XmlPullParserException, IOException {
|
||||
boolean ret = false;
|
||||
parser.require(XmlPullParser.START_TAG, null, "extensions");
|
||||
parser.require(XmlPullParser.START_TAG, null, BALISE_EXTENSIONS);
|
||||
|
||||
while (parser.next() != XmlPullParser.END_TAG) {
|
||||
if (parser.getEventType() != XmlPullParser.START_TAG) {
|
||||
continue;
|
||||
}
|
||||
String name = parser.getName();
|
||||
if (name.equals("found")) {
|
||||
if (name.equals(BALISE_EXTENSIONS_FOUND)) {
|
||||
ret = readFound(parser);
|
||||
} else {
|
||||
skip(parser);
|
||||
|
|
@ -204,18 +252,18 @@ public class ImportGpx extends Gpx {
|
|||
|
||||
private boolean readFound(XmlPullParser parser) throws XmlPullParserException, IOException {
|
||||
boolean ret;
|
||||
parser.require(XmlPullParser.START_TAG, null, "found");
|
||||
parser.require(XmlPullParser.START_TAG, null, BALISE_EXTENSIONS_FOUND);
|
||||
ret = Boolean.parseBoolean(readText(parser));
|
||||
parser.require(XmlPullParser.END_TAG, null, "found");
|
||||
parser.require(XmlPullParser.END_TAG, null, BALISE_EXTENSIONS_FOUND);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
private String readName(XmlPullParser parser) throws XmlPullParserException, IOException {
|
||||
String ret;
|
||||
parser.require(XmlPullParser.START_TAG, null, "name");
|
||||
parser.require(XmlPullParser.START_TAG, null, BALISE_NAME);
|
||||
ret = readText(parser);
|
||||
parser.require(XmlPullParser.END_TAG, null, "name");
|
||||
parser.require(XmlPullParser.END_TAG, null, BALISE_NAME);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue