Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
d5eca3cf62
2 changed files with 98 additions and 146 deletions
|
@ -24,6 +24,7 @@ import net.osmand.binary.BinaryMapDataObject;
|
||||||
import net.osmand.binary.BinaryMapIndexReader;
|
import net.osmand.binary.BinaryMapIndexReader;
|
||||||
import net.osmand.binary.BinaryMapIndexReader.MapIndex;
|
import net.osmand.binary.BinaryMapIndexReader.MapIndex;
|
||||||
import net.osmand.binary.BinaryMapIndexReader.TagValuePair;
|
import net.osmand.binary.BinaryMapIndexReader.TagValuePair;
|
||||||
|
import net.osmand.data.LatLon;
|
||||||
import net.osmand.data.QuadRect;
|
import net.osmand.data.QuadRect;
|
||||||
import net.osmand.data.QuadTree;
|
import net.osmand.data.QuadTree;
|
||||||
import net.osmand.util.Algorithms;
|
import net.osmand.util.Algorithms;
|
||||||
|
@ -33,42 +34,51 @@ import net.osmand.util.MapUtils;
|
||||||
public class OsmandRegions {
|
public class OsmandRegions {
|
||||||
|
|
||||||
private static final String MAP_TYPE = "region_map";
|
private static final String MAP_TYPE = "region_map";
|
||||||
// regionSrtm = object.getMapIndex().getRule("region_srtm", null);
|
|
||||||
// regionWiki = object.getMapIndex().getRule("region_wiki", null);
|
public static final String FIELD_LEFT_HAND_DRIVING = "left_hand_driving";
|
||||||
// regionRoads = object.getMapIndex().getRule("region_roads", null);
|
public static final String FIELD_DOWNLOAD_NAME = "download_name";
|
||||||
// regionHillshade = object.getMapIndex().getRule("region_hillshade", null);
|
public static final String FIELD_NAME = "name";
|
||||||
|
public static final String FIELD_NAME_EN = "name:en";
|
||||||
|
public static final String FIELD_REGION_PARENT_NAME = "region_parent_name";
|
||||||
|
public static final String FIELD_REGION_FULL_NAME = "region_full_name";
|
||||||
|
public static final String FIELD_LANG = "lang";
|
||||||
|
public static final String FIELD_METRIC = "metric";
|
||||||
|
public static final String FIELD_ROAD_SIGNS = "road_signs";
|
||||||
|
|
||||||
private BinaryMapIndexReader reader;
|
private BinaryMapIndexReader reader;
|
||||||
|
|
||||||
|
Map<String, RegionData> fullNamesToRegionData = new HashMap<String, RegionData>();
|
||||||
Map<String, LinkedList<BinaryMapDataObject>> countriesByDownloadName = new HashMap<String, LinkedList<BinaryMapDataObject>>();
|
Map<String, LinkedList<BinaryMapDataObject>> countriesByDownloadName = new HashMap<String, LinkedList<BinaryMapDataObject>>();
|
||||||
Map<String, String> fullNamesToLocaleNames = new HashMap<String, String>();
|
|
||||||
Map<String, String> fullNamesNoParentToLocaleNames = new HashMap<String, String>();
|
|
||||||
Map<String, String> fullMapNamesToDownloadNames = new HashMap<String, String>();
|
|
||||||
Map<String, String> downloadNamesToFullNames = new HashMap<String, String>();
|
Map<String, String> downloadNamesToFullNames = new HashMap<String, String>();
|
||||||
Map<String, String> fullNamesToLowercaseIndex = new HashMap<String, String>();
|
// Map<String, String> fullNamesToLocaleNames = new HashMap<String, String>();
|
||||||
Map<String, String> fullNamesToParentFullNames = new HashMap<String, String>();
|
// Map<String, String> fullNamesNoParentToLocaleNames = new HashMap<String, String>();
|
||||||
Map<String, String> fullNamesToDownloadNames = new HashMap<String, String>();
|
// Map<String, String> fullMapNamesToDownloadNames = new HashMap<String, String>();
|
||||||
Map<String, String> fullNamesToLangs = new HashMap<String, String>();
|
// Map<String, String> fullNamesToLowercaseIndex = new HashMap<String, String>();
|
||||||
Map<String, String> fullNamesToMetrics = new HashMap<String, String>();
|
// Map<String, String> fullNamesToParentFullNames = new HashMap<String, String>();
|
||||||
Map<String, String> fullNamesToLeftHandDrivings = new HashMap<String, String>();
|
// Map<String, String> fullNamesToDownloadNames = new HashMap<String, String>();
|
||||||
Map<String, String> fullNamesToRoadSigns = new HashMap<String, String>();
|
// Map<String, String> fullNamesToLangs = new HashMap<String, String>();
|
||||||
|
// Map<String, String> fullNamesToMetrics = new HashMap<String, String>();
|
||||||
|
// Map<String, String> fullNamesToLeftHandDrivings = new HashMap<String, String>();
|
||||||
|
// Map<String, String> fullNamesToRoadSigns = new HashMap<String, String>();
|
||||||
|
|
||||||
QuadTree<String> quadTree = null ;
|
QuadTree<String> quadTree = null ;
|
||||||
|
String locale = "en";
|
||||||
|
MapIndexFields mapIndexFields = new MapIndexFields();
|
||||||
|
|
||||||
public Map<String, String> getFullNamesToLowercaseCopy() {
|
private class MapIndexFields {
|
||||||
return new HashMap<String, String>(fullNamesToLowercaseIndex);
|
MapIndex mapIndex;
|
||||||
}
|
|
||||||
|
|
||||||
Integer parentFullName = null;
|
Integer parentFullName = null;
|
||||||
Integer fullNameType = null;
|
Integer fullNameType = null;
|
||||||
Integer downloadNameType = null;
|
Integer downloadNameType = null;
|
||||||
Integer nameEnType = null;
|
Integer nameEnType = null;
|
||||||
Integer nameType = null;
|
Integer nameType = null;
|
||||||
Integer nameLocaleType = null;
|
Integer nameLocaleType = null;
|
||||||
String locale = "en";
|
|
||||||
Integer langType = null;
|
Integer langType = null;
|
||||||
Integer metricType = null;
|
Integer metricType = null;
|
||||||
Integer leftHandDrivingType = null;
|
Integer leftHandDrivingType = null;
|
||||||
Integer roadSignsType = null;
|
Integer roadSignsType = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void prepareFile(String fileName) throws IOException {
|
public void prepareFile(String fileName) throws IOException {
|
||||||
|
@ -80,64 +90,6 @@ public class OsmandRegions {
|
||||||
return countriesByDownloadName.containsKey(name);
|
return countriesByDownloadName.containsKey(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getLang(String fullName) {
|
|
||||||
return fullNamesToLangs.get(fullName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMetric(String fullName) {
|
|
||||||
return fullNamesToMetrics.get(fullName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getLeftHandDriving(String fullName) {
|
|
||||||
return fullNamesToLeftHandDrivings.get(fullName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRoadSigns(String fullName) {
|
|
||||||
return fullNamesToRoadSigns.get(fullName);
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getLang(BinaryMapDataObject o) {
|
|
||||||
if (langType != null) {
|
|
||||||
return o.getNameByType(langType);
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getMetric(BinaryMapDataObject o) {
|
|
||||||
if (metricType != null) {
|
|
||||||
return o.getNameByType(metricType);
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getLeftHandDriving(BinaryMapDataObject o) {
|
|
||||||
if (leftHandDrivingType != null) {
|
|
||||||
return o.getNameByType(leftHandDrivingType);
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getRoadSigns(BinaryMapDataObject o) {
|
|
||||||
if (roadSignsType != null) {
|
|
||||||
return o.getNameByType(roadSignsType);
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDownloadName(BinaryMapDataObject o) {
|
|
||||||
if(downloadNameType == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return o.getNameByType(downloadNameType);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getNameEnType() {
|
|
||||||
return nameEnType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getLocaleName(String downloadName, boolean includingParent) {
|
public String getLocaleName(String downloadName, boolean includingParent) {
|
||||||
final String lc = downloadName.toLowerCase();
|
final String lc = downloadName.toLowerCase();
|
||||||
|
@ -586,22 +538,20 @@ public class OsmandRegions {
|
||||||
|
|
||||||
|
|
||||||
private void initTypes(BinaryMapDataObject object) {
|
private void initTypes(BinaryMapDataObject object) {
|
||||||
if (downloadNameType == null) {
|
if (mapIndexFields == null) {
|
||||||
downloadNameType = object.getMapIndex().getRule("download_name", null);
|
mapIndexFields = new MapIndexFields();
|
||||||
nameType = object.getMapIndex().getRule("name", null);
|
mapIndexFields.mapIndex = object.getMapIndex();
|
||||||
nameEnType = object.getMapIndex().getRule("name:en", null);
|
mapIndexFields.downloadNameType = object.getMapIndex().getRule(FIELD_DOWNLOAD_NAME, null);
|
||||||
nameLocaleType = object.getMapIndex().getRule("name:" + locale, null);
|
mapIndexFields.nameType = object.getMapIndex().getRule(FIELD_NAME, null);
|
||||||
parentFullName = object.getMapIndex().getRule("region_parent_name", null);
|
mapIndexFields.nameEnType = object.getMapIndex().getRule(FIELD_NAME_EN, null);
|
||||||
fullNameType = object.getMapIndex().getRule("region_full_name", null);
|
mapIndexFields.nameLocaleType = object.getMapIndex().getRule(FIELD_NAME+":"+locale, null);
|
||||||
|
mapIndexFields.parentFullName = object.getMapIndex().getRule(FIELD_REGION_PARENT_NAME, null);
|
||||||
langType = object.getMapIndex().getRule("lang", null);
|
mapIndexFields.fullNameType = object.getMapIndex().getRule(FIELD_REGION_FULL_NAME, null);
|
||||||
metricType = object.getMapIndex().getRule("metric", null);
|
mapIndexFields.langType = object.getMapIndex().getRule(FIELD_LANG, null);
|
||||||
leftHandDrivingType = object.getMapIndex().getRule("left_hand_driving", null);
|
mapIndexFields.metricType = object.getMapIndex().getRule(FIELD_METRIC, null);
|
||||||
roadSignsType = object.getMapIndex().getRule("road_signs", null);
|
mapIndexFields.leftHandDrivingType = object.getMapIndex().getRule(FIELD_LEFT_HAND_DRIVING, null);
|
||||||
|
mapIndexFields.roadSignsType = object.getMapIndex().getRule(FIELD_ROAD_SIGNS, null);
|
||||||
if (downloadNameType == null || nameType == null) {
|
mapIndexFields.nameType = object.getMapIndex().getRule(FIELD_NAME, null);
|
||||||
throw new IllegalStateException();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -650,4 +600,31 @@ public class OsmandRegions {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static class RegionData {
|
||||||
|
String regionId;
|
||||||
|
private String downloadsId;
|
||||||
|
private String name;
|
||||||
|
private String searchText;
|
||||||
|
private LatLon center;
|
||||||
|
|
||||||
|
public LatLon getCenter() {
|
||||||
|
return center;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSearchText() {
|
||||||
|
return searchText;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRegionId() {
|
||||||
|
return regionId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDownloadsId() {
|
||||||
|
return downloadsId;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,43 +30,23 @@ public class WorldRegion {
|
||||||
private static final org.apache.commons.logging.Log LOG = PlatformUtil.getLog(WorldRegion.class);
|
private static final org.apache.commons.logging.Log LOG = PlatformUtil.getLog(WorldRegion.class);
|
||||||
|
|
||||||
// Region data
|
// Region data
|
||||||
private String regionId;
|
private OsmandRegions.RegionData regionData;
|
||||||
private String downloadsId;
|
|
||||||
private String name;
|
|
||||||
private String searchText;
|
|
||||||
private LatLon center;
|
|
||||||
|
|
||||||
// Hierarchy
|
// Hierarchy
|
||||||
private WorldRegion superregion;
|
private WorldRegion superregion;
|
||||||
private List<WorldRegion> subregions;
|
private List<WorldRegion> subregions;
|
||||||
private List<WorldRegion> flattenedSubregions;
|
private List<WorldRegion> flattenedSubregions;
|
||||||
|
|
||||||
public String getLang(OsmandRegions osmandRegions) {
|
public OsmandRegions.RegionData getRegionData() {
|
||||||
return osmandRegions.getLang(regionId);
|
return regionData;
|
||||||
}
|
|
||||||
|
|
||||||
public String getMetric(OsmandRegions osmandRegions) {
|
|
||||||
return osmandRegions.getMetric(regionId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getLeftHandDriving(OsmandRegions osmandRegions) {
|
|
||||||
return osmandRegions.getLeftHandDriving(regionId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRoadSigns(OsmandRegions osmandRegions) {
|
|
||||||
return osmandRegions.getRoadSigns(regionId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getRegionId() {
|
|
||||||
return regionId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDownloadsId() {
|
|
||||||
return downloadsId;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name;
|
return regionData.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getRegionId() {
|
||||||
|
return regionData.getRegionId();
|
||||||
}
|
}
|
||||||
|
|
||||||
public WorldRegion getSuperregion() {
|
public WorldRegion getSuperregion() {
|
||||||
|
@ -88,12 +68,12 @@ public class WorldRegion {
|
||||||
|
|
||||||
WorldRegion that = (WorldRegion) o;
|
WorldRegion that = (WorldRegion) o;
|
||||||
|
|
||||||
return !(name != null ? !name.toLowerCase().equals(that.name.toLowerCase()) : that.name != null);
|
return !(getName() != null ? !getName().toLowerCase().equals(that.getName().toLowerCase()) : that.getName() != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return name != null ? name.hashCode() : 0;
|
return getName() != null ? getName().hashCode() : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public WorldRegion() {
|
public WorldRegion() {
|
||||||
|
@ -129,9 +109,6 @@ public class WorldRegion {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getSearchText() {
|
|
||||||
return searchText;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addSubregion(WorldRegion subregion, WorldRegion world) {
|
private void addSubregion(WorldRegion subregion, WorldRegion world) {
|
||||||
subregion.superregion = this;
|
subregion.superregion = this;
|
||||||
|
@ -167,27 +144,27 @@ public class WorldRegion {
|
||||||
WorldRegion centralAmericaRegion = createRegionAs(CENTRAL_AMERICA_REGION_ID,
|
WorldRegion centralAmericaRegion = createRegionAs(CENTRAL_AMERICA_REGION_ID,
|
||||||
loadedItems, osmandRegions, res.getString(R.string.index_name_central_america));
|
loadedItems, osmandRegions, res.getString(R.string.index_name_central_america));
|
||||||
addSubregion(centralAmericaRegion, this);
|
addSubregion(centralAmericaRegion, this);
|
||||||
regionsLookupTable.put(centralAmericaRegion.regionId, centralAmericaRegion);
|
regionsLookupTable.put(centralAmericaRegion.getRegionId(), centralAmericaRegion);
|
||||||
|
|
||||||
WorldRegion europeRegion = createRegionAs(EUROPE_REGION_ID,
|
WorldRegion europeRegion = createRegionAs(EUROPE_REGION_ID,
|
||||||
loadedItems, osmandRegions, res.getString(R.string.index_name_europe));
|
loadedItems, osmandRegions, res.getString(R.string.index_name_europe));
|
||||||
addSubregion(europeRegion, this);
|
addSubregion(europeRegion, this);
|
||||||
regionsLookupTable.put(europeRegion.regionId, europeRegion);
|
regionsLookupTable.put(europeRegion.getRegionId(), europeRegion);
|
||||||
|
|
||||||
WorldRegion northAmericaRegion = createRegionAs(NORTH_AMERICA_REGION_ID,
|
WorldRegion northAmericaRegion = createRegionAs(NORTH_AMERICA_REGION_ID,
|
||||||
loadedItems, osmandRegions, res.getString(R.string.index_name_north_america));
|
loadedItems, osmandRegions, res.getString(R.string.index_name_north_america));
|
||||||
addSubregion(northAmericaRegion, this);
|
addSubregion(northAmericaRegion, this);
|
||||||
regionsLookupTable.put(northAmericaRegion.regionId, northAmericaRegion);
|
regionsLookupTable.put(northAmericaRegion.getRegionId(), northAmericaRegion);
|
||||||
|
|
||||||
WorldRegion russiaRegion = createRegionAs(RUSSIA_REGION_ID,
|
WorldRegion russiaRegion = createRegionAs(RUSSIA_REGION_ID,
|
||||||
loadedItems, osmandRegions, res.getString(R.string.index_name_russia));
|
loadedItems, osmandRegions, res.getString(R.string.index_name_russia));
|
||||||
addSubregion(russiaRegion, this);
|
addSubregion(russiaRegion, this);
|
||||||
regionsLookupTable.put(russiaRegion.regionId, russiaRegion);
|
regionsLookupTable.put(russiaRegion.getRegionId(), russiaRegion);
|
||||||
|
|
||||||
WorldRegion southAmericaRegion = createRegionAs(SOUTH_AMERICA_REGION_ID,
|
WorldRegion southAmericaRegion = createRegionAs(SOUTH_AMERICA_REGION_ID,
|
||||||
loadedItems, osmandRegions, res.getString(R.string.index_name_south_america));
|
loadedItems, osmandRegions, res.getString(R.string.index_name_south_america));
|
||||||
addSubregion(southAmericaRegion, this);
|
addSubregion(southAmericaRegion, this);
|
||||||
regionsLookupTable.put(southAmericaRegion.regionId, southAmericaRegion);
|
regionsLookupTable.put(southAmericaRegion.getRegionId(), southAmericaRegion);
|
||||||
|
|
||||||
// Process all regions
|
// Process all regions
|
||||||
for (; ; ) {
|
for (; ; ) {
|
||||||
|
@ -208,7 +185,7 @@ public class WorldRegion {
|
||||||
|
|
||||||
WorldRegion newRegion = new WorldRegion().init(regionId, osmandRegions, null);
|
WorldRegion newRegion = new WorldRegion().init(regionId, osmandRegions, null);
|
||||||
parentRegion.addSubregion(newRegion, this);
|
parentRegion.addSubregion(newRegion, this);
|
||||||
regionsLookupTable.put(newRegion.regionId, newRegion);
|
regionsLookupTable.put(newRegion.getRegionId(), newRegion);
|
||||||
|
|
||||||
// Remove
|
// Remove
|
||||||
processedRegions++;
|
processedRegions++;
|
||||||
|
@ -252,10 +229,6 @@ public class WorldRegion {
|
||||||
return worldRegion;
|
return worldRegion;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LatLon getCenter() {
|
|
||||||
// TODO
|
|
||||||
return center;
|
|
||||||
}
|
|
||||||
|
|
||||||
private String capitalize(String s) {
|
private String capitalize(String s) {
|
||||||
String[] words = s.split(" ");
|
String[] words = s.split(" ");
|
||||||
|
@ -286,4 +259,6 @@ public class WorldRegion {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in a new issue