Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
5db140a223
4 changed files with 117 additions and 139 deletions
|
@ -447,6 +447,10 @@ public class MapUtils {
|
||||||
// return measuredDist(x1, y1, x2, y2);
|
// return measuredDist(x1, y1, x2, y2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static double measuredDist31(int x1, int y1, int x2, int y2) {
|
||||||
|
return getDistance(MapUtils.get31LatitudeY(y1), MapUtils.get31LongitudeX(x1), MapUtils.get31LatitudeY(y2), MapUtils.get31LongitudeX(x2));
|
||||||
|
}
|
||||||
|
|
||||||
public static double squareDist31TileMetric(int x1, int y1, int x2, int y2) {
|
public static double squareDist31TileMetric(int x1, int y1, int x2, int y2) {
|
||||||
// translate into meters
|
// translate into meters
|
||||||
double dy = convert31YToMeters(y1, y2);
|
double dy = convert31YToMeters(y1, y2);
|
||||||
|
@ -462,21 +466,6 @@ public class MapUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
String s = "";
|
|
||||||
// s = "القاهرة"; // cairo
|
|
||||||
// s = "東京"; //tokyo
|
|
||||||
// s = "北京"; // beijing
|
|
||||||
// s = "יְרוּשָׁלַיִם"; // jerusalem
|
|
||||||
|
|
||||||
System.out.println(s);
|
|
||||||
for(int i = 0; i < s.length(); i++ ) {
|
|
||||||
System.out.print(s.charAt(i) + "\n");
|
|
||||||
}
|
|
||||||
for(int i = 0; i < s.length(); i++ ) {
|
|
||||||
System.out.print("\\u0"+Integer.toHexString(s.charAt(i)) + "");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -32,33 +32,33 @@ import org.xmlpull.v1.XmlPullParser;
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
import org.xmlpull.v1.XmlSerializer;
|
import org.xmlpull.v1.XmlSerializer;
|
||||||
|
|
||||||
|
|
||||||
public class GPXUtilities {
|
public class GPXUtilities {
|
||||||
public final static Log log = PlatformUtil.getLog(GPXUtilities.class);
|
public final static Log log = PlatformUtil.getLog(GPXUtilities.class);
|
||||||
|
|
||||||
private final static String GPX_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'"; //$NON-NLS-1$
|
private final static String GPX_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'"; //$NON-NLS-1$
|
||||||
|
|
||||||
private final static NumberFormat latLonFormat = new DecimalFormat("0.00#####", new DecimalFormatSymbols(new Locale("EN", "US")));
|
private final static NumberFormat latLonFormat = new DecimalFormat("0.00#####", new DecimalFormatSymbols(
|
||||||
|
new Locale("EN", "US")));
|
||||||
|
|
||||||
public static class GPXExtensions {
|
public static class GPXExtensions {
|
||||||
Map<String, String> extensions = null;
|
Map<String, String> extensions = null;
|
||||||
|
|
||||||
public Map<String, String> getExtensionsToRead() {
|
public Map<String, String> getExtensionsToRead() {
|
||||||
if(extensions == null){
|
if (extensions == null) {
|
||||||
return Collections.emptyMap();
|
return Collections.emptyMap();
|
||||||
}
|
}
|
||||||
return extensions;
|
return extensions;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, String> getExtensionsToWrite() {
|
public Map<String, String> getExtensionsToWrite() {
|
||||||
if(extensions == null){
|
if (extensions == null) {
|
||||||
extensions = new LinkedHashMap<String, String>();
|
extensions = new LinkedHashMap<String, String>();
|
||||||
}
|
}
|
||||||
return extensions;
|
return extensions;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class WptPt extends GPXExtensions {
|
public static class WptPt extends GPXExtensions {
|
||||||
public double lat;
|
public double lat;
|
||||||
public double lon;
|
public double lon;
|
||||||
|
@ -70,8 +70,9 @@ public class GPXUtilities {
|
||||||
public double ele = Double.NaN;
|
public double ele = Double.NaN;
|
||||||
public double speed = 0;
|
public double speed = 0;
|
||||||
public double hdop = Double.NaN;
|
public double hdop = Double.NaN;
|
||||||
|
|
||||||
public WptPt() {}
|
public WptPt() {
|
||||||
|
}
|
||||||
|
|
||||||
public WptPt(double lat, double lon, long time, double ele, double speed, double hdop) {
|
public WptPt(double lat, double lon, long time, double ele, double speed, double hdop) {
|
||||||
this.lat = lat;
|
this.lat = lat;
|
||||||
|
@ -81,26 +82,26 @@ public class GPXUtilities {
|
||||||
this.speed = speed;
|
this.speed = speed;
|
||||||
this.hdop = hdop;
|
this.hdop = hdop;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class TrkSegment extends GPXExtensions {
|
public static class TrkSegment extends GPXExtensions {
|
||||||
public List<WptPt> points = new ArrayList<WptPt>();
|
public List<WptPt> points = new ArrayList<WptPt>();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Track extends GPXExtensions {
|
public static class Track extends GPXExtensions {
|
||||||
public String name = null;
|
public String name = null;
|
||||||
public String desc = null;
|
public String desc = null;
|
||||||
public List<TrkSegment> segments = new ArrayList<TrkSegment>();
|
public List<TrkSegment> segments = new ArrayList<TrkSegment>();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Route extends GPXExtensions {
|
public static class Route extends GPXExtensions {
|
||||||
public String name = null;
|
public String name = null;
|
||||||
public String desc = null;
|
public String desc = null;
|
||||||
public List<WptPt> points = new ArrayList<WptPt>();
|
public List<WptPt> points = new ArrayList<WptPt>();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class GPXFile extends GPXExtensions {
|
public static class GPXFile extends GPXExtensions {
|
||||||
|
@ -111,36 +112,36 @@ public class GPXUtilities {
|
||||||
public String warning = null;
|
public String warning = null;
|
||||||
public String path = "";
|
public String path = "";
|
||||||
public boolean showCurrentTrack;
|
public boolean showCurrentTrack;
|
||||||
|
|
||||||
public List<List<WptPt>> processedPointsToDisplay = new ArrayList<List<WptPt>>();
|
public List<List<WptPt>> processedPointsToDisplay = new ArrayList<List<WptPt>>();
|
||||||
|
|
||||||
public boolean isCloudmadeRouteFile(){
|
public boolean isCloudmadeRouteFile() {
|
||||||
return "cloudmade".equalsIgnoreCase(author);
|
return "cloudmade".equalsIgnoreCase(author);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void proccessPoints(){
|
public void proccessPoints() {
|
||||||
List<List<WptPt>> tpoints = new ArrayList<List<WptPt>>();
|
List<List<WptPt>> tpoints = new ArrayList<List<WptPt>>();
|
||||||
boolean created = false;
|
boolean created = false;
|
||||||
for (Track t : tracks) {
|
for (Track t : tracks) {
|
||||||
for (TrkSegment ts : t.segments) {
|
for (TrkSegment ts : t.segments) {
|
||||||
if(ts.points.size() > 0) {
|
if (ts.points.size() > 0) {
|
||||||
created = true;
|
created = true;
|
||||||
tpoints.add(ts.points);
|
tpoints.add(ts.points);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!created && routes.size() > 0) {
|
if (!created && routes.size() > 0) {
|
||||||
for(Route r : routes) {
|
for (Route r : routes) {
|
||||||
tpoints.add(r.points);
|
tpoints.add(r.points);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
processedPointsToDisplay = tpoints;
|
processedPointsToDisplay = tpoints;
|
||||||
}
|
}
|
||||||
|
|
||||||
public WptPt findPointToShow(){
|
public WptPt findPointToShow() {
|
||||||
for(Track t : tracks){
|
for (Track t : tracks) {
|
||||||
for(TrkSegment s : t.segments){
|
for (TrkSegment s : t.segments) {
|
||||||
if(s.points.size() > 0){
|
if (s.points.size() > 0) {
|
||||||
return s.points.get(0);
|
return s.points.get(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -169,32 +170,30 @@ public class GPXUtilities {
|
||||||
}
|
}
|
||||||
return points.isEmpty() && routes.isEmpty();
|
return points.isEmpty() && routes.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static String writeGpxFile(File fout, GPXFile file, ClientContext ctx) {
|
public static String writeGpxFile(File fout, GPXFile file, ClientContext ctx) {
|
||||||
FileOutputStream output = null;
|
FileOutputStream output = null;
|
||||||
try {
|
try {
|
||||||
SimpleDateFormat format = new SimpleDateFormat(GPX_TIME_FORMAT);
|
SimpleDateFormat format = new SimpleDateFormat(GPX_TIME_FORMAT);
|
||||||
format.setTimeZone(TimeZone.getTimeZone("UTC"));
|
format.setTimeZone(TimeZone.getTimeZone("UTC"));
|
||||||
output = new FileOutputStream(fout);
|
output = new FileOutputStream(fout);
|
||||||
XmlSerializer serializer = ctx.getInternalAPI().newSerializer();
|
XmlSerializer serializer = ctx.getInternalAPI().newSerializer();
|
||||||
serializer.setOutput(output, "UTF-8"); //$NON-NLS-1$
|
serializer.setOutput(output, "UTF-8"); //$NON-NLS-1$
|
||||||
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true); //$NON-NLS-1$
|
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true); //$NON-NLS-1$
|
||||||
serializer.startDocument("UTF-8", true); //$NON-NLS-1$
|
serializer.startDocument("UTF-8", true); //$NON-NLS-1$
|
||||||
serializer.startTag(null, "gpx"); //$NON-NLS-1$
|
serializer.startTag(null, "gpx"); //$NON-NLS-1$
|
||||||
serializer.attribute(null, "version", "1.1"); //$NON-NLS-1$ //$NON-NLS-2$
|
serializer.attribute(null, "version", "1.1"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
if(file.author == null ){
|
if (file.author == null) {
|
||||||
serializer.attribute(null, "creator", Version.getAppName(ctx)); //$NON-NLS-1$
|
serializer.attribute(null, "creator", Version.getAppName(ctx)); //$NON-NLS-1$
|
||||||
} else {
|
} else {
|
||||||
serializer.attribute(null, "creator", file.author); //$NON-NLS-1$
|
serializer.attribute(null, "creator", file.author); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
serializer.attribute(null, "xmlns", "http://www.topografix.com/GPX/1/1"); //$NON-NLS-1$ //$NON-NLS-2$
|
serializer.attribute(null, "xmlns", "http://www.topografix.com/GPX/1/1"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
serializer.attribute(null, "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
|
serializer.attribute(null, "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
|
||||||
serializer.attribute(null, "xsi:schemaLocation", "http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd");
|
serializer.attribute(null, "xsi:schemaLocation",
|
||||||
|
"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd");
|
||||||
|
|
||||||
for (Track track : file.tracks) {
|
for (Track track : file.tracks) {
|
||||||
serializer.startTag(null, "trk"); //$NON-NLS-1$
|
serializer.startTag(null, "trk"); //$NON-NLS-1$
|
||||||
|
@ -212,7 +211,7 @@ public class GPXUtilities {
|
||||||
writeExtensions(serializer, track);
|
writeExtensions(serializer, track);
|
||||||
serializer.endTag(null, "trk"); //$NON-NLS-1$
|
serializer.endTag(null, "trk"); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Route track : file.routes) {
|
for (Route track : file.routes) {
|
||||||
serializer.startTag(null, "rte"); //$NON-NLS-1$
|
serializer.startTag(null, "rte"); //$NON-NLS-1$
|
||||||
writeNotNullText(serializer, "name", track.name);
|
writeNotNullText(serializer, "name", track.name);
|
||||||
|
@ -226,7 +225,7 @@ public class GPXUtilities {
|
||||||
writeExtensions(serializer, track);
|
writeExtensions(serializer, track);
|
||||||
serializer.endTag(null, "rte"); //$NON-NLS-1$
|
serializer.endTag(null, "rte"); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
for (WptPt l : file.points) {
|
for (WptPt l : file.points) {
|
||||||
serializer.startTag(null, "wpt"); //$NON-NLS-1$
|
serializer.startTag(null, "wpt"); //$NON-NLS-1$
|
||||||
writeWpt(format, serializer, l);
|
writeWpt(format, serializer, l);
|
||||||
|
@ -242,27 +241,26 @@ public class GPXUtilities {
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
log.error("Error saving gpx", e); //$NON-NLS-1$
|
log.error("Error saving gpx", e); //$NON-NLS-1$
|
||||||
return ctx.getString(R.string.error_occurred_saving_gpx);
|
return ctx.getString(R.string.error_occurred_saving_gpx);
|
||||||
|
} finally {
|
||||||
|
if (output != null) {
|
||||||
|
try {
|
||||||
|
output.close();
|
||||||
|
} catch (IOException ignore) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
finally {
|
|
||||||
if (output != null) {
|
|
||||||
try {
|
|
||||||
output.close();
|
|
||||||
} catch (IOException ignore) {
|
|
||||||
//ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void writeNotNullText(XmlSerializer serializer, String tag, String value) throws IOException {
|
private static void writeNotNullText(XmlSerializer serializer, String tag, String value) throws IOException {
|
||||||
if(value != null){
|
if (value != null) {
|
||||||
serializer.startTag(null, tag);
|
serializer.startTag(null, tag);
|
||||||
serializer.text(value);
|
serializer.text(value);
|
||||||
serializer.endTag(null, tag);
|
serializer.endTag(null, tag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void writeExtensions(XmlSerializer serializer, GPXExtensions p) throws IOException {
|
private static void writeExtensions(XmlSerializer serializer, GPXExtensions p) throws IOException {
|
||||||
if (!p.getExtensionsToRead().isEmpty()) {
|
if (!p.getExtensionsToRead().isEmpty()) {
|
||||||
serializer.startTag(null, "extensions");
|
serializer.startTag(null, "extensions");
|
||||||
|
@ -277,25 +275,24 @@ public class GPXUtilities {
|
||||||
serializer.attribute(null, "lat", latLonFormat.format(p.lat)); //$NON-NLS-1$ //$NON-NLS-2$
|
serializer.attribute(null, "lat", latLonFormat.format(p.lat)); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
serializer.attribute(null, "lon", latLonFormat.format(p.lon)); //$NON-NLS-1$ //$NON-NLS-2$
|
serializer.attribute(null, "lon", latLonFormat.format(p.lon)); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
if(!Double.isNaN(p.ele)){
|
if (!Double.isNaN(p.ele)) {
|
||||||
writeNotNullText(serializer, "ele", p.ele+"");
|
writeNotNullText(serializer, "ele", p.ele + "");
|
||||||
}
|
}
|
||||||
writeNotNullText(serializer, "name", p.name);
|
writeNotNullText(serializer, "name", p.name);
|
||||||
writeNotNullText(serializer, "category", p.category);
|
writeNotNullText(serializer, "category", p.category);
|
||||||
writeNotNullText(serializer, "desc", p.desc);
|
writeNotNullText(serializer, "desc", p.desc);
|
||||||
if(!Double.isNaN(p.hdop)){
|
if (!Double.isNaN(p.hdop)) {
|
||||||
writeNotNullText(serializer, "hdop", p.hdop+"");
|
writeNotNullText(serializer, "hdop", p.hdop + "");
|
||||||
}
|
}
|
||||||
if(p.time != 0){
|
if (p.time != 0) {
|
||||||
writeNotNullText(serializer, "time", format.format(new Date(p.time)));
|
writeNotNullText(serializer, "time", format.format(new Date(p.time)));
|
||||||
}
|
}
|
||||||
if (p.speed > 0) {
|
if (p.speed > 0) {
|
||||||
p.getExtensionsToWrite().put("speed", p.speed+"");
|
p.getExtensionsToWrite().put("speed", p.speed + "");
|
||||||
}
|
}
|
||||||
writeExtensions(serializer, p);
|
writeExtensions(serializer, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static class GPXFileResult {
|
public static class GPXFileResult {
|
||||||
public ArrayList<List<Location>> locations = new ArrayList<List<Location>>();
|
public ArrayList<List<Location>> locations = new ArrayList<List<Location>>();
|
||||||
public ArrayList<WptPt> wayPoints = new ArrayList<WptPt>();
|
public ArrayList<WptPt> wayPoints = new ArrayList<WptPt>();
|
||||||
|
@ -304,11 +301,11 @@ public class GPXUtilities {
|
||||||
// such as wpt. However they provide additional information into gpx.
|
// such as wpt. However they provide additional information into gpx.
|
||||||
public boolean cloudMadeFile;
|
public boolean cloudMadeFile;
|
||||||
public String error;
|
public String error;
|
||||||
|
|
||||||
public Location findFistLocation(){
|
public Location findFistLocation() {
|
||||||
for(List<Location> l : locations){
|
for (List<Location> l : locations) {
|
||||||
for(Location ls : l){
|
for (Location ls : l) {
|
||||||
if(ls != null){
|
if (ls != null) {
|
||||||
return ls;
|
return ls;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -316,30 +313,29 @@ public class GPXUtilities {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static String readText(XmlPullParser parser, String key) throws XmlPullParserException, IOException {
|
private static String readText(XmlPullParser parser, String key) throws XmlPullParserException, IOException {
|
||||||
int tok;
|
int tok;
|
||||||
String text = null;
|
String text = null;
|
||||||
while ((tok = parser.next()) != XmlPullParser.END_DOCUMENT) {
|
while ((tok = parser.next()) != XmlPullParser.END_DOCUMENT) {
|
||||||
if(tok == XmlPullParser.END_TAG && parser.getName().equals(key)){
|
if (tok == XmlPullParser.END_TAG && parser.getName().equals(key)) {
|
||||||
break;
|
break;
|
||||||
} else if(tok == XmlPullParser.TEXT){
|
} else if (tok == XmlPullParser.TEXT) {
|
||||||
if(text == null){
|
if (text == null) {
|
||||||
text = parser.getText();
|
text = parser.getText();
|
||||||
} else {
|
} else {
|
||||||
text += parser.getText();
|
text += parser.getText();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static GPXFile loadGPXFile(ClientContext ctx, File f, boolean convertCloudmadeSource) {
|
public static GPXFile loadGPXFile(ClientContext ctx, File f, boolean convertCloudmadeSource) {
|
||||||
FileInputStream fis = null;
|
FileInputStream fis = null;
|
||||||
try {
|
try {
|
||||||
fis = new FileInputStream(f);
|
fis = new FileInputStream(f);
|
||||||
GPXFile file = loadGPXFile(ctx, fis, convertCloudmadeSource);
|
GPXFile file = loadGPXFile(ctx, fis, convertCloudmadeSource);
|
||||||
file.path = f.getAbsolutePath();
|
file.path = f.getAbsolutePath();
|
||||||
return file;
|
return file;
|
||||||
|
@ -350,14 +346,15 @@ public class GPXUtilities {
|
||||||
res.warning = ctx.getString(R.string.error_reading_gpx);
|
res.warning = ctx.getString(R.string.error_reading_gpx);
|
||||||
return res;
|
return res;
|
||||||
} finally {
|
} finally {
|
||||||
try {
|
try {
|
||||||
if (fis != null) fis.close();
|
if (fis != null)
|
||||||
} catch (IOException ignore) {
|
fis.close();
|
||||||
//ignore
|
} catch (IOException ignore) {
|
||||||
}
|
// ignore
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static GPXFile loadGPXFile(ClientContext ctx, InputStream f, boolean convertCloudmadeSource) {
|
public static GPXFile loadGPXFile(ClientContext ctx, InputStream f, boolean convertCloudmadeSource) {
|
||||||
GPXFile res = new GPXFile();
|
GPXFile res = new GPXFile();
|
||||||
SimpleDateFormat format = new SimpleDateFormat(GPX_TIME_FORMAT);
|
SimpleDateFormat format = new SimpleDateFormat(GPX_TIME_FORMAT);
|
||||||
|
@ -479,38 +476,38 @@ public class GPXUtilities {
|
||||||
if (parse instanceof GPXExtensions && tag.equals("extensions")) {
|
if (parse instanceof GPXExtensions && tag.equals("extensions")) {
|
||||||
extensionReadMode = false;
|
extensionReadMode = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(tag.equals("trkpt")){
|
if (tag.equals("trkpt")) {
|
||||||
Object pop = parserState.pop();
|
Object pop = parserState.pop();
|
||||||
assert pop instanceof WptPt;
|
assert pop instanceof WptPt;
|
||||||
} else if(tag.equals("wpt")){
|
} else if (tag.equals("wpt")) {
|
||||||
Object pop = parserState.pop();
|
Object pop = parserState.pop();
|
||||||
assert pop instanceof WptPt;
|
assert pop instanceof WptPt;
|
||||||
} else if(tag.equals("rtept")){
|
} else if (tag.equals("rtept")) {
|
||||||
Object pop = parserState.pop();
|
Object pop = parserState.pop();
|
||||||
assert pop instanceof WptPt;
|
assert pop instanceof WptPt;
|
||||||
} else if(tag.equals("trk")){
|
} else if (tag.equals("trk")) {
|
||||||
Object pop = parserState.pop();
|
Object pop = parserState.pop();
|
||||||
assert pop instanceof Track;
|
assert pop instanceof Track;
|
||||||
} else if(tag.equals("rte")){
|
} else if (tag.equals("rte")) {
|
||||||
Object pop = parserState.pop();
|
Object pop = parserState.pop();
|
||||||
assert pop instanceof Route;
|
assert pop instanceof Route;
|
||||||
} else if(tag.equals("trkseg")){
|
} else if (tag.equals("trkseg")) {
|
||||||
Object pop = parserState.pop();
|
Object pop = parserState.pop();
|
||||||
assert pop instanceof TrkSegment;
|
assert pop instanceof TrkSegment;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(convertCloudmadeSource && res.isCloudmadeRouteFile()){
|
if (convertCloudmadeSource && res.isCloudmadeRouteFile()) {
|
||||||
Track tk = new Track();
|
Track tk = new Track();
|
||||||
res.tracks.add(tk);
|
res.tracks.add(tk);
|
||||||
TrkSegment segment = new TrkSegment();
|
TrkSegment segment = new TrkSegment();
|
||||||
tk.segments.add(segment);
|
tk.segments.add(segment);
|
||||||
|
|
||||||
for(WptPt wp : res.points){
|
for (WptPt wp : res.points) {
|
||||||
segment.points.add(wp);
|
segment.points.add(wp);
|
||||||
}
|
}
|
||||||
res.points.clear();
|
res.points.clear();
|
||||||
}
|
}
|
||||||
} catch (RuntimeException e) {
|
} catch (RuntimeException e) {
|
||||||
log.error("Error reading gpx", e); //$NON-NLS-1$
|
log.error("Error reading gpx", e); //$NON-NLS-1$
|
||||||
|
@ -531,18 +528,16 @@ public class GPXUtilities {
|
||||||
assert bis.markSupported();
|
assert bis.markSupported();
|
||||||
bis.mark(3);
|
bis.mark(3);
|
||||||
boolean reset = true;
|
boolean reset = true;
|
||||||
byte[] t = new byte[3];
|
byte[] t = new byte[3];
|
||||||
bis.read(t);
|
bis.read(t);
|
||||||
if (t[0] == ((byte)0xef) && t[1]== ((byte)0xbb) && t[2] == ((byte)0xbf)) {
|
if (t[0] == ((byte) 0xef) && t[1] == ((byte) 0xbb) && t[2] == ((byte) 0xbf)) {
|
||||||
reset = false;
|
reset = false;
|
||||||
}
|
}
|
||||||
if(reset) {
|
if (reset) {
|
||||||
bis.reset();
|
bis.reset();
|
||||||
}
|
}
|
||||||
return new InputStreamReader(bis, "UTF-8");
|
return new InputStreamReader(bis, "UTF-8");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private static WptPt parseWptAttributes(XmlPullParser parser) {
|
private static WptPt parseWptAttributes(XmlPullParser parser) {
|
||||||
WptPt wpt = new WptPt();
|
WptPt wpt = new WptPt();
|
||||||
|
@ -555,26 +550,25 @@ public class GPXUtilities {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void mergeGPXFileInto(GPXFile to, GPXFile from) {
|
public static void mergeGPXFileInto(GPXFile to, GPXFile from) {
|
||||||
if(from == null) {
|
if (from == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(from.showCurrentTrack) {
|
if (from.showCurrentTrack) {
|
||||||
to.showCurrentTrack = true;
|
to.showCurrentTrack = true;
|
||||||
}
|
}
|
||||||
if(from.points != null) {
|
if (from.points != null) {
|
||||||
to.points.addAll(from.points);
|
to.points.addAll(from.points);
|
||||||
}
|
}
|
||||||
if(from.tracks != null) {
|
if (from.tracks != null) {
|
||||||
to.tracks.addAll(from.tracks);
|
to.tracks.addAll(from.tracks);
|
||||||
}
|
}
|
||||||
if(from.routes != null) {
|
if (from.routes != null) {
|
||||||
to.routes.addAll(from.routes);
|
to.routes.addAll(from.routes);
|
||||||
}
|
}
|
||||||
if(from.warning != null) {
|
if (from.warning != null) {
|
||||||
to.warning = from.warning;
|
to.warning = from.warning;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -47,7 +47,7 @@ public class OsmAndLocationProvider implements SensorEventListener {
|
||||||
private static final int START_SIMULATE_LOCATION_MSG_ID = OsmAndConstants.UI_HANDLER_LOCATION_SERVICE + 2;
|
private static final int START_SIMULATE_LOCATION_MSG_ID = OsmAndConstants.UI_HANDLER_LOCATION_SERVICE + 2;
|
||||||
private static final int RUN_SIMULATE_LOCATION_MSG_ID = OsmAndConstants.UI_HANDLER_LOCATION_SERVICE + 3;
|
private static final int RUN_SIMULATE_LOCATION_MSG_ID = OsmAndConstants.UI_HANDLER_LOCATION_SERVICE + 3;
|
||||||
private static final long LOST_LOCATION_CHECK_DELAY = 18000;
|
private static final long LOST_LOCATION_CHECK_DELAY = 18000;
|
||||||
private static final long START_LOCATION_SIMULATION_DELAY = 3000;
|
private static final long START_LOCATION_SIMULATION_DELAY = 2000;
|
||||||
|
|
||||||
private static final float ACCURACY_FOR_GPX_AND_ROUTING = 50;
|
private static final float ACCURACY_FOR_GPX_AND_ROUTING = 50;
|
||||||
|
|
||||||
|
@ -102,12 +102,6 @@ public class OsmAndLocationProvider implements SensorEventListener {
|
||||||
private OsmandPreference<Boolean> USE_MAGNETIC_FIELD_SENSOR_COMPASS;
|
private OsmandPreference<Boolean> USE_MAGNETIC_FIELD_SENSOR_COMPASS;
|
||||||
private OsmandPreference<Boolean> USE_FILTER_FOR_COMPASS;
|
private OsmandPreference<Boolean> USE_FILTER_FOR_COMPASS;
|
||||||
|
|
||||||
private static double squareDist(int x1, int y1, int x2, int y2) {
|
|
||||||
// translate into meters
|
|
||||||
double dy = MapUtils.convert31YToMeters(y1, y2);
|
|
||||||
double dx = MapUtils. convert31XToMeters(x1, x2);
|
|
||||||
return dx * dx + dy * dy;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class SimulationProvider {
|
public class SimulationProvider {
|
||||||
private int currentRoad;
|
private int currentRoad;
|
||||||
|
@ -137,7 +131,7 @@ public class OsmAndLocationProvider implements SensorEventListener {
|
||||||
RouteDataObject obj = road.getObject();
|
RouteDataObject obj = road.getObject();
|
||||||
QuadPoint proj = MapUtils.getProjectionPoint31(px, py, obj.getPoint31XTile(j-1), obj.getPoint31YTile(j-1),
|
QuadPoint proj = MapUtils.getProjectionPoint31(px, py, obj.getPoint31XTile(j-1), obj.getPoint31YTile(j-1),
|
||||||
obj.getPoint31XTile(j), obj.getPoint31YTile(j));
|
obj.getPoint31XTile(j), obj.getPoint31YTile(j));
|
||||||
double dd = squareDist((int)proj.x, (int)proj.y, px, py);
|
double dd = MapUtils.squareRootDist31((int)proj.x, (int)proj.y, px, py);
|
||||||
if (dd < dist) {
|
if (dd < dist) {
|
||||||
dist = dd;
|
dist = dd;
|
||||||
currentRoad = i;
|
currentRoad = i;
|
||||||
|
@ -166,7 +160,7 @@ public class OsmAndLocationProvider implements SensorEventListener {
|
||||||
st31x = (int) currentPoint.x;
|
st31x = (int) currentPoint.x;
|
||||||
st31y = (int) currentPoint.y;
|
st31y = (int) currentPoint.y;
|
||||||
}
|
}
|
||||||
double dd = MapUtils.squareRootDist31(st31x, st31y, end31x, end31y);
|
double dd = MapUtils.measuredDist31(st31x, st31y, end31x, end31y);
|
||||||
if(meters > dd && !last){
|
if(meters > dd && !last){
|
||||||
meters -= dd;
|
meters -= dd;
|
||||||
} else {
|
} else {
|
||||||
|
@ -194,7 +188,7 @@ public class OsmAndLocationProvider implements SensorEventListener {
|
||||||
loc.setSpeed(startLocation.getSpeed());
|
loc.setSpeed(startLocation.getSpeed());
|
||||||
loc.setAltitude(startLocation.getAltitude());
|
loc.setAltitude(startLocation.getAltitude());
|
||||||
loc.setTime(System.currentTimeMillis());
|
loc.setTime(System.currentTimeMillis());
|
||||||
float meters = (System.currentTimeMillis() - startLocation.getTime()) / startLocation.getSpeed();
|
float meters = startLocation.getSpeed() * ((System.currentTimeMillis() - startLocation.getTime()) / 1000);
|
||||||
float proc = proceedMeters(meters, loc);
|
float proc = proceedMeters(meters, loc);
|
||||||
if(proc < 0 || proc >= 100){
|
if(proc < 0 || proc >= 100){
|
||||||
return null;
|
return null;
|
||||||
|
@ -689,7 +683,7 @@ public class OsmAndLocationProvider implements SensorEventListener {
|
||||||
public void run() {
|
public void run() {
|
||||||
simulatePositionImpl();
|
simulatePositionImpl();
|
||||||
}
|
}
|
||||||
}, 1000);
|
}, 600);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void simulatePositionImpl() {
|
private void simulatePositionImpl() {
|
||||||
|
|
|
@ -636,7 +636,8 @@ public class OsmandSettings {
|
||||||
new BooleanAccessibilityPreference("accessibility_extensions", false).makeGlobal();
|
new BooleanAccessibilityPreference("accessibility_extensions", false).makeGlobal();
|
||||||
|
|
||||||
|
|
||||||
public final OsmandPreference<Boolean> USE_MAGNETIC_FIELD_SENSOR_COMPASS = new BooleanPreference("use_magnetic_field_sensor_compass", true).makeGlobal().cache();
|
// magnetic field doesn'torkmost of the time on some phones
|
||||||
|
public final OsmandPreference<Boolean> USE_MAGNETIC_FIELD_SENSOR_COMPASS = new BooleanPreference("use_magnetic_field_sensor_compass", false).makeGlobal().cache();
|
||||||
public final OsmandPreference<Boolean> USE_KALMAN_FILTER_FOR_COMPASS = new BooleanPreference("use_kalman_filter_compass", true).makeGlobal().cache();
|
public final OsmandPreference<Boolean> USE_KALMAN_FILTER_FOR_COMPASS = new BooleanPreference("use_kalman_filter_compass", true).makeGlobal().cache();
|
||||||
|
|
||||||
public final CommonPreference<Float> MAP_ZOOM_SCALE_BY_DENSITY = new FloatPreference("map_zoom_scale_wo_density", 0f).makeProfile().cache();
|
public final CommonPreference<Float> MAP_ZOOM_SCALE_BY_DENSITY = new FloatPreference("map_zoom_scale_wo_density", 0f).makeProfile().cache();
|
||||||
|
|
Loading…
Reference in a new issue