fixed Voice-Hint timing bug (locus+osmand)

This commit is contained in:
Arndt Brenschede 2020-02-15 13:49:10 +01:00
parent 47e20c681f
commit a0de736323
2 changed files with 24 additions and 15 deletions

View file

@ -454,12 +454,7 @@ public final class OsmTrack
.append( formatILon( nodes.get(0).getILon() ) ).append( "\">\n" ) .append( formatILon( nodes.get(0).getILon() ) ).append( "\">\n" )
.append ( " <desc>start</desc>\n <extensions>\n"); .append ( " <desc>start</desc>\n <extensions>\n");
float rteTime; float rteTime = getVoiceHintTime( 0 );
if(!voiceHints.list.isEmpty()){
rteTime = voiceHints.list.get(0).getTime();
}else{
rteTime = 0;
}
if ( rteTime != lastRteTime ) // add timing only if available if ( rteTime != lastRteTime ) // add timing only if available
{ {
@ -476,11 +471,7 @@ public final class OsmTrack
.append( formatILon( hint.ilon ) ).append( "\">\n" ) .append( formatILon( hint.ilon ) ).append( "\">\n" )
.append ( " <desc>" ).append( hint.getMessageString() ).append( "</desc>\n <extensions>\n"); .append ( " <desc>" ).append( hint.getMessageString() ).append( "</desc>\n <extensions>\n");
if (i < voiceHints.list.size() -1) { rteTime = getVoiceHintTime( i+1 );
rteTime = voiceHints.list.get(i + 1).getTime();
} else {
rteTime = nodes.get(nodes.size() - 1).getTime();
}
if ( rteTime != lastRteTime ) // add timing only if available if ( rteTime != lastRteTime ) // add timing only if available
{ {
@ -502,16 +493,17 @@ public final class OsmTrack
if ( turnInstructionMode == 2 ) // locus style if ( turnInstructionMode == 2 ) // locus style
{ {
float lastRteTime = 0.f; float lastRteTime = getVoiceHintTime( 0 );
for( VoiceHint hint: voiceHints.list ) for( int i=0; i<voiceHints.list.size(); i++ )
{ {
VoiceHint hint = voiceHints.list.get(i);
sb.append( " <wpt lon=\"" ).append( formatILon( hint.ilon ) ).append( "\" lat=\"" ) sb.append( " <wpt lon=\"" ).append( formatILon( hint.ilon ) ).append( "\" lat=\"" )
.append( formatILat( hint.ilat ) ).append( "\">" ) .append( formatILat( hint.ilat ) ).append( "\">" )
.append( hint.selev == Short.MIN_VALUE ? "" : "<ele>" + (hint.selev / 4.) + "</ele>" ) .append( hint.selev == Short.MIN_VALUE ? "" : "<ele>" + (hint.selev / 4.) + "</ele>" )
.append( "<name>" ).append( hint.getMessageString() ).append( "</name>" ) .append( "<name>" ).append( hint.getMessageString() ).append( "</name>" )
.append( "<extensions><locus:rteDistance>" ).append( "" + hint.distanceToNext ).append( "</locus:rteDistance>" ); .append( "<extensions><locus:rteDistance>" ).append( "" + hint.distanceToNext ).append( "</locus:rteDistance>" );
float rteTime = hint.getTime(); float rteTime = getVoiceHintTime( i+1 );
if ( rteTime != lastRteTime ) // add timing only if available if ( rteTime != lastRteTime ) // add timing only if available
{ {
double t = rteTime - lastRteTime; double t = rteTime - lastRteTime;
@ -1056,6 +1048,23 @@ public final class OsmTrack
} }
} }
private float getVoiceHintTime( int i )
{
if ( voiceHints.list.isEmpty() )
{
return 0f;
}
if ( i < voiceHints.list.size() )
{
return voiceHints.list.get(i).getTime();
}
if ( nodes.isEmpty() )
{
return 0f;
}
return nodes.get(nodes.size() - 1).getTime();
}
private MessageData startSection( OsmPathElement element, OsmPathElement root ) private MessageData startSection( OsmPathElement element, OsmPathElement root )
{ {

View file

@ -38,7 +38,7 @@ public class VoiceHint
public float getTime() public float getTime()
{ {
return goodWay == null ? 0.f : goodWay.time; return oldWay == null ? 0.f : oldWay.time;
} }
float angle; float angle;