Introduce multiname feature
This commit is contained in:
parent
8ee3f3f05b
commit
4844bb98d6
5 changed files with 144 additions and 141 deletions
|
@ -25,15 +25,19 @@ import net.osmand.Algoritms;
|
||||||
import net.osmand.binary.BinaryMapIndexReader;
|
import net.osmand.binary.BinaryMapIndexReader;
|
||||||
import net.osmand.binary.OsmandOdb;
|
import net.osmand.binary.OsmandOdb;
|
||||||
import net.osmand.binary.OsmandOdb.CityIndex;
|
import net.osmand.binary.OsmandOdb.CityIndex;
|
||||||
|
import net.osmand.binary.OsmandOdb.MapDataBlock;
|
||||||
import net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox;
|
import net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapDataBox;
|
||||||
import net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule;
|
import net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapEncodingRule;
|
||||||
import net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel;
|
import net.osmand.binary.OsmandOdb.OsmAndMapIndex.MapRootLevel;
|
||||||
|
import net.osmand.binary.OsmandOdb.IndexedStringTable;
|
||||||
|
import net.osmand.binary.OsmandOdb.OsmAndMapIndex;
|
||||||
import net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom;
|
import net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom;
|
||||||
import net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex;
|
import net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex;
|
||||||
import net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom;
|
import net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom;
|
||||||
import net.osmand.binary.OsmandOdb.OsmAndTransportIndex;
|
import net.osmand.binary.OsmandOdb.OsmAndTransportIndex;
|
||||||
import net.osmand.binary.OsmandOdb.StreetIndex;
|
import net.osmand.binary.OsmandOdb.StreetIndex;
|
||||||
import net.osmand.binary.OsmandOdb.StreetIntersection;
|
import net.osmand.binary.OsmandOdb.StreetIntersection;
|
||||||
|
import net.osmand.binary.OsmandOdb.StringTable;
|
||||||
import net.osmand.binary.OsmandOdb.TransportRoute;
|
import net.osmand.binary.OsmandOdb.TransportRoute;
|
||||||
import net.osmand.binary.OsmandOdb.TransportRouteStop;
|
import net.osmand.binary.OsmandOdb.TransportRouteStop;
|
||||||
import net.osmand.binary.OsmandOdb.OsmAndCategoryTable.Builder;
|
import net.osmand.binary.OsmandOdb.OsmAndCategoryTable.Builder;
|
||||||
|
@ -78,10 +82,6 @@ public class BinaryMapIndexWriter {
|
||||||
|
|
||||||
}
|
}
|
||||||
private Stack<Bounds> stackBounds = new Stack<Bounds>();
|
private Stack<Bounds> stackBounds = new Stack<Bounds>();
|
||||||
// needed for map tree
|
|
||||||
private Stack<Long> stackBaseIds = new Stack<Long>();
|
|
||||||
private Stack<Map<String, Integer>> stackStringTable = new Stack<Map<String, Integer>>();
|
|
||||||
|
|
||||||
|
|
||||||
// internal constants to track state of index writing
|
// internal constants to track state of index writing
|
||||||
private Stack<Integer> state = new Stack<Integer>();
|
private Stack<Integer> state = new Stack<Integer>();
|
||||||
|
@ -271,35 +271,7 @@ public class BinaryMapIndexWriter {
|
||||||
|
|
||||||
public void endWriteMapTreeElement() throws IOException{
|
public void endWriteMapTreeElement() throws IOException{
|
||||||
popState(MAP_TREE);
|
popState(MAP_TREE);
|
||||||
|
|
||||||
stackBounds.pop();
|
stackBounds.pop();
|
||||||
|
|
||||||
// TODO move to box
|
|
||||||
// Long l = stackBaseIds.pop();
|
|
||||||
// if(l != -1){
|
|
||||||
// codedOutStream.writeTag(OsmandOdb.MapTree.BASEID_FIELD_NUMBER, WireFormat.FieldType.UINT64.getWireType());
|
|
||||||
// codedOutStream.writeUInt64NoTag(l);
|
|
||||||
// }
|
|
||||||
// if(map != null){
|
|
||||||
//
|
|
||||||
// int i = 0;
|
|
||||||
// int size = 0;
|
|
||||||
// for(String s : map.keySet()){
|
|
||||||
// Integer integer = map.get(s);
|
|
||||||
// if(integer != i){
|
|
||||||
// throw new IllegalStateException();
|
|
||||||
// }
|
|
||||||
// i++;
|
|
||||||
// size += CodedOutputStream.computeStringSize(OsmandOdb.StringTable.S_FIELD_NUMBER, s);
|
|
||||||
// }
|
|
||||||
// codedOutStream.writeTag(OsmandOdb.MapTree.STRINGTABLE_FIELD_NUMBER, WireFormat.FieldType.MESSAGE.getWireType());
|
|
||||||
// STRING_TABLE_SIZE += CodedOutputStream.computeTagSize(OsmandOdb.MapTree.STRINGTABLE_FIELD_NUMBER) +
|
|
||||||
// CodedOutputStream.computeRawVarint32Size(size) + size;
|
|
||||||
// codedOutStream.writeRawVarint32(size);
|
|
||||||
// for(String s : map.keySet()){
|
|
||||||
// codedOutStream.writeString(OsmandOdb.StringTable.S_FIELD_NUMBER, s);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
writeInt32Size();
|
writeInt32Size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -319,15 +291,36 @@ public class BinaryMapIndexWriter {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void writeMapData(long id, byte[] nodes, byte[] types, String name, int highwayAttributes, byte[] restrictions) throws IOException{
|
public MapDataBlock.Builder createWriteMapDataBlock(long baseid) throws IOException{
|
||||||
assert state.peek() == MAP_TREE;
|
MapDataBlock.Builder builder = MapDataBlock.newBuilder();
|
||||||
|
builder.setBaseId(baseid);
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void writeMapDataBlock(MapDataBlock.Builder builder, Map<String, Integer> stringTable, BinaryFileReference ref) throws IOException{
|
||||||
|
checkPeekState(MAP_INDEX_INIT);
|
||||||
|
StringTable.Builder bs = OsmandOdb.StringTable.newBuilder();
|
||||||
|
for(String s : stringTable.keySet()){
|
||||||
|
bs.addS(s);
|
||||||
|
}
|
||||||
|
StringTable st = bs.build();
|
||||||
|
builder.setStringTable(st);
|
||||||
|
int size = st.getSerializedSize();
|
||||||
|
STRING_TABLE_SIZE += CodedOutputStream.computeTagSize(OsmandOdb.MapDataBlock.STRINGTABLE_FIELD_NUMBER) +
|
||||||
|
CodedOutputStream.computeRawVarint32Size(size) + size;
|
||||||
|
|
||||||
|
ref.writeReference(raf, getFilePointer());
|
||||||
|
codedOutStream.writeMessage(OsmAndMapIndex.BLOCKS_FIELD_NUMBER, builder.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void writeMapData(long diffId, byte[] nodes, byte[] types, Map<String,String> name, Map<String, Integer> stringTable,
|
||||||
|
MapDataBlock.Builder dataBlock) throws IOException{
|
||||||
|
|
||||||
Bounds bounds = stackBounds.peek();
|
Bounds bounds = stackBounds.peek();
|
||||||
if(stackBaseIds.peek() == -1){
|
|
||||||
stackBaseIds.pop();
|
|
||||||
stackBaseIds.push(id);
|
|
||||||
}
|
|
||||||
// calculate size
|
// calculate size
|
||||||
int sizeCoordinates = 0;
|
int sizeCoordinates = 0;
|
||||||
int allSize = 0;
|
int allSize = 0;
|
||||||
|
@ -357,49 +350,32 @@ public class BinaryMapIndexWriter {
|
||||||
CodedOutputStream.computeRawVarint32Size(types.length) + types.length;
|
CodedOutputStream.computeRawVarint32Size(types.length) + types.length;
|
||||||
|
|
||||||
|
|
||||||
allSize += CodedOutputStream.computeSInt64Size(OsmandOdb.MapData.ID_FIELD_NUMBER, id - stackBaseIds.peek());
|
allSize += CodedOutputStream.computeSInt64Size(OsmandOdb.MapData.ID_FIELD_NUMBER, diffId);
|
||||||
// DEBUG
|
// DEBUG
|
||||||
ID_SIZE += CodedOutputStream.computeSInt64Size(OsmandOdb.MapData.ID_FIELD_NUMBER, id - stackBaseIds.peek());
|
ID_SIZE += CodedOutputStream.computeSInt64Size(OsmandOdb.MapData.ID_FIELD_NUMBER, diffId);
|
||||||
|
|
||||||
|
|
||||||
int nameId = 0;
|
int nameId = 0;
|
||||||
if(name != null){
|
if(name != null){
|
||||||
if(stackStringTable.peek() == null) {
|
if(stringTable.containsKey(name)) {
|
||||||
stackStringTable.pop();
|
nameId = stringTable.get(name);
|
||||||
stackStringTable.push(new LinkedHashMap<String, Integer>());
|
|
||||||
}
|
|
||||||
Map<String, Integer> map = stackStringTable.peek();
|
|
||||||
if(map.containsKey(name)) {
|
|
||||||
nameId = map.get(name);
|
|
||||||
} else {
|
} else {
|
||||||
nameId = map.size();
|
nameId = stringTable.size();
|
||||||
map.put(name, nameId);
|
stringTable.put(name, nameId);
|
||||||
}
|
}
|
||||||
allSize += CodedOutputStream.computeUInt32Size(OsmandOdb.MapData.STRINGID_FIELD_NUMBER, nameId);
|
allSize += CodedOutputStream.computeUInt32Size(OsmandOdb.MapData.S, nameId);
|
||||||
}
|
}
|
||||||
|
|
||||||
int restrictionsSize = 0;
|
|
||||||
if(restrictions != null && restrictions.length > 0){
|
|
||||||
allSize += CodedOutputStream.computeTagSize(OsmandOdb.MapData.RESTRICTIONS_FIELD_NUMBER);
|
|
||||||
for (int i = 0; i < restrictions.length / 8; i++) {
|
|
||||||
long l = Algoritms.parseLongFromBytes(restrictions, i * 8) - stackBaseIds.peek();
|
|
||||||
restrictionsSize += CodedOutputStream.computeSInt64SizeNoTag(l);
|
|
||||||
}
|
|
||||||
allSize += CodedOutputStream.computeRawVarint32Size(restrictionsSize);
|
|
||||||
allSize += restrictionsSize;
|
|
||||||
}
|
|
||||||
if(highwayAttributes != 0){
|
|
||||||
allSize += CodedOutputStream.computeInt32Size(OsmandOdb.MapData.HIGHWAYMETA_FIELD_NUMBER, highwayAttributes);
|
|
||||||
}
|
|
||||||
|
|
||||||
// DEBUG
|
// DEBUG
|
||||||
MAP_DATA_SIZE += allSize;
|
MAP_DATA_SIZE += allSize;
|
||||||
|
|
||||||
// writing data
|
// writing data
|
||||||
codedOutStream.writeTag(OsmandOdb.MapTree.LEAFS_FIELD_NUMBER, WireFormat.FieldType.MESSAGE.getWireType());
|
codedOutStream.writeTag(MapDataBlock.DATAOBJECTS_FIELD_NUMBER, WireFormat.FieldType.MESSAGE.getWireType());
|
||||||
codedOutStream.writeRawVarint32(allSize);
|
codedOutStream.writeRawVarint32(allSize);
|
||||||
|
|
||||||
|
|
||||||
|
/// TODO !!!!
|
||||||
codedOutStream.writeTag(OsmandOdb.MapData.COORDINATES_FIELD_NUMBER, WireFormat.FieldType.BYTES.getWireType());
|
codedOutStream.writeTag(OsmandOdb.MapData.COORDINATES_FIELD_NUMBER, WireFormat.FieldType.BYTES.getWireType());
|
||||||
codedOutStream.writeRawVarint32(sizeCoordinates);
|
codedOutStream.writeRawVarint32(sizeCoordinates);
|
||||||
|
|
||||||
|
@ -419,24 +395,17 @@ public class BinaryMapIndexWriter {
|
||||||
codedOutStream.writeRawVarint32(types.length);
|
codedOutStream.writeRawVarint32(types.length);
|
||||||
codedOutStream.writeRawBytes(types);
|
codedOutStream.writeRawBytes(types);
|
||||||
|
|
||||||
codedOutStream.writeSInt64(OsmandOdb.MapData.ID_FIELD_NUMBER, id - stackBaseIds.peek());
|
// TODO !!!
|
||||||
|
|
||||||
|
|
||||||
if(name != null){
|
if(name != null){
|
||||||
codedOutStream.writeUInt32(OsmandOdb.MapData.STRINGID_FIELD_NUMBER, nameId);
|
codedOutStream.writeUInt32(OsmandOdb.MapData.STRINGID_FIELD_NUMBER, nameId);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(restrictions != null && restrictions.length > 0){
|
codedOutStream.writeSInt64(OsmandOdb.MapData.ID_FIELD_NUMBER, diffId);
|
||||||
codedOutStream.writeTag(OsmandOdb.MapData.RESTRICTIONS_FIELD_NUMBER, WireFormat.FieldType.BYTES.getWireType());
|
|
||||||
codedOutStream.writeRawVarint32(restrictionsSize);
|
|
||||||
for (int i = 0; i < restrictions.length / 8; i++) {
|
|
||||||
long l = Algoritms.parseLongFromBytes(restrictions, i * 8) - stackBaseIds.peek();
|
|
||||||
codedOutStream.writeSInt64NoTag(l);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(highwayAttributes != 0){
|
|
||||||
codedOutStream.writeInt32(OsmandOdb.MapData.HIGHWAYMETA_FIELD_NUMBER, highwayAttributes);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startWriteAddressIndex(String name) throws IOException {
|
public void startWriteAddressIndex(String name) throws IOException {
|
||||||
|
|
|
@ -23,6 +23,8 @@ import java.util.Set;
|
||||||
|
|
||||||
import net.osmand.Algoritms;
|
import net.osmand.Algoritms;
|
||||||
import net.osmand.IProgress;
|
import net.osmand.IProgress;
|
||||||
|
import net.osmand.binary.OsmandOdb.MapDataBlock;
|
||||||
|
import net.osmand.binary.OsmandOdb.MapDataBlock.Builder;
|
||||||
import net.osmand.data.Boundary;
|
import net.osmand.data.Boundary;
|
||||||
import net.osmand.data.MapAlgorithms;
|
import net.osmand.data.MapAlgorithms;
|
||||||
import net.osmand.osm.Entity;
|
import net.osmand.osm.Entity;
|
||||||
|
@ -662,22 +664,39 @@ public class IndexVectorMapCreator extends AbstractIndexPartCreator {
|
||||||
public void writeBinaryMapBlock(rtree.Node parent, RTree r, BinaryMapIndexWriter writer, PreparedStatement selectData, TLongObjectHashMap<BinaryFileReference> bounds) throws IOException, RTreeException, SQLException {
|
public void writeBinaryMapBlock(rtree.Node parent, RTree r, BinaryMapIndexWriter writer, PreparedStatement selectData, TLongObjectHashMap<BinaryFileReference> bounds) throws IOException, RTreeException, SQLException {
|
||||||
Element[] e = parent.getAllElements();
|
Element[] e = parent.getAllElements();
|
||||||
|
|
||||||
|
Map<String, Integer> stringTable = null;
|
||||||
|
MapDataBlock.Builder dataBlock = null;
|
||||||
|
BinaryFileReference ref = bounds.get(parent.getNodeIndex());
|
||||||
|
long baseId = 0;
|
||||||
for (int i = 0; i < parent.getTotalElements(); i++) {
|
for (int i = 0; i < parent.getTotalElements(); i++) {
|
||||||
Rect re = e[i].getRect();
|
Rect re = e[i].getRect();
|
||||||
if (e[i].getElementType() == rtree.Node.LEAF_NODE) {
|
if (e[i].getElementType() == rtree.Node.LEAF_NODE) {
|
||||||
BinaryFileReference ref = bounds.get(parent.getNodeIndex());
|
|
||||||
// TODO create block
|
|
||||||
long id = ((LeafElement) e[i]).getPtr();
|
long id = ((LeafElement) e[i]).getPtr();
|
||||||
selectData.setLong(1, id);
|
selectData.setLong(1, id);
|
||||||
ResultSet rs = selectData.executeQuery();
|
ResultSet rs = selectData.executeQuery();
|
||||||
if (rs.next()) {
|
if (rs.next()) {
|
||||||
|
long cid = convertGeneratedIdToObfWrite(id);
|
||||||
|
if(dataBlock == null){
|
||||||
|
baseId = cid;
|
||||||
|
dataBlock = writer.createWriteMapDataBlock(baseId);
|
||||||
|
}
|
||||||
|
renderingTypes.getEncodingRuleTypes()
|
||||||
// mapConnection.prepareStatement("SELECT nodes, types, name FROM binary_map_objects WHERE id = ?");
|
// mapConnection.prepareStatement("SELECT nodes, types, name FROM binary_map_objects WHERE id = ?");
|
||||||
writer.writeMapData(convertGeneratedIdToObfWrite(id), rs.getBytes(1),
|
writer.writeMapData(cid - id, rs.getBytes(1),
|
||||||
rs.getBytes(2), rs.getString(3));
|
rs.getBytes(2), rs.getString(3));
|
||||||
} else {
|
} else {
|
||||||
logMapDataWarn.error("Something goes wrong with id = " + id); //$NON-NLS-1$
|
logMapDataWarn.error("Something goes wrong with id = " + id); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
}
|
||||||
|
if(dataBlock != null){
|
||||||
|
writer.writeMapDataBlock(dataBlock, stringTable, ref);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < parent.getTotalElements(); i++) {
|
||||||
|
Rect re = e[i].getRect();
|
||||||
|
if (e[i].getElementType() != rtree.Node.LEAF_NODE) {
|
||||||
long ptr = ((NonLeafElement) e[i]).getPtr();
|
long ptr = ((NonLeafElement) e[i]).getPtr();
|
||||||
rtree.Node ns = r.getReadNode(ptr);
|
rtree.Node ns = r.getReadNode(ptr);
|
||||||
writeBinaryMapBlock(ns, r, writer, selectData, bounds);
|
writeBinaryMapBlock(ns, r, writer, selectData, bounds);
|
||||||
|
|
|
@ -62,6 +62,8 @@ public class MapRenderingTypes {
|
||||||
private Map<AmenityType, Map<String, String>> amenityTypeNameToTagVal = null;
|
private Map<AmenityType, Map<String, String>> amenityTypeNameToTagVal = null;
|
||||||
private Map<String, AmenityType> amenityNameToType = null;
|
private Map<String, AmenityType> amenityNameToType = null;
|
||||||
|
|
||||||
|
private MapRulType nameRuleType;
|
||||||
|
|
||||||
public MapRenderingTypes(String fileName){
|
public MapRenderingTypes(String fileName){
|
||||||
this.resourceName = fileName;
|
this.resourceName = fileName;
|
||||||
}
|
}
|
||||||
|
@ -79,6 +81,11 @@ public class MapRenderingTypes {
|
||||||
public Map<String, MapRulType> getEncodingRuleTypes(){
|
public Map<String, MapRulType> getEncodingRuleTypes(){
|
||||||
if (types == null) {
|
if (types == null) {
|
||||||
types = new LinkedHashMap<String, MapRulType>();
|
types = new LinkedHashMap<String, MapRulType>();
|
||||||
|
nameRuleType = new MapRulType(types.size());
|
||||||
|
nameRuleType.tag = "name";
|
||||||
|
nameRuleType.additional = true;
|
||||||
|
types.put(constructRuleKey("name", null), nameRuleType);
|
||||||
|
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
return types;
|
return types;
|
||||||
|
@ -138,29 +145,29 @@ public class MapRenderingTypes {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public String getNullName(Entity e) {
|
|
||||||
Map<String, MapRulType> rules = getEncodingRuleTypes();
|
|
||||||
for (int i = 0; i < 2; i++) {
|
|
||||||
for (String tag : e.getTagKeySet()) {
|
|
||||||
String val = i == 0 ? e.getTag(tag) : null;
|
|
||||||
MapRulType rt = rules.get(constructRuleKey(tag, val));
|
|
||||||
if(rt != null && rt.nameNullTag != null && e.getTag(rt.nameNullTag) != null) {
|
|
||||||
return e.getTag(rt.nameNullTag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getEntityName(Entity e) {
|
public void getEntityNames(Entity e, Map<MapRulType, String> names) {
|
||||||
String name = e.getTag(OSMTagKey.NAME);
|
String name = e.getTag(OSMTagKey.NAME);
|
||||||
if (name == null) {
|
if (name == null) {
|
||||||
name = e.getTag(OSMTagKey.NAME_EN);
|
name = e.getTag(OSMTagKey.NAME_EN);
|
||||||
if(name == null) {
|
}
|
||||||
name = getNullName(e);
|
if (name != null) {
|
||||||
|
names.put(nameRuleType, name);
|
||||||
|
}
|
||||||
|
Map<String, MapRulType> rules = getEncodingRuleTypes();
|
||||||
|
for (int i = 0; i < 2; i++) {
|
||||||
|
for (Entry<String, String> tag : e.getTags().entrySet()) {
|
||||||
|
MapRulType rt = rules.get(constructRuleKey(tag.getKey(), i == 0 ? tag.getValue() : null));
|
||||||
|
if (rt != null && rt.names != null) {
|
||||||
|
for (MapRulType rtname : rt.names) {
|
||||||
|
String tg = e.getTag(rtname.tag);
|
||||||
|
if (tg != null) {
|
||||||
|
names.put(rtname, name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return name;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<AmenityType, Map<String, String>> getAmenityTypeNameToTagVal() {
|
public Map<AmenityType, Map<String, String>> getAmenityTypeNameToTagVal() {
|
||||||
|
@ -259,7 +266,21 @@ public class MapRenderingTypes {
|
||||||
rtype.polyline= Boolean.parseBoolean(attributes.getValue("polyline")); //$NON-NLS-1$
|
rtype.polyline= Boolean.parseBoolean(attributes.getValue("polyline")); //$NON-NLS-1$
|
||||||
rtype.point = Boolean.parseBoolean(attributes.getValue("point")); //$NON-NLS-1$
|
rtype.point = Boolean.parseBoolean(attributes.getValue("point")); //$NON-NLS-1$
|
||||||
rtype.additional = Boolean.parseBoolean(attributes.getValue("additional")); //$NON-NLS-1$
|
rtype.additional = Boolean.parseBoolean(attributes.getValue("additional")); //$NON-NLS-1$
|
||||||
rtype.nameNullTag = attributes.getValue("nameNullTag");
|
String v = attributes.getValue("nameTags");
|
||||||
|
if(v != null) {
|
||||||
|
String[] names = v.split(",");
|
||||||
|
rtype.names = new MapRulType[names.length];
|
||||||
|
for(int i=0; i<names.length; i++){
|
||||||
|
MapRulType mt = types.get(constructRuleKey(names[i], null));
|
||||||
|
if(mt == null){
|
||||||
|
mt = new MapRulType(types.size());
|
||||||
|
mt.tag = names[i];
|
||||||
|
mt.additional = true;
|
||||||
|
types.put(constructRuleKey(names[i], null), mt);
|
||||||
|
}
|
||||||
|
rtype.names[i] = mt;
|
||||||
|
}
|
||||||
|
}
|
||||||
String targetTag = attributes.getValue("target:tag");
|
String targetTag = attributes.getValue("target:tag");
|
||||||
String targetValue = attributes.getValue("target:value");
|
String targetValue = attributes.getValue("target:value");
|
||||||
if (targetTag != null || targetValue != null) {
|
if (targetTag != null || targetValue != null) {
|
||||||
|
@ -378,14 +399,14 @@ public class MapRenderingTypes {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class MapRulType {
|
public static class MapRulType {
|
||||||
String nameNullTag;
|
MapRulType[] names;
|
||||||
String tag;
|
String tag;
|
||||||
String value;
|
String value;
|
||||||
int minzoom;
|
int minzoom;
|
||||||
boolean additional;
|
boolean additional;
|
||||||
MapRulType targetTagValue;
|
MapRulType targetTagValue;
|
||||||
|
|
||||||
int id;
|
final int id;
|
||||||
int freq;
|
int freq;
|
||||||
int targetId;
|
int targetId;
|
||||||
|
|
||||||
|
@ -401,10 +422,6 @@ public class MapRenderingTypes {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getNameNullTag() {
|
|
||||||
return nameNullTag;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isMapIndexed(){
|
public boolean isMapIndexed(){
|
||||||
return polygon || polyline || polygon;
|
return polygon || polyline || polygon;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<osmand_types>
|
<osmand_types>
|
||||||
<!-- 3 different types for polygon="true" that object will be rendered as polygon, polyline ="true" as line, point = "true" - as point -->
|
<!-- 3 different types for polygon="true" that object will be rendered as polygon, polyline ="true" as line, point = "true" - as point -->
|
||||||
<!-- currently 3 name tags are indexed name/ref/ele-->
|
<!-- currently name tags are indexed with name and additional in nameTags separated by comma-->
|
||||||
|
|
||||||
<!-- additional -->
|
<!-- additional -->
|
||||||
<type polyline="true" tag="oneway" value="yes" minzoom="5" additional="true"/>
|
<type polyline="true" tag="oneway" value="yes" minzoom="5" additional="true"/>
|
||||||
|
@ -23,38 +23,38 @@
|
||||||
<type polyline="true" polygon="true" tag="tunnel" minzoom="5" additional="true"/>
|
<type polyline="true" polygon="true" tag="tunnel" minzoom="5" additional="true"/>
|
||||||
|
|
||||||
<category name="highway">
|
<category name="highway">
|
||||||
<type polyline="true" tag="highway" value="motorway" minzoom="5" />
|
<type polyline="true" tag="highway" value="motorway" minzoom="5" nameTags="ref"/>
|
||||||
<type polyline="true" tag="highway" value="motorway_link" minzoom="10" />
|
<type polyline="true" tag="highway" value="motorway_link" minzoom="10" nameTags="ref"/>
|
||||||
<type polyline="true" tag="highway" value="trunk" minzoom="5" />
|
<type polyline="true" tag="highway" value="trunk" minzoom="5" nameTags="ref"/>
|
||||||
<type polyline="true" tag="highway" value="trunk_link" minzoom="10" />
|
<type polyline="true" tag="highway" value="trunk_link" minzoom="10" nameTags="ref"/>
|
||||||
<type polyline="true" tag="highway" value="primary" minzoom="7" />
|
<type polyline="true" tag="highway" value="primary" minzoom="7" nameTags="ref"/>
|
||||||
<type polyline="true" tag="highway" value="primary_link" minzoom="10" />
|
<type polyline="true" tag="highway" value="primary_link" minzoom="10" nameTags="ref"/>
|
||||||
<type polyline="true" tag="highway" value="secondary" minzoom="9" />
|
<type polyline="true" tag="highway" value="secondary" minzoom="9" nameTags="ref"/>
|
||||||
<type polyline="true" tag="highway" value="secondary_link" minzoom="10" />
|
<type polyline="true" tag="highway" value="secondary_link" minzoom="10" nameTags="ref"/>
|
||||||
<type polyline="true" tag="highway" value="tertiary" minzoom="10" />
|
<type polyline="true" tag="highway" value="tertiary" minzoom="10" nameTags="ref"/>
|
||||||
<type polyline="true" tag="highway" value="tertiary_link" minzoom="11" />
|
<type polyline="true" tag="highway" value="tertiary_link" minzoom="11" nameTags="ref"/>
|
||||||
<type polygon="true" polyline="true" tag="highway" value="residential" minzoom="12" />
|
<type polygon="true" polyline="true" tag="highway" value="residential" minzoom="12" nameTags="ref"/>
|
||||||
<type polygon="true" polyline="true" tag="highway" value="service" minzoom="13" />
|
<type polygon="true" polyline="true" tag="highway" value="service" minzoom="13" nameTags="ref"/>
|
||||||
|
|
||||||
<type polyline="true" tag="highway" value="unclassified" minzoom="12" />
|
<type polyline="true" tag="highway" value="unclassified" minzoom="12" nameTags="ref"/>
|
||||||
<type polyline="true" tag="highway" value="road" minzoom="12" />
|
<type polyline="true" tag="highway" value="road" minzoom="12" nameTags="ref"/>
|
||||||
<type polyline="true" tag="highway" value="track" minzoom="12" />
|
<type polyline="true" tag="highway" value="track" minzoom="12" nameTags="ref"/>
|
||||||
<type polyline="true" tag="highway" value="path" minzoom="12" />
|
<type polyline="true" tag="highway" value="path" minzoom="12" nameTags="ref"/>
|
||||||
<type polyline="true" tag="highway" value="living_street" minzoom="12" />
|
<type polyline="true" tag="highway" value="living_street" minzoom="12" nameTags="ref"/>
|
||||||
|
|
||||||
|
|
||||||
<type polygon="true" polyline="true" tag="highway" value="pedestrian" minzoom="12" />
|
<type polygon="true" polyline="true" tag="highway" value="pedestrian" minzoom="12" nameTags="ref"/>
|
||||||
<type polyline="true" tag="highway" value="cycleway" minzoom="12" />
|
<type polyline="true" tag="highway" value="cycleway" minzoom="12" nameTags="ref"/>
|
||||||
<type polyline="true" tag="highway" value="byway" minzoom="12" />
|
<type polyline="true" tag="highway" value="byway" minzoom="12" nameTags="ref"/>
|
||||||
<type polyline="true" tag="highway" value="footway" minzoom="12" />
|
<type polyline="true" tag="highway" value="footway" minzoom="12" nameTags="ref"/>
|
||||||
<type polyline="true" tag="highway" value="steps" minzoom="14" />
|
<type polyline="true" tag="highway" value="steps" minzoom="14" nameTags="ref"/>
|
||||||
<type polyline="true" tag="highway" value="bridleway" minzoom="12" />
|
<type polyline="true" tag="highway" value="bridleway" minzoom="12" nameTags="ref"/>
|
||||||
<type polygon="true" point="true" tag="highway" value="services" minzoom="12" />
|
<type polygon="true" point="true" tag="highway" value="services" minzoom="12" nameTags="ref"/>
|
||||||
<!-- <type id="" polyline="true" tag="highway" value="bus_guideway" minzoom="15" /> -->
|
<!-- <type id="" polyline="true" tag="highway" value="bus_guideway" minzoom="15" /> -->
|
||||||
|
|
||||||
<type polyline="true" point="true" tag="highway" value="ford" minzoom="14" />
|
<type polyline="true" point="true" tag="highway" value="ford" minzoom="14" />
|
||||||
<type polyline="true" tag="highway" value="construction" minzoom="14" />
|
<type polyline="true" tag="highway" value="construction" minzoom="14" nameTags="ref"/>
|
||||||
<type polyline="true" tag="highway" value="proposed" minzoom="14" />
|
<type polyline="true" tag="highway" value="proposed" minzoom="14" nameTags="ref"/>
|
||||||
|
|
||||||
<!-- POINT typeS -->
|
<!-- POINT typeS -->
|
||||||
<type point="true" tag="highway" value="mini_roundabout" minzoom="16" />
|
<type point="true" tag="highway" value="mini_roundabout" minzoom="16" />
|
||||||
|
@ -176,7 +176,7 @@
|
||||||
<type polyline="true" tag="aeroway" value="taxiway" minzoom="12" poi:prefix="aeroway_"/>
|
<type polyline="true" tag="aeroway" value="taxiway" minzoom="12" poi:prefix="aeroway_"/>
|
||||||
<type polygon="true" tag="aeroway" value="apron" minzoom="12" poi:prefix="aeroway_"/>
|
<type polygon="true" tag="aeroway" value="apron" minzoom="12" poi:prefix="aeroway_"/>
|
||||||
<type point="true" polygon="true" tag="aeroway" value="airport" minzoom="11" />
|
<type point="true" polygon="true" tag="aeroway" value="airport" minzoom="11" />
|
||||||
<type point="true" tag="aeroway" value="gate" minzoom="15" nameNullTag="ref" />
|
<type point="true" tag="aeroway" value="gate" minzoom="15" nameTags="ref" />
|
||||||
<type point="true" tag="aeroway" value="windsock" minzoom="15" />
|
<type point="true" tag="aeroway" value="windsock" minzoom="15" />
|
||||||
</category>
|
</category>
|
||||||
|
|
||||||
|
@ -206,8 +206,8 @@
|
||||||
|
|
||||||
|
|
||||||
<category name="man_made" poi:tag="man_made" poi:category="man_made">
|
<category name="man_made" poi:tag="man_made" poi:category="man_made">
|
||||||
<type polygon="true" tag="building" minzoom="16" poi:category="" nameNullTag="addr:housenumber"/>
|
<type polygon="true" tag="building" minzoom="16" poi:category="" nameTags="addr:housenumber"/>
|
||||||
<type point="true" tag="addr:housenumber" minzoom="16" nameNullTag="addr:housenumber"/>
|
<type point="true" tag="addr:housenumber" minzoom="16" nameTags="addr:housenumber"/>
|
||||||
<type point="true" polygon="true" tag="man_made" value="wastewater_plant" minzoom="16" />
|
<type point="true" polygon="true" tag="man_made" value="wastewater_plant" minzoom="16" />
|
||||||
<type polygon="true" point="true" tag="man_made" value="water_works" minzoom="16" />
|
<type polygon="true" point="true" tag="man_made" value="water_works" minzoom="16" />
|
||||||
<type point="true" polygon="true" tag="man_made" value="works" minzoom="15" />
|
<type point="true" polygon="true" tag="man_made" value="works" minzoom="15" />
|
||||||
|
@ -449,7 +449,7 @@
|
||||||
<type point="true" polygon="true" tag="natural" value="land" minzoom="10" poi:category="" />
|
<type point="true" polygon="true" tag="natural" value="land" minzoom="10" poi:category="" />
|
||||||
<type point="true" polygon="true" tag="natural" value="marsh" minzoom="11" />
|
<type point="true" polygon="true" tag="natural" value="marsh" minzoom="11" />
|
||||||
<type point="true" polygon="true" tag="natural" value="mud" minzoom="11" />
|
<type point="true" polygon="true" tag="natural" value="mud" minzoom="11" />
|
||||||
<type point="true" tag="natural" value="peak" minzoom="11" nameNullTag="ele" />
|
<type point="true" tag="natural" value="peak" minzoom="11" nameTags="ele" />
|
||||||
<type point="true" polygon="true" tag="natural" value="sand" minzoom="11" />
|
<type point="true" polygon="true" tag="natural" value="sand" minzoom="11" />
|
||||||
<type point="true" polygon="true" tag="natural" value="scree" minzoom="11" />
|
<type point="true" polygon="true" tag="natural" value="scree" minzoom="11" />
|
||||||
<type point="true" polygon="true" tag="natural" value="scrub" minzoom="11" />
|
<type point="true" polygon="true" tag="natural" value="scrub" minzoom="11" />
|
||||||
|
|
|
@ -72,8 +72,6 @@ message OsmAndMapIndex {
|
||||||
|
|
||||||
required string name = 2;
|
required string name = 2;
|
||||||
|
|
||||||
// encoded as fixed32 length delimited
|
|
||||||
|
|
||||||
repeated MapEncodingRule rules = 4;
|
repeated MapEncodingRule rules = 4;
|
||||||
message MapEncodingRule {
|
message MapEncodingRule {
|
||||||
required string tag = 3;
|
required string tag = 3;
|
||||||
|
@ -87,6 +85,7 @@ message OsmAndMapIndex {
|
||||||
optional uint32 type = 10;
|
optional uint32 type = 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// encoded as fixed32 length delimited
|
||||||
repeated MapRootLevel levels = 5;
|
repeated MapRootLevel levels = 5;
|
||||||
message MapRootLevel {
|
message MapRootLevel {
|
||||||
required int32 maxZoom = 1;
|
required int32 maxZoom = 1;
|
||||||
|
@ -111,7 +110,6 @@ message OsmAndMapIndex {
|
||||||
repeated MapDataBox boxes = 7;
|
repeated MapDataBox boxes = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
// encoded as fixed32 length delimited
|
|
||||||
repeated MapDataBlocks blocks = 7;
|
repeated MapDataBlocks blocks = 7;
|
||||||
message MapDataBlocks {
|
message MapDataBlocks {
|
||||||
// based coordinates can be specified
|
// based coordinates can be specified
|
||||||
|
|
Loading…
Reference in a new issue