voice hints, here: cf=9999 survive decoder
This commit is contained in:
parent
23d1812371
commit
e8d8bc084a
6 changed files with 40 additions and 17 deletions
|
@ -95,7 +95,8 @@ public final class MicroCache2 extends MicroCache
|
|||
|
||||
selev += nodeEleDiff.decodeSignedValue();
|
||||
writeShort( (short) selev );
|
||||
writeVarBytes( nodeTagCoder.decodeTagValueSet() );
|
||||
TagValueWrapper nodeTags = nodeTagCoder.decodeTagValueSet();
|
||||
writeVarBytes( nodeTags == null ? null : nodeTags.data );
|
||||
|
||||
int links = bc.decodeNoisyNumber( 1 );
|
||||
if ( debug ) System.out.println( "*** decoding node with links=" + links );
|
||||
|
@ -120,7 +121,7 @@ public final class MicroCache2 extends MicroCache
|
|||
writeVarLengthSigned( dlon_remaining = extLonDiff.decodeSignedValue() );
|
||||
writeVarLengthSigned( dlat_remaining = extLatDiff.decodeSignedValue() );
|
||||
}
|
||||
byte[] wayTags = wayTagCoder.decodeTagValueSet();
|
||||
TagValueWrapper wayTags = wayTagCoder.decodeTagValueSet();
|
||||
|
||||
if ( wayTags != null )
|
||||
{
|
||||
|
@ -133,10 +134,10 @@ public final class MicroCache2 extends MicroCache
|
|||
}
|
||||
}
|
||||
|
||||
writeModeAndDesc( isReverse, wayTags );
|
||||
writeModeAndDesc( isReverse, wayTags == null ? null : wayTags.data );
|
||||
if ( !isReverse ) // write geometry for forward links only
|
||||
{
|
||||
WaypointMatcher matcher = wayTags == null ? null : waypointMatcher;
|
||||
WaypointMatcher matcher = wayTags == null || wayTags.accessType < 2 ? null : waypointMatcher;
|
||||
if ( matcher != null ) matcher.startNode( ilon, ilat );
|
||||
int ilontarget = ilon + dlon_remaining;
|
||||
int ilattarget = ilat + dlat_remaining;
|
||||
|
|
|
@ -46,7 +46,7 @@ public final class TagValueCoder
|
|||
}
|
||||
}
|
||||
|
||||
public byte[] decodeTagValueSet()
|
||||
public TagValueWrapper decodeTagValueSet()
|
||||
{
|
||||
Object node = tree;
|
||||
while (node instanceof TreeNode)
|
||||
|
@ -55,7 +55,7 @@ public final class TagValueCoder
|
|||
boolean nextBit = bc.decodeBit();
|
||||
node = nextBit ? tn.child2 : tn.child1;
|
||||
}
|
||||
return (byte[]) node;
|
||||
return (TagValueWrapper) node;
|
||||
}
|
||||
|
||||
public void encodeDictionary( BitCoderContext bc )
|
||||
|
@ -120,9 +120,13 @@ public final class TagValueCoder
|
|||
byte[] res = new byte[len];
|
||||
System.arraycopy( buffer, 0, res, 0, len );
|
||||
|
||||
if ( validator == null || validator.accessAllowed( res ) )
|
||||
int accessType = validator == null ? 2 : validator.accessType( res );
|
||||
if ( accessType > 0 )
|
||||
{
|
||||
return res;
|
||||
TagValueWrapper w = new TagValueWrapper();
|
||||
w.data = res;
|
||||
w.accessType = accessType;
|
||||
return w;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ public interface TagValueValidator
|
|||
{
|
||||
/**
|
||||
* @param tagValueSet the way description to check
|
||||
* @return true if access is allowed in the current profile
|
||||
* @return 0 = nothing, 1=no matching, 2=normal
|
||||
*/
|
||||
public boolean accessAllowed( byte[] tagValueSet );
|
||||
public int accessType( byte[] tagValueSet );
|
||||
}
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
package btools.codec;
|
||||
|
||||
|
||||
/**
|
||||
* TagValueWrapper wrapps a description bitmap
|
||||
* to add the access-type
|
||||
*/
|
||||
public final class TagValueWrapper
|
||||
{
|
||||
public byte[] data;
|
||||
public int accessType;
|
||||
}
|
|
@ -304,7 +304,7 @@ final class OsmPath implements OsmLinkHolder
|
|||
}
|
||||
|
||||
float fcost = dist * costfactor + 0.5f;
|
||||
if ( ( costfactor > 9999. && !detailMode ) || fcost + cost >= 2000000000. )
|
||||
if ( ( costfactor > 9998. && !detailMode ) || fcost + cost >= 2000000000. )
|
||||
{
|
||||
cost = -1;
|
||||
return;
|
||||
|
|
|
@ -49,13 +49,19 @@ public final class BExpressionContextWay extends BExpressionContext implements T
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean accessAllowed( byte[] description )
|
||||
public int accessType( byte[] description )
|
||||
{
|
||||
evaluate( false, description, null );
|
||||
boolean ok = getCostfactor() < 10000.;
|
||||
float minCostFactor = getCostfactor();
|
||||
if ( minCostFactor >= 9999.f )
|
||||
{
|
||||
evaluate( true, description, null );
|
||||
ok |= getCostfactor() < 10000.;
|
||||
return ok;
|
||||
float reverseCostFactor = getCostfactor();
|
||||
if ( reverseCostFactor < minCostFactor )
|
||||
{
|
||||
minCostFactor = reverseCostFactor;
|
||||
}
|
||||
}
|
||||
return minCostFactor < 9999.f ? 2 : minCostFactor < 10000.f ? 1 : 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue