diff --git a/DataExtractionOSM/src/net/osmand/map/OsmandRegionInfo.java b/DataExtractionOSM/src/net/osmand/map/OsmandRegionInfo.java new file mode 100644 index 0000000000..6d5011ae25 --- /dev/null +++ b/DataExtractionOSM/src/net/osmand/map/OsmandRegionInfo.java @@ -0,0 +1,1214 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: DataExtractionOSM/src/osmand_region_info.proto + +package net.osmand.map; + +public final class OsmandRegionInfo { + private OsmandRegionInfo() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + public static final class OsmAndRegionInfo extends + com.google.protobuf.GeneratedMessageLite { + // Use OsmAndRegionInfo.newBuilder() to construct. + private OsmAndRegionInfo() { + initFields(); + } + private OsmAndRegionInfo(boolean noInit) {} + + private static final OsmAndRegionInfo defaultInstance; + public static OsmAndRegionInfo getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndRegionInfo getDefaultInstanceForType() { + return defaultInstance; + } + + // optional .OsmAndRegions regionInfo = 1; + public static final int REGIONINFO_FIELD_NUMBER = 1; + private boolean hasRegionInfo; + private net.osmand.map.OsmandRegionInfo.OsmAndRegions regionInfo_; + public boolean hasRegionInfo() { return hasRegionInfo; } + public net.osmand.map.OsmandRegionInfo.OsmAndRegions getRegionInfo() { return regionInfo_; } + + private void initFields() { + regionInfo_ = net.osmand.map.OsmandRegionInfo.OsmAndRegions.getDefaultInstance(); + } + @Override + public final boolean isInitialized() { + if (hasRegionInfo()) { + if (!getRegionInfo().isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasRegionInfo()) { + output.writeMessage(1, getRegionInfo()); + } + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasRegionInfo()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, getRegionInfo()); + } + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo, Builder> { + private net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo result; + + // Construct using net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo(); + return builder; + } + + @Override + protected net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo getDefaultInstanceForType() { + return net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo other) { + if (other == net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo.getDefaultInstance()) return this; + if (other.hasRegionInfo()) { + mergeRegionInfo(other.getRegionInfo()); + } + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + return this; + default: { + if (!parseUnknownField(input, extensionRegistry, tag)) { + return this; + } + break; + } + case 10: { + net.osmand.map.OsmandRegionInfo.OsmAndRegions.Builder subBuilder = net.osmand.map.OsmandRegionInfo.OsmAndRegions.newBuilder(); + if (hasRegionInfo()) { + subBuilder.mergeFrom(getRegionInfo()); + } + input.readMessage(subBuilder, extensionRegistry); + setRegionInfo(subBuilder.buildPartial()); + break; + } + } + } + } + + + // optional .OsmAndRegions regionInfo = 1; + public boolean hasRegionInfo() { + return result.hasRegionInfo(); + } + public net.osmand.map.OsmandRegionInfo.OsmAndRegions getRegionInfo() { + return result.getRegionInfo(); + } + public Builder setRegionInfo(net.osmand.map.OsmandRegionInfo.OsmAndRegions value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasRegionInfo = true; + result.regionInfo_ = value; + return this; + } + public Builder setRegionInfo(net.osmand.map.OsmandRegionInfo.OsmAndRegions.Builder builderForValue) { + result.hasRegionInfo = true; + result.regionInfo_ = builderForValue.build(); + return this; + } + public Builder mergeRegionInfo(net.osmand.map.OsmandRegionInfo.OsmAndRegions value) { + if (result.hasRegionInfo() && + result.regionInfo_ != net.osmand.map.OsmandRegionInfo.OsmAndRegions.getDefaultInstance()) { + result.regionInfo_ = + net.osmand.map.OsmandRegionInfo.OsmAndRegions.newBuilder(result.regionInfo_).mergeFrom(value).buildPartial(); + } else { + result.regionInfo_ = value; + } + result.hasRegionInfo = true; + return this; + } + public Builder clearRegionInfo() { + result.hasRegionInfo = false; + result.regionInfo_ = net.osmand.map.OsmandRegionInfo.OsmAndRegions.getDefaultInstance(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndRegionInfo) + } + + static { + defaultInstance = new OsmAndRegionInfo(true); + net.osmand.map.OsmandRegionInfo.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndRegionInfo) + } + + public static final class OsmAndRegions extends + com.google.protobuf.GeneratedMessageLite { + // Use OsmAndRegions.newBuilder() to construct. + private OsmAndRegions() { + initFields(); + } + private OsmAndRegions(boolean noInit) {} + + private static final OsmAndRegions defaultInstance; + public static OsmAndRegions getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndRegions getDefaultInstanceForType() { + return defaultInstance; + } + + // repeated .OsmAndRegion regions = 3; + public static final int REGIONS_FIELD_NUMBER = 3; + private java.util.List regions_ = + java.util.Collections.emptyList(); + public java.util.List getRegionsList() { + return regions_; + } + public int getRegionsCount() { return regions_.size(); } + public net.osmand.map.OsmandRegionInfo.OsmAndRegion getRegions(int index) { + return regions_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + for (net.osmand.map.OsmandRegionInfo.OsmAndRegion element : getRegionsList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + for (net.osmand.map.OsmandRegionInfo.OsmAndRegion element : getRegionsList()) { + output.writeMessage(3, element); + } + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + for (net.osmand.map.OsmandRegionInfo.OsmAndRegion element : getRegionsList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, element); + } + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.map.OsmandRegionInfo.OsmAndRegions parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegions parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegions parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegions parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegions parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegions parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegions parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegions parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegions parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegions parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.map.OsmandRegionInfo.OsmAndRegions prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + net.osmand.map.OsmandRegionInfo.OsmAndRegions, Builder> { + private net.osmand.map.OsmandRegionInfo.OsmAndRegions result; + + // Construct using net.osmand.map.OsmandRegionInfo.OsmAndRegions.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.map.OsmandRegionInfo.OsmAndRegions(); + return builder; + } + + @Override + protected net.osmand.map.OsmandRegionInfo.OsmAndRegions internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.map.OsmandRegionInfo.OsmAndRegions(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public net.osmand.map.OsmandRegionInfo.OsmAndRegions getDefaultInstanceForType() { + return net.osmand.map.OsmandRegionInfo.OsmAndRegions.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.map.OsmandRegionInfo.OsmAndRegions build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.map.OsmandRegionInfo.OsmAndRegions buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.map.OsmandRegionInfo.OsmAndRegions buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.regions_ != java.util.Collections.EMPTY_LIST) { + result.regions_ = + java.util.Collections.unmodifiableList(result.regions_); + } + net.osmand.map.OsmandRegionInfo.OsmAndRegions returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(net.osmand.map.OsmandRegionInfo.OsmAndRegions other) { + if (other == net.osmand.map.OsmandRegionInfo.OsmAndRegions.getDefaultInstance()) return this; + if (!other.regions_.isEmpty()) { + if (result.regions_.isEmpty()) { + result.regions_ = new java.util.ArrayList(); + } + result.regions_.addAll(other.regions_); + } + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + return this; + default: { + if (!parseUnknownField(input, extensionRegistry, tag)) { + return this; + } + break; + } + case 26: { + net.osmand.map.OsmandRegionInfo.OsmAndRegion.Builder subBuilder = net.osmand.map.OsmandRegionInfo.OsmAndRegion.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addRegions(subBuilder.buildPartial()); + break; + } + } + } + } + + + // repeated .OsmAndRegion regions = 3; + public java.util.List getRegionsList() { + return java.util.Collections.unmodifiableList(result.regions_); + } + public int getRegionsCount() { + return result.getRegionsCount(); + } + public net.osmand.map.OsmandRegionInfo.OsmAndRegion getRegions(int index) { + return result.getRegions(index); + } + public Builder setRegions(int index, net.osmand.map.OsmandRegionInfo.OsmAndRegion value) { + if (value == null) { + throw new NullPointerException(); + } + result.regions_.set(index, value); + return this; + } + public Builder setRegions(int index, net.osmand.map.OsmandRegionInfo.OsmAndRegion.Builder builderForValue) { + result.regions_.set(index, builderForValue.build()); + return this; + } + public Builder addRegions(net.osmand.map.OsmandRegionInfo.OsmAndRegion value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.regions_.isEmpty()) { + result.regions_ = new java.util.ArrayList(); + } + result.regions_.add(value); + return this; + } + public Builder addRegions(net.osmand.map.OsmandRegionInfo.OsmAndRegion.Builder builderForValue) { + if (result.regions_.isEmpty()) { + result.regions_ = new java.util.ArrayList(); + } + result.regions_.add(builderForValue.build()); + return this; + } + public Builder addAllRegions( + java.lang.Iterable values) { + if (result.regions_.isEmpty()) { + result.regions_ = new java.util.ArrayList(); + } + super.addAll(values, result.regions_); + return this; + } + public Builder clearRegions() { + result.regions_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndRegions) + } + + static { + defaultInstance = new OsmAndRegions(true); + net.osmand.map.OsmandRegionInfo.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndRegions) + } + + public static final class OsmAndRegion extends + com.google.protobuf.GeneratedMessageLite { + // Use OsmAndRegion.newBuilder() to construct. + private OsmAndRegion() { + initFields(); + } + private OsmAndRegion(boolean noInit) {} + + private static final OsmAndRegion defaultInstance; + public static OsmAndRegion getDefaultInstance() { + return defaultInstance; + } + + @Override + public OsmAndRegion getDefaultInstanceForType() { + return defaultInstance; + } + + // optional string continentName = 1; + public static final int CONTINENTNAME_FIELD_NUMBER = 1; + private boolean hasContinentName; + private java.lang.String continentName_ = ""; + public boolean hasContinentName() { return hasContinentName; } + public java.lang.String getContinentName() { return continentName_; } + + // required string name = 2; + public static final int NAME_FIELD_NUMBER = 2; + private boolean hasName; + private java.lang.String name_ = ""; + public boolean hasName() { return hasName; } + public java.lang.String getName() { return name_; } + + // repeated int32 degX = 4 [packed = true]; + public static final int DEGX_FIELD_NUMBER = 4; + private java.util.List degX_ = + java.util.Collections.emptyList(); + public java.util.List getDegXList() { + return degX_; + } + public int getDegXCount() { return degX_.size(); } + public int getDegX(int index) { + return degX_.get(index); + } + private int degXMemoizedSerializedSize = -1; + + // repeated int32 degY = 5 [packed = true]; + public static final int DEGY_FIELD_NUMBER = 5; + private java.util.List degY_ = + java.util.Collections.emptyList(); + public java.util.List getDegYList() { + return degY_; + } + public int getDegYCount() { return degY_.size(); } + public int getDegY(int index) { + return degY_.get(index); + } + private int degYMemoizedSerializedSize = -1; + + // repeated .OsmAndRegion subregions = 8; + public static final int SUBREGIONS_FIELD_NUMBER = 8; + private java.util.List subregions_ = + java.util.Collections.emptyList(); + public java.util.List getSubregionsList() { + return subregions_; + } + public int getSubregionsCount() { return subregions_.size(); } + public net.osmand.map.OsmandRegionInfo.OsmAndRegion getSubregions(int index) { + return subregions_.get(index); + } + + private void initFields() { + } + @Override + public final boolean isInitialized() { + if (!hasName) return false; + for (net.osmand.map.OsmandRegionInfo.OsmAndRegion element : getSubregionsList()) { + if (!element.isInitialized()) return false; + } + return true; + } + + @Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (hasContinentName()) { + output.writeString(1, getContinentName()); + } + if (hasName()) { + output.writeString(2, getName()); + } + if (getDegXList().size() > 0) { + output.writeRawVarint32(34); + output.writeRawVarint32(degXMemoizedSerializedSize); + } + for (int element : getDegXList()) { + output.writeInt32NoTag(element); + } + if (getDegYList().size() > 0) { + output.writeRawVarint32(42); + output.writeRawVarint32(degYMemoizedSerializedSize); + } + for (int element : getDegYList()) { + output.writeInt32NoTag(element); + } + for (net.osmand.map.OsmandRegionInfo.OsmAndRegion element : getSubregionsList()) { + output.writeMessage(8, element); + } + } + + private int memoizedSerializedSize = -1; + @Override + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (hasContinentName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(1, getContinentName()); + } + if (hasName()) { + size += com.google.protobuf.CodedOutputStream + .computeStringSize(2, getName()); + } + { + int dataSize = 0; + for (int element : getDegXList()) { + dataSize += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(element); + } + size += dataSize; + if (!getDegXList().isEmpty()) { + size += 1; + size += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(dataSize); + } + degXMemoizedSerializedSize = dataSize; + } + { + int dataSize = 0; + for (int element : getDegYList()) { + dataSize += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(element); + } + size += dataSize; + if (!getDegYList().isEmpty()) { + size += 1; + size += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(dataSize); + } + degYMemoizedSerializedSize = dataSize; + } + for (net.osmand.map.OsmandRegionInfo.OsmAndRegion element : getSubregionsList()) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(8, element); + } + memoizedSerializedSize = size; + return size; + } + + public static net.osmand.map.OsmandRegionInfo.OsmAndRegion parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegion parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegion parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegion parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return newBuilder().mergeFrom(data, extensionRegistry) + .buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegion parseFrom(java.io.InputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegion parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegion parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegion parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + Builder builder = newBuilder(); + if (builder.mergeDelimitedFrom(input, extensionRegistry)) { + return builder.buildParsed(); + } else { + return null; + } + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegion parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return newBuilder().mergeFrom(input).buildParsed(); + } + public static net.osmand.map.OsmandRegionInfo.OsmAndRegion parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return newBuilder().mergeFrom(input, extensionRegistry) + .buildParsed(); + } + + public static Builder newBuilder() { return Builder.create(); } + @Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(net.osmand.map.OsmandRegionInfo.OsmAndRegion prototype) { + return newBuilder().mergeFrom(prototype); + } + @Override + public Builder toBuilder() { return newBuilder(this); } + + public static final class Builder extends + com.google.protobuf.GeneratedMessageLite.Builder< + net.osmand.map.OsmandRegionInfo.OsmAndRegion, Builder> { + private net.osmand.map.OsmandRegionInfo.OsmAndRegion result; + + // Construct using net.osmand.map.OsmandRegionInfo.OsmAndRegion.newBuilder() + private Builder() {} + + private static Builder create() { + Builder builder = new Builder(); + builder.result = new net.osmand.map.OsmandRegionInfo.OsmAndRegion(); + return builder; + } + + @Override + protected net.osmand.map.OsmandRegionInfo.OsmAndRegion internalGetResult() { + return result; + } + + @Override + public Builder clear() { + if (result == null) { + throw new IllegalStateException( + "Cannot call clear() after build()."); + } + result = new net.osmand.map.OsmandRegionInfo.OsmAndRegion(); + return this; + } + + @Override + public Builder clone() { + return create().mergeFrom(result); + } + + @Override + public net.osmand.map.OsmandRegionInfo.OsmAndRegion getDefaultInstanceForType() { + return net.osmand.map.OsmandRegionInfo.OsmAndRegion.getDefaultInstance(); + } + + @Override + public boolean isInitialized() { + return result.isInitialized(); + } + @Override + public net.osmand.map.OsmandRegionInfo.OsmAndRegion build() { + if (result != null && !isInitialized()) { + throw newUninitializedMessageException(result); + } + return buildPartial(); + } + + private net.osmand.map.OsmandRegionInfo.OsmAndRegion buildParsed() + throws com.google.protobuf.InvalidProtocolBufferException { + if (!isInitialized()) { + throw newUninitializedMessageException( + result).asInvalidProtocolBufferException(); + } + return buildPartial(); + } + + @Override + public net.osmand.map.OsmandRegionInfo.OsmAndRegion buildPartial() { + if (result == null) { + throw new IllegalStateException( + "build() has already been called on this Builder."); + } + if (result.degX_ != java.util.Collections.EMPTY_LIST) { + result.degX_ = + java.util.Collections.unmodifiableList(result.degX_); + } + if (result.degY_ != java.util.Collections.EMPTY_LIST) { + result.degY_ = + java.util.Collections.unmodifiableList(result.degY_); + } + if (result.subregions_ != java.util.Collections.EMPTY_LIST) { + result.subregions_ = + java.util.Collections.unmodifiableList(result.subregions_); + } + net.osmand.map.OsmandRegionInfo.OsmAndRegion returnMe = result; + result = null; + return returnMe; + } + + @Override + public Builder mergeFrom(net.osmand.map.OsmandRegionInfo.OsmAndRegion other) { + if (other == net.osmand.map.OsmandRegionInfo.OsmAndRegion.getDefaultInstance()) return this; + if (other.hasContinentName()) { + setContinentName(other.getContinentName()); + } + if (other.hasName()) { + setName(other.getName()); + } + if (!other.degX_.isEmpty()) { + if (result.degX_.isEmpty()) { + result.degX_ = new java.util.ArrayList(); + } + result.degX_.addAll(other.degX_); + } + if (!other.degY_.isEmpty()) { + if (result.degY_.isEmpty()) { + result.degY_ = new java.util.ArrayList(); + } + result.degY_.addAll(other.degY_); + } + if (!other.subregions_.isEmpty()) { + if (result.subregions_.isEmpty()) { + result.subregions_ = new java.util.ArrayList(); + } + result.subregions_.addAll(other.subregions_); + } + return this; + } + + @Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + while (true) { + int tag = input.readTag(); + switch (tag) { + case 0: + return this; + default: { + if (!parseUnknownField(input, extensionRegistry, tag)) { + return this; + } + break; + } + case 10: { + setContinentName(input.readString()); + break; + } + case 18: { + setName(input.readString()); + break; + } + case 32: { + addDegX(input.readInt32()); + break; + } + case 34: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + while (input.getBytesUntilLimit() > 0) { + addDegX(input.readInt32()); + } + input.popLimit(limit); + break; + } + case 40: { + addDegY(input.readInt32()); + break; + } + case 42: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + while (input.getBytesUntilLimit() > 0) { + addDegY(input.readInt32()); + } + input.popLimit(limit); + break; + } + case 66: { + net.osmand.map.OsmandRegionInfo.OsmAndRegion.Builder subBuilder = net.osmand.map.OsmandRegionInfo.OsmAndRegion.newBuilder(); + input.readMessage(subBuilder, extensionRegistry); + addSubregions(subBuilder.buildPartial()); + break; + } + } + } + } + + + // optional string continentName = 1; + public boolean hasContinentName() { + return result.hasContinentName(); + } + public java.lang.String getContinentName() { + return result.getContinentName(); + } + public Builder setContinentName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasContinentName = true; + result.continentName_ = value; + return this; + } + public Builder clearContinentName() { + result.hasContinentName = false; + result.continentName_ = getDefaultInstance().getContinentName(); + return this; + } + + // required string name = 2; + public boolean hasName() { + return result.hasName(); + } + public java.lang.String getName() { + return result.getName(); + } + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + result.hasName = true; + result.name_ = value; + return this; + } + public Builder clearName() { + result.hasName = false; + result.name_ = getDefaultInstance().getName(); + return this; + } + + // repeated int32 degX = 4 [packed = true]; + public java.util.List getDegXList() { + return java.util.Collections.unmodifiableList(result.degX_); + } + public int getDegXCount() { + return result.getDegXCount(); + } + public int getDegX(int index) { + return result.getDegX(index); + } + public Builder setDegX(int index, int value) { + result.degX_.set(index, value); + return this; + } + public Builder addDegX(int value) { + if (result.degX_.isEmpty()) { + result.degX_ = new java.util.ArrayList(); + } + result.degX_.add(value); + return this; + } + public Builder addAllDegX( + java.lang.Iterable values) { + if (result.degX_.isEmpty()) { + result.degX_ = new java.util.ArrayList(); + } + super.addAll(values, result.degX_); + return this; + } + public Builder clearDegX() { + result.degX_ = java.util.Collections.emptyList(); + return this; + } + + // repeated int32 degY = 5 [packed = true]; + public java.util.List getDegYList() { + return java.util.Collections.unmodifiableList(result.degY_); + } + public int getDegYCount() { + return result.getDegYCount(); + } + public int getDegY(int index) { + return result.getDegY(index); + } + public Builder setDegY(int index, int value) { + result.degY_.set(index, value); + return this; + } + public Builder addDegY(int value) { + if (result.degY_.isEmpty()) { + result.degY_ = new java.util.ArrayList(); + } + result.degY_.add(value); + return this; + } + public Builder addAllDegY( + java.lang.Iterable values) { + if (result.degY_.isEmpty()) { + result.degY_ = new java.util.ArrayList(); + } + super.addAll(values, result.degY_); + return this; + } + public Builder clearDegY() { + result.degY_ = java.util.Collections.emptyList(); + return this; + } + + // repeated .OsmAndRegion subregions = 8; + public java.util.List getSubregionsList() { + return java.util.Collections.unmodifiableList(result.subregions_); + } + public int getSubregionsCount() { + return result.getSubregionsCount(); + } + public net.osmand.map.OsmandRegionInfo.OsmAndRegion getSubregions(int index) { + return result.getSubregions(index); + } + public Builder setSubregions(int index, net.osmand.map.OsmandRegionInfo.OsmAndRegion value) { + if (value == null) { + throw new NullPointerException(); + } + result.subregions_.set(index, value); + return this; + } + public Builder setSubregions(int index, net.osmand.map.OsmandRegionInfo.OsmAndRegion.Builder builderForValue) { + result.subregions_.set(index, builderForValue.build()); + return this; + } + public Builder addSubregions(net.osmand.map.OsmandRegionInfo.OsmAndRegion value) { + if (value == null) { + throw new NullPointerException(); + } + if (result.subregions_.isEmpty()) { + result.subregions_ = new java.util.ArrayList(); + } + result.subregions_.add(value); + return this; + } + public Builder addSubregions(net.osmand.map.OsmandRegionInfo.OsmAndRegion.Builder builderForValue) { + if (result.subregions_.isEmpty()) { + result.subregions_ = new java.util.ArrayList(); + } + result.subregions_.add(builderForValue.build()); + return this; + } + public Builder addAllSubregions( + java.lang.Iterable values) { + if (result.subregions_.isEmpty()) { + result.subregions_ = new java.util.ArrayList(); + } + super.addAll(values, result.subregions_); + return this; + } + public Builder clearSubregions() { + result.subregions_ = java.util.Collections.emptyList(); + return this; + } + + // @@protoc_insertion_point(builder_scope:OsmAndRegion) + } + + static { + defaultInstance = new OsmAndRegion(true); + net.osmand.map.OsmandRegionInfo.internalForceInit(); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:OsmAndRegion) + } + + + static { + } + + public static void internalForceInit() {} + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/DataExtractionOSM/src/net/osmand/map/RegionCountry.java b/DataExtractionOSM/src/net/osmand/map/RegionCountry.java new file mode 100644 index 0000000000..99a1ee8d55 --- /dev/null +++ b/DataExtractionOSM/src/net/osmand/map/RegionCountry.java @@ -0,0 +1,104 @@ +package net.osmand.map; + +import gnu.trove.list.array.TLongArrayList; +import gnu.trove.set.hash.TLongHashSet; + +import java.util.ArrayList; +import java.util.List; + +import net.osmand.Algoritms; +import net.osmand.map.OsmandRegionInfo.OsmAndRegion; +import net.osmand.osm.MapUtils; + +public class RegionCountry { + public String continentName; + public TLongArrayList tiles = new TLongArrayList(); + public int left, right, top, bottom; + public String name; + public RegionCountry parent; + + private List regions = new ArrayList(); + private final static int SHIFT = 5; + + public void add(int xdeg, int ydeg) { + if (tiles.size() == 0) { + left = right = xdeg; + top = bottom = ydeg; + } + left = Math.min(xdeg, left); + right = Math.max(xdeg, right); + bottom = Math.min(ydeg, bottom); + top = Math.max(ydeg, top); + tiles.add((xdeg << SHIFT) + ydeg); + } + + public int getLon(int i) { + return (int) (tiles.get(i) >> SHIFT); + } + + public int getLat(int i) { + return (int) (tiles.get(i) - ((tiles.get(i) >> SHIFT) << SHIFT)); + } + + public void addSubregion(RegionCountry c) { + c.parent = this; + regions.add(c); + } + + public List getSubRegions() { + return regions; + } + + public TLongHashSet calculateTileSet(TLongHashSet t, int z) { + for (int j = 0; j < tiles.size(); j++) { + int kx = (int) MapUtils.getTileNumberX(z, getLon(j)); + int ex = (int) MapUtils.getTileNumberX(z, getLon(j) + 0.9999f); + int ky = (int) MapUtils.getTileNumberY(z, getLat(j)); + int ey = (int) MapUtils.getTileNumberY(z, getLat(j) - 0.9999f); + for (int x = kx; x <= ex; x++) { + for (int y = ky; y <= ey; y++) { + long v = (((long) y) << 31) + x; + t.add(v); + } + } + } + return t; + } + + public static RegionCountry construct(OsmAndRegion reg) { + RegionCountry rc = new RegionCountry(); + if (reg.hasContinentName()) { + rc.continentName = reg.getContinentName(); + } + rc.name = reg.getName(); + for (int i = 0; i < reg.getDegXCount(); i++) { + rc.add(reg.getDegX(i), reg.getDegY(i)); + } + for (int i = 0; i < reg.getSubregionsCount(); i++) { + rc.addSubregion(construct(reg.getSubregions(i))); + } + return rc; + } + + public OsmAndRegion convert() { + OsmAndRegion.Builder reg = OsmAndRegion.newBuilder(); + // System.out.println(r.name + " " + r.tiles.size() + " ?= " + r.calculateTileSet(new TLongHashSet(), 8).size()); + int px = 0; + int py = 0; + for (int i = 0; i < this.tiles.size(); i++) { + reg.addDegX(this.getLon(i) - px); + reg.addDegY(this.getLat(i) - py); + px = this.getLon(i); + py = this.getLat(i); + } + String n = Algoritms.capitalizeFirstLetterAndLowercase(this.name.replace('_', ' ')); + reg.setName(n); + if(this.continentName != null) { + reg.setContinentName(Algoritms.capitalizeFirstLetterAndLowercase(this.continentName)); + } + for (RegionCountry c : this.regions) { + reg.addSubregions(c.convert()); + } + return reg.build(); + } +} \ No newline at end of file diff --git a/DataExtractionOSM/src/net/osmand/map/RegionRegistry.java b/DataExtractionOSM/src/net/osmand/map/RegionRegistry.java new file mode 100644 index 0000000000..5d49fde0d8 --- /dev/null +++ b/DataExtractionOSM/src/net/osmand/map/RegionRegistry.java @@ -0,0 +1,45 @@ +package net.osmand.map; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.logging.Log; + +import net.osmand.LogUtil; +import net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo; + +public class RegionRegistry { + public static final String fileName = "countries.reginfo"; + private static final Log log = LogUtil.getLog(RegionRegistry.class); + private static RegionRegistry r = null; + + private List countries = new ArrayList(); + + public static RegionRegistry getRegionRegistry(){ + if(r == null) { + try { + long t = -System.currentTimeMillis(); + r = new RegionRegistry(); + InputStream in = RegionsRegistryConverter.class.getResourceAsStream(RegionRegistry.fileName); + OsmAndRegionInfo regInfo = OsmAndRegionInfo.newBuilder().mergeFrom(in).build(); + for(int j = 0; j < regInfo.getRegionInfo().getRegionsCount(); j++) { + r.countries.add(RegionCountry.construct(regInfo.getRegionInfo().getRegions(j))); + } + t += System.currentTimeMillis(); + log.info("Initialize regions from file" + t + " ms"); + } catch (IOException e) { + log.error("IO exception reading regions", e); + } + } + return r; + } + + + public List getCountries() { + return countries; + } + +} diff --git a/DataExtractionOSM/src/net/osmand/map/RegionsRegistryConverter.java b/DataExtractionOSM/src/net/osmand/map/RegionsRegistryConverter.java new file mode 100644 index 0000000000..2b3503514e --- /dev/null +++ b/DataExtractionOSM/src/net/osmand/map/RegionsRegistryConverter.java @@ -0,0 +1,122 @@ +package net.osmand.map; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + +import net.osmand.map.OsmandRegionInfo.OsmAndRegionInfo; +import net.osmand.map.OsmandRegionInfo.OsmAndRegions; + +import org.xml.sax.Attributes; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.DefaultHandler; + +public class RegionsRegistryConverter { + + public static List parseRegions() throws IllegalStateException { + InputStream is = RegionsRegistryConverter.class.getResourceAsStream("countries.xml"); + try { + SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); + RegionsHandler h = new RegionsHandler(parser); + parser.parse(new InputSource(is), h); + return h.getCountries(); + } catch (SAXException e) { + throw new IllegalStateException(e); + } catch (IOException e) { + throw new IllegalStateException(e); + } catch (ParserConfigurationException e) { + throw new IllegalStateException(e); + } + } + + + private static class RegionsHandler extends DefaultHandler { + + private SAXParser parser; + private String continentName; + private RegionCountry current; + private RegionCountry currentRegion; + private List countries = new ArrayList(); + private StringBuilder txt = new StringBuilder(); + + public RegionsHandler(SAXParser parser) { + this.parser = parser; + } + + @Override + public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { + String tagName = parser.isNamespaceAware() ? localName : qName; + if(tagName.equals("continent")) { + continentName = attributes.getValue("name"); + } else if(tagName.equals("country")) { + RegionCountry c = new RegionCountry(); + c.continentName = continentName; + c.name = attributes.getValue("name"); + current = c; + countries.add(c); + } else if(tagName.equals("tiles")) { + txt.setLength(0); + } else if(tagName.equals("region")) { + RegionCountry c = new RegionCountry(); + c.name = attributes.getValue("name"); + currentRegion = c; + current.addSubregion(c); + } + } + @Override + public void characters(char[] ch, int start, int length) throws SAXException { + txt.append(ch, start, length); + } + + @Override + public void endElement(String uri, String localName, String qName) throws SAXException { + String tagName = parser.isNamespaceAware() ? localName : qName; + if(tagName.equals("region")) { + currentRegion = null; + } else if(tagName.equals("tiles")) { + String[] s = txt.toString().split("( |;)"); + RegionCountry a = currentRegion == null ? current : currentRegion; + for(int i =0; i < s.length; i+=2) { + a.add(Integer.parseInt(s[i]), Integer.parseInt(s[i+1])); + } + } + } + + public List getCountries() { + return countries; + } + } + + + + public static void main(String[] args) throws IOException { + List countries = parseRegions(); + OsmAndRegions.Builder regions= OsmAndRegions.newBuilder(); + for(RegionCountry c : countries){ + regions.addRegions(c.convert()); + } + + String filePath = "src/net/osmand/map/"+RegionRegistry.fileName; + long t = -System.currentTimeMillis(); + FileOutputStream out = new FileOutputStream(filePath); + OsmAndRegionInfo.newBuilder().setRegionInfo(regions) + .build().writeTo(out); + out.close(); + InputStream in = RegionsRegistryConverter.class.getResourceAsStream(RegionRegistry.fileName); + OsmAndRegionInfo regInfo = OsmAndRegionInfo.newBuilder().mergeFrom(in).build(); + t += System.currentTimeMillis(); + System.out.println("Read countries " + regInfo.getRegionInfo().getRegionsCount() + " " + countries.size() ); + System.out.println("Timing " + t); + + + + } + +} diff --git a/DataExtractionOSM/src/net/osmand/map/countries.reginfo b/DataExtractionOSM/src/net/osmand/map/countries.reginfo new file mode 100644 index 0000000000..ac9125a40f Binary files /dev/null and b/DataExtractionOSM/src/net/osmand/map/countries.reginfo differ diff --git a/DataExtractionOSM/src/countries.xml b/DataExtractionOSM/src/net/osmand/map/countries.xml similarity index 99% rename from DataExtractionOSM/src/countries.xml rename to DataExtractionOSM/src/net/osmand/map/countries.xml index 17a892bf4a..ad3c189bd9 100644 --- a/DataExtractionOSM/src/countries.xml +++ b/DataExtractionOSM/src/net/osmand/map/countries.xml @@ -6401,7 +6401,7 @@ - + -89 15;-89 16;-89 17;-89 18;-88 16;-88 17;-88 18 @@ -8853,7 +8853,7 @@ 12 41;12 42 - + -64 32 -64 32 @@ -9405,7 +9405,8 @@ - + + -180 64;-180 65;-180 66;-180 67;-180 68;-180 69;-180 70;-180 71;-179 65;-179 66;-179 67;-179 68;-179 70;-179 71;-178 65;-178 66;-178 67;-178 68;-178 70;-178 71;-177 65;-177 66;-177 67;-177 68;-176 64;-176 65;-176 66;-176 67;-176 71;-175 64;-175 65;-175 66;-175 67;-174 64;-174 65;-174 66;-174 67;-173 64;-173 65;-173 66;-173 67;-172 64;-172 65;-172 66;-172 67;-171 65;-171 66;-170 65;-170 66;19 54;19 55;20 54;20 55;21 54;21 55;22 54;22 55;26 59;26 60;27 56;27 57;27 58;27 59;27 60;28 55;28 56;28 57;28 58;28 59;28 60;28 61;28 66;28 67;28 68;28 69;29 55;29 56;29 57;29 58;29 59;29 60;29 61;29 63;29 64;29 65;29 66;29 67;29 68;29 69;30 54;30 55;30 56;30 57;30 58;30 59;30 60;30 61;30 62;30 63;30 64;30 65;30 66;30 67;30 68;30 69;31 51;31 52;31 53;31 54;31 55;31 56;31 57;31 58;31 59;31 60;31 61;31 62;31 63;31 64;31 65;31 66;31 67;31 68;31 69;31 70;32 51;32 52;32 53;32 54;32 55;32 56;32 57;32 58;32 59;32 60;32 61;32 62;32 63;32 64;32 65;32 66;32 67;32 68;32 69;32 70;33 51;33 52;33 53;33 54;33 55;33 56;33 57;33 58;33 59;33 60;33 61;33 62;33 63;33 64;33 65;33 66;33 67;33 68;33 69;34 51;34 52;34 53;34 54;34 55;34 56;34 57;34 58;34 59;34 60;34 61;34 62;34 63;34 64;34 65;34 66;34 67;34 68;34 69;35 50;35 51;35 52;35 53;35 54;35 55;35 56;35 57;35 58;35 59;35 60;35 61;35 62;35 63;35 64;35 65;35 66;35 67;35 68;35 69;36 44;36 45;36 50;36 51;36 52;36 53;36 54;36 55;36 56;36 57;36 58;36 59;36 60;36 61;36 62;36 63;36 64;36 65;36 66;36 67;36 68;36 69;37 44;37 45;37 46;37 49;37 50;37 51;37 52;37 53;37 54;37 55;37 56;37 57;37 58;37 59;37 60;37 61;37 62;37 63;37 64;37 65;37 66;37 67;37 68;38 44;38 45;38 46;38 47;38 49;38 50;38 51;38 52;38 53;38 54;38 55;38 56;38 57;38 58;38 59;38 60;38 61;38 62;38 63;38 64;38 65;38 66;38 67;38 68;39 43;39 44;39 45;39 46;39 47;39 48;39 49;39 50;39 51;39 52;39 53;39 54;39 55;39 56;39 57;39 58;39 59;39 60;39 61;39 62;39 63;39 64;39 65;39 66;39 67;39 68;40 43;40 44;40 45;40 46;40 47;40 48;40 49;40 50;40 51;40 52;40 53;40 54;40 55;40 56;40 57;40 58;40 59;40 60;40 61;40 62;40 63;40 64;40 65;40 66;40 67;40 68;41 43;41 44;41 45;41 46;41 47;41 48;41 49;41 50;41 51;41 52;41 53;41 54;41 55;41 56;41 57;41 58;41 59;41 60;41 61;41 62;41 63;41 64;41 65;41 66;41 67;42 42;42 43;42 44;42 45;42 46;42 47;42 48;42 49;42 50;42 51;42 52;42 53;42 54;42 55;42 56;42 57;42 58;42 59;42 60;42 61;42 62;42 63;42 64;42 65;42 66;43 42;43 43;43 44;43 45;43 46;43 47;43 48;43 49;43 50;43 51;43 52;43 53;43 54;43 55;43 56;43 57;43 58;43 59;43 60;43 61;43 62;43 63;43 64;43 65;43 66;43 67;43 68;44 42;44 43;44 44;44 45;44 46;44 47;44 48;44 49;44 50;44 51;44 52;44 53;44 54;44 55;44 56;44 57;44 58;44 59;44 60;44 61;44 62;44 63;44 64;44 65;44 66;44 67;44 68;44 80;45 41;45 42;45 43;45 44;45 45;45 46;45 47;45 48;45 49;45 50;45 51;45 52;45 53;45 54;45 55;45 56;45 57;45 58;45 59;45 60;45 61;45 62;45 63;45 64;45 65;45 66;45 67;45 68;45 80;46 41;46 42;46 43;46 44;46 45;46 46;46 47;46 48;46 49;46 50;46 51;46 52;46 53;46 54;46 55;46 56;46 57;46 58;46 59;46 60;46 61;46 62;46 63;46 64;46 65;46 66;46 67;46 68;46 80;47 41;47 42;47 43;47 44;47 45;47 46;47 47;47 48;47 49;47 50;47 51;47 52;47 53;47 54;47 55;47 56;47 57;47 58;47 59;47 60;47 61;47 62;47 63;47 64;47 65;47 66;47 67;47 79;47 80;48 41;48 42;48 45;48 46;48 47;48 49;48 50;48 51;48 52;48 53;48 54;48 55;48 56;48 57;48 58;48 59;48 60;48 61;48 62;48 63;48 64;48 65;48 66;48 67;48 68;48 69;48 79;48 80;49 45;49 46;49 50;49 51;49 52;49 53;49 54;49 55;49 56;49 57;49 58;49 59;49 60;49 61;49 62;49 63;49 64;49 65;49 66;49 67;49 68;49 69;49 79;49 80;49 81;50 51;50 52;50 53;50 54;50 55;50 56;50 57;50 58;50 59;50 60;50 61;50 62;50 63;50 64;50 65;50 66;50 67;50 68;50 69;50 79;50 80;50 81;51 51;51 52;51 53;51 54;51 55;51 56;51 57;51 58;51 59;51 60;51 61;51 62;51 63;51 64;51 65;51 66;51 67;51 68;51 71;51 72;51 79;51 80;51 81;52 51;52 52;52 53;52 54;52 55;52 56;52 57;52 58;52 59;52 60;52 61;52 62;52 63;52 64;52 65;52 66;52 67;52 68;52 70;52 71;52 72;52 73;52 80;53 51;53 52;53 53;53 54;53 55;53 56;53 57;53 58;53 59;53 60;53 61;53 62;53 63;53 64;53 65;53 66;53 67;53 68;53 69;53 70;53 71;53 72;53 73;53 80;54 50;54 51;54 52;54 53;54 54;54 55;54 56;54 57;54 58;54 59;54 60;54 61;54 62;54 63;54 64;54 65;54 66;54 67;54 68;54 69;54 70;54 71;54 72;54 73;54 74;54 80;54 81;55 50;55 51;55 52;55 53;55 54;55 55;55 56;55 57;55 58;55 59;55 60;55 61;55 62;55 63;55 64;55 65;55 66;55 67;55 68;55 69;55 70;55 71;55 72;55 73;55 74;55 75;55 79;55 80;55 81;56 50;56 51;56 52;56 53;56 54;56 55;56 56;56 57;56 58;56 59;56 60;56 61;56 62;56 63;56 64;56 65;56 66;56 67;56 68;56 70;56 71;56 72;56 73;56 74;56 75;56 79;56 80;56 81;57 50;57 51;57 52;57 53;57 54;57 55;57 56;57 57;57 58;57 59;57 60;57 61;57 62;57 63;57 64;57 65;57 66;57 67;57 68;57 70;57 73;57 74;57 75;57 79;57 80;57 81;58 50;58 51;58 52;58 53;58 54;58 55;58 56;58 57;58 58;58 59;58 60;58 61;58 62;58 63;58 64;58 65;58 66;58 67;58 68;58 69;58 70;58 73;58 74;58 75;58 76;58 79;58 80;58 81;59 50;59 51;59 52;59 53;59 54;59 55;59 56;59 57;59 58;59 59;59 60;59 61;59 62;59 63;59 64;59 65;59 66;59 67;59 68;59 69;59 70;59 74;59 75;59 76;59 79;59 80;59 81;60 50;60 51;60 52;60 53;60 54;60 55;60 56;60 57;60 58;60 59;60 60;60 61;60 62;60 63;60 64;60 65;60 66;60 67;60 68;60 69;60 70;60 74;60 75;60 76;60 79;60 80;60 81;61 50;61 51;61 52;61 53;61 54;61 55;61 56;61 57;61 58;61 59;61 60;61 61;61 62;61 63;61 64;61 65;61 66;61 67;61 68;61 69;61 75;61 76;61 80;61 81;62 52;62 53;62 54;62 55;62 56;62 57;62 58;62 59;62 60;62 61;62 62;62 63;62 64;62 65;62 66;62 67;62 68;62 69;62 75;62 76;62 80;62 81;63 54;63 55;63 56;63 57;63 58;63 59;63 60;63 61;63 62;63 63;63 64;63 65;63 66;63 67;63 68;63 69;63 75;63 76;63 80;63 81;64 54;64 55;64 56;64 57;64 58;64 59;64 60;64 61;64 62;64 63;64 64;64 65;64 66;64 67;64 68;64 69;64 75;64 76;64 80;64 81;65 54;65 55;65 56;65 57;65 58;65 59;65 60;65 61;65 62;65 63;65 64;65 65;65 66;65 67;65 68;65 69;65 75;65 76;65 80;65 81;66 54;66 55;66 56;66 57;66 58;66 59;66 60;66 61;66 62;66 63;66 64;66 65;66 66;66 67;66 68;66 69;66 70;66 71;66 75;66 76;66 77;67 54;67 55;67 56;67 57;67 58;67 59;67 60;67 61;67 62;67 63;67 64;67 65;67 66;67 67;67 68;67 69;67 70;67 71;67 75;67 76;67 77;68 54;68 55;68 56;68 57;68 58;68 59;68 60;68 61;68 62;68 63;68 64;68 65;68 66;68 67;68 68;68 69;68 70;68 71;68 72;68 76;68 77;69 55;69 56;69 57;69 58;69 59;69 60;69 61;69 62;69 63;69 64;69 65;69 66;69 67;69 68;69 69;69 70;69 71;69 72;69 73;69 76;70 54;70 55;70 56;70 57;70 58;70 59;70 60;70 61;70 62;70 63;70 64;70 65;70 66;70 67;70 68;70 69;70 70;70 71;70 72;70 73;71 54;71 55;71 56;71 57;71 58;71 59;71 60;71 61;71 62;71 63;71 64;71 65;71 66;71 67;71 68;71 69;71 70;71 71;71 72;71 73;72 53;72 54;72 55;72 56;72 57;72 58;72 59;72 60;72 61;72 62;72 63;72 64;72 65;72 66;72 67;72 68;72 69;72 70;72 71;72 72;73 53;73 54;73 55;73 56;73 57;73 58;73 59;73 60;73 61;73 62;73 63;73 64;73 65;73 66;73 67;73 68;73 69;73 70;73 71;73 72;73 73;74 53;74 54;74 55;74 56;74 57;74 58;74 59;74 60;74 61;74 62;74 63;74 64;74 65;74 66;74 67;74 68;74 69;74 70;74 71;74 72;74 73;75 53;75 54;75 55;75 56;75 57;75 58;75 59;75 60;75 61;75 62;75 63;75 64;75 65;75 66;75 67;75 68;75 69;75 70;75 71;75 72;75 73;76 53;76 54;76 55;76 56;76 57;76 58;76 59;76 60;76 61;76 62;76 63;76 64;76 65;76 66;76 67;76 68;76 69;76 70;76 71;76 72;76 73;76 79;77 53;77 54;77 55;77 56;77 57;77 58;77 59;77 60;77 61;77 62;77 63;77 64;77 65;77 66;77 67;77 68;77 69;77 70;77 71;77 72;77 79;78 51;78 52;78 53;78 54;78 55;78 56;78 57;78 58;78 59;78 60;78 61;78 62;78 63;78 64;78 65;78 66;78 67;78 68;78 69;78 70;78 71;78 72;78 73;78 80;78 81;79 50;79 51;79 52;79 53;79 54;79 55;79 56;79 57;79 58;79 59;79 60;79 61;79 62;79 63;79 64;79 65;79 66;79 67;79 68;79 69;79 70;79 71;79 72;79 73;79 74;79 80;79 81;80 50;80 51;80 52;80 53;80 54;80 55;80 56;80 57;80 58;80 59;80 60;80 61;80 62;80 63;80 64;80 65;80 66;80 67;80 68;80 69;80 70;80 71;80 72;80 73;80 80;81 50;81 51;81 52;81 53;81 54;81 55;81 56;81 57;81 58;81 59;81 60;81 61;81 62;81 63;81 64;81 65;81 66;81 67;81 68;81 69;81 70;81 71;81 72;81 73;81 75;81 76;82 50;82 51;82 52;82 53;82 54;82 55;82 56;82 57;82 58;82 59;82 60;82 61;82 62;82 63;82 64;82 65;82 66;82 67;82 68;82 69;82 70;82 71;82 72;82 73;82 74;82 75;82 76;82 77;83 50;83 51;83 52;83 53;83 54;83 55;83 56;83 57;83 58;83 59;83 60;83 61;83 62;83 63;83 64;83 65;83 66;83 67;83 68;83 69;83 70;83 71;83 72;83 73;83 74;83 75;83 76;84 49;84 50;84 51;84 52;84 53;84 54;84 55;84 56;84 57;84 58;84 59;84 60;84 61;84 62;84 63;84 64;84 65;84 66;84 67;84 68;84 69;84 70;84 71;84 72;84 73;84 74;85 49;85 50;85 51;85 52;85 53;85 54;85 55;85 56;85 57;85 58;85 59;85 60;85 61;85 62;85 63;85 64;85 65;85 66;85 67;85 68;85 69;85 70;85 71;85 72;85 73;85 74;86 49;86 50;86 51;86 52;86 53;86 54;86 55;86 56;86 57;86 58;86 59;86 60;86 61;86 62;86 63;86 64;86 65;86 66;86 67;86 68;86 69;86 70;86 71;86 72;86 73;86 74;86 75;87 48;87 49;87 50;87 51;87 52;87 53;87 54;87 55;87 56;87 57;87 58;87 59;87 60;87 61;87 62;87 63;87 64;87 65;87 66;87 67;87 68;87 69;87 70;87 71;87 72;87 73;87 74;87 75;88 49;88 50;88 51;88 52;88 53;88 54;88 55;88 56;88 57;88 58;88 59;88 60;88 61;88 62;88 63;88 64;88 65;88 66;88 67;88 68;88 69;88 70;88 71;88 72;88 73;88 74;88 75;88 76;88 77;89 49;89 50;89 51;89 52;89 53;89 54;89 55;89 56;89 57;89 58;89 59;89 60;89 61;89 62;89 63;89 64;89 65;89 66;89 67;89 68;89 69;89 70;89 71;89 72;89 73;89 74;89 75;89 76;89 77;89 81;90 49;90 50;90 51;90 52;90 53;90 54;90 55;90 56;90 57;90 58;90 59;90 60;90 61;90 62;90 63;90 64;90 65;90 66;90 67;90 68;90 69;90 70;90 71;90 72;90 73;90 74;90 75;90 76;90 77;90 79;90 80;90 81;91 50;91 51;91 52;91 53;91 54;91 55;91 56;91 57;91 58;91 59;91 60;91 61;91 62;91 63;91 64;91 65;91 66;91 67;91 68;91 69;91 70;91 71;91 72;91 73;91 74;91 75;91 76;91 77;91 79;91 80;91 81;92 50;92 51;92 52;92 53;92 54;92 55;92 56;92 57;92 58;92 59;92 60;92 61;92 62;92 63;92 64;92 65;92 66;92 67;92 68;92 69;92 70;92 71;92 72;92 73;92 74;92 75;92 76;92 77;92 78;92 79;92 80;93 50;93 51;93 52;93 53;93 54;93 55;93 56;93 57;93 58;93 59;93 60;93 61;93 62;93 63;93 64;93 65;93 66;93 67;93 68;93 69;93 70;93 71;93 72;93 73;93 74;93 75;93 76;93 78;93 79;93 80;93 81;94 49;94 50;94 51;94 52;94 53;94 54;94 55;94 56;94 57;94 58;94 59;94 60;94 61;94 62;94 63;94 64;94 65;94 66;94 67;94 68;94 69;94 70;94 71;94 72;94 73;94 74;94 75;94 76;94 78;94 79;94 80;94 81;95 49;95 50;95 51;95 52;95 53;95 54;95 55;95 56;95 57;95 58;95 59;95 60;95 61;95 62;95 63;95 64;95 65;95 66;95 67;95 68;95 69;95 70;95 71;95 72;95 73;95 74;95 75;95 76;95 77;95 78;95 79;95 80;95 81;96 49;96 50;96 51;96 52;96 53;96 54;96 55;96 56;96 57;96 58;96 59;96 60;96 61;96 62;96 63;96 64;96 65;96 66;96 67;96 68;96 69;96 70;96 71;96 72;96 73;96 74;96 75;96 76;96 77;96 78;96 79;96 80;96 81;97 49;97 50;97 51;97 52;97 53;97 54;97 55;97 56;97 57;97 58;97 59;97 60;97 61;97 62;97 63;97 64;97 65;97 66;97 67;97 68;97 69;97 70;97 71;97 72;97 73;97 74;97 75;97 76;97 77;97 78;97 79;97 80;98 49;98 50;98 51;98 52;98 53;98 54;98 55;98 56;98 57;98 58;98 59;98 60;98 61;98 62;98 63;98 64;98 65;98 66;98 67;98 68;98 69;98 70;98 71;98 72;98 73;98 74;98 75;98 76;98 78;98 79;98 80;99 51;99 52;99 53;99 54;99 55;99 56;99 57;99 58;99 59;99 60;99 61;99 62;99 63;99 64;99 65;99 66;99 67;99 68;99 69;99 70;99 71;99 72;99 73;99 74;99 75;99 76;99 77;99 78;99 79;99 80;100 51;100 52;100 53;100 54;100 55;100 56;100 57;100 58;100 59;100 60;100 61;100 62;100 63;100 64;100 65;100 66;100 67;100 68;100 69;100 70;100 71;100 72;100 73;100 74;100 75;100 76;100 77;100 78;100 79;101 51;101 52;101 53;101 54;101 55;101 56;101 57;101 58;101 59;101 60;101 61;101 62;101 63;101 64;101 65;101 66;101 67;101 68;101 69;101 70;101 71;101 72;101 73;101 74;101 75;101 76;101 77;101 78;101 79;102 50;102 51;102 52;102 53;102 54;102 55;102 56;102 57;102 58;102 59;102 60;102 61;102 62;102 63;102 64;102 65;102 66;102 67;102 68;102 69;102 70;102 71;102 72;102 73;102 74;102 75;102 76;102 77;102 78;102 79;103 50;103 51;103 52;103 53;103 54;103 55;103 56;103 57;103 58;103 59;103 60;103 61;103 62;103 63;103 64;103 65;103 66;103 67;103 68;103 69;103 70;103 71;103 72;103 73;103 74;103 75;103 76;103 77;103 78;103 79;104 50;104 51;104 52;104 53;104 54;104 55;104 56;104 57;104 58;104 59;104 60;104 61;104 62;104 63;104 64;104 65;104 66;104 67;104 68;104 69;104 70;104 71;104 72;104 73;104 74;104 75;104 76;104 77;104 78;104 79;105 50;105 51;105 52;105 53;105 54;105 55;105 56;105 57;105 58;105 59;105 60;105 61;105 62;105 63;105 64;105 65;105 66;105 67;105 68;105 69;105 70;105 71;105 72;105 73;105 74;105 75;105 76;105 77;105 78;105 79;106 49;106 50;106 51;106 52;106 53;106 54;106 55;106 56;106 57;106 58;106 59;106 60;106 61;106 62;106 63;106 64;106 65;106 66;106 67;106 68;106 69;106 70;106 71;106 72;106 73;106 74;106 75;106 76;106 77;106 78;107 49;107 50;107 51;107 52;107 53;107 54;107 55;107 56;107 57;107 58;107 59;107 60;107 61;107 62;107 63;107 64;107 65;107 66;107 67;107 68;107 69;107 70;107 71;107 72;107 73;107 74;107 75;107 76;107 77;107 78;108 49;108 50;108 51;108 52;108 53;108 54;108 55;108 56;108 57;108 58;108 59;108 60;108 61;108 62;108 63;108 64;108 65;108 66;108 67;108 68;108 69;108 70;108 71;108 72;108 73;108 74;108 75;108 76;108 77;109 49;109 50;109 51;109 52;109 53;109 54;109 55;109 56;109 57;109 58;109 59;109 60;109 61;109 62;109 63;109 64;109 65;109 66;109 67;109 68;109 69;109 70;109 71;109 72;109 73;109 74;109 75;109 76;110 49;110 50;110 51;110 52;110 53;110 54;110 55;110 56;110 57;110 58;110 59;110 60;110 61;110 62;110 63;110 64;110 65;110 66;110 67;110 68;110 69;110 70;110 71;110 72;110 73;110 74;110 75;110 76;111 49;111 50;111 51;111 52;111 53;111 54;111 55;111 56;111 57;111 58;111 59;111 60;111 61;111 62;111 63;111 64;111 65;111 66;111 67;111 68;111 69;111 70;111 71;111 72;111 73;111 74;111 75;111 76;112 49;112 50;112 51;112 52;112 53;112 54;112 55;112 56;112 57;112 58;112 59;112 60;112 61;112 62;112 63;112 64;112 65;112 66;112 67;112 68;112 69;112 70;112 71;112 72;112 73;112 74;112 75;112 76;113 49;113 50;113 51;113 52;113 53;113 54;113 55;113 56;113 57;113 58;113 59;113 60;113 61;113 62;113 63;113 64;113 65;113 66;113 67;113 68;113 69;113 70;113 71;113 72;113 73;113 74;113 75;113 76;114 50;114 51;114 52;114 53;114 54;114 55;114 56;114 57;114 58;114 59;114 60;114 61;114 62;114 63;114 64;114 65;114 66;114 67;114 68;114 69;114 70;114 71;114 72;114 73;114 75;115 49;115 50;115 51;115 52;115 53;115 54;115 55;115 56;115 57;115 58;115 59;115 60;115 61;115 62;115 63;115 64;115 65;115 66;115 67;115 68;115 69;115 70;115 71;115 72;115 73;115 74;116 49;116 50;116 51;116 52;116 53;116 54;116 55;116 56;116 57;116 58;116 59;116 60;116 61;116 62;116 63;116 64;116 65;116 66;116 67;116 68;116 69;116 70;116 71;116 72;116 73;116 74;117 49;117 50;117 51;117 52;117 53;117 54;117 55;117 56;117 57;117 58;117 59;117 60;117 61;117 62;117 63;117 64;117 65;117 66;117 67;117 68;117 69;117 70;117 71;117 72;117 73;118 49;118 50;118 51;118 52;118 53;118 54;118 55;118 56;118 57;118 58;118 59;118 60;118 61;118 62;118 63;118 64;118 65;118 66;118 67;118 68;118 69;118 70;118 71;118 72;118 73;119 49;119 50;119 51;119 52;119 53;119 54;119 55;119 56;119 57;119 58;119 59;119 60;119 61;119 62;119 63;119 64;119 65;119 66;119 67;119 68;119 69;119 70;119 71;119 72;119 73;120 51;120 52;120 53;120 54;120 55;120 56;120 57;120 58;120 59;120 60;120 61;120 62;120 63;120 64;120 65;120 66;120 67;120 68;120 69;120 70;120 71;120 72;120 73;120 74;121 53;121 54;121 55;121 56;121 57;121 58;121 59;121 60;121 61;121 62;121 63;121 64;121 65;121 66;121 67;121 68;121 69;121 70;121 71;121 72;121 73;122 53;122 54;122 55;122 56;122 57;122 58;122 59;122 60;122 61;122 62;122 63;122 64;122 65;122 66;122 67;122 68;122 69;122 70;122 71;122 72;122 73;123 53;123 54;123 55;123 56;123 57;123 58;123 59;123 60;123 61;123 62;123 63;123 64;123 65;123 66;123 67;123 68;123 69;123 70;123 71;123 72;123 73;123 74;124 52;124 53;124 54;124 55;124 56;124 57;124 58;124 59;124 60;124 61;124 62;124 63;124 64;124 65;124 66;124 67;124 68;124 69;124 70;124 71;124 72;124 73;124 74;125 52;125 53;125 54;125 55;125 56;125 57;125 58;125 59;125 60;125 61;125 62;125 63;125 64;125 65;125 66;125 67;125 68;125 69;125 70;125 71;125 72;125 73;126 50;126 51;126 52;126 53;126 54;126 55;126 56;126 57;126 58;126 59;126 60;126 61;126 62;126 63;126 64;126 65;126 66;126 67;126 68;126 69;126 70;126 71;126 72;126 73;127 49;127 50;127 51;127 52;127 53;127 54;127 55;127 56;127 57;127 58;127 59;127 60;127 61;127 62;127 63;127 64;127 65;127 66;127 67;127 68;127 69;127 70;127 71;127 72;127 73;128 49;128 50;128 51;128 52;128 53;128 54;128 55;128 56;128 57;128 58;128 59;128 60;128 61;128 62;128 63;128 64;128 65;128 66;128 67;128 68;128 69;128 70;128 71;128 72;128 73;129 48;129 49;129 50;129 51;129 52;129 53;129 54;129 55;129 56;129 57;129 58;129 59;129 60;129 61;129 62;129 63;129 64;129 65;129 66;129 67;129 68;129 69;129 70;129 71;129 72;129 73;130 42;130 43;130 44;130 47;130 48;130 49;130 50;130 51;130 52;130 53;130 54;130 55;130 56;130 57;130 58;130 59;130 60;130 61;130 62;130 63;130 64;130 65;130 66;130 67;130 68;130 69;130 70;130 71;131 42;131 43;131 44;131 45;131 47;131 48;131 49;131 50;131 51;131 52;131 53;131 54;131 55;131 56;131 57;131 58;131 59;131 60;131 61;131 62;131 63;131 64;131 65;131 66;131 67;131 68;131 69;131 70;131 71;132 42;132 43;132 44;132 45;132 47;132 48;132 49;132 50;132 51;132 52;132 53;132 54;132 55;132 56;132 57;132 58;132 59;132 60;132 61;132 62;132 63;132 64;132 65;132 66;132 67;132 68;132 69;132 70;132 71;132 72;133 42;133 43;133 44;133 45;133 46;133 47;133 48;133 49;133 50;133 51;133 52;133 53;133 54;133 55;133 56;133 57;133 58;133 59;133 60;133 61;133 62;133 63;133 64;133 65;133 66;133 67;133 68;133 69;133 70;133 71;133 72;134 42;134 43;134 44;134 45;134 46;134 47;134 48;134 49;134 50;134 51;134 52;134 53;134 54;134 55;134 56;134 57;134 58;134 59;134 60;134 61;134 62;134 63;134 64;134 65;134 66;134 67;134 68;134 69;134 70;134 71;135 43;135 44;135 45;135 46;135 47;135 48;135 49;135 50;135 51;135 52;135 53;135 54;135 55;135 56;135 57;135 58;135 59;135 60;135 61;135 62;135 63;135 64;135 65;135 66;135 67;135 68;135 69;135 70;135 71;135 73;135 74;135 75;136 44;136 45;136 46;136 47;136 48;136 49;136 50;136 51;136 52;136 53;136 54;136 55;136 56;136 57;136 58;136 59;136 60;136 61;136 62;136 63;136 64;136 65;136 66;136 67;136 68;136 69;136 70;136 71;136 73;136 74;136 75;137 45;137 46;137 47;137 48;137 49;137 50;137 51;137 52;137 53;137 54;137 55;137 56;137 57;137 58;137 59;137 60;137 61;137 62;137 63;137 64;137 65;137 66;137 67;137 68;137 69;137 70;137 71;137 74;137 75;137 76;138 46;138 47;138 48;138 49;138 50;138 51;138 52;138 53;138 54;138 55;138 56;138 57;138 58;138 59;138 60;138 61;138 62;138 63;138 64;138 65;138 66;138 67;138 68;138 69;138 70;138 71;138 74;138 75;138 76;139 47;139 48;139 49;139 50;139 51;139 52;139 53;139 54;139 56;139 57;139 58;139 59;139 60;139 61;139 62;139 63;139 64;139 65;139 66;139 67;139 68;139 69;139 70;139 71;139 72;139 73;139 74;139 75;139 76;140 48;140 49;140 50;140 51;140 52;140 53;140 54;140 57;140 58;140 59;140 60;140 61;140 62;140 63;140 64;140 65;140 66;140 67;140 68;140 69;140 70;140 71;140 72;140 73;140 74;140 75;140 76;141 45;141 46;141 47;141 48;141 49;141 50;141 51;141 52;141 53;141 58;141 59;141 60;141 61;141 62;141 63;141 64;141 65;141 66;141 67;141 68;141 69;141 70;141 71;141 72;141 73;141 74;141 75;141 76;142 45;142 46;142 47;142 48;142 49;142 50;142 51;142 52;142 53;142 54;142 58;142 59;142 60;142 61;142 62;142 63;142 64;142 65;142 66;142 67;142 68;142 69;142 70;142 71;142 72;142 73;142 74;142 75;142 76;143 45;143 46;143 47;143 48;143 49;143 50;143 51;143 52;143 53;143 54;143 56;143 59;143 60;143 61;143 62;143 63;143 64;143 65;143 66;143 67;143 68;143 69;143 70;143 71;143 72;143 73;143 74;143 75;144 48;144 49;144 50;144 59;144 60;144 61;144 62;144 63;144 64;144 65;144 66;144 67;144 68;144 69;144 70;144 71;144 72;144 74;144 75;145 43;145 44;145 59;145 60;145 61;145 62;145 63;145 64;145 65;145 66;145 67;145 68;145 69;145 70;145 71;145 72;145 75;146 43;146 44;146 59;146 60;146 61;146 62;146 63;146 64;146 65;146 66;146 67;146 68;146 69;146 70;146 71;146 72;146 74;146 75;147 43;147 44;147 45;147 59;147 60;147 61;147 62;147 63;147 64;147 65;147 66;147 67;147 68;147 69;147 70;147 71;147 72;147 74;147 75;148 44;148 45;148 59;148 60;148 61;148 62;148 63;148 64;148 65;148 66;148 67;148 68;148 69;148 70;148 71;148 72;148 74;148 75;148 76;149 45;149 46;149 59;149 60;149 61;149 62;149 63;149 64;149 65;149 66;149 67;149 68;149 69;149 70;149 71;149 72;149 74;149 75;149 76;150 45;150 46;150 58;150 59;150 60;150 61;150 62;150 63;150 64;150 65;150 66;150 67;150 68;150 69;150 70;150 71;150 72;150 74;150 75;151 46;151 47;151 58;151 59;151 60;151 61;151 62;151 63;151 64;151 65;151 66;151 67;151 68;151 69;151 70;151 71;151 75;152 46;152 47;152 58;152 59;152 60;152 61;152 62;152 63;152 64;152 65;152 66;152 67;152 68;152 69;152 70;152 71;152 75;152 76;153 47;153 48;153 49;153 58;153 59;153 60;153 61;153 62;153 63;153 64;153 65;153 66;153 67;153 68;153 69;153 70;153 71;154 48;154 49;154 50;154 58;154 59;154 60;154 61;154 62;154 63;154 64;154 65;154 66;154 67;154 68;154 69;154 70;154 71;155 49;155 50;155 51;155 53;155 54;155 55;155 56;155 59;155 60;155 61;155 62;155 63;155 64;155 65;155 66;155 67;155 68;155 69;155 70;155 71;156 50;156 51;156 52;156 53;156 54;156 55;156 56;156 57;156 60;156 61;156 62;156 63;156 64;156 65;156 66;156 67;156 68;156 69;156 70;156 71;156 76;156 77;157 50;157 51;157 52;157 53;157 54;157 55;157 56;157 57;157 58;157 61;157 62;157 63;157 64;157 65;157 66;157 67;157 68;157 69;157 70;157 71;157 76;158 51;158 52;158 53;158 54;158 55;158 56;158 57;158 58;158 61;158 62;158 63;158 64;158 65;158 66;158 67;158 68;158 69;158 70;158 71;158 76;159 52;159 53;159 54;159 55;159 56;159 57;159 58;159 59;159 60;159 61;159 62;159 63;159 64;159 65;159 66;159 67;159 68;159 69;159 70;160 52;160 53;160 54;160 55;160 56;160 57;160 58;160 59;160 60;160 61;160 62;160 63;160 64;160 65;160 66;160 67;160 68;160 69;160 70;160 71;161 54;161 55;161 56;161 57;161 58;161 59;161 60;161 61;161 62;161 63;161 64;161 65;161 66;161 67;161 68;161 69;161 70;161 71;162 54;162 55;162 56;162 57;162 58;162 59;162 60;162 61;162 62;162 63;162 64;162 65;162 66;162 67;162 68;162 69;162 70;163 55;163 56;163 57;163 58;163 59;163 60;163 61;163 62;163 63;163 64;163 65;163 66;163 67;163 68;163 69;164 58;164 59;164 60;164 61;164 62;164 63;164 64;164 65;164 66;164 67;164 68;164 69;165 54;165 55;165 59;165 60;165 61;165 62;165 63;165 64;165 65;165 66;165 67;165 68;165 69;166 54;166 55;166 59;166 60;166 61;166 62;166 63;166 64;166 65;166 66;166 67;166 68;166 69;167 54;167 60;167 61;167 62;167 63;167 64;167 65;167 66;167 67;167 68;167 69;167 70;168 54;168 60;168 61;168 62;168 63;168 64;168 65;168 66;168 67;168 68;168 69;168 70;169 59;169 60;169 61;169 62;169 63;169 64;169 65;169 66;169 67;169 68;169 69;169 70;170 59;170 60;170 61;170 62;170 63;170 64;170 65;170 66;170 67;170 68;170 69;170 70;171 60;171 61;171 62;171 63;171 64;171 65;171 66;171 67;171 68;171 69;171 70;172 60;172 61;172 62;172 63;172 64;172 65;172 66;172 67;172 68;172 69;172 70;173 61;173 62;173 63;173 64;173 65;173 66;173 67;173 68;173 69;173 70;174 61;174 62;174 63;174 64;174 65;174 66;174 67;174 68;174 69;175 61;175 62;175 63;175 64;175 65;175 66;175 67;175 68;175 69;176 62;176 63;176 64;176 65;176 66;176 67;176 68;176 69;177 62;177 63;177 64;177 65;177 66;177 67;177 68;177 69;178 62;178 63;178 64;178 65;178 66;178 67;178 68;178 69;178 70;178 71;179 62;179 63;179 64;179 65;179 66;179 67;179 68;179 69;179 70;179 71;180 64;180 65;180 66;180 67;180 68;180 69;180 70;180 71 @@ -9674,7 +9675,7 @@ - + -73 -53;-73 -52;-73 -51;-73 -50;-73 -49;-73 -48;-73 -47;-73 -46;-73 -45;-73 -44;-73 -43;-73 -41;-72 -53;-72 -52;-72 -51;-72 -50;-72 -49;-72 -48;-72 -47;-72 -46;-72 -45;-72 -44;-72 -43;-72 -42;-72 -41;-72 -40;-72 -39;-72 -38;-72 -37;-71 -53;-71 -52;-71 -51;-71 -50;-71 -49;-71 -48;-71 -47;-71 -46;-71 -45;-71 -44;-71 -43;-71 -42;-71 -41;-71 -40;-71 -39;-71 -38;-71 -37;-71 -36;-71 -35;-71 -34;-71 -33;-71 -32;-71 -31;-71 -30;-70 -53;-70 -52;-70 -51;-70 -50;-70 -49;-70 -48;-70 -47;-70 -46;-70 -45;-70 -44;-70 -43;-70 -42;-70 -41;-70 -40;-70 -39;-70 -38;-70 -37;-70 -36;-70 -35;-70 -34;-70 -33;-70 -32;-70 -31;-70 -30;-70 -29;-70 -28;-69 -55;-69 -54;-69 -53;-69 -52;-69 -51;-69 -50;-69 -49;-69 -48;-69 -47;-69 -46;-69 -45;-69 -44;-69 -43;-69 -42;-69 -41;-69 -40;-69 -39;-69 -38;-69 -37;-69 -36;-69 -35;-69 -34;-69 -33;-69 -32;-69 -31;-69 -30;-69 -29;-69 -28;-69 -27;-69 -26;-69 -25;-68 -55;-68 -54;-68 -51;-68 -50;-68 -49;-68 -48;-68 -47;-68 -46;-68 -45;-68 -44;-68 -43;-68 -42;-68 -41;-68 -40;-68 -39;-68 -38;-68 -37;-68 -36;-68 -35;-68 -34;-68 -33;-68 -32;-68 -31;-68 -30;-68 -29;-68 -28;-68 -27;-68 -26;-68 -25;-68 -24;-68 -23;-67 -55;-67 -49;-67 -48;-67 -47;-67 -46;-67 -45;-67 -44;-67 -43;-67 -42;-67 -41;-67 -40;-67 -39;-67 -38;-67 -37;-67 -36;-67 -35;-67 -34;-67 -33;-67 -32;-67 -31;-67 -30;-67 -29;-67 -28;-67 -27;-67 -26;-67 -25;-67 -24;-67 -23;-67 -22;-66 -55;-66 -49;-66 -48;-66 -47;-66 -46;-66 -45;-66 -44;-66 -43;-66 -42;-66 -41;-66 -40;-66 -39;-66 -38;-66 -37;-66 -36;-66 -35;-66 -34;-66 -33;-66 -32;-66 -31;-66 -30;-66 -29;-66 -28;-66 -27;-66 -26;-66 -25;-66 -24;-66 -23;-66 -22;-65 -55;-65 -44;-65 -43;-65 -42;-65 -41;-65 -40;-65 -39;-65 -38;-65 -37;-65 -36;-65 -35;-65 -34;-65 -33;-65 -32;-65 -31;-65 -30;-65 -29;-65 -28;-65 -27;-65 -26;-65 -25;-65 -24;-65 -23;-65 -22;-64 -55;-64 -43;-64 -42;-64 -41;-64 -40;-64 -39;-64 -38;-64 -37;-64 -36;-64 -35;-64 -34;-64 -33;-64 -32;-64 -31;-64 -30;-64 -29;-64 -28;-64 -27;-64 -26;-64 -25;-64 -24;-64 -23;-64 -22;-63 -42;-63 -41;-63 -40;-63 -39;-63 -38;-63 -37;-63 -36;-63 -35;-63 -34;-63 -33;-63 -32;-63 -31;-63 -30;-63 -29;-63 -28;-63 -27;-63 -26;-63 -25;-63 -24;-63 -23;-63 -22;-62 -41;-62 -40;-62 -39;-62 -38;-62 -37;-62 -36;-62 -35;-62 -34;-62 -33;-62 -32;-62 -31;-62 -30;-62 -29;-62 -28;-62 -27;-62 -26;-62 -25;-62 -24;-62 -23;-61 -40;-61 -39;-61 -38;-61 -37;-61 -36;-61 -35;-61 -34;-61 -33;-61 -32;-61 -31;-61 -30;-61 -29;-61 -28;-61 -27;-61 -26;-61 -25;-61 -24;-60 -39;-60 -38;-60 -37;-60 -36;-60 -35;-60 -34;-60 -33;-60 -32;-60 -31;-60 -30;-60 -29;-60 -28;-60 -27;-60 -26;-60 -25;-60 -24;-59 -39;-59 -38;-59 -37;-59 -36;-59 -35;-59 -34;-59 -33;-59 -32;-59 -31;-59 -30;-59 -29;-59 -28;-59 -27;-59 -26;-59 -25;-58 -39;-58 -38;-58 -37;-58 -36;-58 -35;-58 -33;-58 -32;-58 -31;-58 -30;-58 -29;-58 -28;-58 -27;-58 -26;-58 -25;-57 -38;-57 -37;-57 -30;-57 -29;-57 -28;-56 -29;-56 -28;-56 -27;-55 -28;-55 -27;-55 -26;-54 -28;-54 -27;-54 -26 diff --git a/DataExtractionOSM/src/net/osmand/plus/download/IndexItem.java b/DataExtractionOSM/src/net/osmand/plus/download/IndexItem.java index bf174a3c58..f0701e1049 100644 --- a/DataExtractionOSM/src/net/osmand/plus/download/IndexItem.java +++ b/DataExtractionOSM/src/net/osmand/plus/download/IndexItem.java @@ -42,7 +42,7 @@ public class IndexItem { this.type = type; } - public String getVisibleDescription(ClientContext ctx, DownloadActivityType type) { + public String getVisibleDescription(ClientContext ctx) { String s = ""; //$NON-NLS-1$ if (type == DownloadActivityType.ROADS_FILE) { return ctx.getString(R.string.download_roads_only_item); @@ -100,6 +100,10 @@ public class IndexItem { public String getDate() { return date; } + + public String getSizeDescription() { + return size + " MB"; + } public String getSize() { return size; @@ -203,6 +207,9 @@ public class IndexItem { if (getType() == DownloadActivityType.ROADS_FILE) { s = "-roads" + s; } + if(l == -1) { + l = e.length(); + } return e.substring(0, l) + s; } } \ No newline at end of file diff --git a/DataExtractionOSM/src/net/osmand/plus/download/IndexItemCategory.java b/DataExtractionOSM/src/net/osmand/plus/download/IndexItemCategory.java index 10533e1b67..1909ed0857 100644 --- a/DataExtractionOSM/src/net/osmand/plus/download/IndexItemCategory.java +++ b/DataExtractionOSM/src/net/osmand/plus/download/IndexItemCategory.java @@ -38,37 +38,39 @@ public class IndexItemCategory implements Comparable { } else if (lc.contains(".ttsvoice.zip")) { nameId = R.string.index_name_tts_voice; order = 2; - } else if (lc.startsWith("us")) { + } else if (lc.startsWith("us") || + (lc.contains("united states") && lc.startsWith("north-america")) ) { nameId = R.string.index_name_us; order = 31; - } else if (lc.contains("_northamerica_")) { + } else if (lc.contains("northamerica") || lc.contains("north-america")) { nameId = R.string.index_name_north_america; order = 30; - } else if (lc.contains("_centralamerica_") || lc.contains("central-america")) { + } else if (lc.contains("centralamerica") || lc.contains("central-america") + || lc.contains("caribbean")) { nameId = R.string.index_name_central_america; order = 40; - } else if (lc.contains("_southamerica_") || lc.contains("south-america")) { + } else if (lc.contains("southamerica") || lc.contains("south-america")) { nameId = R.string.index_name_south_america; order = 45; } else if (lc.startsWith("france_")) { nameId = R.string.index_name_france; order = 17; - } else if (lc.startsWith("germany_")) { + } else if (lc.startsWith("germany_") || lc.contains("germany")) { nameId = R.string.index_name_germany; order = 16; - } else if (lc.contains("_europe_")) { + } else if (lc.contains("_europe_") || lc.startsWith("europe")) { nameId = R.string.index_name_europe; order = 15; - } else if (lc.startsWith("russia_")) { + } else if (lc.startsWith("russia")) { nameId = R.string.index_name_russia; order = 18; } else if (lc.contains("africa")) { nameId = R.string.index_name_africa; order = 80; - } else if (lc.contains("_asia_")) { + } else if (lc.contains("_asia_")|| lc.startsWith("asia")) { nameId = R.string.index_name_asia; order = 50; - } else if (lc.contains("_oceania_") || lc.contains("australia")) { + } else if (lc.contains("oceania") || lc.contains("australia")) { nameId = R.string.index_name_oceania; order = 70; } else if (lc.contains("_wiki_")) { diff --git a/DataExtractionOSM/src/net/osmand/plus/download/SrtmIndexItem.java b/DataExtractionOSM/src/net/osmand/plus/download/SrtmIndexItem.java index efc8199703..e5cd79b9cc 100644 --- a/DataExtractionOSM/src/net/osmand/plus/download/SrtmIndexItem.java +++ b/DataExtractionOSM/src/net/osmand/plus/download/SrtmIndexItem.java @@ -1,29 +1,33 @@ package net.osmand.plus.download; import java.io.File; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import net.osmand.LogUtil; +import net.osmand.map.RegionCountry; import net.osmand.plus.ClientContext; import net.osmand.plus.R; -import org.apache.commons.logging.Log; - public class SrtmIndexItem extends IndexItem { - private static final Log log = LogUtil.getLog(SrtmIndexItem.class); - - public SrtmIndexItem(String fileName, String description, String date, String size) { - super(fileName, description, date, size, null); + + private RegionCountry item; + public SrtmIndexItem(RegionCountry item) { + super(fileName(item), "Elevation lines", "", item.tiles.size()+"", null); + this.item = item; type = DownloadActivityType.SRTM_FILE; } + + private static String fileName(RegionCountry r) { + if(r.parent == null) { + return r.continentName + " " + r.name; + } else { + return r.parent.continentName + " " + r.parent.name + " " + r.name; + } + } @Override public boolean isAccepted() { return true; } - + @Override public DownloadEntry createDownloadEntry(ClientContext ctx, DownloadActivityType type) { File parent = ctx.getAppDir(); @@ -37,24 +41,34 @@ public class SrtmIndexItem extends IndexItem { entry.baseName = getBasename(); // entry.fileToSave = new File(parent, entry.baseName + toSavePostfix); // entry.unzip = unzipDir; - SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy"); //$NON-NLS-1$ - try { - Date d = format.parse(date); - entry.dateModified = d.getTime(); - } catch (ParseException e1) { - log.error("ParseException", e1); - } - try { - entry.sizeMB = Double.parseDouble(size); - } catch (NumberFormatException e1) { - log.error("ParseException", e1); - } - entry.parts = 1; - if (parts != null) { - entry.parts = Integer.parseInt(parts); - } + entry.dateModified = System.currentTimeMillis(); + entry.parts = Integer.parseInt(size); // entry.fileToUnzip = new File(parent, entry.baseName + toCheckPostfix); } return entry; } + + @Override + public String convertServerFileNameToLocal() { + return fileName+".nonexistent"; + } + + @Override + public String getBasename() { + return fileName; + } + + @Override + public String getSizeDescription() { + return size + " parts"; + } + + @Override + public String getVisibleName() { + if(item.parent == null) { + return item.name + "\n"; + } else { + return item.parent.name +"\n"+item.name; + } + } } diff --git a/DataExtractionOSM/src/osmand_region_info.proto b/DataExtractionOSM/src/osmand_region_info.proto new file mode 100644 index 0000000000..ca4644c03e --- /dev/null +++ b/DataExtractionOSM/src/osmand_region_info.proto @@ -0,0 +1,24 @@ +// Highly coupled with protobuf 2.3.0 +option java_package = "net.osmand.map"; +//protoc --java_out=DataExtractionOSM/src DataExtractionOSM/src/osmand_region_info.proto + +// C++ # cd OsmAnd-Kernel +// # protoc --proto_path=../DataExtractionOSM/src --cpp_out=osmand/src/proto ../DataExtractionOSM/src/osmand_region_info.proto + +option optimize_for = LITE_RUNTIME; +message OsmAndRegionInfo { + + optional OsmAndRegions regionInfo = 1; +} + +message OsmAndRegions { + + repeated OsmAndRegion regions = 3; +} +message OsmAndRegion { + optional string continentName = 1; + required string name = 2; + repeated int32 degX = 4 [packed = true]; + repeated int32 degY = 5 [packed = true]; + repeated OsmAndRegion subregions = 8; +} diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index baceadfc29..f835b455b5 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -9,6 +9,14 @@ 1. All your modified/created strings are in the top of the file (to make easier find what\'s translated). PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy --> + SRTM plugin (TODO description) + SRTM plugin + Other maps + Roads + SRTM maps + Regular maps + Roads-only maps + Hide boundaries Suppress display of regional boundaries (admin levels 5-9) OsMoDroid plugin has an old version and needs to be updated. @@ -30,9 +38,6 @@ Search villages/postcode Select when to display roads-only maps: Roads-only maps - Roads - Regular maps - Roads-only maps Run the application in safe mode (using slower Android instead of native code). Safe mode The application is running in safe mode (disable it in the Settings). diff --git a/OsmAnd/src/net/osmand/plus/OsmandPlugin.java b/OsmAnd/src/net/osmand/plus/OsmandPlugin.java index e4804e23e1..302ececf8e 100644 --- a/OsmAnd/src/net/osmand/plus/OsmandPlugin.java +++ b/OsmAnd/src/net/osmand/plus/OsmandPlugin.java @@ -17,6 +17,7 @@ import net.osmand.plus.osmedit.OsmEditingPlugin; import net.osmand.plus.osmodroid.OsMoDroidPlugin; import net.osmand.plus.parkingpoint.ParkingPositionPlugin; import net.osmand.plus.rastermaps.OsmandRasterMapsPlugin; +import net.osmand.plus.srtmplugin.SRTMPlugin; import net.osmand.plus.views.OsmandMapTileView; import org.apache.commons.logging.Log; @@ -67,6 +68,7 @@ public abstract class OsmandPlugin { installedPlugins.add(new AccessibilityPlugin(app)); installedPlugins.add(new OsmEditingPlugin(app)); installedPlugins.add(new OsmandDevelopmentPlugin(app)); + installedPlugins.add(new SRTMPlugin(app)); installParkingPlugin(app); installOsmodroidPlugin(app); diff --git a/OsmAnd/src/net/osmand/plus/activities/DownloadIndexActivity.java b/OsmAnd/src/net/osmand/plus/activities/DownloadIndexActivity.java index 1c85c5679c..0309e3bcb1 100644 --- a/OsmAnd/src/net/osmand/plus/activities/DownloadIndexActivity.java +++ b/OsmAnd/src/net/osmand/plus/activities/DownloadIndexActivity.java @@ -27,8 +27,11 @@ import net.osmand.LogUtil; import net.osmand.Version; import net.osmand.access.AccessibleToast; import net.osmand.data.IndexConstants; +import net.osmand.map.RegionCountry; +import net.osmand.map.RegionRegistry; import net.osmand.plus.ClientContext; import net.osmand.plus.OsmandApplication; +import net.osmand.plus.OsmandPlugin; import net.osmand.plus.OsmandSettings; import net.osmand.plus.OsmandSettings.OsmandPreference; import net.osmand.plus.ProgressDialogImplementation; @@ -42,6 +45,8 @@ import net.osmand.plus.download.DownloadIndexAdapter; import net.osmand.plus.download.DownloadIndexListThread; import net.osmand.plus.download.DownloadTracker; import net.osmand.plus.download.IndexItem; +import net.osmand.plus.download.SrtmIndexItem; +import net.osmand.plus.srtmplugin.SRTMPlugin; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.Dialog; @@ -185,8 +190,7 @@ public class DownloadIndexActivity extends OsmandExpandableListActivity { menu.add(0, SELECT_ALL_ID, 0, R.string.select_all); menu.add(0, DESELECT_ALL_ID, 0, R.string.deselect_all); menu.add(0, FILTER_EXISTING_REGIONS, 0, R.string.filter_existing_indexes); - menu.add(0, DOWNLOAD_FILES_TYPE, 0, getType() == DownloadActivityType.NORMAL_FILE ? - R.string.download_roads_only_maps : R.string.download_regular_maps ); + menu.add(0, DOWNLOAD_FILES_TYPE, 0, R.string.download_select_map_types); } return true; } @@ -233,12 +237,7 @@ public class DownloadIndexActivity extends OsmandExpandableListActivity { } listAdapter.setIndexFiles(filtered); } else if (item.getItemId() == DOWNLOAD_FILES_TYPE) { - if(type == DownloadActivityType.ROADS_FILE){ - changeType(DownloadActivityType.NORMAL_FILE); - } else { - changeType(DownloadActivityType.ROADS_FILE); - } - + selectDownloadType(); } else if(item.getItemId() == DESELECT_ALL_ID){ entriesToDownload.clear(); listAdapter.notifyDataSetInvalidated(); @@ -251,6 +250,35 @@ public class DownloadIndexActivity extends OsmandExpandableListActivity { } + private void selectDownloadType() { + Builder bld = new AlertDialog.Builder(this); + String[] items; + if(OsmandPlugin.getEnabledPlugin(SRTMPlugin.class) != null){ + items = new String[]{ + getString(R.string.download_regular_maps), + getString(R.string.download_roads_only_maps), + getString(R.string.download_srtm_maps)}; + } else { + items = new String[]{ + getString(R.string.download_regular_maps), + getString(R.string.download_roads_only_maps)}; + } + bld.setItems(items, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if(which == 0){ + changeType(DownloadActivityType.NORMAL_FILE); + } else if(which == 1){ + changeType(DownloadActivityType.ROADS_FILE); + } else if(which == 2){ + changeType(DownloadActivityType.SRTM_FILE); + } + } + }); + bld.show(); + } + + public void changeType(final DownloadActivityType tp) { if (downloadListIndexThread != null) { type = tp; @@ -266,6 +294,18 @@ public class DownloadIndexActivity extends OsmandExpandableListActivity { public List getFilteredByType() { final List filtered = new ArrayList(); + if(type == DownloadActivityType.SRTM_FILE){ + List countries = RegionRegistry.getRegionRegistry().getCountries(); + for(RegionCountry rc : countries){ + if(rc.tiles.size() > 50){ + for(RegionCountry ch : rc.getSubRegions()) { + filtered.add(new SrtmIndexItem(ch)); + } + } else { + filtered.add(new SrtmIndexItem(rc)); + } + } + } for (IndexItem file : downloadListIndexThread.getCachedIndexFiles()) { if (file.getType() == type) { filtered.add(file); diff --git a/OsmAnd/src/net/osmand/plus/download/DownloadIndexAdapter.java b/OsmAnd/src/net/osmand/plus/download/DownloadIndexAdapter.java index ee36ccd401..a8d171a7e0 100644 --- a/OsmAnd/src/net/osmand/plus/download/DownloadIndexAdapter.java +++ b/OsmAnd/src/net/osmand/plus/download/DownloadIndexAdapter.java @@ -209,8 +209,10 @@ public class DownloadIndexAdapter extends OsmandBaseExpandableListAdapter implem TextView item = (TextView) row.findViewById(R.id.download_item); TextView description = (TextView) row.findViewById(R.id.download_descr); IndexItem e = (IndexItem) getChild(groupPosition, childPosition); - item.setText((e.getVisibleDescription(downloadActivity.getClientContext(), downloadActivity.getType()) + "\n" + e.getVisibleName()).trim()); //$NON-NLS-1$ - description.setText(e.getDate() + "\n" + e.getSize() + " MB"); + String eName = e.getVisibleDescription(downloadActivity.getClientContext()) + "\n" + e.getVisibleName(); + item.setText(eName.trim()); //$NON-NLS-1$ + String d = e.getDate() + "\n" + e.getSizeDescription(); + description.setText(d.trim()); CheckBox ch = (CheckBox) row.findViewById(R.id.check_download_item); ch.setChecked(downloadActivity.getEntriesToDownload().containsKey(e.getFileName())); diff --git a/OsmAnd/src/net/osmand/plus/download/DownloadIndexListThread.java b/OsmAnd/src/net/osmand/plus/download/DownloadIndexListThread.java index 469783cf8e..fe052a8cec 100644 --- a/OsmAnd/src/net/osmand/plus/download/DownloadIndexListThread.java +++ b/OsmAnd/src/net/osmand/plus/download/DownloadIndexListThread.java @@ -4,8 +4,11 @@ package net.osmand.plus.download; import java.util.List; import net.osmand.access.AccessibleToast; +import net.osmand.map.RegionRegistry; +import net.osmand.plus.OsmandPlugin; import net.osmand.plus.R; import net.osmand.plus.activities.DownloadIndexActivity; +import net.osmand.plus.srtmplugin.SRTMPlugin; import android.content.Context; import android.view.View; import android.widget.Toast; @@ -36,6 +39,10 @@ public class DownloadIndexListThread extends Thread { @Override public void run() { indexFiles = DownloadOsmandIndexesHelper.getIndexesList(ctx); + if(OsmandPlugin.getEnabledPlugin(SRTMPlugin.class) != null){ + // init + RegionRegistry.getRegionRegistry(); + } if (uiActivity != null) { uiActivity.removeDialog(DownloadIndexActivity.DIALOG_PROGRESS_LIST); uiActivity.runOnUiThread(new Runnable() { diff --git a/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java b/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java new file mode 100644 index 0000000000..aab60b0cc4 --- /dev/null +++ b/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java @@ -0,0 +1,51 @@ +package net.osmand.plus.srtmplugin; + +import net.osmand.LogUtil; +import net.osmand.plus.OsmandApplication; +import net.osmand.plus.OsmandPlugin; +import net.osmand.plus.R; +import net.osmand.plus.activities.MapActivity; + +import org.apache.commons.logging.Log; + +public class SRTMPlugin extends OsmandPlugin { + + public static final String ID = "osmand.srtm"; + private static final Log log = LogUtil.getLog(SRTMPlugin.class); + private OsmandApplication app; + + @Override + public String getId() { + return ID; + } + + public SRTMPlugin(OsmandApplication app) { + this.app = app; + + } + + @Override + public String getDescription() { + return app.getString(R.string.srtm_plugin_description); + } + + @Override + public String getName() { + return app.getString(R.string.srtm_plugin_name); + } + + @Override + public boolean init(final OsmandApplication app) { + return true; + } + + @Override + public void registerLayers(MapActivity activity) { + + } + + @Override + public void disable(OsmandApplication app) { + } + +}