Merge remote-tracking branch 'origin/master'

This commit is contained in:
Weblate 2016-07-30 13:52:00 +02:00
commit 10fdd8e06e
10 changed files with 268 additions and 591 deletions

View file

@ -473,28 +473,7 @@ public class BinaryMapIndexReader {
return result; return result;
} }
/**
* Transport public methods
*/
public List<net.osmand.data.TransportRoute> getTransportRouteDescriptions(TransportStop stop) throws IOException {
TransportIndex ind = getTransportIndex(stop.getFileOffset());
if (ind == null) {
return null;
}
List<net.osmand.data.TransportRoute> list = new ArrayList<TransportRoute>();
TIntObjectHashMap<String> stringTable = new TIntObjectHashMap<String>();
for (int filePointer : stop.getReferencesToRoutes()) {
TransportRoute tr = transportAdapter.getTransportRoute(filePointer, stringTable, true);
if (tr != null) {
list.add(tr);
}
}
transportAdapter.initializeStringTable(ind, stringTable);
for (TransportRoute route : list) {
transportAdapter.initializeNames(true, route, stringTable);
}
return list;
}
public boolean transportStopBelongsTo(TransportStop s) { public boolean transportStopBelongsTo(TransportStop s) {
return getTransportIndex(s.getFileOffset()) != null; return getTransportIndex(s.getFileOffset()) != null;

View file

@ -4,9 +4,7 @@ import gnu.trove.list.array.TIntArrayList;
import gnu.trove.map.hash.TIntObjectHashMap; import gnu.trove.map.hash.TIntObjectHashMap;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import net.osmand.binary.BinaryMapIndexReader.SearchRequest; import net.osmand.binary.BinaryMapIndexReader.SearchRequest;
import net.osmand.data.TransportStop; import net.osmand.data.TransportStop;
@ -248,9 +246,6 @@ public class BinaryMapTransportReaderAdapter {
long rid = 0; long rid = 0;
int rx = 0; int rx = 0;
int ry = 0; int ry = 0;
long did = 0;
int dx = 0;
int dy = 0;
while(!end){ while(!end){
int t = codedIS.readTag(); int t = codedIS.readTag();
int tag = WireFormat.getTagFieldNumber(t); int tag = WireFormat.getTagFieldNumber(t);
@ -279,11 +274,7 @@ public class BinaryMapTransportReaderAdapter {
case OsmandOdb.TransportRoute.OPERATOR_FIELD_NUMBER: case OsmandOdb.TransportRoute.OPERATOR_FIELD_NUMBER:
dataObject.setOperator(regStr(stringTable)); //$NON-NLS-1$ dataObject.setOperator(regStr(stringTable)); //$NON-NLS-1$
break; break;
case OsmandOdb.TransportRoute.DIRECTGEOMETRY_FIELD_NUMBER: case OsmandOdb.TransportRoute.GEOMETRY_FIELD_NUMBER:
case OsmandOdb.TransportRoute.REVERSEGEOMETRY_FIELD_NUMBER:
case OsmandOdb.TransportRoute.SHAREDGEOMETRY_FIELD_NUMBER:
int dir = tag == OsmandOdb.TransportRoute.SHAREDGEOMETRY_FIELD_NUMBER ? 0 : (
tag == OsmandOdb.TransportRoute.DIRECTGEOMETRY_FIELD_NUMBER ? 1 : -1);
int sizeL = codedIS.readRawVarint32(); int sizeL = codedIS.readRawVarint32();
int pold = codedIS.pushLimit(sizeL); int pold = codedIS.pushLimit(sizeL);
int px = 0; int px = 0;
@ -294,7 +285,7 @@ public class BinaryMapTransportReaderAdapter {
int ddy = (codedIS.readSInt32() << BinaryMapIndexReader.SHIFT_COORDINATES); int ddy = (codedIS.readSInt32() << BinaryMapIndexReader.SHIFT_COORDINATES);
if(ddx == 0 && ddy == 0) { if(ddx == 0 && ddy == 0) {
if(w.getNodes().size() > 0) { if(w.getNodes().size() > 0) {
dataObject.addWay(w, dir); dataObject.addWay(w);
} }
w = new Way(-1); w = new Way(-1);
} else { } else {
@ -306,11 +297,14 @@ public class BinaryMapTransportReaderAdapter {
} }
} }
if(w.getNodes().size() > 0) { if(w.getNodes().size() > 0) {
dataObject.addWay(w, dir ); dataObject.addWay(w);
} }
codedIS.popLimit(pold); codedIS.popLimit(pold);
break; break;
case OsmandOdb.TransportRoute.REVERSESTOPS_FIELD_NUMBER: // deprecated
// case OsmandOdb.TransportRoute.REVERSESTOPS_FIELD_NUMBER:
// break;
case OsmandOdb.TransportRoute.DIRECTSTOPS_FIELD_NUMBER:
if(onlyDescription){ if(onlyDescription){
end = true; end = true;
codedIS.skipRawBytes(codedIS.getBytesUntilLimit()); codedIS.skipRawBytes(codedIS.getBytesUntilLimit());
@ -318,22 +312,7 @@ public class BinaryMapTransportReaderAdapter {
} }
int length = codedIS.readRawVarint32(); int length = codedIS.readRawVarint32();
int olds = codedIS.pushLimit(length); int olds = codedIS.pushLimit(length);
TransportStop stop = readTransportRouteStop(dx, dy, did, stringTable); TransportStop stop = readTransportRouteStop(rx, ry, rid, stringTable);
dataObject.getBackwardStops().add(stop);
did = stop.getId();
dx = (int) MapUtils.getTileNumberX(BinaryMapIndexReader.TRANSPORT_STOP_ZOOM, stop.getLocation().getLongitude());
dy = (int) MapUtils.getTileNumberY(BinaryMapIndexReader.TRANSPORT_STOP_ZOOM, stop.getLocation().getLatitude());
codedIS.popLimit(olds);
break;
case OsmandOdb.TransportRoute.DIRECTSTOPS_FIELD_NUMBER:
if(onlyDescription){
end = true;
codedIS.skipRawBytes(codedIS.getBytesUntilLimit());
break;
}
length = codedIS.readRawVarint32();
olds = codedIS.pushLimit(length);
stop = readTransportRouteStop(rx, ry, rid, stringTable);
dataObject.getForwardStops().add(stop); dataObject.getForwardStops().add(stop);
rid = stop.getId(); rid = stop.getId();
rx = (int) MapUtils.getTileNumberX(BinaryMapIndexReader.TRANSPORT_STOP_ZOOM, stop.getLocation().getLongitude()); rx = (int) MapUtils.getTileNumberX(BinaryMapIndexReader.TRANSPORT_STOP_ZOOM, stop.getLocation().getLongitude());
@ -400,9 +379,8 @@ public class BinaryMapTransportReaderAdapter {
if(dataObject.getType().length() > 0){ if(dataObject.getType().length() > 0){
dataObject.setType(stringTable.get(dataObject.getType().charAt(0))); dataObject.setType(stringTable.get(dataObject.getType().charAt(0)));
} }
for (int i = 0; i < 2 && !onlyDescription; i++) { if (!onlyDescription) {
List<TransportStop> stops = i == 0 ? dataObject.getForwardStops() : dataObject.getBackwardStops(); for (TransportStop s : dataObject.getForwardStops()) {
for (TransportStop s : stops) {
initializeNames(stringTable, s); initializeNames(stringTable, s);
} }
} }

View file

@ -29373,31 +29373,51 @@ public final class OsmandOdb {
// repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16; // repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
java.util.List<net.osmand.binary.OsmandOdb.TransportRouteStop> java.util.List<net.osmand.binary.OsmandOdb.TransportRouteStop>
getReverseStopsList(); getReverseStopsList();
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
net.osmand.binary.OsmandOdb.TransportRouteStop getReverseStops(int index); net.osmand.binary.OsmandOdb.TransportRouteStop getReverseStops(int index);
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
int getReverseStopsCount(); int getReverseStopsCount();
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
java.util.List<? extends net.osmand.binary.OsmandOdb.TransportRouteStopOrBuilder> java.util.List<? extends net.osmand.binary.OsmandOdb.TransportRouteStopOrBuilder>
getReverseStopsOrBuilderList(); getReverseStopsOrBuilderList();
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
net.osmand.binary.OsmandOdb.TransportRouteStopOrBuilder getReverseStopsOrBuilder( net.osmand.binary.OsmandOdb.TransportRouteStopOrBuilder getReverseStopsOrBuilder(
int index); int index);
// optional bytes directGeometry = 17; // optional bytes geometry = 17;
/** /**
* <code>optional bytes directGeometry = 17;</code> * <code>optional bytes geometry = 17;</code>
* *
* <pre> * <pre>
* array of delta x,y sint32 (CodedIinputStream) &gt;&gt; 5 (precision 31 &gt;&gt; 5) * array of delta x,y sint32 (CodedIinputStream) &gt;&gt; 5 (precision 31 &gt;&gt; 5)
@ -29406,9 +29426,9 @@ public final class OsmandOdb {
* 0, 0 split geometry (for not connected segments) * 0, 0 split geometry (for not connected segments)
* </pre> * </pre>
*/ */
boolean hasDirectGeometry(); boolean hasGeometry();
/** /**
* <code>optional bytes directGeometry = 17;</code> * <code>optional bytes geometry = 17;</code>
* *
* <pre> * <pre>
* array of delta x,y sint32 (CodedIinputStream) &gt;&gt; 5 (precision 31 &gt;&gt; 5) * array of delta x,y sint32 (CodedIinputStream) &gt;&gt; 5 (precision 31 &gt;&gt; 5)
@ -29417,27 +29437,7 @@ public final class OsmandOdb {
* 0, 0 split geometry (for not connected segments) * 0, 0 split geometry (for not connected segments)
* </pre> * </pre>
*/ */
com.google.protobuf.ByteString getDirectGeometry(); com.google.protobuf.ByteString getGeometry();
// optional bytes reverseGeometry = 18;
/**
* <code>optional bytes reverseGeometry = 18;</code>
*/
boolean hasReverseGeometry();
/**
* <code>optional bytes reverseGeometry = 18;</code>
*/
com.google.protobuf.ByteString getReverseGeometry();
// optional bytes sharedGeometry = 19;
/**
* <code>optional bytes sharedGeometry = 19;</code>
*/
boolean hasSharedGeometry();
/**
* <code>optional bytes sharedGeometry = 19;</code>
*/
com.google.protobuf.ByteString getSharedGeometry();
} }
/** /**
* Protobuf type {@code OsmAnd.OBF.TransportRoute} * Protobuf type {@code OsmAnd.OBF.TransportRoute}
@ -29543,17 +29543,7 @@ public final class OsmandOdb {
} }
case 138: { case 138: {
bitField0_ |= 0x00000080; bitField0_ |= 0x00000080;
directGeometry_ = input.readBytes(); geometry_ = input.readBytes();
break;
}
case 146: {
bitField0_ |= 0x00000100;
reverseGeometry_ = input.readBytes();
break;
}
case 154: {
bitField0_ |= 0x00000200;
sharedGeometry_ = input.readBytes();
break; break;
} }
} }
@ -29822,12 +29812,20 @@ public final class OsmandOdb {
private java.util.List<net.osmand.binary.OsmandOdb.TransportRouteStop> reverseStops_; private java.util.List<net.osmand.binary.OsmandOdb.TransportRouteStop> reverseStops_;
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public java.util.List<net.osmand.binary.OsmandOdb.TransportRouteStop> getReverseStopsList() { public java.util.List<net.osmand.binary.OsmandOdb.TransportRouteStop> getReverseStopsList() {
return reverseStops_; return reverseStops_;
} }
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public java.util.List<? extends net.osmand.binary.OsmandOdb.TransportRouteStopOrBuilder> public java.util.List<? extends net.osmand.binary.OsmandOdb.TransportRouteStopOrBuilder>
getReverseStopsOrBuilderList() { getReverseStopsOrBuilderList() {
@ -29835,29 +29833,41 @@ public final class OsmandOdb {
} }
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public int getReverseStopsCount() { public int getReverseStopsCount() {
return reverseStops_.size(); return reverseStops_.size();
} }
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public net.osmand.binary.OsmandOdb.TransportRouteStop getReverseStops(int index) { public net.osmand.binary.OsmandOdb.TransportRouteStop getReverseStops(int index) {
return reverseStops_.get(index); return reverseStops_.get(index);
} }
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public net.osmand.binary.OsmandOdb.TransportRouteStopOrBuilder getReverseStopsOrBuilder( public net.osmand.binary.OsmandOdb.TransportRouteStopOrBuilder getReverseStopsOrBuilder(
int index) { int index) {
return reverseStops_.get(index); return reverseStops_.get(index);
} }
// optional bytes directGeometry = 17; // optional bytes geometry = 17;
public static final int DIRECTGEOMETRY_FIELD_NUMBER = 17; public static final int GEOMETRY_FIELD_NUMBER = 17;
private com.google.protobuf.ByteString directGeometry_; private com.google.protobuf.ByteString geometry_;
/** /**
* <code>optional bytes directGeometry = 17;</code> * <code>optional bytes geometry = 17;</code>
* *
* <pre> * <pre>
* array of delta x,y sint32 (CodedIinputStream) &gt;&gt; 5 (precision 31 &gt;&gt; 5) * array of delta x,y sint32 (CodedIinputStream) &gt;&gt; 5 (precision 31 &gt;&gt; 5)
@ -29866,11 +29876,11 @@ public final class OsmandOdb {
* 0, 0 split geometry (for not connected segments) * 0, 0 split geometry (for not connected segments)
* </pre> * </pre>
*/ */
public boolean hasDirectGeometry() { public boolean hasGeometry() {
return ((bitField0_ & 0x00000080) == 0x00000080); return ((bitField0_ & 0x00000080) == 0x00000080);
} }
/** /**
* <code>optional bytes directGeometry = 17;</code> * <code>optional bytes geometry = 17;</code>
* *
* <pre> * <pre>
* array of delta x,y sint32 (CodedIinputStream) &gt;&gt; 5 (precision 31 &gt;&gt; 5) * array of delta x,y sint32 (CodedIinputStream) &gt;&gt; 5 (precision 31 &gt;&gt; 5)
@ -29879,40 +29889,8 @@ public final class OsmandOdb {
* 0, 0 split geometry (for not connected segments) * 0, 0 split geometry (for not connected segments)
* </pre> * </pre>
*/ */
public com.google.protobuf.ByteString getDirectGeometry() { public com.google.protobuf.ByteString getGeometry() {
return directGeometry_; return geometry_;
}
// optional bytes reverseGeometry = 18;
public static final int REVERSEGEOMETRY_FIELD_NUMBER = 18;
private com.google.protobuf.ByteString reverseGeometry_;
/**
* <code>optional bytes reverseGeometry = 18;</code>
*/
public boolean hasReverseGeometry() {
return ((bitField0_ & 0x00000100) == 0x00000100);
}
/**
* <code>optional bytes reverseGeometry = 18;</code>
*/
public com.google.protobuf.ByteString getReverseGeometry() {
return reverseGeometry_;
}
// optional bytes sharedGeometry = 19;
public static final int SHAREDGEOMETRY_FIELD_NUMBER = 19;
private com.google.protobuf.ByteString sharedGeometry_;
/**
* <code>optional bytes sharedGeometry = 19;</code>
*/
public boolean hasSharedGeometry() {
return ((bitField0_ & 0x00000200) == 0x00000200);
}
/**
* <code>optional bytes sharedGeometry = 19;</code>
*/
public com.google.protobuf.ByteString getSharedGeometry() {
return sharedGeometry_;
} }
private void initFields() { private void initFields() {
@ -29925,9 +29903,7 @@ public final class OsmandOdb {
distance_ = 0; distance_ = 0;
directStops_ = java.util.Collections.emptyList(); directStops_ = java.util.Collections.emptyList();
reverseStops_ = java.util.Collections.emptyList(); reverseStops_ = java.util.Collections.emptyList();
directGeometry_ = com.google.protobuf.ByteString.EMPTY; geometry_ = com.google.protobuf.ByteString.EMPTY;
reverseGeometry_ = com.google.protobuf.ByteString.EMPTY;
sharedGeometry_ = com.google.protobuf.ByteString.EMPTY;
} }
private byte memoizedIsInitialized = -1; private byte memoizedIsInitialized = -1;
public final boolean isInitialized() { public final boolean isInitialized() {
@ -29985,13 +29961,7 @@ public final class OsmandOdb {
output.writeMessage(16, reverseStops_.get(i)); output.writeMessage(16, reverseStops_.get(i));
} }
if (((bitField0_ & 0x00000080) == 0x00000080)) { if (((bitField0_ & 0x00000080) == 0x00000080)) {
output.writeBytes(17, directGeometry_); output.writeBytes(17, geometry_);
}
if (((bitField0_ & 0x00000100) == 0x00000100)) {
output.writeBytes(18, reverseGeometry_);
}
if (((bitField0_ & 0x00000200) == 0x00000200)) {
output.writeBytes(19, sharedGeometry_);
} }
getUnknownFields().writeTo(output); getUnknownFields().writeTo(output);
} }
@ -30040,15 +30010,7 @@ public final class OsmandOdb {
} }
if (((bitField0_ & 0x00000080) == 0x00000080)) { if (((bitField0_ & 0x00000080) == 0x00000080)) {
size += com.google.protobuf.CodedOutputStream size += com.google.protobuf.CodedOutputStream
.computeBytesSize(17, directGeometry_); .computeBytesSize(17, geometry_);
}
if (((bitField0_ & 0x00000100) == 0x00000100)) {
size += com.google.protobuf.CodedOutputStream
.computeBytesSize(18, reverseGeometry_);
}
if (((bitField0_ & 0x00000200) == 0x00000200)) {
size += com.google.protobuf.CodedOutputStream
.computeBytesSize(19, sharedGeometry_);
} }
size += getUnknownFields().getSerializedSize(); size += getUnknownFields().getSerializedSize();
memoizedSerializedSize = size; memoizedSerializedSize = size;
@ -30194,12 +30156,8 @@ public final class OsmandOdb {
} else { } else {
reverseStopsBuilder_.clear(); reverseStopsBuilder_.clear();
} }
directGeometry_ = com.google.protobuf.ByteString.EMPTY; geometry_ = com.google.protobuf.ByteString.EMPTY;
bitField0_ = (bitField0_ & ~0x00000200); bitField0_ = (bitField0_ & ~0x00000200);
reverseGeometry_ = com.google.protobuf.ByteString.EMPTY;
bitField0_ = (bitField0_ & ~0x00000400);
sharedGeometry_ = com.google.protobuf.ByteString.EMPTY;
bitField0_ = (bitField0_ & ~0x00000800);
return this; return this;
} }
@ -30277,15 +30235,7 @@ public final class OsmandOdb {
if (((from_bitField0_ & 0x00000200) == 0x00000200)) { if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
to_bitField0_ |= 0x00000080; to_bitField0_ |= 0x00000080;
} }
result.directGeometry_ = directGeometry_; result.geometry_ = geometry_;
if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
to_bitField0_ |= 0x00000100;
}
result.reverseGeometry_ = reverseGeometry_;
if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
to_bitField0_ |= 0x00000200;
}
result.sharedGeometry_ = sharedGeometry_;
result.bitField0_ = to_bitField0_; result.bitField0_ = to_bitField0_;
onBuilt(); onBuilt();
return result; return result;
@ -30377,14 +30327,8 @@ public final class OsmandOdb {
} }
} }
} }
if (other.hasDirectGeometry()) { if (other.hasGeometry()) {
setDirectGeometry(other.getDirectGeometry()); setGeometry(other.getGeometry());
}
if (other.hasReverseGeometry()) {
setReverseGeometry(other.getReverseGeometry());
}
if (other.hasSharedGeometry()) {
setSharedGeometry(other.getSharedGeometry());
} }
this.mergeUnknownFields(other.getUnknownFields()); this.mergeUnknownFields(other.getUnknownFields());
return this; return this;
@ -31036,6 +30980,10 @@ public final class OsmandOdb {
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public java.util.List<net.osmand.binary.OsmandOdb.TransportRouteStop> getReverseStopsList() { public java.util.List<net.osmand.binary.OsmandOdb.TransportRouteStop> getReverseStopsList() {
if (reverseStopsBuilder_ == null) { if (reverseStopsBuilder_ == null) {
@ -31046,6 +30994,10 @@ public final class OsmandOdb {
} }
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public int getReverseStopsCount() { public int getReverseStopsCount() {
if (reverseStopsBuilder_ == null) { if (reverseStopsBuilder_ == null) {
@ -31056,6 +31008,10 @@ public final class OsmandOdb {
} }
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public net.osmand.binary.OsmandOdb.TransportRouteStop getReverseStops(int index) { public net.osmand.binary.OsmandOdb.TransportRouteStop getReverseStops(int index) {
if (reverseStopsBuilder_ == null) { if (reverseStopsBuilder_ == null) {
@ -31066,6 +31022,10 @@ public final class OsmandOdb {
} }
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public Builder setReverseStops( public Builder setReverseStops(
int index, net.osmand.binary.OsmandOdb.TransportRouteStop value) { int index, net.osmand.binary.OsmandOdb.TransportRouteStop value) {
@ -31083,6 +31043,10 @@ public final class OsmandOdb {
} }
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public Builder setReverseStops( public Builder setReverseStops(
int index, net.osmand.binary.OsmandOdb.TransportRouteStop.Builder builderForValue) { int index, net.osmand.binary.OsmandOdb.TransportRouteStop.Builder builderForValue) {
@ -31097,6 +31061,10 @@ public final class OsmandOdb {
} }
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public Builder addReverseStops(net.osmand.binary.OsmandOdb.TransportRouteStop value) { public Builder addReverseStops(net.osmand.binary.OsmandOdb.TransportRouteStop value) {
if (reverseStopsBuilder_ == null) { if (reverseStopsBuilder_ == null) {
@ -31113,6 +31081,10 @@ public final class OsmandOdb {
} }
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public Builder addReverseStops( public Builder addReverseStops(
int index, net.osmand.binary.OsmandOdb.TransportRouteStop value) { int index, net.osmand.binary.OsmandOdb.TransportRouteStop value) {
@ -31130,6 +31102,10 @@ public final class OsmandOdb {
} }
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public Builder addReverseStops( public Builder addReverseStops(
net.osmand.binary.OsmandOdb.TransportRouteStop.Builder builderForValue) { net.osmand.binary.OsmandOdb.TransportRouteStop.Builder builderForValue) {
@ -31144,6 +31120,10 @@ public final class OsmandOdb {
} }
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public Builder addReverseStops( public Builder addReverseStops(
int index, net.osmand.binary.OsmandOdb.TransportRouteStop.Builder builderForValue) { int index, net.osmand.binary.OsmandOdb.TransportRouteStop.Builder builderForValue) {
@ -31158,6 +31138,10 @@ public final class OsmandOdb {
} }
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public Builder addAllReverseStops( public Builder addAllReverseStops(
java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.TransportRouteStop> values) { java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.TransportRouteStop> values) {
@ -31172,6 +31156,10 @@ public final class OsmandOdb {
} }
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public Builder clearReverseStops() { public Builder clearReverseStops() {
if (reverseStopsBuilder_ == null) { if (reverseStopsBuilder_ == null) {
@ -31185,6 +31173,10 @@ public final class OsmandOdb {
} }
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public Builder removeReverseStops(int index) { public Builder removeReverseStops(int index) {
if (reverseStopsBuilder_ == null) { if (reverseStopsBuilder_ == null) {
@ -31198,6 +31190,10 @@ public final class OsmandOdb {
} }
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public net.osmand.binary.OsmandOdb.TransportRouteStop.Builder getReverseStopsBuilder( public net.osmand.binary.OsmandOdb.TransportRouteStop.Builder getReverseStopsBuilder(
int index) { int index) {
@ -31205,6 +31201,10 @@ public final class OsmandOdb {
} }
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public net.osmand.binary.OsmandOdb.TransportRouteStopOrBuilder getReverseStopsOrBuilder( public net.osmand.binary.OsmandOdb.TransportRouteStopOrBuilder getReverseStopsOrBuilder(
int index) { int index) {
@ -31215,6 +31215,10 @@ public final class OsmandOdb {
} }
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public java.util.List<? extends net.osmand.binary.OsmandOdb.TransportRouteStopOrBuilder> public java.util.List<? extends net.osmand.binary.OsmandOdb.TransportRouteStopOrBuilder>
getReverseStopsOrBuilderList() { getReverseStopsOrBuilderList() {
@ -31226,6 +31230,10 @@ public final class OsmandOdb {
} }
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public net.osmand.binary.OsmandOdb.TransportRouteStop.Builder addReverseStopsBuilder() { public net.osmand.binary.OsmandOdb.TransportRouteStop.Builder addReverseStopsBuilder() {
return getReverseStopsFieldBuilder().addBuilder( return getReverseStopsFieldBuilder().addBuilder(
@ -31233,6 +31241,10 @@ public final class OsmandOdb {
} }
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public net.osmand.binary.OsmandOdb.TransportRouteStop.Builder addReverseStopsBuilder( public net.osmand.binary.OsmandOdb.TransportRouteStop.Builder addReverseStopsBuilder(
int index) { int index) {
@ -31241,6 +31253,10 @@ public final class OsmandOdb {
} }
/** /**
* <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code> * <code>repeated .OsmAnd.OBF.TransportRouteStop reverseStops = 16;</code>
*
* <pre>
* deprecated (not used any more)
* </pre>
*/ */
public java.util.List<net.osmand.binary.OsmandOdb.TransportRouteStop.Builder> public java.util.List<net.osmand.binary.OsmandOdb.TransportRouteStop.Builder>
getReverseStopsBuilderList() { getReverseStopsBuilderList() {
@ -31261,10 +31277,10 @@ public final class OsmandOdb {
return reverseStopsBuilder_; return reverseStopsBuilder_;
} }
// optional bytes directGeometry = 17; // optional bytes geometry = 17;
private com.google.protobuf.ByteString directGeometry_ = com.google.protobuf.ByteString.EMPTY; private com.google.protobuf.ByteString geometry_ = com.google.protobuf.ByteString.EMPTY;
/** /**
* <code>optional bytes directGeometry = 17;</code> * <code>optional bytes geometry = 17;</code>
* *
* <pre> * <pre>
* array of delta x,y sint32 (CodedIinputStream) &gt;&gt; 5 (precision 31 &gt;&gt; 5) * array of delta x,y sint32 (CodedIinputStream) &gt;&gt; 5 (precision 31 &gt;&gt; 5)
@ -31273,11 +31289,11 @@ public final class OsmandOdb {
* 0, 0 split geometry (for not connected segments) * 0, 0 split geometry (for not connected segments)
* </pre> * </pre>
*/ */
public boolean hasDirectGeometry() { public boolean hasGeometry() {
return ((bitField0_ & 0x00000200) == 0x00000200); return ((bitField0_ & 0x00000200) == 0x00000200);
} }
/** /**
* <code>optional bytes directGeometry = 17;</code> * <code>optional bytes geometry = 17;</code>
* *
* <pre> * <pre>
* array of delta x,y sint32 (CodedIinputStream) &gt;&gt; 5 (precision 31 &gt;&gt; 5) * array of delta x,y sint32 (CodedIinputStream) &gt;&gt; 5 (precision 31 &gt;&gt; 5)
@ -31286,11 +31302,11 @@ public final class OsmandOdb {
* 0, 0 split geometry (for not connected segments) * 0, 0 split geometry (for not connected segments)
* </pre> * </pre>
*/ */
public com.google.protobuf.ByteString getDirectGeometry() { public com.google.protobuf.ByteString getGeometry() {
return directGeometry_; return geometry_;
} }
/** /**
* <code>optional bytes directGeometry = 17;</code> * <code>optional bytes geometry = 17;</code>
* *
* <pre> * <pre>
* array of delta x,y sint32 (CodedIinputStream) &gt;&gt; 5 (precision 31 &gt;&gt; 5) * array of delta x,y sint32 (CodedIinputStream) &gt;&gt; 5 (precision 31 &gt;&gt; 5)
@ -31299,17 +31315,17 @@ public final class OsmandOdb {
* 0, 0 split geometry (for not connected segments) * 0, 0 split geometry (for not connected segments)
* </pre> * </pre>
*/ */
public Builder setDirectGeometry(com.google.protobuf.ByteString value) { public Builder setGeometry(com.google.protobuf.ByteString value) {
if (value == null) { if (value == null) {
throw new NullPointerException(); throw new NullPointerException();
} }
bitField0_ |= 0x00000200; bitField0_ |= 0x00000200;
directGeometry_ = value; geometry_ = value;
onChanged(); onChanged();
return this; return this;
} }
/** /**
* <code>optional bytes directGeometry = 17;</code> * <code>optional bytes geometry = 17;</code>
* *
* <pre> * <pre>
* array of delta x,y sint32 (CodedIinputStream) &gt;&gt; 5 (precision 31 &gt;&gt; 5) * array of delta x,y sint32 (CodedIinputStream) &gt;&gt; 5 (precision 31 &gt;&gt; 5)
@ -31318,81 +31334,9 @@ public final class OsmandOdb {
* 0, 0 split geometry (for not connected segments) * 0, 0 split geometry (for not connected segments)
* </pre> * </pre>
*/ */
public Builder clearDirectGeometry() { public Builder clearGeometry() {
bitField0_ = (bitField0_ & ~0x00000200); bitField0_ = (bitField0_ & ~0x00000200);
directGeometry_ = getDefaultInstance().getDirectGeometry(); geometry_ = getDefaultInstance().getGeometry();
onChanged();
return this;
}
// optional bytes reverseGeometry = 18;
private com.google.protobuf.ByteString reverseGeometry_ = com.google.protobuf.ByteString.EMPTY;
/**
* <code>optional bytes reverseGeometry = 18;</code>
*/
public boolean hasReverseGeometry() {
return ((bitField0_ & 0x00000400) == 0x00000400);
}
/**
* <code>optional bytes reverseGeometry = 18;</code>
*/
public com.google.protobuf.ByteString getReverseGeometry() {
return reverseGeometry_;
}
/**
* <code>optional bytes reverseGeometry = 18;</code>
*/
public Builder setReverseGeometry(com.google.protobuf.ByteString value) {
if (value == null) {
throw new NullPointerException();
}
bitField0_ |= 0x00000400;
reverseGeometry_ = value;
onChanged();
return this;
}
/**
* <code>optional bytes reverseGeometry = 18;</code>
*/
public Builder clearReverseGeometry() {
bitField0_ = (bitField0_ & ~0x00000400);
reverseGeometry_ = getDefaultInstance().getReverseGeometry();
onChanged();
return this;
}
// optional bytes sharedGeometry = 19;
private com.google.protobuf.ByteString sharedGeometry_ = com.google.protobuf.ByteString.EMPTY;
/**
* <code>optional bytes sharedGeometry = 19;</code>
*/
public boolean hasSharedGeometry() {
return ((bitField0_ & 0x00000800) == 0x00000800);
}
/**
* <code>optional bytes sharedGeometry = 19;</code>
*/
public com.google.protobuf.ByteString getSharedGeometry() {
return sharedGeometry_;
}
/**
* <code>optional bytes sharedGeometry = 19;</code>
*/
public Builder setSharedGeometry(com.google.protobuf.ByteString value) {
if (value == null) {
throw new NullPointerException();
}
bitField0_ |= 0x00000800;
sharedGeometry_ = value;
onChanged();
return this;
}
/**
* <code>optional bytes sharedGeometry = 19;</code>
*/
public Builder clearSharedGeometry() {
bitField0_ = (bitField0_ & ~0x00000800);
sharedGeometry_ = getDefaultInstance().getSharedGeometry();
onChanged(); onChanged();
return this; return this;
} }
@ -57996,90 +57940,88 @@ public final class OsmandOdb {
" \003(\t\022\030\n\020attributeTagIds2\030\021 \003(\r\022\030\n\020attrib" + " \003(\t\022\030\n\020attributeTagIds2\030\021 \003(\r\022\030\n\020attrib" +
"uteValues2\030\022 \003(\t\"=\n\017TransportRoutes\022*\n\006r" + "uteValues2\030\022 \003(\t\"=\n\017TransportRoutes\022*\n\006r" +
"outes\030\006 \003(\0132\032.OsmAnd.OBF.TransportRoute\"" + "outes\030\006 \003(\0132\032.OsmAnd.OBF.TransportRoute\"" +
"\256\002\n\016TransportRoute\022\n\n\002id\030\001 \002(\004\022\014\n\004type\030\003" + "\367\001\n\016TransportRoute\022\n\n\002id\030\001 \002(\004\022\014\n\004type\030\003" +
" \001(\r\022\020\n\010operator\030\004 \001(\r\022\013\n\003ref\030\005 \001(\t\022\014\n\004n" + " \001(\r\022\020\n\010operator\030\004 \001(\r\022\013\n\003ref\030\005 \001(\t\022\014\n\004n" +
"ame\030\006 \001(\r\022\017\n\007name_en\030\007 \001(\r\022\020\n\010distance\030\010" + "ame\030\006 \001(\r\022\017\n\007name_en\030\007 \001(\r\022\020\n\010distance\030\010" +
" \001(\r\0223\n\013directStops\030\017 \003(\0132\036.OsmAnd.OBF.T" + " \001(\r\0223\n\013directStops\030\017 \003(\0132\036.OsmAnd.OBF.T" +
"ransportRouteStop\0224\n\014reverseStops\030\020 \003(\0132", "ransportRouteStop\0224\n\014reverseStops\030\020 \003(\0132",
"\036.OsmAnd.OBF.TransportRouteStop\022\026\n\016direc" + "\036.OsmAnd.OBF.TransportRouteStop\022\020\n\010geome" +
"tGeometry\030\021 \001(\014\022\027\n\017reverseGeometry\030\022 \001(\014" + "try\030\021 \001(\014\"W\n\022TransportRouteStop\022\n\n\002id\030\001 " +
"\022\026\n\016sharedGeometry\030\023 \001(\014\"W\n\022TransportRou" + "\002(\022\022\n\n\002dx\030\002 \002(\021\022\n\n\002dy\030\003 \002(\021\022\014\n\004name\030\006 \002(" +
"teStop\022\n\n\002id\030\001 \002(\022\022\n\n\002dx\030\002 \002(\021\022\n\n\002dy\030\003 \002" + "\r\022\017\n\007name_en\030\007 \001(\r\"b\n\rTransportStop\022\n\n\002d" +
"(\021\022\014\n\004name\030\006 \002(\r\022\017\n\007name_en\030\007 \001(\r\"b\n\rTra" + "x\030\001 \002(\021\022\n\n\002dy\030\002 \002(\021\022\n\n\002id\030\005 \002(\022\022\014\n\004name\030" +
"nsportStop\022\n\n\002dx\030\001 \002(\021\022\n\n\002dy\030\002 \002(\021\022\n\n\002id" + "\006 \002(\r\022\017\n\007name_en\030\007 \001(\r\022\016\n\006routes\030\020 \003(\r\"\272" +
"\030\005 \002(\022\022\014\n\004name\030\006 \002(\r\022\017\n\007name_en\030\007 \001(\r\022\016\n" + "\001\n\022TransportStopsTree\022\014\n\004left\030\001 \002(\021\022\r\n\005r" +
"\006routes\030\020 \003(\r\"\272\001\n\022TransportStopsTree\022\014\n\004" + "ight\030\002 \002(\021\022\013\n\003top\030\003 \002(\021\022\016\n\006bottom\030\004 \002(\021\022" +
"left\030\001 \002(\021\022\r\n\005right\030\002 \002(\021\022\013\n\003top\030\003 \002(\021\022\016" + "0\n\010subtrees\030\007 \003(\0132\036.OsmAnd.OBF.Transport" +
"\n\006bottom\030\004 \002(\021\0220\n\010subtrees\030\007 \003(\0132\036.OsmAn", "StopsTree\022(\n\005leafs\030\010 \003(\0132\031.OsmAnd.OBF.Tr",
"d.OBF.TransportStopsTree\022(\n\005leafs\030\010 \003(\0132" + "ansportStop\022\016\n\006baseId\030\020 \001(\004\"\256\001\n\024OsmAndTr" +
"\031.OsmAnd.OBF.TransportStop\022\016\n\006baseId\030\020 \001" + "ansportIndex\022\014\n\004name\030\001 \001(\t\022+\n\006routes\030\003 \001" +
"(\004\"\256\001\n\024OsmAndTransportIndex\022\014\n\004name\030\001 \001(" + "(\0132\033.OsmAnd.OBF.TransportRoutes\022-\n\005stops" +
"\t\022+\n\006routes\030\003 \001(\0132\033.OsmAnd.OBF.Transport" + "\030\006 \001(\0132\036.OsmAnd.OBF.TransportStopsTree\022," +
"Routes\022-\n\005stops\030\006 \001(\0132\036.OsmAnd.OBF.Trans" + "\n\013stringTable\030\t \002(\0132\027.OsmAnd.OBF.StringT" +
"portStopsTree\022,\n\013stringTable\030\t \002(\0132\027.Osm" + "able\"\312\002\n\016OsmAndPoiIndex\022\014\n\004name\030\001 \002(\t\022-\n" +
"And.OBF.StringTable\"\312\002\n\016OsmAndPoiIndex\022\014" + "\nboundaries\030\002 \002(\0132\031.OsmAnd.OBF.OsmAndTil" +
"\n\004name\030\001 \002(\t\022-\n\nboundaries\030\002 \002(\0132\031.OsmAn" + "eBox\0228\n\017categoriesTable\030\003 \003(\0132\037.OsmAnd.O" +
"d.OBF.OsmAndTileBox\0228\n\017categoriesTable\030\003" + "BF.OsmAndCategoryTable\0221\n\tnameIndex\030\004 \001(" +
" \003(\0132\037.OsmAnd.OBF.OsmAndCategoryTable\0221\n", "\0132\036.OsmAnd.OBF.OsmAndPoiNameIndex\0226\n\rsub",
"\tnameIndex\030\004 \001(\0132\036.OsmAnd.OBF.OsmAndPoiN" + "typesTable\030\005 \001(\0132\037.OsmAnd.OBF.OsmAndSubt" +
"ameIndex\0226\n\rsubtypesTable\030\005 \001(\0132\037.OsmAnd" + "ypesTable\022\'\n\005boxes\030\006 \003(\0132\030.OsmAnd.OBF.Os" +
".OBF.OsmAndSubtypesTable\022\'\n\005boxes\030\006 \003(\0132" + "mAndPoiBox\022-\n\007poiData\030\t \003(\0132\034.OsmAnd.OBF" +
"\030.OsmAnd.OBF.OsmAndPoiBox\022-\n\007poiData\030\t \003" + ".OsmAndPoiBoxData\"\331\001\n\022OsmAndPoiNameIndex" +
"(\0132\034.OsmAnd.OBF.OsmAndPoiBoxData\"\331\001\n\022Osm" + "\022-\n\005table\030\003 \002(\0132\036.OsmAnd.OBF.IndexedStri" +
"AndPoiNameIndex\022-\n\005table\030\003 \002(\0132\036.OsmAnd." + "ngTable\022C\n\004data\030\005 \003(\01325.OsmAnd.OBF.OsmAn" +
"OBF.IndexedStringTable\022C\n\004data\030\005 \003(\01325.O" + "dPoiNameIndex.OsmAndPoiNameIndexData\032O\n\026" +
"smAnd.OBF.OsmAndPoiNameIndex.OsmAndPoiNa" + "OsmAndPoiNameIndexData\0225\n\005atoms\030\003 \003(\0132&." +
"meIndexData\032O\n\026OsmAndPoiNameIndexData\0225\n" + "OsmAnd.OBF.OsmAndPoiNameIndexDataAtom\"Q\n" +
"\005atoms\030\003 \003(\0132&.OsmAnd.OBF.OsmAndPoiNameI", "\032OsmAndPoiNameIndexDataAtom\022\014\n\004zoom\030\002 \001(",
"ndexDataAtom\"Q\n\032OsmAndPoiNameIndexDataAt" + "\r\022\t\n\001x\030\003 \001(\r\022\t\n\001y\030\004 \001(\r\022\017\n\007shiftTo\030\016 \001(\007" +
"om\022\014\n\004zoom\030\002 \001(\r\022\t\n\001x\030\003 \001(\r\022\t\n\001y\030\004 \001(\r\022\017" + "\">\n\023OsmAndCategoryTable\022\020\n\010category\030\001 \002(" +
"\n\007shiftTo\030\016 \001(\007\">\n\023OsmAndCategoryTable\022\020" + "\t\022\025\n\rsubcategories\030\003 \003(\t\"E\n\023OsmAndSubtyp" +
"\n\010category\030\001 \002(\t\022\025\n\rsubcategories\030\003 \003(\t\"" + "esTable\022.\n\010subtypes\030\004 \003(\0132\034.OsmAnd.OBF.O" +
"E\n\023OsmAndSubtypesTable\022.\n\010subtypes\030\004 \003(\013" + "smAndPoiSubtype\"\205\001\n\020OsmAndPoiSubtype\022\014\n\004" +
"2\034.OsmAnd.OBF.OsmAndPoiSubtype\"\205\001\n\020OsmAn" + "name\030\001 \002(\t\022\017\n\007tagname\030\002 \001(\t\022\016\n\006isText\030\003 " +
"dPoiSubtype\022\014\n\004name\030\001 \002(\t\022\017\n\007tagname\030\002 \001" + "\002(\010\022\021\n\tfrequency\030\005 \001(\r\022\031\n\021subtypeValuesS" +
"(\t\022\016\n\006isText\030\003 \002(\010\022\021\n\tfrequency\030\005 \001(\r\022\031\n" + "ize\030\006 \001(\r\022\024\n\014subtypeValue\030\010 \003(\t\"\255\001\n\014OsmA" +
"\021subtypeValuesSize\030\006 \001(\r\022\024\n\014subtypeValue" + "ndPoiBox\022\014\n\004zoom\030\001 \002(\r\022\014\n\004left\030\002 \002(\021\022\013\n\003" +
"\030\010 \003(\t\"\255\001\n\014OsmAndPoiBox\022\014\n\004zoom\030\001 \002(\r\022\014\n", "top\030\003 \002(\021\0223\n\ncategories\030\004 \001(\0132\037.OsmAnd.O",
"\004left\030\002 \002(\021\022\013\n\003top\030\003 \002(\021\0223\n\ncategories\030\004" + "BF.OsmAndPoiCategories\022*\n\010subBoxes\030\n \003(\013" +
" \001(\0132\037.OsmAnd.OBF.OsmAndPoiCategories\022*\n" + "2\030.OsmAnd.OBF.OsmAndPoiBox\022\023\n\013shiftToDat" +
"\010subBoxes\030\n \003(\0132\030.OsmAnd.OBF.OsmAndPoiBo" + "a\030\016 \001(\007\"@\n\023OsmAndPoiCategories\022\022\n\ncatego" +
"x\022\023\n\013shiftToData\030\016 \001(\007\"@\n\023OsmAndPoiCateg" + "ries\030\003 \003(\r\022\025\n\rsubcategories\030\005 \003(\r\"i\n\020Osm" +
"ories\022\022\n\ncategories\030\003 \003(\r\022\025\n\rsubcategori" + "AndPoiBoxData\022\014\n\004zoom\030\001 \001(\r\022\t\n\001x\030\002 \001(\r\022\t" +
"es\030\005 \003(\r\"i\n\020OsmAndPoiBoxData\022\014\n\004zoom\030\001 \001" + "\n\001y\030\003 \001(\r\0221\n\007poiData\030\005 \003(\0132 .OsmAnd.OBF." +
"(\r\022\t\n\001x\030\002 \001(\r\022\t\n\001y\030\003 \001(\r\0221\n\007poiData\030\005 \003(" + "OsmAndPoiBoxDataAtom\"\360\001\n\024OsmAndPoiBoxDat" +
"\0132 .OsmAnd.OBF.OsmAndPoiBoxDataAtom\"\360\001\n\024" + "aAtom\022\n\n\002dx\030\002 \002(\021\022\n\n\002dy\030\003 \002(\021\022\022\n\ncategor" +
"OsmAndPoiBoxDataAtom\022\n\n\002dx\030\002 \002(\021\022\n\n\002dy\030\003" + "ies\030\004 \003(\r\022\025\n\rsubcategories\030\005 \003(\r\022\014\n\004name" +
" \002(\021\022\022\n\ncategories\030\004 \003(\r\022\025\n\rsubcategorie", "\030\006 \001(\t\022\016\n\006nameEn\030\007 \001(\t\022\n\n\002id\030\010 \001(\004\022\024\n\014op",
"s\030\005 \003(\r\022\014\n\004name\030\006 \001(\t\022\016\n\006nameEn\030\007 \001(\t\022\n\n" + "eningHours\030\n \001(\t\022\014\n\004site\030\013 \001(\t\022\r\n\005phone\030" +
"\002id\030\010 \001(\004\022\024\n\014openingHours\030\n \001(\t\022\014\n\004site\030" + "\014 \001(\t\022\014\n\004note\030\r \001(\t\022\026\n\016textCategories\030\016 " +
"\013 \001(\t\022\r\n\005phone\030\014 \001(\t\022\014\n\004note\030\r \001(\t\022\026\n\016te" + "\003(\r\022\022\n\ntextValues\030\017 \003(\t\"\032\n\007IdTable\022\017\n\007ro" +
"xtCategories\030\016 \003(\r\022\022\n\ntextValues\030\017 \003(\t\"\032" + "uteId\030\001 \003(\022\"F\n\017RestrictionData\022\014\n\004type\030\001" +
"\n\007IdTable\022\017\n\007routeId\030\001 \003(\022\"F\n\017Restrictio" + " \002(\005\022\014\n\004from\030\002 \002(\005\022\n\n\002to\030\003 \002(\005\022\013\n\003via\030\004 " +
"nData\022\014\n\004type\030\001 \002(\005\022\014\n\004from\030\002 \002(\005\022\n\n\002to\030" + "\001(\005\"x\n\tRouteData\022\016\n\006points\030\001 \002(\014\022\022\n\npoin" +
"\003 \002(\005\022\013\n\003via\030\004 \001(\005\"x\n\tRouteData\022\016\n\006point" + "tTypes\030\004 \001(\014\022\022\n\npointNames\030\005 \001(\014\022\r\n\005type" +
"s\030\001 \002(\014\022\022\n\npointTypes\030\004 \001(\014\022\022\n\npointName" + "s\030\007 \002(\014\022\017\n\007routeId\030\014 \002(\005\022\023\n\013stringNames\030" +
"s\030\005 \001(\014\022\r\n\005types\030\007 \002(\014\022\017\n\007routeId\030\014 \002(\005\022" + "\016 \001(\014\"\304\005\n\022OsmAndRoutingIndex\022\014\n\004name\030\001 \002" +
"\023\n\013stringNames\030\016 \001(\014\"\304\005\n\022OsmAndRoutingIn", "(\t\022?\n\005rules\030\002 \003(\01320.OsmAnd.OBF.OsmAndRou",
"dex\022\014\n\004name\030\001 \002(\t\022?\n\005rules\030\002 \003(\01320.OsmAn" + "tingIndex.RouteEncodingRule\022>\n\trootBoxes" +
"d.OBF.OsmAndRoutingIndex.RouteEncodingRu" + "\030\003 \003(\0132+.OsmAnd.OBF.OsmAndRoutingIndex.R" +
"le\022>\n\trootBoxes\030\003 \003(\0132+.OsmAnd.OBF.OsmAn" + "outeDataBox\022A\n\014basemapBoxes\030\004 \003(\0132+.OsmA" +
"dRoutingIndex.RouteDataBox\022A\n\014basemapBox" + "nd.OBF.OsmAndRoutingIndex.RouteDataBox\022=" +
"es\030\004 \003(\0132+.OsmAnd.OBF.OsmAndRoutingIndex" + "\n\006blocks\030\005 \003(\0132-.OsmAnd.OBF.OsmAndRoutin" +
".RouteDataBox\022=\n\006blocks\030\005 \003(\0132-.OsmAnd.O" + "gIndex.RouteDataBlock\032;\n\021RouteEncodingRu" +
"BF.OsmAndRoutingIndex.RouteDataBlock\032;\n\021" + "le\022\013\n\003tag\030\003 \002(\t\022\r\n\005value\030\005 \002(\t\022\n\n\002id\030\007 \001" +
"RouteEncodingRule\022\013\n\003tag\030\003 \002(\t\022\r\n\005value\030" + "(\r\032\231\001\n\014RouteDataBox\022\014\n\004left\030\001 \002(\021\022\r\n\005rig" +
"\005 \002(\t\022\n\n\002id\030\007 \001(\r\032\231\001\n\014RouteDataBox\022\014\n\004le" + "ht\030\002 \002(\021\022\013\n\003top\030\003 \002(\021\022\016\n\006bottom\030\004 \002(\021\022\023\n" +
"ft\030\001 \002(\021\022\r\n\005right\030\002 \002(\021\022\013\n\003top\030\003 \002(\021\022\016\n\006", "\013shiftToData\030\005 \001(\007\022:\n\005boxes\030\007 \003(\0132+.OsmA",
"bottom\030\004 \002(\021\022\023\n\013shiftToData\030\005 \001(\007\022:\n\005box" + "nd.OBF.OsmAndRoutingIndex.RouteDataBox\032\303" +
"es\030\007 \003(\0132+.OsmAnd.OBF.OsmAndRoutingIndex" + "\001\n\016RouteDataBlock\022$\n\007idTable\030\005 \001(\0132\023.Osm" +
".RouteDataBox\032\303\001\n\016RouteDataBlock\022$\n\007idTa" + "And.OBF.IdTable\022*\n\013dataObjects\030\006 \003(\0132\025.O" +
"ble\030\005 \001(\0132\023.OsmAnd.OBF.IdTable\022*\n\013dataOb" + "smAnd.OBF.RouteData\0221\n\014restrictions\030\007 \003(" +
"jects\030\006 \003(\0132\025.OsmAnd.OBF.RouteData\0221\n\014re" + "\0132\033.OsmAnd.OBF.RestrictionData\022,\n\013string" +
"strictions\030\007 \003(\0132\033.OsmAnd.OBF.Restrictio" + "Table\030\010 \001(\0132\027.OsmAnd.OBF.StringTableB\036\n\021" +
"nData\022,\n\013stringTable\030\010 \001(\0132\027.OsmAnd.OBF." + "net.osmand.binaryB\tOsmandOdb"
"StringTableB\036\n\021net.osmand.binaryB\tOsmand" +
"Odb"
}; };
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
@ -58217,7 +58159,7 @@ public final class OsmandOdb {
internal_static_OsmAnd_OBF_TransportRoute_fieldAccessorTable = new internal_static_OsmAnd_OBF_TransportRoute_fieldAccessorTable = new
com.google.protobuf.GeneratedMessage.FieldAccessorTable( com.google.protobuf.GeneratedMessage.FieldAccessorTable(
internal_static_OsmAnd_OBF_TransportRoute_descriptor, internal_static_OsmAnd_OBF_TransportRoute_descriptor,
new java.lang.String[] { "Id", "Type", "Operator", "Ref", "Name", "NameEn", "Distance", "DirectStops", "ReverseStops", "DirectGeometry", "ReverseGeometry", "SharedGeometry", }); new java.lang.String[] { "Id", "Type", "Operator", "Ref", "Name", "NameEn", "Distance", "DirectStops", "ReverseStops", "Geometry", });
internal_static_OsmAnd_OBF_TransportRouteStop_descriptor = internal_static_OsmAnd_OBF_TransportRouteStop_descriptor =
getDescriptor().getMessageTypes().get(17); getDescriptor().getMessageTypes().get(17);
internal_static_OsmAnd_OBF_TransportRouteStop_fieldAccessorTable = new internal_static_OsmAnd_OBF_TransportRouteStop_fieldAccessorTable = new

View file

@ -1,7 +1,6 @@
package net.osmand.data; package net.osmand.data;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import net.osmand.osm.edit.Way; import net.osmand.osm.edit.Way;
@ -9,16 +8,11 @@ import net.osmand.util.MapUtils;
public class TransportRoute extends MapObject { public class TransportRoute extends MapObject {
private List<TransportStop> forwardStops = new ArrayList<TransportStop>(); private List<TransportStop> forwardStops = new ArrayList<TransportStop>();
private List<TransportStop> backwardStops = new ArrayList<TransportStop>();
private String ref; private String ref;
private String operator; private String operator;
private String type; private String type;
private Integer dist = null; private Integer dist = null;
private List<Way> forwardWays; private List<Way> forwardWays;
private List<Way> forwardAggWays;
private List<Way> backwardWays;
private List<Way> backwardAggWays;
private List<Way> sharedWays;
public TransportRoute(){ public TransportRoute(){
} }
@ -27,69 +21,17 @@ public class TransportRoute extends MapObject {
return forwardStops; return forwardStops;
} }
public List<TransportStop> getBackwardStops() {
return backwardStops;
}
public List<Way> getAggregateForwardWays() {
if(forwardAggWays != null){
return forwardAggWays;
}
forwardAggWays = new ArrayList<>();
if(forwardWays != null) {
forwardAggWays.addAll(forwardWays);
}
if(sharedWays != null) {
forwardAggWays.addAll(sharedWays);
}
return forwardAggWays;
}
public List<Way> getAggregateBackwardWays() {
if (backwardAggWays != null) {
return backwardAggWays;
}
backwardAggWays = new ArrayList<>();
if (backwardWays != null) {
backwardAggWays.addAll(backwardWays);
}
if (sharedWays != null) {
backwardAggWays.addAll(sharedWays);
}
return backwardAggWays;
}
public List<Way> getSharedWays() {
return sharedWays;
}
public List<Way> getForwardWays() { public List<Way> getForwardWays() {
return forwardWays; return forwardWays;
} }
public List<Way> getBackwardWays() {
return backwardWays;
}
public void addWay(Way w, int direction){ public void addWay(Way w) {
if(direction > 0) { if (forwardWays == null) {
if(forwardWays == null) { forwardWays = new ArrayList<>();
forwardWays = new ArrayList<>();
}
forwardWays.add(w);
}
if(direction < 0) {
if(backwardWays == null) {
backwardWays = new ArrayList<>();
}
backwardWays.add(w);
}
if(direction == 0) {
if(sharedWays == null) {
sharedWays = new ArrayList<>();
}
sharedWays.add(w);
} }
forwardWays.add(w);
} }
public String getRef() { public String getRef() {
@ -127,15 +69,11 @@ public class TransportRoute extends MapObject {
this.dist = dist; this.dist = dist;
} }
public int getAvgBothDistance(){ public int getAvgBothDistance() {
int d = 0; int d = 0;
int bSsize = backwardStops.size(); int fSsize = forwardStops.size();
int fSsize = forwardStops.size(); for (int i = 1; i < fSsize; i++) {
for(int i=1; i< bSsize; i++){ d += MapUtils.getDistance(forwardStops.get(i - 1).getLocation(), forwardStops.get(i).getLocation());
d += MapUtils.getDistance(backwardStops.get(i-1).getLocation(), backwardStops.get(i).getLocation());
}
for(int i=1; i< fSsize; i++){
d += MapUtils.getDistance(forwardStops.get(i-1).getLocation(), forwardStops.get(i).getLocation());
} }
return d; return d;
} }

View file

@ -18,6 +18,7 @@
\u2022 New very powerful free text search\n\n \u2022 New very powerful free text search\n\n
\u2022 Much improved audio over Bluetooth\n\n \u2022 Much improved audio over Bluetooth\n\n
\u2022 Improved route guidance, voice prompting, and turn lane indication\n\n \u2022 Improved route guidance, voice prompting, and turn lane indication\n\n
\u2022 Improved transport layer\n\n
\u2022 Added more locales and now support regional locales\n\n \u2022 Added more locales and now support regional locales\n\n
\u2022 Many other improvements and bug fixes\n\n \u2022 Many other improvements and bug fixes\n\n
and more… and more…

View file

@ -344,6 +344,9 @@ public class MapContextMenu extends MenuTitleController implements StateChangedL
if (object instanceof MapMarker) { if (object instanceof MapMarker) {
mapActivity.getMyApplication().getMapMarkersHelper().removeListener(this); mapActivity.getMyApplication().getMapMarkersHelper().removeListener(this);
} }
if(menuController != null) {
menuController.onClose();
}
if (this.object != null) { if (this.object != null) {
clearSelectedObject(this.object); clearSelectedObject(this.object);
} }

View file

@ -61,6 +61,7 @@ public class TransportRouteController extends MenuController {
return false; return false;
} }
@Override @Override
public boolean buttonsVisible() { public boolean buttonsVisible() {
return false; return false;

View file

@ -4,7 +4,6 @@ import java.util.Collection;
import java.util.List; import java.util.List;
import net.osmand.ResultMatcher; import net.osmand.ResultMatcher;
import net.osmand.data.LatLon;
import net.osmand.data.TransportRoute; import net.osmand.data.TransportRoute;
import net.osmand.data.TransportStop; import net.osmand.data.TransportStop;
@ -20,65 +19,7 @@ public interface TransportIndexRepository {
int limit, List<TransportStop> stops, ResultMatcher<TransportStop> matcher); int limit, List<TransportStop> stops, ResultMatcher<TransportStop> matcher);
public Collection<TransportRoute> getRouteForStop(TransportStop stop); public Collection<TransportRoute> getRouteForStop(TransportStop stop);
public List<RouteInfoLocation> searchTransportRouteStops(double latitude, double longitude, LatLon locationToGo, int zoom);
public void close(); public void close();
public static class RouteInfoLocation {
private TransportStop start;
private TransportStop stop;
private TransportRoute route;
private int stopNumbers;
private int distToLocation;
private boolean direction;
public TransportStop getStart() {
return start;
}
public TransportRoute getRoute() {
return route;
}
public boolean getDirection(){
return direction;
}
public void setDirection(boolean direction) {
this.direction = direction;
}
public int getDistToLocation() {
return distToLocation;
}
public void setStart(TransportStop start) {
this.start = start;
}
public TransportStop getStop() {
return stop;
}
public int getStopNumbers() {
return stopNumbers;
}
public void setStopNumbers(int stopNumbers) {
this.stopNumbers = stopNumbers;
}
public void setStop(TransportStop stop) {
this.stop = stop;
}
public void setRoute(TransportRoute route) {
this.route = route;
}
public void setDistToLocation(int distToLocation) {
this.distToLocation = distToLocation;
}
}
} }

View file

@ -69,99 +69,6 @@ public class TransportIndexRepositoryBinary implements TransportIndexRepository
return Collections.emptyList(); return Collections.emptyList();
} }
@Override
public List<RouteInfoLocation> searchTransportRouteStops(double latitude, double longitude, LatLon locationToGo, int zoom) {
long now = System.currentTimeMillis();
final LatLon loc = new LatLon(latitude, longitude);
double tileNumberX = MapUtils.getTileNumberX(zoom, longitude);
double tileNumberY = MapUtils.getTileNumberY(zoom, latitude);
double topLatitude = MapUtils.getLatitudeFromTile(zoom, tileNumberY - 0.5);
double bottomLatitude = MapUtils.getLatitudeFromTile(zoom, tileNumberY + 0.5);
double leftLongitude = MapUtils.getLongitudeFromTile(zoom, tileNumberX - 0.5);
double rightLongitude = MapUtils.getLongitudeFromTile(zoom, tileNumberX + 0.5);
SearchRequest<TransportStop> req = BinaryMapIndexReader.buildSearchTransportRequest(MapUtils.get31TileNumberX(leftLongitude),
MapUtils.get31TileNumberX(rightLongitude), MapUtils.get31TileNumberY(topLatitude), MapUtils
.get31TileNumberY(bottomLatitude), -1, null);
List<RouteInfoLocation> listRoutes = new ArrayList<RouteInfoLocation>();
try {
List<TransportStop> stops = file.searchTransportIndex(req);
TIntObjectHashMap<TransportStop> stopsToProcess = new TIntObjectHashMap<TransportStop>();
for (TransportStop s : stops) {
for (int ref : s.getReferencesToRoutes()) {
TransportStop exist = stopsToProcess.get(ref);
if (exist == null || MapUtils.getDistance(loc, s.getLocation()) < MapUtils.getDistance(loc, exist.getLocation())) {
stopsToProcess.put(ref, s);
}
}
}
TIntObjectHashMap<TransportRoute> transportRoutes = file.getTransportRoutes(stopsToProcess.keys());
for (int ref : stopsToProcess.keys()) {
TransportRoute route = transportRoutes.get(ref);
TransportStop s = stopsToProcess.get(ref);
for (int i = 0; i < 2; i++) {
boolean direction = i == 0;
List<TransportStop> stps = direction ? route.getForwardStops() : route.getBackwardStops();
// load only part
while (!stps.isEmpty() && (stps.get(0).getId().longValue() != s.getId().longValue())) {
stps.remove(0);
}
if (!stps.isEmpty()) {
RouteInfoLocation r = new RouteInfoLocation();
r.setRoute(route);
r.setStart(stps.get(0));
r.setDirection(direction);
if (locationToGo != null) {
int distToLoc = Integer.MAX_VALUE;
for (TransportStop st : stps) {
double ndist = MapUtils.getDistance(locationToGo, st.getLocation());
if (ndist < distToLoc) {
distToLoc = (int) ndist;
r.setStop(st);
r.setDistToLocation(distToLoc);
}
}
}
listRoutes.add(r);
}
}
}
if (log.isDebugEnabled()) {
log.debug(String.format("Search for routes done in %s ms found %s.", //$NON-NLS-1$
System.currentTimeMillis() - now, listRoutes.size()));
}
if (locationToGo != null) {
Collections.sort(listRoutes, new Comparator<RouteInfoLocation>() {
@Override
public int compare(RouteInfoLocation object1, RouteInfoLocation object2) {
int x = (int) (MapUtils.getDistance(loc, object1.getStart().getLocation()) + object1.getDistToLocation());
int y = (int) (MapUtils.getDistance(loc, object2.getStart().getLocation()) + object2.getDistToLocation());
return x - y;
}
});
} else {
Collections.sort(listRoutes, new Comparator<RouteInfoLocation>() {
@Override
public int compare(RouteInfoLocation object1, RouteInfoLocation object2) {
return Double.compare(MapUtils.getDistance(loc, object1.getStart().getLocation()), MapUtils.getDistance(loc,
object2.getStart().getLocation()));
}
});
}
} catch (IOException e) {
log.error("Disk error", e); //$NON-NLS-1$
}
return listRoutes;
}
@Override @Override
public boolean acceptTransportStop(TransportStop stop) { public boolean acceptTransportStop(TransportStop stop) {
return file.transportStopBelongsTo(stop); return file.transportStopBelongsTo(stop);

View file

@ -1,17 +1,13 @@
package net.osmand.plus.views; package net.osmand.plus.views;
import android.content.Context; import gnu.trove.list.array.TIntArrayList;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import java.util.ArrayList;
import android.graphics.Canvas; import java.util.Collections;
import android.graphics.Paint; import java.util.Comparator;
import android.graphics.Path; import java.util.List;
import android.graphics.PointF;
import android.util.DisplayMetrics;
import android.view.WindowManager;
import net.osmand.Location;
import net.osmand.ResultMatcher; import net.osmand.ResultMatcher;
import net.osmand.data.Amenity;
import net.osmand.data.LatLon; import net.osmand.data.LatLon;
import net.osmand.data.PointDescription; import net.osmand.data.PointDescription;
import net.osmand.data.QuadRect; import net.osmand.data.QuadRect;
@ -22,13 +18,15 @@ import net.osmand.data.TransportStop;
import net.osmand.osm.edit.Node; import net.osmand.osm.edit.Node;
import net.osmand.osm.edit.Way; import net.osmand.osm.edit.Way;
import net.osmand.plus.R; import net.osmand.plus.R;
import net.osmand.plus.poi.PoiUIFilter; import android.content.Context;
import gnu.trove.list.array.TIntArrayList; import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import java.util.ArrayList; import android.graphics.Canvas;
import java.util.Collections; import android.graphics.Paint;
import java.util.Comparator; import android.graphics.Path;
import java.util.List; import android.graphics.PointF;
import android.util.DisplayMetrics;
import android.view.WindowManager;
public class TransportStopsLayer extends OsmandMapLayer implements ContextMenuLayer.IContextMenuProvider { public class TransportStopsLayer extends OsmandMapLayer implements ContextMenuLayer.IContextMenuProvider {
private static final int startZoom = 12; private static final int startZoom = 12;
@ -170,19 +168,8 @@ public class TransportStopsLayer extends OsmandMapLayer implements ContextMenuLa
canvas.rotate(-tb.getRotate(), tb.getCenterPixelX(), tb.getCenterPixelY()); canvas.rotate(-tb.getRotate(), tb.getCenterPixelX(), tb.getCenterPixelY());
try { try {
path.reset(); path.reset();
List<Way> ws = route.getAggregateForwardWays(); List<Way> ws = route.getForwardWays();
for (Way w : ws) { if (ws != null)
TIntArrayList tx = new TIntArrayList();
TIntArrayList ty = new TIntArrayList();
for (int i = 0; i < w.getNodes().size(); i++) {
Node o = w.getNodes().get(i);
int x = (int) tb.getPixXFromLatLon(o.getLatitude(), o.getLongitude());
int y = (int) tb.getPixYFromLatLon(o.getLatitude(), o.getLongitude());
tx.add(x);
ty.add(y);
}
calculatePath(tb, tx, ty, path);
}
attrs.drawPath(canvas, path); attrs.drawPath(canvas, path);
} finally { } finally {
canvas.rotate(tb.getRotate(), tb.getCenterPixelX(), tb.getCenterPixelY()); canvas.rotate(tb.getRotate(), tb.getCenterPixelX(), tb.getCenterPixelY());